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

标签 c smartcard smartcard-reader

我是智能卡编程新手,所以请耐心等待..

我正在尝试使用 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 协议(protocol)访问卡会失败,但我能够使用 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

我做错了什么?我需要做什么才能读取该卡?

提前致谢!

最佳答案

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

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

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

关于c - 用 C 访问 SLE4442 存储卡 - 需要一些帮助 (RPC_X_BAD_STUB_DATA),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5290542/

相关文章:

java - Mac OS Java 7 小程序+智能卡问题

C: printf() 的堆栈漏洞?

c - 日期字符串的快速自动猜测

c - 具有线性探测的哈希表

smartcard - 获取智能卡 uid 的 APDU 命令

java - 调用 SmartCardReader.openSession() 时出现 net.rim.device.api.smartcad.SmartCardNoCardPresentException

c - 是什么导致了这里的内存访问错误?

terminal - 如何解码APDU上终端与芯片之间的通信?

java - 使用 PKCS11 token (智能卡)进行客户端身份验证

nfc - pcsc-lite 和 libnfc 的区别