将 SetupDiSetDeviceRegistryProperty 与 SPDRP_HARDWAREID 结合使用

Using SetupDiSetDeviceRegistryProperty with SPDRP_HARDWAREID

SetupDiSetDeviceRegistryProperty 函数的文档说,

The following values are reserved for use by the operating system and cannot be used in the Property parameter ... SPDRP_HARDWAREID

但是,有很多代码示例,包括 MS DevCon 实用程序,该实用程序将此函数与 SPDRP_HARDWAREID 参数一起使用,即:

SetupDiSetDeviceRegistryProperty(DeviceInfoSet, &DeviceInfoData, SPDRP_HARDWAREID, (LPBYTE)hwIdList, (lstrlen(hwIdList)+1+1)*sizeof(TCHAR)))

他们还有一个 article 建议这样做:

If an installer detects a non-PnP device, the installer should select a driver for the device as follows: create a device information element (SetupDiCreateDeviceInfo), set the SPDRP_HARDWAREID property by calling SetupDiSetDeviceRegistryProperty

我想(并且确实)使用此功能为我的虚拟设备设置硬件 ID。问题是 - 它是手册中的拼写错误,还是某种不受支持的行为,因此它可以随时停止工作?

TL;DR:如果您要创建 root-enumerated 设备 节点,您可以自由设置 SPDRP_HARDWAREID/SPDRP_COMPATIBLEIDS自己打电话 SetupDiSetDeviceRegistryProperty。否则不允许这样做。


这个文档中的一个错误,已在某个时候修复。

今天 SetupDiSetDeviceRegistryProperty 的文档阅读:

SPDRP_HARDWAREID or SPDRP_COMPATIBLEIDS can only be used when DeviceInfoData represents a root-enumerated device. For other devices, the bus driver reports hardware and compatible IDs when enumerating a child device after receiving IRP_MN_QUERY_ID. [Emphasis mine]

...这正是 DevCon 所做的。