我正在研究一种安装驱动程序的方法。由于这必须在多个平台上工作,因此我会在需要时让 devcon 和 dpinst 完成驱动程序安装/更新/删除的工作。在测试时,我遇到了对 devcon 的炮击问题。为了隔离,我编写了一个小应用程序来执行 devcon 在更新中所做的事情,请参阅此处,使用 WinDDK 中的 devcon 源代码作为参考。我在使用 Setup API(实际上是 Newdev.dll 的一部分)的 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。根据这个资源说这是ERROR_NO_MORE_ITEMS。根据 UpdateDriverForPlugAndPlayDevices() 的链接,此函数在以下情况下返回此错误代码:“函数找到了 HardwareId 值的匹配项,但指定的驱动程序不是比当前驱动程序更好的匹配,并且调用者没有指定INSTALLFLAG_FORCE 标志。” 你会从我的代码中注意到我确实指定了这个标志。
我不知道从这里去哪里。有人可以从这段代码中识别出我缺少什么吗?这只是一种简单的“感觉”,但我完全想念它。
谢谢你,安迪