我正在开发一个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驱动程序中的某种不一致性(例如缓冲区大小限制)。
有人能帮助我吗?
答案 0 :(得分:0)
驱动程序是瓶颈是不太可能的,并且考虑到你有一个USB接口,我也不会认为,协议层是可疑的。这使得智能卡芯片成为主要的嫌疑人,并且由于许多新芯片总共有8 KB RAM,我发现它可以理解,它们不会将更好的部分用于I / O缓冲区。我不知道受影响的命令,我建议尝试链接或大块读取文件。