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被执行。我认为这是一种不良的副作用。
所以我的问题很明确。有没有办法刷新设备管理器的显示而不用打扰驱动程序代码?
答案 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"。我只检查后者,所以错过了。