私はスマートカードプログラミングが初めてなので、ご容赦ください..
WinSCard API を使用して、アナグラム的に SLE4442 メモリ カードにアクセスしようとしています。ここから pcscdiag.exe ツールを使用してカードにアクセスすると: http://scm-smartpcscdiag.software.informer.com/ 次の情報が得られます。
T=65535
Clock=372
F=372
D=-
N=0
W=0
IFSD=252
EBC=Longitudinal Redundancy Check
ATR ごとの ICC タイプ=unknown Type
当然、T=0 または T=1 プロトコルを使用してカードにアクセスしようとすると失敗しますが、RAW アクセスで読み取りに接続できます。
lReturn = SCardConnect(
(sc->hContext),
(LPCTSTR)(sc->pmszReaders),
SCARD_SHARE_EXCLUSIVE,
SCARD_PROTOCOL_RAW,
//SCARD_SHARE_EXCLUSIVE,
//SCARD_PROTOCOL_T1,
&(sc->hCardHandle),
&(sc->dwAP) );
今、最初のステップとして、カードの内容を読み取ろうとしています。
lReturn = SCardBeginTransaction(sc.hCardHandle); // successful ,err checking omitted
DWORD dwSendLength, dwRecvLength;
SCARD_IO_REQUEST pioRecvPci;
BYTE pbSendBuffer[512];
BYTE pbRecvBuffer[512];
dwSendLength = 512;
dwRecvLength = 512;
pbSendBuffer[0] = 0x00; // CLA
pbSendBuffer[1] = 0xB0; // INS
pbSendBuffer[2] = 0x00; // P1
pbSendBuffer[3] = 0x00; // P2
pbSendBuffer[4] = 0x00; // LEN
dwSendLength = 5;
lReturn = SCardTransmit(
sc.hCardHandle,
SCARD_PCI_RAW,
//SCARD_PCI_T1,
pbSendBuffer,
dwSendLength,
&pioRecvPci,
pbRecvBuffer,
&dwRecvLength
);
また、CLA を 0xFF に設定したり、他のバリアント (CLA と INS の値が 0..255 のネストされたループ) を試したりしました。
1783 エラーが発生し続けます: RPC_X_BAD_STUB_DATA
私は何を間違っていますか?カードを読むにはどうすればいいですか?
前もって感謝します!