Неизвестный ответ от метода WINSCARD.DLL SCardTransmit на O2Micro reader с информацией о длине ответа - PullRequest
1 голос
/ 24 августа 2011

Для связи со смарт-картой я использую 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 Ответ

3 голосов
/ 24 августа 2011

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

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

...