私はMicrosoft SmartCard APIsを使用しているSCM非接触型RFIDカードリーダーで作業しています。SCardTransmit()は常にエラーを返します
スマートカードとineractする通常のプロセス、私は理解しているものを、次のとおりです。
1. SCardEstablishContextを使用してコンテキストを確立()
2.リストのすべての読者は、SCardListReaders()
を使用してシステムに接続されています3.リーダーを選択し、カードが挿入されるのを待ちます。
4.カードが検出されると、SCardGetStatusChange()関数が戻ります。
5. SCardConnectを(使用して、選択した読者によるカードに接続)
6.話しSCardTransmitを(使用してカードに)
5までのすべてのステップは、私が正しいカードのハンドルを得たことを意味して正常に動作しています。交渉されたプロトコルと正しいカードのATRを返すSCardStatus()関数を発行することによって、カードをさらに検証することができます。しかし、SCardTransmit()を使用してAPDUコマンドを送信しようとすると、エラー(エラーコード14、SCARD_E_CANT_DISPOSEと思われます)が返されます。
何が間違っているのか、何が欠けているのかわかりません。私は、例えば、 {0xFF、0xCA、0x00、0x00、0x00}を発行してカードUIDを読み取る非常に基本的なAPDUです。私はSCM TestResManデバッグツールを使用してこのAPDUを確認し、私にカードの正しいUIDを返します。 MiFARE 1kカードとSCM非接触SCL011リーダーを使用しています。
下記のSCardTransmit()コードスニペットが見つかりました(すべての以前の関数が成功を返しました)。
SCARD_IO_REQUEST sioreq;
sioreq.dwProtocol = 2; // SCARD_PROTOCOL_T1
sioreq.cbPciLength = 8;
SCARD_IO_REQUEST rioreq;
rioreq.dwProtocol = 2; // SCARD_PROTOCOL_T1
rioreq.cbPciLength = 8;
byte sendbuffer[256], receivebuffer[256];
ULONG sendbufferLen, receivebufferLen, sizeofUID;
sendbuffer[0] = 0xFF; // CLA - Instruction Class
sendbuffer[1] = 0xCA; // Instruction code
sendbuffer[2] = 0x00; // P1 - 1st parameter
sendbuffer[3] = 0x00; // P2 - 2nd parameter
sendbuffer[4] = 0x00;
sendbufferLen = 0x05;
retval = objScWrapper->SCardTransmit(hCardHandle, &sioreq, sendbuffer,
sendbufferLen, NULL, receivebuffer,
&receivebufferLen);
TIA ...誰もが任意の手掛かりまたはポインタを持っている場合は私に知らせてください!ほとんどの部分について