我有一个 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 描述没有提示在这种情况下要做什么,我找不到任何线索。如果有人知道这个问题的解决方案,请分享!