安装失败后,设备管理器中的“扫描硬件更改”等效项不起作用
Posted
技术标签:
【中文标题】安装失败后,设备管理器中的“扫描硬件更改”等效项不起作用【英文标题】:Equivalent of "Scan For Hardware Changes" in device manager doesn't work after failed installation 【发布时间】:2013-02-18 13:16:52 【问题描述】:根据docs,CfgMgr32.dll
的 C++ 函数 CM_Locate_DevNodeA
和 CM_Reenumerate_DevNode
应该是设备管理器中菜单项 scan for changed hardware 的程序等效项。
有关 C# 中的托管代码,请参阅 2nd answer to this question。
但与文档相反,当设备管理器操作有效时,编程方法并不总是有效。这是我的情况:
用户已插入 USB 设备
未找到驱动程序
我的安装程序将正确的 INF 文件添加到 Windows/inf 目录
CM_Reenumerate_DevNode
不会导致安装新驱动
设备管理器中的“扫描硬件更改”启动 使用新驱动安装
【问题讨论】:
您找到答案了吗?我也有类似的问题。 【参考方案1】:当使用SetupCopyOEMInf
(接受的答案to this question 中的C# 示例)而不是将inf 文件复制到C:\windows\inf 目录时,驱动程序在重新启动后得到识别。这种方法似乎相当于“右键单击inf文件-->安装”。
在我的情况下,出现“Windows 无法验证此驱动程序软件的发布者”窗口是因为制造商没有注册它。但这是一个不同的故事。但是,这可能是我的问题的另一个原因。
【讨论】:
【参考方案2】:我在尝试编写 C++ 代码来复制设备管理器的扫描硬件命令时遇到了类似的问题。
我尝试使用https://support.microsoft.com/en-us/kb/259697 的代码。
但是,它没有用。我注意到CM_Reenumerate_DevNode
返回了CR_ACCESS_DENIED
,即#define CR_ACCESS_DENIED (0x00000033) // NT ONLY
in Cfgmrg32.h
。
根据CM_Reenumerate_DevNode function,这个函数的调用者需要SeLoadDriverPrivilege
。
为了绕过在代码中设置此权限,我通过右键单击 .exe 并选择以管理员身份运行来以管理员身份运行 .exe。
【讨论】:
以上是关于安装失败后,设备管理器中的“扫描硬件更改”等效项不起作用的主要内容,如果未能解决你的问题,请参考以下文章
从 Windows 资源管理器中打开 VS Code 中的文件夹