【问题标题】:ScardTransmit always returning error 16ScardTransmit 总是返回错误 16
【发布时间】:2014-02-17 04:43:18
【问题描述】:

我正在尝试使用 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);

【问题讨论】:

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

标签: apdu smartcard-reader winscard


【解决方案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 字节数,如果没有DATA 字节,则为空(即没有Le)。 Le 编码预期响应数据字节数,特殊情况 Le 空表示没有预期响应数据字节,Le = 0x00 表示 256(或最大)预期响应数据字节。

【讨论】:

    猜你喜欢
    • 2012-02-26
    • 2014-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-27
    • 2017-04-24
    • 2020-12-02
    • 1970-01-01
    相关资源
    最近更新 更多