智能卡错误

Jon*_*art 8 windows-7 smartcard

我有一张CAC智能卡和一个SCM Microsystems SCR3310 USB 读卡器。我正在运行带有 SP1 的 Windows 7 Ultimate。

这个设置过去工作得很好。当我插入我的 CAC 时,我的证书会立即传播到证书存储(如证书管理器所证明的那样certmgr.msc),并且我可以登录到需要 CAC 才能访问的网站。

最近,我无法访问这些网站。查看证书管理器,我看到只有一个或有时两个我的证书存在。如果我删除它们,然后重新插入我的卡,可能会出现不同的证书。

我刚刚返回并用相同型号更换了阅读器,所以我知道这不是罪魁祸首。

我终于想到看系统日志,发现插入智能卡时出现以下错误:

在此处输入图片说明


错误,按时间顺序:

Smart Card Service    Event ID: 610
   Smart Card Reader 'SCM Microsystems SCR33xx v2.0 USB SC Reader 0' rejected
   IOCTL TRANSMIT: Incorrect function.  If this error persists, your smart card
   or reader may not be functioning correctly.

   Command Header: 00 c0 00 00

WudfUsbccidDrv        Event ID: 11
   A Request has returned failure.
   MsgType: 0x80
   ICCStatus: 0x0
   CmdStatus: 0x1
   Error: 0xf6               // ICC_PROTOCOL_NOT_SUPPORTED
   SW1: 0x0
   SW2: 0x0

WudfUsbccidDrv        Event ID: 11
   An operation has failed (0x0, 0x0, 0x0, 0x0).
   ScT0Transmit: Failed to send request at TPDU level.
   HResult: The specified request is not a valid operation for the target device.
   // Note: this one comes from WUDFUsbccidDriver.dll CMyDevice::UsbScT0Transmit+7D0h

WudfUsbccidDrv        Event ID: 10
   Request[0](CLS=0x0,INS=0xc0,P1=0x0,P2=0x0,Lc=0,Le=256,.NETServiceMethod=0x0)
Run Code Online (Sandbox Code Playgroud)

似乎硬件在IOCTL TRANSMIT.

编辑:查阅CCID 规范,该卡似乎以 bmCommandStatus = 1 - Failed (error code provided by the error register). 并且Error = ICC_PROTOCOL_NOT_SUPPORTED -10 (F6h)。我假设驱动程序将此错误转换为“HResult:指定的请求不是目标设备的有效操作”。信息。

此外,发送的命令是 INS=0xC0,即GET RESPONSE

怎么能说不支持协议?驱动程序的行为与工作时有何不同?请注意,我也刚刚使用新的 CAC 尝试了此操作,并且我看到了类似的行为。读卡器或驱动程序有问题吗?


考虑到我刚刚更换了读卡器(并重新安装了驱动程序、重新启动等),我的智能卡是否有问题?我假设不是,因为它确实适用于另一个系统上的另一个阅读器。我还没有在同一系统上尝试过不同的阅读器。

事实上,连接到同一台物理机上的 Windows 7 VM的同一个阅读器工作得很好!有些东西显然坏了,它让我发疯,试图弄清楚是什么。

那么问题是什么?

小智 4

以防万一有人会遇到这个问题 - 我已经尝试解决它一整天了。

这是解决方案:

  1. 对于 64 位 Windows - 跳转到注册表项

    HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Cryptography\Calais\Readers
    
    Run Code Online (Sandbox Code Playgroud)

应该已经有一些读者了。如果没有,这就是为什么您可能安装了所有驱动程序,但仍然根本无法运行的原因。

  1. 转到Device Manager,找到有问题的读者,然后在“详细信息”选项卡中查找此字符串:Bus reported device description

  2. 为上面的项创建一个子项。名字应该和那个一模一样Bus reported device description。然后在末尾添加一个计数器。所以关键应该是这样的:

    HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Cryptography\Calais\Readers\O2Micro CCID SC Reader 0
    
    Run Code Online (Sandbox Code Playgroud)
  3. 现在创建几个字符串值:第一个包含设备名称,第二个包含组。这是我的例子:

    Device = O2Micro CCID SC Reader 0
    
    Groups = SCard$DefaultReaders
    
    Run Code Online (Sandbox Code Playgroud)

就是这样。要使其正常工作,请断开读卡器的连接并将其重新连接。如果是内部设备,您可能需要重新启动计算机。这是.reg文件示例(将设备名称和编号更改为您自己的值):

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Cryptography\Calais\Readers\O2Micro CCID SC Reader 0]
"Device"="O2Micro CCID SC Reader 0"
"Groups"=hex(7):53,00,43,00,61,00,72,00,64,00,24,00,44,00,65,00,66,00,61,00,75,\
00,6c,00,74,00,52,00,65,00,61,00,64,00,65,00,72,00,73,00,00,00,00,00
Run Code Online (Sandbox Code Playgroud)