【问题标题】:Smart Card Get Response Returns Status 6D00智能卡获取响应返回状态 6D00
【发布时间】:2016-06-05 14:37:33
【问题描述】:

我正在开发一个 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 即插即用有关,它会自动向您的卡发送一大堆命令,并可能导致您的命令与这些即插即用命令交错。
  • @MichaelRoland 是完全正确的。通过切换到获取卡的独占句柄(并对失败进行等待并重试),一切都开始正常工作。非常感谢!

标签: c++ smartcard apdu smartcard-reader pcsc


【解决方案1】:

您的体验可能与 Windows 7 智能卡即插即用有关。这种即插即用功能会在卡片插入读卡器后立即自动向卡片发送一大堆命令。如果此时您的应用也开始发送命令,这可能会导致您的命令与即插即用的命令交错。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-09
    • 1970-01-01
    • 1970-01-01
    • 2011-03-03
    • 1970-01-01
    • 2011-06-05
    • 1970-01-01
    相关资源
    最近更新 更多