Неизвестный ответ от метода WINSCARD.DLL SCardTransmit на O2Micro reader с информацией о длине ответа

Для связи со смарт-картой я использую WINSCARD.DLL в качестве API для отправки команд APDU на смарт-карты. Для пары кард-ридеров это работает должным образом, но каким-то образом я получаю неизвестное возвращение (это не на http://msdn.microsoft.com/en-us/library/ms936965.aspx) значение из метода SCardTransmit если я отправлю команду читателю O2Micro.

Что работает: если я отправляю команду (значения в шестнадцатеричном формате):

CLA: 00, INS: A4, P1: 02, P2: 04, Lc: 02, Data: "4401", Le: (not present)

Я получаю ответ SW1: 61. SW2: 1F

Ответ говорит, что есть 0x1F байты доступны. Итак, я отправляю команду:

CLA: 00, INS: A4, P1: 02, P2: 04, Lc: 02, Data: "4401", Le: 1F

Но по этой команде я не получаю данных и возвращаемое значение 0x57,

Мой вопрос, если кто-нибудь знает, что возвращаемое значение 0x57 говорит и, возможно, способ, как решить или обойти это.

1 ответ

Решение

Ваш код ошибки является одним из кодов системных ошибок Windows из winerror.h: ERROR_INVALID_PARAMETER, Это почти всегда означает, что ваши APDU в порядке, но SCardTransmit Аргументы - это проблема. Я рекомендую присмотреться к pbRecvBuffer параметр. Предостережение: я использовал функции SCard только с C++, а не с C#.

Функции ПК /SC могут возвращать стандартные коды ошибок Windows, а также коды ошибок для ПК /SC. Обратите внимание на немного о FormatMessage Вызов: вы можете использовать это, чтобы сделать отчеты об ошибках немного более общими с предопределенными сообщениями об ошибках, предоставляемыми окнами.

Другие вопросы по тегам