2013-03-29 52 views
0

我正在開發usb-smartcard &我使用windows PC/SC API與該智能卡進行數據傳輸。這是我的代碼部分:當dwMaxCCIDMessageLength大於4KB時,SCardTransmit返回ERROR_INVALID_PARAMETER

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 
    } 
} 

我敢肯定,大小&指向同時輸入/輸出緩衝器是有效的。

直到設備描述符的字段dwMaxCCIDMessageLength0x00001000h下,不存在問題&方案工作得很好,但是當我將其增加到一個較大的值(超過4KB更多),SCardTransmit失敗ERROR_INVALID_PARAMETER結果代碼。

目前,我知道pSendBuf內容是由智能卡&處理內容成功接收已完成,但是當卡想回一個響應,這個錯誤發生&我認爲這是某種不一致的(如緩衝區大小限制)在PC/SC驅動程序中。

任何人都可以幫助我嗎?

回答

0

驅動程序是瓶頸是極不可能的,並且假設您有一個USB接口,我也不會假設協議層是可疑的。這使得智能卡芯片成爲主要嫌疑人,而且由於許多新芯片總共具有8 KB RAM,我覺得這是可以理解的,他們不會將更好的部分投入到I/O緩衝區中。不知道受影響的命令,我會建議嘗試鏈接或塊讀取文件。

相關問題