gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 18:06:51 28 4
gpt4 key购买 nike

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

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

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com