我是智能卡编程的新手,所以请多多包涵。
我正在尝试使用 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
我究竟做错了什么?我需要做什么才能读卡?
提前致谢!