智能卡获取响应返回状态6D00

我正在开发一个C ++应用程序(在Windows 7上),该应用程序与PC / SC读卡器接口以执行一些身份验证操作。该应用程序是另一个应用程序的子进程(我不知道这是否相关,但可能如此)。

我还有一个简单的独立测试应用程序,它可以与我需要的智能卡进行所有交互,并且可以成功完成。但是,将代码从该实用程序集成到我的主应用程序时遇到了一些奇怪的行为。

特别是,我发送给卡的第一个命令是SELECT FILE命令:

0x00 0xa4 0x04 0x00 ...

此命令的响应与我的独立测试实用程序相同:

0x61 0x13

因为这表明有更多的可用响应字节,所以我发送GET RESPONSE命令:

0x00 0xc0 0x00 0x00 0x13

该命令失败,并显示一条错误信息,指示该指令无效:

0x6d 0x00

但是,我的测试实用程序(使用相同的读卡器和相同的卡运行)会收到成功的响应(例如以结尾... 0x90 0x00)。但是,测试应用程序要求智能卡在启动时位于读卡器中(这是一个简单的应用程序,可以启动,完成其需要的工作,然后存在)。如果卡在启动时位于读取器中,则不会发生我为我的实际应用描述的错误(就像测试读取器一样)。

是否有人有任何想法可能是这个问题的根源。该卡确实支持给定的指令代码,事实证明在某些情况下它会成功对其做出响应。卡是好的(它可以按预期响应初始的SELECT FILE命令)。我不认为这是权限问题(再次,它在启动时有效)。我的主要应用程序是多线程,但所有卡交互均在单个线程上进行。我很茫然。任何建议将不胜感激。

我注意到的另一件事是,在成功的情况下(例如,应用程序启动时将卡插入读卡器中),在不成功的情况下(例如,在应用程序启动后的某个时间插入卡),GET RESPONSE大约需要0.05秒)大约需要2秒钟的时间。

迈克尔·罗兰

您遇到的情况可能与Windows 7的智能卡即插即用有关。该即插即用功能在将卡插入读卡器后立即自动向卡发送一堆命令。如果此时您的应用也开始发送命令,则可能导致您的命令与即插即用命令交错。

因此,您可能要尝试在将卡插入读卡器后等待几秒钟,然后再开始发送命令,或者打开读卡器以进行独占访问。

对于独占访问,使用值SCARD_SHARE_EXCLUSIVE的参数dwShareModeSCardConnect

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

智能卡的响应状态字0x61xx是什么意思?

来自分类Dev

PCSC-智能卡获取UID

来自分类Dev

如何从智能卡获取CPLC数据?

来自分类Dev

Android isoDep.transceive on Generate AC命令始终返回不支持的6D00

来自分类Dev

智能卡发行

来自分类Dev

获取所有已连接的智能卡的列表

来自分类Dev

智能卡CMS解密

来自分类Dev

智能卡相互认证

来自分类Dev

智能卡访问速度

来自分类Dev

读取智能卡的UID

来自分类Dev

从字节数组的末尾过滤数据(智能卡响应)

来自分类Dev

不同 SC 系列的智能卡探测:清除 SC 状态的命令

来自分类Dev

智能卡选择MF返回69 86命令不允许(无当前ef)

来自分类Dev

智能卡选择MF返回69 86命令不允许(无当前ef)

来自分类Dev

EMV智能卡TLV格式错误?

来自分类Dev

编写和读取智能卡的证书

来自分类Dev

智能卡及其文件

来自分类Dev

智能卡阅读器命名

来自分类Dev

智能卡中的逻辑通道

来自分类Dev

处理智能卡文件结构

来自分类Dev

什么是特定的智能卡传输协议?

来自分类Dev

通过RDP使用智能卡(Raspberry)

来自分类Dev

如何读写未知的智能卡?

来自分类Dev

智能卡读卡器命名

来自分类Dev

处理智能卡文件结构

来自分类Dev

斯洛伐克eVRC智能卡(AID)

来自分类Dev

尝试使用智能卡签名pdf

来自分类Dev

Firefox智能卡证书导入错误

来自分类Dev

智能卡:无法获得 ATR