Я использую карту Mifare 1k
и считыватель acr1252
;Я занимаюсь разработкой с использованием visual c++
и библиотеки Winscard
.
Мне удалось прочитать отдельный блок, используя следующий код:
// Read binary blocks
// Class: FF
// INS: B0
// P1: 00
// P2: the starting block number
// Le: length to read (multiple of 16)
BYTE ReadBinary[] = { 0xFF, 0xB0, 0x00, 0x00, 0x10 };
BYTE readRes[256] = { 0 };
DWORD lenRead = sizeof(readRes);
SCardTransmit(hCard, SCARD_PCI_T1, ReadBinary, sizeof(ReadBinary), NULL, readRes, &lenRead)
Этот вызов функции возвращает SCARD_S_SUCCESS
и readRes
содержит значение блока + SW1
и SW2
со значениями 0x90 0x00
(успех)
Что я пытаюсь сделать, это чтение 2 последовательных блоков памяти (т. Е. Блока 0и блок 1 сектора 0), использующий ту же функцию, изменяющий только команду apdu:
ReadBinary[] = { 0xFF, 0xB0, 0x00, 0x00, 0x20 };
// Last byte changed to read 2 blocks
Но не работает: статус возврата все еще SCARD_S_SUCCESS
, но считанные данные содержат только SW1
иSW2
со значениями 0x63 0x00
(ошибка).
AFAIK с карточками Mifare 1k
возможно прочитать первые 3 блока сектора, но все тесты чтения, которые пытаются прочитать больше, чем сектор, терпят неудачу сэта ошибка.
Я что-то упустил?