根据docs,CM_Locate_DevNodeA
的{{1}}和CM_Reenumerate_DevNode
的{{1}}应该是菜单项扫描更改硬件在设备管理器中。
有关C#中的托管代码,请参阅2nd answer to this question。
但与文档相反,当设备管理器操作有效时,编程方法并不总是有效。这是我的情况:
用户已插入USB设备
找不到司机
我的安装程序将正确的INF-File添加到 Windows / inf目录
CfgMgr32.dll
不会导致安装新驱动程序
设备管理器中的“扫描硬件更改”启动 使用新驱动程序安装
答案 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。