博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Usb key插入检测,并动态获取CSP
阅读量:6253 次
发布时间:2019-06-22

本文共 2107 字,大约阅读时间需要 7 分钟。

    
int                  ret = 
0;
    HRESULT           hr = S_OK;
    LPTSTR            szReaders = NULL, szRdr = NULL;
    DWORD             cchReaders = SCARD_AUTOALLOCATE;
    DWORD             dwI, dwRdrCount;
    SCARD_READERSTATE rgscState[MAXIMUM_SMARTCARD_READERS];
    TCHAR             szCard[MAX_PATH * 
64];
    DWORD              dwCardLen = 
sizeof(szCard)/
sizeof(TCHAR);
    SCARDCONTEXT      hSC;
    LONG              lReturn;
    
//
 Establish a context.
    lReturn = SCardEstablishContext(SCARD_SCOPE_USER,
        NULL,
        NULL,
        &hSC );
    
if ( SCARD_S_SUCCESS != lReturn )
    {
        
goto cleanup;
    }
    
//
 Determine which readers are available.
    lReturn = SCardListReaders(hSC,
        NULL,
        (LPTSTR)&szReaders,
        &cchReaders );
    
if ( SCARD_S_SUCCESS != lReturn )
    {
        
goto cleanup;
    }
    
//
 Place the readers into the state array.
    szRdr = szReaders;
    
for ( dwI = 
0; dwI < MAXIMUM_SMARTCARD_READERS; dwI++ )
    {
        
if ( 
0 == *szRdr )
            
break;
        rgscState[dwI].szReader = szRdr;
        rgscState[dwI].dwCurrentState = SCARD_STATE_UNAWARE;
        szRdr += lstrlen(szRdr) + 
1;
    }
    dwRdrCount = dwI;
    lReturn = SCardListCards(hSC, NULL, NULL, 
0, szCard, &dwCardLen);
    
if (SCARD_S_SUCCESS != lReturn)
    {
        
goto cleanup;
    }
    
//
 If any readers are available, proceed.
    
if ( 
0 != dwRdrCount )
    {
        
for (;;)
        { 
            
//
 Look for the card.
            lReturn = SCardLocateCards(hSC,
                szCard,
                rgscState,
                dwRdrCount );
            
if ( SCARD_S_SUCCESS != lReturn )
            {
                 
goto cleanup;
            }
            
//
 Look through the array of readers.
            
for ( dwI=
0; dwI < dwRdrCount; dwI++)
            {
                
if ( 
0 != ( SCARD_STATE_ATRMATCH & 
                    rgscState[dwI].dwEventState))
                {
                    lReturn = SCardListCards(hSC, rgscState[dwI].rgbAtr, NULL, 
0, szCard, &dwCardLen);
                    LPTSTR szProvider = NULL;
                    DWORD  chProvider = SCARD_AUTOALLOCATE;
                    LONG   lReturn = SCARD_S_SUCCESS;
                    lReturn=SCardGetCardTypeProviderName(hSC,szCard,SCARD_PROVIDER_CSP,(LPTSTR)&szProvider,&chProvider);
                    ret = 
1;
                    
goto cleanup;  
//
 Context will be release automatically.
                }
                
//
 Update the state.
                rgscState[dwI].dwCurrentState = rgscState[dwI].dwEventState;
            }
            
//
 Card not found yet; wait until there is a change.
            lReturn = SCardGetStatusChange(hSC,
                
1000
//
 time wait
                rgscState,
                dwRdrCount );
            
if ( SCARD_S_SUCCESS != lReturn )
            {
                                
goto cleanup;
            }
        }  
//
 for (;;)
    }
cleanup:
    
if (szReaders)
        SCardFreeMemory(hSC,szReaders);
    
if (hSC)
        SCardReleaseContext(hSC);
    
return ret;

转载地址:http://uvysa.baihongyu.com/

你可能感兴趣的文章
h5 拍照上传 代码
查看>>
javascript 通用定义
查看>>
语文文法
查看>>
SSM(Spring,SpringMVC,MyBatis)用户登录
查看>>
关于SQL注入,你应该知道的那些事
查看>>
jquery bxslider幻灯片样式改造
查看>>
常用JavaScript操作页面元素的方法
查看>>
学习进度条 12/18 到12/23
查看>>
varnish学习以及CDN的原理
查看>>
服务器配置 隐藏apache和php的版本
查看>>
将数据表中的数据导出到Excel、将Excel中的数据导入到数据表
查看>>
数据恢复系列(1)~恢复方案制定
查看>>
ASCII码值表
查看>>
关于Python中继承的格式总结
查看>>
2019年目标
查看>>
[SDOI2017]数字表格【莫比乌斯反演】
查看>>
每日一句(11)
查看>>
搭建nexus3版的maven私服(Centos7环境)
查看>>
[TJOI2017]可乐
查看>>
网易云信案例简析:锤科情怀缩影,子弹短信路在何方?
查看>>