0

我是智能卡编程的新手,所以请多多包涵。

我正在尝试使用 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

我究竟做错了什么?我需要做什么才能读卡?

提前致谢!

4

1 回答 1

0

访问存储卡(在这种情况下为 I2C)可能完全取决于您使用的智能卡读卡器。

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

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

于 2011-04-17T16:46:03.337 回答