4

我使用 WinSCard 列出所有读者,这给了我这样的列表:

ASK RDR4x7 0
SCM Microsystems Inc. SCR3320 USB Smart Card Reader 0
SCM Microsystems Inc. SCR3320 USB Smart Card Reader 1
SCM Microsystems Inc. SCR3320 USB Smart Card Reader 2

这很棒,但我不知道哪个名字属于哪个读卡器。

这些名字从何而来?它们是如何构造的?

到目前为止我发现的是:在注册表中,有一个HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services键。在此键下,您可以找到与读卡器的“服务”(我通过查询 WMI 注册表找到)匹配的子键。例如:为SCM Microsystems Inc. SCR3320 USB Smart Card Reader读者提供的服务是SCR3XX2K

这个子键 ( SCR3XX2K) 有另一个子键Enum,它有多个有趣的值:

  • Count:DWORD,连接的阅读器数量
  • 0, 1, 2: STRING,硬件设备 ID

我猜这些是附加到“友好名称”的数字,但我无法弄清楚名称字符串是如何构造的。我需要它来将硬件设备 ID(我通过 WMI 获得)映射到它们的友好名称。

那么,用于为智能卡读卡器创建“友好名称”的模式是什么,这些值从何而来?

4

1 回答 1

8

它们是这三个属性的结合:

SCARD_ATTR_VENDOR_NAME
SCARD_ATTR_VENDOR_IFD_TYPE
SCARD_ATTR_DEVICE_UNIT

TechNet 文章智能卡事件在“智能卡读卡器名称”部分对此进行了说明。

SCARD_???SCardGetAttrib 使用函数请求属性。

SCARD_ATTR_DEVICE_SYSTEM_NAME属性返回friendly name您在列出读者时获得的属性。

智能卡读卡器列表存在于注册表中HKLM\SOFTWARE\Microsoft\Cryptography\Calais\Readers。读卡器由 SCR 驱动程序的 INF 文件添加到此列表中,因此在驱动程序安装期间。

设备和读卡器之间的链接可以在 SmartCardReader 类中{50DD5230-BA8A-11D1-BF5D-0000F805F530}找到HKLM\SYSTEM\CurrentControlSet\Control\Class\{50DD5230-BA8A-11D1-BF5D-0000F805F5‌​30}

于 2012-05-30T09:36:54.193 回答