Неизвестный ответ от метода 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
Вызов: вы можете использовать это, чтобы сделать отчеты об ошибках немного более общими с предопределенными сообщениями об ошибках, предоставляемыми окнами.