Vin*_*ghe 2 .net c# pcsc smartcard-reader 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
Run Code Online (Sandbox Code Playgroud)
哪个好,但我不知道哪个名字属于哪个读卡器.
这些名字来自哪里?他们是如何建造的?
我到目前为止所发现的:在注册表中,有一个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)映射到他们的友好名称.
那么,用于为智能卡读卡器创建"友好名称"的模式是什么?这些值来自何处?
它们是这三个属性的联合体:
SCARD_ATTR_VENDOR_NAME
SCARD_ATTR_VENDOR_IFD_TYPE
SCARD_ATTR_DEVICE_UNIT
Run Code Online (Sandbox Code Playgroud)
TechNet文章Smart Card Events在"智能卡读卡器名称"部分中对此进行了说明.
SCARD_???使用该SCardGetAttrib 函数请求属性.
该SCARD_ATTR_DEVICE_SYSTEM_NAME属性返回friendly name列出读者时获得的属性.
SmartCard读卡器列表存在于注册表下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}.