0

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);
4

1 に答える 1

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は空 (つまり no Le) ですDATALe予期される応答データ バイト数をエンコードします。特殊なケースLeの空の場合は、予期される応答データ バイトがないことを示し、Le=は、予期される応答データ バイト0x00が 256 (または最大) であることを示します。

于 2014-03-14T17:00:13.797 に答える