Я пишу код C ++, используя Winscard. Я заметил, что если я отправляю команду со Scardtransmit, где отправляются только данные или только полученные данные, проблем не возникает. Я могу отправить данные или получить правильный ответ.
Однако, когда команда отправляет данные и ожидает ответа, я всегда получаю 61xx. Я знаю, что код ошибки 61xx означает, что есть ответ xx байтов, где Le не верен, и проверил каждое возможное Le, включая возвращенное значение xx, но ничего не изменилось. Например, пусть Apdu имеет вид CLA INS P1 P2 Lc Data Le, и я получаю 61XX, затем я отправляю CLA INS P1 P2 Lc Data XX, снова я получаю 61XX.
Я проверил карту с помощью Java и других инструментов и убедился, что с картой ничего нет.
Насколько я понимаю, для Lc и Le выделен один байт P3. Есть ли способ получить ответы (кроме SW1SW2) от команд DATADATA?
Когда вы отправляете команду, содержащую данные команды, и команда также ожидает данные результата, и связь осуществляется по протоколу T = 0, вам необходимо отправить два APDU. Один для самой команды, а другой для получения результата.
61XX
это не ошибка Это (успешное) слово состояния, которое указывает, что у вас есть XX
байты ответа, которые вы можете получить с помощью GET RESPONSE
(INS=0xC0
).
Здесь ссылка на команду.
Других решений пока нет …