我正在研究一种安装驱动程序的方法。由于这必须在多个平台上工作,所以我正在向 devcon 和 dpinst 支付费用,以便在需要时完成驱动程序安装/更新/删除的工作。在测试时,我在向 devcon 进行炮击时遇到了问题。为了隔离,我编写了一个小应用程序来执行 devcon 在更新 see here 中执行的操作,使用 WinDDK 中的 devcon 源作为引用。我在使用 Setup API(实际上是 Newdev.dll 的一部分)的 UpdateDriverForPlugAndPlayDevices() 时遇到一些问题 see here .源代码在这里:
#include <iostream>
#include <Windows.h>
#include <newdev.h>
int main(int argc, char** argv) {
// Go through the same steps as does dev con for this update crap
char infFile[MAX_PATH];
if(3 > argc) {
std::cerr << "an INF and HW ID must be specified" << std::endl;
return 1;
}
DWORD result(GetFullPathName(argv[1], MAX_PATH, infFile, NULL));
if((result >= MAX_PATH) || (0 == result)) {
std::cerr << "path is too long for buffer" << std::endl;
return 1;
}
if(GetFileAttributes(infFile) == -1) {
std::cerr << "file doesn't exist" << std::endl;
return 1;
}
BOOL reboot(FALSE);
if(!UpdateDriverForPlugAndPlayDevices(NULL, argv[2], infFile, INSTALLFLAG_FORCE, &reboot)) {
std::cerr << "Failed to install the driver. Code: "
<< GetLastError()
<< std::endl;
return 2;
}
if(reboot) {
std::cout << "A reboot is needed to complete driver install"
<< std::endl;
}
return 0;
}
当 UpdateDriverForPlugAndPlayDevices() 返回 false 时程序失败。然后打印由 GetLastError() 返回的错误代码,这样我就知道出了什么问题。返回的错误代码:259。根据this资源说这是 ERROR_NO_MORE_ITEMS。根据 UpdateDriverForPlugAndPlayDevices() 的链接,此函数在以下情况下返回此错误代码:“函数找到了 HardwareId 值的匹配项,但指定的驱动程序并不比当前驱动程序更匹配,调用者做了 不指定 INSTALLFLAG_FORCE 标志。”您会从我的代码中注意到我确实指定了这个标志。
我不知道从这里去哪里。有人可以从这段代码中识别出我缺少的是什么吗?这只是简单的“感觉”,但我完全想念它。
谢谢, 安迪
最佳答案
问题似乎与代码无关,而与 INF 文件有关。有趣的是,该函数的文档说使用该标志将强制安装,但当 INF 文件没有“列出”模型部分中的任何设备类时却没有。这就是我最终能够安装的方式。我将正确的设备类添加到 INF 中的模型部分。
编辑 2020 年 9 月 17 日 就在今天(编辑)有人要求添加 INF 中的示例。我遇到这个问题已经 8 年了,我不再为这个团队工作。然而,尽我所能记忆起,并大量借鉴了 INF Models Section 的文档。和 INF Manufacturers Section ,我希望这会有所帮助。
本质上,类由模型部分指定,而模型由制造商部分指定。
[Manufacturer]
%MfgName%=Standard,NTamd64
[Standard.NTamd64]
%DeviceString%=<class path or GUID>\<device>
[Strings]
MfgName=ACME
DeviceString="Device Type"
关于windows - UpdateDriverForPlugAndPlayDevices 错误告诉我我*没有*做我正在做的事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11474317/