当我在Windows和Linux上重新编写PC / SC代码时,我注意到pc/sc-lite的API和winscard的IOCTL之间存在轻微的不对称性。除了你必须自己切换ICTL之外,Windows能够发出请求。
这就是狡猾的地方:
IFDHICCPresence
可返回当前的卡状态。IOCTL_SMARTCARD_IS_ABSENT
和IOCTL_SMARTCARD_PRESENT
拥有那种奇怪的回调语义。 IOCTL_SMARTCARD_GET_STATE
与IFDHICCPresence
有点相同。除了Windows还支持pc / sc-lite不能吞咽和弹出卡的事实。我想实现一个独立于平台的IFD处理程序,因此处理类似的行为会容易得多。当然我可以添加另一层来补偿特定于Windows的部分,但我想将其保存为最后的手段。
不是PC / SC和IFD处理程序应该是具有已定义函数和行为的标准吗?
是否可以在Windows上禁用回调行为?
到目前为止,我尝试将IOCTL_SMARTCARD_IS_ABSENT/PRESENT
定义为不受支持,但Windows仍坚持调用它们,即使可以使用IOCTL_SMARTCARD_GET_STATE
检索信息。