0

私はusbスマートカードを開発しており、Windows PC / SC APIを使用してそのスマートカードでデータを送信しています。これは私のコードの一部です:

if(SCardConnect(hSC, sCard, SCARD_SHARE_EXCLUSIVE, SCARD_PROTOCOL_T1, &hCard, &dwActiveProtocol) == SCARD_S_SUCCESS)
{
    if(SCardTransmit(hCard, SCARD_PCI_T1, pSendBuf, ulSendBufLen, SCARD_PCI_T1, pRecBuf, pulRecBufLen) == SCARD_S_SUCCESS)
    {
        //do something
    }
}

両方のイン/アウト バッファへのサイズとポインタが有効であると確信しています。

dwMaxCCIDMessageLengthデバイス記述子のフィールドが 未満になるまで0x00001000h問題はなく、プログラムは正常に動作しますが、それをより大きな値 (4kb 以上) に増やすとSCardTransmit、ERROR_INVALID_PARAMETER 結果コードで失敗します。

現在、pSendBufスマートカードでコンテンツが正常に受信され、コンテンツの処理が完了していることはわかっていますが、カードが応答を返したいときにそのエラーが発生し、これは PC/ SCドライバー。

誰でも私を助けることができますか?

4

1 に答える 1

0

ドライバーがボトルネックである可能性は非常に低く、USB インターフェースを使用していることを考えると、プロトコル層が疑わしいとは思いません。これにより、スマート カード チップが最も疑わしいものになります。多くの新しいチップには合計で 8 KB の RAM が搭載されているため、その大部分を I/O バッファーに割り当てていないことは理解できます。影響を受けるコマンドがわからないので、チェーンまたはファイルのチャンクごとの読み取りを試すことをお勧めします。

于 2013-03-29T11:20:34.083 に答える