我使用 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-0000F805F5‌​30} 中找到。

    关于c# - PCSC 智能卡读卡器 'friendly names' 是如何构建的?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10813041/

    10-11 02:03