我有一个CAC智能卡和一个SCM Microsystems SCR3310 USB读卡器。我正在运行Windows 7 Ultimate SP1。
此设置过去可以正常工作。当我插入我的CAC时,我的证书将立即传播到证书存储中(由Certificate Manager证明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)
看来硬件在期间指示发生了故障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 的同一读取器就可以正常工作!显然有东西坏了,这让我发疯想要弄清楚是什么。
那是什么问题呢?