智能卡获取响应返回状态 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 即插即用有关。这种即插即用功能在卡插入读卡器后立即自动将一大堆命令发送到卡。如果你的应用也在那时开始发送命令,这可能会导致你的命令与即插即用命令交错。

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

对于独占访问,请使用参数 dwShareMode 的值 SCARD_SHARE_EXCLUSIVE SCardConnect

相关内容

  • 没有找到相关文章

最新更新