我正在尝试使用Winscard库在Windows中构建应用程序,以便与非接触式智能卡读卡器进行通信。 我能够连接到设备,但是当我尝试使用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(或最大)预期响应数据字节。