我使用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)映射到他们的友好名称。
那么,用于为智能卡读卡器创建“友好名称”的模式是什么?这些值来自何处?
答案 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-0000F805F530}
中找到。