Доступ к карте памяти SLE4442 в C - нужна помощь (RPC_X_BAD_STUB_DATA) - PullRequest
0 голосов
/ 13 марта 2011

Я новичок в программировании SmartCard, поэтому, пожалуйста, потерпите меня ..

Я пытаюсь получить анаграмматический доступ к карте памяти SLE4442 с помощью WinSCard API.При доступе к карте с помощью инструмента pcscdiag.exe отсюда: http://scm -smartpcscdiag.software.informer.com / Я получаю следующую информацию:

T = 65535
Clock =372
F = 372
D = -
N = 0
W = 0
IFSD = 252
EBC = Продольная проверка избыточности
Тип ICC на ATR = неизвестный тип

Естественно, попытка доступа к карте с использованием протокола T = 0 или T = 1 не удалась, но я могу подключиться к чтению с доступом RAW:

lReturn = SCardConnect(   
    (sc->hContext),  
    (LPCTSTR)(sc->pmszReaders),  
    SCARD_SHARE_EXCLUSIVE,  
    SCARD_PROTOCOL_RAW,  
    //SCARD_SHARE_EXCLUSIVE,  
    //SCARD_PROTOCOL_T1,  
    &(sc->hCardHandle),  
    &(sc->dwAP) );  

Теперь япытаясь, в качестве первого шага, прочитать содержимое карты:

lReturn = SCardBeginTransaction(sc.hCardHandle); // successful ,err checking omitted

DWORD dwSendLength, dwRecvLength;
SCARD_IO_REQUEST pioRecvPci;
BYTE pbSendBuffer[512];
BYTE pbRecvBuffer[512];
dwSendLength = 512;
dwRecvLength = 512;

pbSendBuffer[0] = 0x00;     // CLA
pbSendBuffer[1] = 0xB0; // INS
pbSendBuffer[2] = 0x00;     // P1
pbSendBuffer[3] = 0x00;     // P2
pbSendBuffer[4] = 0x00;     // LEN

dwSendLength = 5;

lReturn = SCardTransmit(
    sc.hCardHandle,
    SCARD_PCI_RAW,
    //SCARD_PCI_T1,
    pbSendBuffer,
    dwSendLength,
    &pioRecvPci, 
    pbRecvBuffer, 
    &dwRecvLength
    );

Я также пытаюсь установить CLA в 0xFF, и другие варианты (вложенные циклы, со значениями 0..255 дляCLA и INS)

Я получаю сообщение об ошибке 1783: RPC_X_BAD_STUB_DATA

Что я делаю не так?Что мне нужно сделать, чтобы прочитать карточку?

Заранее спасибо!

1 Ответ

0 голосов
/ 17 апреля 2011

Доступ к картам памяти (в данном случае I2C) может полностью зависеть от используемого устройства чтения смарт-карт.

Некоторые могут предоставлять дополнительный API (проприетарный или что-то более стандартное, например CT-API) в DLL, которая напрямую использует драйвер ядра устройства чтения смарт-карт, некоторые могут имитировать карты T = 0, используя часть 7 спецификации MKT, некоторым может потребоваться что вы вызываете функцию SCardControl () со специальными параметрами.

Проверьте документацию вашего конкретного устройства чтения смарт-карт.

...