2014-02-17 60 views
0

我想在windows中使用Winscard库与非接触式智能卡读卡器进行通信来构建应用程序。 我能够连接到该设备,但是当我尝试这样使用scardtransmit我得到一个错误16.我已附上一段代码,我用下面ScardTransmit总是返回错误16

SCARD_IO_REQUEST pioSendPci = *SCARD_PCI_T1; 
//SCARD_IO_REQUEST pioSendPci = *SCARD_PCI_RAW; 
DWORD dwRecvLength; 
BYTE pbRecvBuffer[258]; 
BYTE cmd1[260]; 
cmd1[0]= 0xA0; 
cmd1[1]= 0x0D; 
cmd1[2]= 0x01; 
cmd1[3]= 0x00; 
cmd1[4]= 0x01; 
ULONG sendbuflen= 0x05; 
dwRecvLength = sizeof(pbRecvBuffer); 

rv2 = SCardTransmit(hCard, &pioSendPci , cmd1,sendbuflen ,NULL, pbRecvBuffer, &dwRecvLength); 
+0

你如何连接到读卡器(即你使用什么参数)? –

回答

1

您尝试将命令发送一些数据发送看起来不像一个有效的APDU。

有效APDU(见ISO/IEC 7816-4)具有这种形式(除了延伸长度的APDU):

+--------+--------+--------+--------+--------+----------+--------+ 
| CLA | INS | P1  | P2  | [Lc] | [DATA] | [Le] | 
+--------+--------+--------+--------+--------+----------+--------+ 
| 1 Byte | 1 Byte | 1 Byte | 1 Byte | 1 Byte | Lc Bytes | 1 Byte | 
+--------+--------+--------+--------+--------+----------+--------+ 

Lc包含发送命令DATA字节数或为空(即没有Le)如果没有DATA字节。 Le编码期望的响应数据字节的数量,其中特殊情况Le为空指示没有期望的响应数据字节,并且Le = 0x00指示预期的响应数据字节为256(或最大)。