2014-02-17 15 views
0

Я пытаюсь создать приложение в Windows с помощью библиотеки Winscard для общения с бесконтактным считывателем смарт-карт. Я могу подключиться к устройству, но когда я пытаюсь так послать некоторые данные с помощью scardtransmit я получаю ошибку 16. Я приложил кусок кода, который я использую нижеScardTransmit всегда возвращает ошибку 16

SCARD_IO_REQUEST pioSendPci = *SCARD_PCI_T1; 
//SCARD_IO_REQUEST pioSendPci = *SCARD_PCI_RAW; 
DWORD dwRecvLength; 
BYTE pbRecvBuffer[258]; 
BYTE cmd1[260]; 
cmd1[0]= 0xA0; 
cmd1[1]= 0x0D; 
cmd1[2]= 0x01; 
cmd1[3]= 0x00; 
cmd1[4]= 0x01; 
ULONG sendbuflen= 0x05; 
dwRecvLength = sizeof(pbRecvBuffer); 

rv2 = SCardTransmit(hCard, &pioSendPci , cmd1,sendbuflen ,NULL, pbRecvBuffer, &dwRecvLength); 
+0

Как подключиться к устройству для чтения карт (то есть какие параметры вы используете)? –

ответ

1

Команда, которую вы пытаетесь send не похож на действительный APDU.

Действительного ПБДП (ИСО/МЭК 7816-4) имеет такой вид (для расширенной длиной ПБДПА кроме):

+--------+--------+--------+--------+--------+----------+--------+ 
| CLA | INS | P1  | P2  | [Lc] | [DATA] | [Le] | 
+--------+--------+--------+--------+--------+----------+--------+ 
| 1 Byte | 1 Byte | 1 Byte | 1 Byte | 1 Byte | Lc Bytes | 1 Byte | 
+--------+--------+--------+--------+--------+----------+--------+ 

Где Lc содержит количество переданных команд DATA байт или является пустым (т.е. нет Le), если нет DATA байт. Le кодирует количество ожидаемых байтов данных ответа, а специальный случай Le пуст, указывающий отсутствие ожидаемых байтов данных ответа и Le = 0x00 с указанием 256 (или максимальных) ожидаемых байтов данных ответа.

Смежные вопросы