Я работаю на бесконтактном считывателе RFID-карт SCM, используя Microsoft SmartCard API .
Обычный процесс взаимодействия со смарт-картой, как я понял, таков:
1. Установите контекст, используя SCardEstablishContext ()
2. Перечислите все читатели, подключенные к системе, используя SCardListReaders ()
3. Выберите считыватель и подождите, пока в него будет вставлена карта.
4. После обнаружения карты функция SCardGetStatusChange () возвращает.
5. Подключитесь к карте через выбранный ридер с помощью SCardConnect ()
6. Поговорите с картой, используя SCardTransmit ()
Все шаги до 5 работают нормально, что означает, что я получил правильную ручку карты. Далее можно проверить карту, выполнив функцию SCardStatus (), которая возвращает согласованный протокол и ATR карты, что также правильно. Но когда я пытаюсь отправить любую команду APDU с помощью SCardTransmit (), она возвращает ошибку (код ошибки 14, который, как мне кажется, SCARD_E_CANT_DISPOSE).
Понятия не имею, что идет не так или чего не хватает. Я пробовал разные APDU, например, базовый APDU для чтения UID карты путем выдачи {0xFF, 0xCA, 0x00, 0x00, 0x00}. Я проверил этот APDU, используя инструмент отладки SCM TestResMan, и он возвращает мне правильный UID карты. Я использую карту MiFARE 1k и бесконтактный считыватель SCM011 SCM.
Ниже приведен фрагмент кода SCardTransmit () (все предыдущие функции вернулись успешно).
SCARD_IO_REQUEST sioreq;
sioreq.dwProtocol = 2; // SCARD_PROTOCOL_T1
sioreq.cbPciLength = 8;
SCARD_IO_REQUEST rioreq;
rioreq.dwProtocol = 2; // SCARD_PROTOCOL_T1
rioreq.cbPciLength = 8;
byte sendbuffer[256], receivebuffer[256];
ULONG sendbufferLen, receivebufferLen, sizeofUID;
sendbuffer[0] = 0xFF; // CLA - Instruction Class
sendbuffer[1] = 0xCA; // Instruction code
sendbuffer[2] = 0x00; // P1 - 1st parameter
sendbuffer[3] = 0x00; // P2 - 2nd parameter
sendbuffer[4] = 0x00;
sendbufferLen = 0x05;
retval = objScWrapper->SCardTransmit(hCardHandle, &sioreq, sendbuffer,
sendbufferLen, NULL, receivebuffer,
&receivebufferLen);
Пожалуйста, дайте мне знать, если у кого-нибудь есть подсказки или указатели ...
ТИА !!