将 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 所做的。
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 所做的。