ScardTransmit总是返回错误16
问题描述:
我想在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);
答
您尝试将命令发送一些数据发送看起来不像一个有效的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(或最大)。
你如何连接到读卡器(即你使用什么参数)? –