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

时间:2013-02-18 13:16:52

标签: windows driver installation inf device-manager

根据docsCM_Locate_DevNodeA的{​​{1}}和CM_Reenumerate_DevNode的{​​{1}}应该是菜单项扫描更改硬件在设备管理器中。

有关C#中的托管代码,请参阅2nd answer to this question

但与文档相反,当设备管理器操作有效时,编程方法并不总是有效。这是我的情况:

  1. 用户已插入USB设备

  2. 找不到司机

  3. 我的安装程序将正确的INF-File添加到 Windows / inf目录

  4. CfgMgr32.dll不会导致安装新驱动程序

  5. 设备管理器中的“扫描硬件更改”启动 使用新驱动程序安装

2 个答案:

答案 0 :(得分:0)

使用SetupCopyOEMInf(接受回答to this question中的C#示例)而不是将inf文件复制到C:\ windows \ inf目录时,驱动程序在重新启动后得到识别。此方法似乎相当于“右键单击inf文件 - >安装”。

在我的情况下,窗口“Windows无法验证此驱动程序软件的发布者”出现了,因为制造商没有注册它。但这是一个不同的故事。但是,这可能是我的问题的另一个原因。

答案 1 :(得分:0)

尝试编写C ++代码以复制设备管理器的“扫描硬件”命令时,我遇到了类似的问题。

我尝试使用https://support.microsoft.com/en-us/kb/259697处的代码。

然而,它没有用。我注意到CM_Reenumerate_DevNode返回了CR_ACCESS_DENIED#define CR_ACCESS_DENIED (0x00000033) // NT ONLY中的Cfgmrg32.h

根据CM_Reenumerate_DevNode function,此功能的来电者需要SeLoadDriverPrivilege

要绕过在代码中设置此权限,我通过右键单击.exe并选择Run as administratror作为管理员运行.exe。