我使用 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 获得)映射到它们的友好名称。
那么,用于为智能卡读卡器创建“友好名称”的模式是什么?这些值从何而来?
最佳答案
它们是这 3 个属性的串联:
SCARD_ATTR_VENDOR_NAME
SCARD_ATTR_VENDOR_IFD_TYPE
SCARD_ATTR_DEVICE_UNIT
TechNet 文章 Smart Card Events 在“智能卡读卡器名称”部分对此进行了记录。
SCARD_???
属性通过 SCardGetAttrib
function 请求。SCARD_ATTR_DEVICE_SYSTEM_NAME
属性返回 friendly name
作为您在列出读者时获得的代码。HKLM\SOFTWARE\Microsoft\Cryptography\Calais\Readers
下的注册表中存在智能卡读卡器的列表。读卡器是通过 SCR 驱动程序的 INF 文件添加到此列表中的,因此在驱动程序安装过程中。设备和阅读器之间的链接可以在
{50DD5230-BA8A-11D1-BF5D-0000F805F530}
下的 SmartCardReader 类 HKLM\SYSTEM\CurrentControlSet\Control\Class\{50DD5230-BA8A-11D1-BF5D-0000F805F530}
中找到。关于c# - PCSC 智能卡读卡器 'friendly names' 是如何构建的?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10813041/