安装失败后,设备管理器中的“扫描硬件更改”等效项不起作用

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_DevNodeACM_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。

【讨论】:

以上是关于安装失败后,设备管理器中的“扫描硬件更改”等效项不起作用的主要内容,如果未能解决你的问题,请参考以下文章

即使安装后也无法运行任何纱线 cmd

Win10电脑上不了网提示初始化网卡信息失败怎么解决

谷歌浏览器安装失败出现“未知错误导致安装失败”

从 Windows 资源管理器中打开 VS Code 中的文件夹

放心 IntelliJ IDEA 中的 3.0.3 maven 依赖项不起作用

Docker 撰写 ECS 错误:资源处理程序返回消息:“模型验证失败(#/Volumes:数组项不唯一)”