0

我有一个使用智能卡读卡器的应用程序。一个用户可能有多个相同的读卡器,并且它们的系统名称(如 )返回的SCardListReaders数字后缀不同,例如“OMNIKEY CardMan 5x21 0 ”和“OMNIKEY CardMan 5x21 1 ”。用户可以为应用程序设置阅读器。如果在工作期间用户将智能卡放在另一个读卡器中,应用程序将不会做出反应。

问题是,我有报告说,在 Windows 重新启动后,阅读器也可以被洗牌。以前名字里有“ 0 ”的现在可以有“ 1 ”了。我对此没有影响。洗牌发生后,用户必须在应用程序中再次选择阅读器,我想以某种方式解决这个问题,这样用户就不必做任何事情。

首先我在玩SCardGetAttriband SCARD_ATTR_VENDOR_IFD_SERIAL_NO,但是这个参数不会为世界上的每个读者返回一个唯一的字符串。例如,它可能为同一特定类型的所有阅读器返回“12345678”。

我现在正在查看 SetupAPI 函数SetupDiGetDeviceRegistryProperty。我可以列出所有 USB 设备和参数SPDRP_PHYSICAL_DEVICE_OBJECT_NAME,并且SPDRP_LOCATION_PATHS似乎是独一无二的,我希望在系统中修复。如果阅读器不是 USB 设备,那么我将只依赖名称,就像我现在一样。问题是,我无法从阅读器名称中推断出我应该查看哪个 USB 设备。没有一个SPDRP_参数会给我一个读者名字,我需要我可以给的名字SCardConnect

我怎样才能从读者的名字中HDEVINFO得到我可以给的对应SetupDiGetDeviceRegistryProperty?或者,是否有另一种方法来区分相同类型的智能卡读卡器,即使在 Windows 重新启动后仍然可靠?

4

0 回答 0