我正在研究安装驱动程序的方法。由于必须使用多个平台,因此我需要对devcon和dpinst进行shelling-out以在需要时执行驱动程序安装/更新/删除工作。在测试时,我遇到了对devcon进行炮轰的问题。为了隔离,我写了一个小应用程序来执行devcon在更新see here中所做的事情,使用WinDDK中的devcon源作为参考。我在Setup API(实际上是Newdev.dll的一部分)see here中遇到了一些UpdateDriverForPlugAndPlayDevices()问题。源代码在这里:
#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()的链接,此函数返回此错误代码时,&#34;该函数找到了与HardwareId值匹配的值,但指定的驱动程序不是比当前驱动程序更好的匹配,并且调用者 不 指定INSTALLFLAG_FORCE标志。&#34;您从我的代码中注意到我 指定了此标记。
我不知道从哪里开始。有人可以从这段代码中找出我错过了什么吗?这只是感觉&#34;感觉&#34;简单的事情,但我完全错过了它。
谢谢你, 安迪
答案 0 :(得分:2)
问题似乎不是代码,而是INF文件。有趣的是,该功能的文档说使用该标志将强制安装,但没有在INF文件没有列出&#34;&#34;模型部分中的任何设备类。这就是我最终能够安装的方式。我将正确的设备类添加到INF中的模型部分。