Windows设备管理器和硬件ID

Ken*_*nox 0 hardware localization device-driver device-manager

我很好奇Windows设备管理器如何获取设备的硬件ID,即使设备尚未加载设备驱动程序.有人知道Windows如何继续这样做吗?

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

谢谢你的时间.

Ily*_*lya 5

首先,要了解加载驱动程序的顺序,建议您将设备管理器切换为View | 设备按连接模式.

正如您将注意到的,这些设备位于其总线驱动器下方.对于PCI设备,它将是"PCI总线".对于USB设备,它将是他们的USB集线器.每个总线驱动程序都有自己的想法如何格式化标识符字符串:

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

它返回他们响应IRP_MN_QUERY_ID(BusQueryInstanceID,BusQueryHardwareIDs,BusQueryCompatibleIDs)和IRP_MN_QUERY_DEVICE_TEXT(DeviceTextDescription,DeviceTextLocationInformation等等)

当然,由于总线驱动程序首先枚举了设备(即创建了您正在看到的子设备)(通过适用于总线的任何标准接口;例如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设备本身具有本地化字符串.