UpdateDriverForPlugAndPlayDevices错误告诉我,我不是*做我做的事情

时间:2012-07-13 16:14:48

标签: windows setupapi

我正在研究安装驱动程序的方法。由于必须使用多个平台,因此我需要对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;简单的事情,但我完全错过了它。

谢谢你, 安迪

1 个答案:

答案 0 :(得分:2)

问题似乎不是代码,而是INF文件。有趣的是,该功能的文档说使用该标志将强制安装,但没有在INF文件没有列出&#34;&#34;模型部分中的任何设备类。这就是我最终能够安装的方式。我将正确的设备类添加到INF中的模型部分。