更改 FriendlyName 注册表值后如何强制 Windows 设备管理器刷新设备名称显示
Posted
技术标签:
【中文标题】更改 FriendlyName 注册表值后如何强制 Windows 设备管理器刷新设备名称显示【英文标题】:How to force Windows Device Manager refresh device name display after I change FriendlyName registry value 【发布时间】:2016-08-29 07:46:23 【问题描述】: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
使设备经历一个停止/启动周期。我的意思是,驱动程序的 ToasterEvtDeviceReleaseHardware 和 ToasterEvtDevicePrepareHardware 被执行。我认为这是一个不受欢迎的副作用。
所以我的问题很清楚。有没有办法不用驱动代码就可以刷新设备管理器的显示?
【问题讨论】:
【参考方案1】:我从 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”中。我只检查了后者,所以错过了。
【讨论】:
以上是关于更改 FriendlyName 注册表值后如何强制 Windows 设备管理器刷新设备名称显示的主要内容,如果未能解决你的问题,请参考以下文章