如何构建PCSC智能卡读卡器“友好名称”?
我使用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
:STRING,硬件设备ID
我想这些是附加到’友好名称’的数字,但我无法弄清楚如何构造名称字符串。 我需要这个将硬件设备ID(我通过WMI)映射到他们的友好名称。
那么,用于为智能卡读卡器创建“友好名称”的模式是什么?这些值来自何处?
它们是这三个属性的联合体:
SCARD_ATTR_VENDOR_NAME SCARD_ATTR_VENDOR_IFD_TYPE SCARD_ATTR_DEVICE_UNIT
TechNet文章智能卡事件在“智能卡读卡器名称”部分中对此进行了说明。
SCARD_???
使用SCardGetAttrib
函数请求属性。
SCARD_ATTR_DEVICE_SYSTEM_NAME
属性返回friendly name
就像列出读者时所获得的friendly name
一样。
SmartCard读卡器列表存在于HKLM\SOFTWARE\Microsoft\Cryptography\Calais\Readers
下的注册表中。 读取器由SCR驱动程序的INF文件添加到此列表中,因此在驱动程序安装期间。
设备和阅读器之间的链接可以在HKLM\SYSTEM\CurrentControlSet\Control\Class\{50DD5230-BA8A-11D1-BF5D-0000F805F530}
下的SmartCardReader类{50DD5230-BA8A-11D1-BF5D-0000F805F530}
HKLM\SYSTEM\CurrentControlSet\Control\Class\{50DD5230-BA8A-11D1-BF5D-0000F805F530}
。