智能卡GENERAL AUTHENTICATE在VMWare下失败

时间:2015-11-24 18:16:49

标签: c++ windows vmware pcsc winscard

尝试使用VMWare Player虚拟机(Windows 8.1 AMD64)中的智能卡读卡器。该卡是美国政府发行的PIV卡,如相应的NIST标准所述。主机是Windows 7 AMD64。

我正在使用WinSCard API。 VERIFY和GET DATA命令按预期工作。但是,当我执行GENERAL AUTHENTICATE生成数字签名时,SCardTransmit()返回错误代码1,并在调试输出中有消息:

First-chance exception at 0x77675B68 (KernelBase.dll) in PIVTool.exe:  0x00000001: Incorrect function.
First-chance exception at 0x77675B68 (KernelBase.dll) in PIVTool.exe: 0x0000071A: The remote procedure call was canceled, or if a call time-out was specified, the call timed out.
First-chance exception at 0x77675B68 in PIVTool.exe: Microsoft C++ exception: unsigned long at memory location 0x0113E48C.

在系统日志中,也有一些消息可以解决这个问题:

  

智能卡服务,ID 610:智能卡读卡器'VMware Virtual USB CCID 0'拒绝IOCTL TRANSMIT:功能不正确。如果此错误仍然存​​在,则您的智能卡或读卡器可能无法正常运行。

     

命令标题:00 87 07 9c

命令头匹配我传输的内容。

  

WudfUsbccidDrv ID 11:请求已返回失败。   MsgType:0x80   ICCStatus:0x0   CmdStatus:0x1   错误:0x0   SW1:0x0   SW2:0x0

然后

  

WudfUsbccidDrv ID 1:操作失败(0x0,0x0,0x0,0x0)。   ScT1Transmit:发送请求失败。   HResult:指定的请求不是目标设备的有效操作。

以及

  

WudfUsbccidDrv ID 10:请求[0](CLS = 0x0,INS = 0x87,P1 = 0x7,P2 = 0x9C,Lc = 266,Le = 0,.NETServiceMethod = 0x0)

再次,这正是我的要求。

主机上的代码按预期工作。相同的卡,相同的物理读卡器,相同的命令。卡驱动程序可能不同。

我尝试过针对SunPCSC安全提供程序的等效Java代码,只是为了检查细微的协议故障;它在VM上失败并显示类似消息:

  

javax.smartcardio.CardException:sun.security.smartcardio.PCSCException:未知错误0x1

看起来VMWare的智能卡虚拟化层不喜欢这个特定的命令。有什么想法吗?

0 个答案:

没有答案