当dwMaxCCIDMessageLength超过4KB时,SCardTransmit返回ERROR_INVALID_PARAMETER

时间:2013-03-29 07:42:56

标签: parameters smartcard pcsc winscard

我正在开发一个usb-smartcard&我使用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驱动程序中的某种不一致性(例如缓冲区大小限制)。

有人能帮助我吗?

1 个答案:

答案 0 :(得分:0)

驱动程序是瓶颈是不太可能的,并且考虑到你有一个USB接口,我也不会认为,协议层是可疑的。这使得智能卡芯片成为主要的嫌疑人,并且由于许多新芯片总共有8 KB RAM,我发现它可以理解,它们不会将更好的部分用于I / O缓冲区。我不知道受影响的命令,我建议尝试链接或大块读取文件。