【问题标题】:Windows device manager and hardware IDsWindows 设备管理器和硬件 ID
【发布时间】:2009-05-09 15:34:01
【问题描述】:

我很好奇 Windows 设备管理器如何获取设备的硬件 ID,即使尚未为该设备加载任何设备驱动程序。有人知道 Windows 是如何处理这个问题的吗?

在相关说明中,我有兴趣支持我们正在编写的软件的语言本地化;设备和/或驱动程序是否可以以本地化方式报告其友好名称和描述?是否已经有这方面的普遍做法?

感谢您的宝贵时间。

【问题讨论】:

    标签: localization hardware device-driver device-manager


    【解决方案1】:

    首先,要了解加载驱动程序的顺序,建议您将设备管理器切换到查看|设备按连接方式

    如您所见,这些设备位于其总线驱动程序下方。对于 PCI 设备,它将是“PCI 总线”。对于 USB 设备,它将是它们的 USB 集线器。每个总线驱动程序对于如何格式化标识符字符串都有自己的想法:

    • 设备实例 ID
    • 硬件 ID
    • 兼容的 ID
    • 位置等

    它返回它们以响应IRP_MN_QUERY_IDBusQueryInstanceIDBusQueryHardwareIDsBusQueryCompatibleIDs)和IRP_MN_QUERY_DEVICE_TEXTDeviceTextDescriptionDeviceTextLocationInformation 等)

    当然,由于总线驱动程序首先枚举了设备(即创建了您所看到的子设备)(通过适用于总线的任何标准接口;例如 USB 上的“获取设备/字符串描述符”),它知道他们的供应商 ID、产品 ID 等。

    此时不必加载设备的驱动程序。事实上,它无法加载。设备 ID 正是指示 PnP 系统与设备匹配的驱动程序。

    关于本地化:

    与提供用于设备匹配的不透明字符串的IRP_MN_QUERY_ID 不同,IRP_MN_QUERY_DEVICE_TEXT 信息确实旨在本地化。为此,您会在输入数据 (Parameters.QueryDeviceText.LocaleId) 中收到请求的区域设置 ID (LCID)。

    [正如 Alphaneo 所指出的,USB 集线器驱动程序可能会将此 LCID 向前传递给 USB 设备(在 Get String Descriptor 请求中),希望 USB 设备本身具有本地化字符串。]

    【讨论】:

      【解决方案2】:

      顶层过程称为枚举。大多数现代设备总线都支持一种机制,让操作系统可以查询总线并确定哪些设备连接到总线。

      PCI 系列总线都支持枚举。 PCI 总线有一个特殊的enumeration space 就是为了这个。这就是“即插即用”ID 的来源。

      设备 ID 唯一标识总线上的设备,并使操作系统能够为该设备找到正确的驱动程序。

      其他总线,包括 USB 和 FireWire 都有枚举策略

      【讨论】:

        【解决方案3】:

        设备 ID,是设备提供的信息的组合。例如,对于 USB 设备,字符串基于 VID 和 PID(供应商 ID 和产品 ID)。现在,如果没有加载驱动程序,这将不会发生。至少需要为操作系统加载一些驱动程序、总线驱动程序才能获取设备 ID。

        现在,对于语言支持,我想对于 WDM 驱动程序,有一个 QUERY_LANG 之类的东西,我记不太清了,或者像 USB 之类的一些设备有语言 ID 支持。此语言 ID 确定产品描述符字符串的语言。

        【讨论】:

          【解决方案4】:

          请注意,硬件标识符/序列号与真正的唯一硬件 ID 之间存在差异。也许这会更好地解释它: http://www.soft.tahionic.com/download-hdd_id/hardware%20ID%20programmer%27s%20DLL.html

          【讨论】:

          • 该链接中的有趣库。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-02-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多