zoukankan      html  css  js  c++  java
  • Usb key插入检测,并动态获取CSP

        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;
  • 相关阅读:
    java.lang.IllegalAccessError: tried to access method org.apache.poi.util.POILogger.log from class org.apache.poi.openxml4j.opc.ZipPackage
    相同域名不同端口的两个应用,cookie名字、路径都相同的情况下,后面cookie会覆盖前面cookie吗
    power designer 连接mysql提示“connection test failed”
    疑问:Spring 中构造器、init-method、@PostConstruct、afterPropertiesSet 孰先孰后,自动注入发生时间
    intelj idea 创建聚合项目(典型web项目,包括子项目util、dao、service)
    Mysql启动时提示:Another MySQL daemon already running with the same unix socket.
    MySql中的varchar长度究竟是字节还是字符
    百度echarts使用--y轴label数字太长难以全部显示
    记录项目中用的laypage分页代码
    Ubuntu16.04下安装Cmake-3.8.2并为其配置环境变量
  • 原文地址:https://www.cnblogs.com/ahuo/p/2385476.html
Copyright © 2011-2022 走看看