【发布时间】:2014-12-09 17:19:12
【问题描述】:
我有一个 Java 程序,它使用 javax.smartcardio.* 成功地与带有智能卡读卡器的 Java 智能卡通信。通过 API 监视器,我发现运行它的 java.exe 女巫实际上是在使用 WinSCard winAPI(它在我开始通信的那一刻加载了 winscard.dll。我还没有设法找到我们的实际调用)
我的问题是我尝试使用 WinSCard 库在 Qt 框架 C++ 程序中实现相同的东西。如果我在阅读器插入 USB 后 10 秒内运行程序,一切正常,但在那之后阅读器进入我认为是某种节电状态的状态,然后几秒钟后它击落了 USB 管道。 java程序在我尝试连接时会自动“唤醒”阅读器,但是我写的C++没有,我也不知道自己做错了什么。
首先我用SCardEstablishContext()调用建立一个上下文,然后我用SCardListReaders()列出读者,这实际上列出了读者是问题,最后我调用SCardConnect()进行连接,如果智能卡返回SCARD_E_NOT_READY阅读器处于这种“睡眠”状态。
请注意,如果智能卡读卡器不是这种“睡眠”模式,我可以用相同的代码与卡通信,没有问题。
winAPI 描述没有提示在这种情况下应该做什么,而且我找不到任何关于该做什么的踪迹。如果有人知道这个问题的解决方案,请分享!
【问题讨论】:
标签: smartcard winscard apimonitor