0

根据文档,C++ 函数CM_Locate_DevNodeACM_Reenumerate_DevNodeofCfgMgr32.dll应该是在设备管理器中扫描更改硬件的菜单项的程序等效项。

有关C# 中的托管代码,请参阅此问题的第二个答案。

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

  1. 用户已插入 USB 设备

  2. 未找到驱动程序

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

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

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

4

2 回答 2

0

驱动程序在重新启动后被识别,当使用SetupCopyOEMInf(C# example in accepted answer to this question)而不是将 inf 文件复制到 C:\windows\inf 目录时。这种方法似乎相当于“右键单击 inf 文件 --> 安装”。

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

于 2013-02-18T16:20:27.440 回答
0

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

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

但是,它没有用。我注意到CM_Reenumerate_DevNode返回了CR_ACCESS_DENIED,它#define CR_ACCESS_DENIED (0x00000033) // NT ONLYCfgmrg32.h.

根据CM_Reenumerate_DevNode 函数,该函数的调用者需要SeLoadDriverPrivilege

为了绕过在代码中设置此权限,我以管理员身份运行 .exe,方法是右键单击 .exe 并选择以管理员身份运行。

于 2015-09-22T18:53:30.670 回答