使用SetupDiSetDeviceRegistryProperty和SPDRP_HARDWAREID

SetupDiSetDeviceRegistryProperty函数的文档说,

以下值保留供操作系统使用, 不能在Property参数中使用… SPDRP_HARDWAREID

但是,有很多代码的例子,包括MS DevCon实用程序,它使用SPDRP_HARDWAREID参数的这个函数,即:

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

他们也有一个文章 ,build议这样做:

如果安装程序检测到非PnP设备,则安装程序应按如下所示为设备select驱动程序:创build设备信息元素(SetupDiCreateDeviceInfo),通过调用SetupDiSetDeviceRegistryProperty来设置SPDRP_HARDWAREID属性

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

TL; DR:如果您正在创建根设备节点,则可以通过调用SetupDiSetDeviceRegistryProperty自由设置SPDRP_HARDWAREID / SPDRP_COMPATIBLEIDS 。 否则,你不能这样做。


在一些固定的文档中的错误。

今天SetupDiSetDeviceRegistryProperty文档读取:

SPDRP_HARDWAREID或SPDRP_COMPATIBLEIDS 只能在DeviceInfoData代表根枚举设备时使用 。 对于其他设备,总线驱动程序在收到IRP_MN_QUERY_ID后枚举子设备时会报告硬件和兼容的ID。 [强调我的]

这正是DevCon所做的。