0

私はスマートカードプログラミングが初めてなので、ご容赦ください..

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

私は何を間違っていますか?カードを読むにはどうすればいいですか?

前もって感謝します!

4

1 に答える 1

0

メモリカード(この場合はI2C)へのアクセスは、使用しているスマートカードリーダーに完全に依存する場合があります。

スマートカードリーダーカーネルドライバーを直接使用するDLLで追加のAPI(独自のまたはCT-APIなどのより標準的なもの)を提供するものもあれば、MKT仕様のパート7を使用してT = 0カードをシミュレートするものもあります。また、呼び出す必要がある場合もあります。特別なパラメータを持つSCardControl()関数。

特定のスマートカードリーダーのドキュメントを確認してください。

于 2011-04-17T16:46:03.337 に答える