区分相同类型的智能卡读卡器

时间:2016-09-06 16:22:16

标签: windows winapi setupapi

我有一个使用智能卡读卡器的应用。用户可能有几个相同的阅读器,SCardListReaders返回的系统名称后缀不同,例如" OMNIKEY CardMan 5x21 0 "和" OMNIKEY CardMan 5x21 1 "。用户可以为应用设置阅读器。如果在工作期间用户将智能卡放入另一个阅读器,应用程序将不会做出反应。

问题是,我有报告说在Windows重启后,读者也可以洗牌。那个有" 0 "在之前的名称中现在可以拥有" 1 "。我对此没有任何影响。在洗牌发生后,用户必须在应用程序中再次选择阅读器,我想以某种方式解决这个问题,以便用户不必做任何事情。

首先我玩弄SCardGetAttribSCARD_ATTR_VENDOR_IFD_SERIAL_NO,但此参数不会为世界上的每个读者返回唯一字符串。例如,它可能会返回" 12345678"对于同一类型的所有读者。

我现在正在查看SetupAPI函数SetupDiGetDeviceRegistryProperty。我可以列出所有USB设备,参数SPDRP_PHYSICAL_DEVICE_OBJECT_NAMESPDRP_LOCATION_PATHS似乎是唯一的,我希望在系统中修复。如果读卡器不是USB设备,那么我就像现在一样依赖名称。问题是,我无法从读者名称中推断出我应该关注的USB设备。 SPDRP_个参数都不会给我一个读者姓名,我需要提供给SCardConnect的名称。

如何从读者姓名到相应HDEVINFO我可以提供给SetupDiGetDeviceRegistryProperty?或者,是否有另一种方法来区分相同类型的智能卡读卡器,即使在Windows重启后也是可靠的?

0 个答案:

没有答案