【发布时间】:2017-02-25 13:35:07
【问题描述】:
我正在使用 PCSC-lite v1.6.4 进行基于智能卡的应用程序开发。 我需要一种方法来检测从读卡器中取出智能卡后的情况,然后检测插入读卡器的情况,以便强制智能卡再次完成特定过程。
如果可能,是否有任何基于中断/事件的方式来代替简单的轮询?
【问题讨论】:
标签: smartcard smartcard-reader pcsc
我正在使用 PCSC-lite v1.6.4 进行基于智能卡的应用程序开发。 我需要一种方法来检测从读卡器中取出智能卡后的情况,然后检测插入读卡器的情况,以便强制智能卡再次完成特定过程。
如果可能,是否有任何基于中断/事件的方式来代替简单的轮询?
【问题讨论】:
标签: smartcard smartcard-reader pcsc
WinSCard 库中有SCardGetStatusChange。
阻止执行,直到特定读卡器中卡的当前可用性发生变化。
由于 PCSC Lite 是 WinSCard 库的重新实现,您也可以在 PCSC Lite (here) 中使用它。你可以找到几个examples。
【讨论】:
dwEventState 会在智能卡状态发生变化时加一吗?也许你看到的是SCARD_STATE_CHANGED 切换(SCARD_READERSTATE structure)。
dwEventState also contains a number of events in the upper 16 bits (dwEventState & 0xFFFF0000). This number of events is incremented for each card insertion or removal in the specified reader. This can be used to detect a card removal/insertion between two calls to SCardGetStatusChange()。所以从我的角度来看,它不应该溢出到状态字节中。一切都好。顺便说一句,我怀疑这个事件计数器没有在 Windows PCSC 中实现。将代码移植到 Windows 时要小心。