在C中访问SLE4442存储卡 - 需要一些帮助(RPC_X_BAD_STUB_DATA)

时间:2011-03-13 16:02:42

标签: c smartcard smartcard-reader

我是SmartCard编程的新手,所以请耐心等待..

我正在尝试使用WinSCard API以字母方式访问SLE4442存储卡。 从这里使用pcscdiag.exe工具访问卡时: http://scm-smartpcscdiag.software.informer.com/ 我收到以下信息:

T = 65535
时钟= 372
F = 372
d = -
N = 0
W = 0
IFSD = 252
EBC =纵向冗余检查
每ATR的ICC类型=未知类型

当然,尝试使用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,以及其他变体(嵌套循环,CLA和INS的值为0..255)

我一直收到1783错误:RPC_X_BAD_STUB_DATA

我做错了什么?为了读卡,我需要做什么?

提前致谢!

1 个答案:

答案 0 :(得分:0)

访问存储卡(本例中为I2C)可能完全取决于您使用的智能卡读卡器。

有些人可能会在直接使用智能卡读卡器内核驱动程序的DLL中提供额外的API(专有或更像标准的CT-API),有些人可能会使用MKT规范的第7部分模拟T = 0卡,有些可能需要你用特殊参数调用SCardControl()函数。

查看特定智能卡读卡器的文档。