如何构建PCSC智能卡读卡器“友好名称”?

时间:2012-05-30 08:57:20

标签: c# .net smartcard-reader pcsc winscard

我使用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,连接的阅读器数量
  • 012:STRING,硬件设备ID

我猜这些是附加在'友好名称'上的数字,但我无法弄清楚名称字符串的构造方式。我需要这个将硬件设备ID(我通过WMI)映射到他们的友好名称。

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

1 个答案:

答案 0 :(得分:6)

它们是这3个属性的联合体:

SCARD_ATTR_VENDOR_NAME
SCARD_ATTR_VENDOR_IFD_TYPE
SCARD_ATTR_DEVICE_UNIT

TechNet文章Smart Card Events在“智能卡读卡器名称”部分中对此进行了记录。

SCARD_??? function请求

SCardGetAttrib个属性。

SCARD_ATTR_DEVICE_SYSTEM_NAME属性会返回friendly name,就像您在列出读者时所获得的那样。

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

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