更改FriendlyName注册表值后,如何强制Windows设备管理器刷新设备名称

时间:2016-08-29 07:46:23

标签: windows device-driver

Microsoft WDK的Toaster示例代码包含ClassInstaller示例(tostrcls.dll)。它显示了自定义“设备管理器”显示的“设备友好名称”的功能。通过修改设备的硬件密钥的FriendlyName值来实现此功能。修改FriendlyName后,关闭并重新打开“设备管理器”窗口(devmgmt.msc)将反映此类更改。到现在为止还挺好。

但是,为了告诉“设备管理器”窗口立即反映更改(不关闭并重新打开其窗口),必须运行一些额外的代码。 classInst.c采用以下方式:

spDevInstall.FlagsEx |= DI_FLAGSEX_PROPCHANGE_PENDING;

SetupDiSetDeviceInstallParams(Params->DeviceInfoSet,
                              Params->DeviceInfoData,
                              &spDevInstall);

有效,但最佳。 DI_FLAGSEX_PROPCHANGE_PENDING使设备经历STOP / START循环。我的意思是,驱动程序的ToasterEvtDeviceReleaseHardware和ToasterEvtDevicePrepareHardware被执行。我认为这是一种不良的副作用。

所以我的问题很明确。有没有办法刷新设备管理器的显示而不用打扰驱动程序代码?

Toaster FriendlyName

1 个答案:

答案 0 :(得分:0)

我从WDK7 PnpPorts项目(这是实现Windows COM端口的ClassInstaller"端口设置"选项卡)得到了答案。

只需更改

spDevInstall.FlagsEx |= DI_FLAGSEX_PROPCHANGE_PENDING;

spDevInstall.Flags |= DI_PROPERTIES_CHANGE;
一切都完成了。

注意:DI_FLAGSEX_PROPCHANGE_PENDING的设备重启行为记录在WDK7 chm页面" DIF_ADDPROPERTYPAGE_ADVANCED"但不是" SP_DEVINSTALL_PARAMS"。我只检查后者,所以错过了。