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 回答