【问题标题】:Installing a driver programmatically on Windows, driver doesn't become active在 Windows 上以编程方式安装驱动程序,驱动程序不会变为活动状态
【发布时间】:2014-11-17 10:47:06
【问题描述】:

我有一个程序可以为特定设备安装 USB 驱动程序,然后更新设备固件。我使用 SetupCopyOEMInf() 来安装驱动程序,但是,除非我重新启动系统,否则此功能似乎不会使驱动程序处于活动状态。

即安装正常,SetupCopyOEMInf() 返回正常,但设备在设备管理器中仍保持“未知”状态,除非我重新启动 Windows。但是,当我手动安装驱动程序时,系统会识别一切正常,并且设备很快就会绑定到驱动程序。

除了 SetupCopyOEMInf() 之外,我还应该做些什么来将驱动程序绑定到设备上吗?

谢谢。

【问题讨论】:

  • 我不确定,但我相信这是预期的行为:该函数安装驱动程序但不扫描它适用的设备,通常用于为设备安装驱动程序尚不存在。也许改用DiInstallDriver? “DiInstallDriver 功能在驱动程序存储中预安装驱动程序,然后在驱动程序支持的系统中存在的设备上安装驱动程序。”
  • @HarryJohnston 感谢您为我指明了正确的方向。 DiInstallDriver 似乎相当于 SetupCopyOEMInf + UpdateDriverForPlugAndPlayDevices 并且仅限于 32 位系统,但工作正常。
  • 根据文档,至少,这些功能都不限于32位系统;但是,在 64 位系统上,其中一些只能由 64 位应用程序调用。
  • @HarryJohnston 不幸的是,它们受到限制(SetupCopyOEMInf 除外),请参阅有关 DiInstallDriver 的 ERROR_IN_WOW64 的注释
  • ERROR_IN_WOW64 表示您正在尝试从 64 位系统上的 32 位应用程序调用该函数。如果您使用 64 位应用程序,问题就会消失。

标签: windows installation usb device-driver


【解决方案1】:

尝试使用 devcon 安装驱动程序,源代码在 WDK 中可用,使用 devcon dp_add mydriver.inf。如果这可行,您可以逐步检查 devcon 中的源代码以了解如何正确动态安装驱动程序,devcon 还使用 SetupCopyOEMInf,因此如果可行,您可以将其与您的代码进行比较以找出不同之处,这里是一个 sn -p 以防它现在对您有所帮助:

TCHAR SourceInfFileName[MAX_PATH]; // Full path name
TCHAR DestinationInfFileName[MAX_PATH];
PTSTR DestinationInfFileNameComponent = NULL;

if (!SetupCopyOEMInf(SourceInfFileName,
                NULL,
                SPOST_PATH,
                0,
                DestinationInfFileName,
                ARRAYSIZE(DestinationInfFileName),
                NULL,
                &DestinationInfFileNameComponent)) {
    // Handle Error
}

【讨论】:

    【解决方案2】:

    我认为设备管理器会在驱动程序更新后重新启动设备。

    【讨论】:

    • 显然不是。我什至尝试再次拔下并重新插入设备,它不起作用,只有系统重启有帮助。但就像我说的,当我手动安装相同的驱动程序(设备管理器 -> 更新驱动程序)时,它会立即生效。这意味着系统代码在 SetupCopyOEMInf() 之后执行其他操作?
    • 如果通过设备管理器卸载设备(但不删除驱动软件)再安装,有帮助吗?
    • @Preston 不,它没有帮助,基本上它做同样的事情。
    猜你喜欢
    • 1970-01-01
    • 2011-01-18
    • 2014-04-06
    • 2011-09-11
    • 1970-01-01
    • 2012-05-05
    • 2013-11-15
    • 2017-07-18
    • 2016-12-04
    相关资源
    最近更新 更多