我是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
我做错了什么?为了读卡,我需要做什么?
提前致谢!
答案 0 :(得分:0)
访问存储卡(本例中为I2C)可能完全取决于您使用的智能卡读卡器。
有些人可能会在直接使用智能卡读卡器内核驱动程序的DLL中提供额外的API(专有或更像标准的CT-API),有些人可能会使用MKT规范的第7部分模拟T = 0卡,有些可能需要你用特殊参数调用SCardControl()函数。
查看特定智能卡读卡器的文档。