0

皆さん、こんにちは。別の質問があります:)

プロトコル t=1 で IC カードと通信したい。Windows スマートカード API (winscard.dll) と C# を使用しています。私が持っている

データを送信するための SCardEstablishContext()、SCardListReaders()、SCardConnect()、SCardStatus()、SCardTransmit()、SCardDisconnect()、SCardReleaseContext() 関数。

以下のコードでマスターファイル(mf)を選択したい

SCARD_IO_REQUEST sendreq,recvreq;

byte[] sendbuff = { 0x00, 0xA4, 0x00, 0x00, 0x02, 0x3F, 0x00 };

sendreq.protocol = SCARD_PROTOCOL_T1;
sendreq.pciLength = 8;
recvreq.protocol = SCARD_PROTOCOL_T1;
recvreq.pciLength = 8;

byte[] RecvBuff = new byte[258];
int recvbufflen = 2;

SCardTransmit(hCard, ref sendreq, ref sendbuff[0], sendbuff.Length, ref recvreq, ref RecvBuff[0], ref recvbufflen);

成功したタスクの応答は 9000 である必要がありますが、6A86 (無効な ins パラメーター) を受け取ります。

私の質問は次のとおりです。

1- なぜ私はこの応答を受け取っているのですか?

2- はいの場合、pts コマンドでプロトコルを変更する必要がありますか? (カードはt1のみ対応)

3- プロトコル t = 1 フレームは、プロローグ フィールド + 情報フィールド + エピローグ フィールドでなければなりません。しかし、プロローグとエピローグのバイトを sendbuff に追加しません。Windows api を使用しているときにそれらを sendbuff に追加する必要がありますか?

ありがとう..

4

1 に答える 1

0

パラメータp1とp2が原因で問題を解決しました。「無効なパラメーター」を受け取ったにも関わらず、パラメーターは正しいと思いました。だから私はどこかで間違いを探していました。

ファイルを選択する場合、パラメータは 0x02 および 0x0C でなければなりません。

編集: guidot のコメントの後、これらのパラメーターを使用してマスター ファイルを選択していないことに気付きました。(試してみましたが後で変更しました)MFの下でEFを選択するには:

byte[] sendbuff = {0x00, 0xA4, 0x02, 0x0C, 0x02, id1, id2}

ギドーのおかげで..

于 2013-03-29T07:42:50.363 に答える