Я разрабатываю 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
, проблем нет, и программа работает нормально, но когда я увеличиваю его до большего значения (более 4 КБ), SCardTransmit
завершается с ошибкой с кодом результата ERROR_INVALID_PARAMETER.
В настоящее время я знаю, что содержимое pSendBuf
было успешно получено смарт-картой и обработка содержимого завершена, но когда карта хочет вернуть ответ, возникает эта ошибка, и я думаю, что это какая-то несогласованность (например, ограничение размера буфера) в ПК /SC драйвер.
Кто-нибудь может мне помочь?