DiInstallDriverW 函数 (newdev.h)

DiInstallDriver 函数预安装 驱动程序存储中的驱动程序,然后在驱动程序支持的系统中存在的设备上安装驱动程序。

语法

BOOL DiInstallDriverW(
  [in, optional]  HWND    hwndParent,
  [in]            LPCWSTR InfPath,
  [in]            DWORD   Flags,
  [out, optional] PBOOL   NeedReboot
);

参数

[in, optional] hwndParent

DiInstallDriver 的顶级窗口句柄用于显示与安装设备关联的任何用户界面组件。 此参数是可选的,可以设置为 NULL

[in] InfPath

指向 NULL 终止的字符串的指针,该字符串为 驱动程序包提供 INF 文件的完全限定路径。

[in] Flags

一个类型为 DWORD 的值,该值指定一个或多个标志(标志 通常设置为零)或一个或多个标志的组合。

如果 标志 为零,DiInstallDriver 仅当驱动程序与设备上当前安装的驱动程序匹配时,才会在设备上安装指定的驱动程序。 有关 Windows 如何为设备选择驱动程序的信息,请参阅 Windows 如何选择驱动程序

如果 标志 包括DIIRFLAG_FORCE_INF,DiInstallDriver 在匹配的设备上安装指定的驱动程序,无论驱动程序是否比设备上当前安装的驱动程序更好。 如果还指定了DIIRFLAG_INSTALL_AS_SET,则忽略DIIRFLAG_FORCE_INF。

警告 强制安装驱动程序可能会导致将更兼容的或较新的驱动程序替换为不太兼容的或较旧的驱动程序。
 

如果 标志 包括DIIRFLAG_INSTALL_AS_SET(在 Windows 10 版本 1709 及更高版本上受支持),InfPath 应指定目录而不是 INF 文件的完全限定路径,DiInstallDriver 将安装该目录中具有特殊行为的所有 INF 文件。 的所有 驱动程序包都将暂存到 驱动程序存储,但尚未在设备上安装。 在下一次关闭系统时,这些驱动程序包将可供今后安装在设备上,它们将安装在最适合的任何设备上,以便设备在下一次启动系统时准备就绪。

[out, optional] NeedReboot

指向 DiInstallDriver 类型的 BOOL 类型的值的指针,用于指示是否需要系统重启才能完成安装。 此参数是可选的,可以 NULL。 如果提供参数并且需要系统重启才能完成安装,DiInstallDriver 将值设置为 true。 在这种情况下,调用方必须提示用户重启系统。 如果提供了此参数,并且不需要系统重启才能完成安装,DiInstallDriver 将值设置为 FALSE。 如果参数 NULL 并且需要系统重启才能完成安装,DiInstallDriver 将显示系统重启对话框。 有关此参数的详细信息,请参阅以下 备注 部分。

返回值

DiInstallDriver 如果函数成功在 驱动程序存储中预安装指定的 驱动程序包,则返回 true true。 如果函数在系统中的一个或多个设备上成功安装驱动程序,则 DiInstallDriver 也会返回 true TRUE。 如果在驱动程序存储中未成功安装驱动程序包,DiInstallDriver 返回 FALSE,可以通过调用 getLastError来检索记录的错误。 GetLastError 可能返回的一些更常见的错误值如下所示:

返回代码 描述
ERROR_ACCESS_DENIED
调用方没有管理员权限。 默认情况下,Windows 要求调用方具有管理员权限,才能在 驱动程序存储中预安装 驱动程序包
ERROR_FILE_NOT_FOUND
指定的 INF 文件的路径不存在。
ERROR_INVALID_FLAGS
标志指定的值 不等于零或DIIRFLAG_FORCE_INF。
ERROR_IN_WOW64
调用应用程序是一个 32 位应用程序,它尝试在 64 位环境中执行,这是不允许的。 有关详细信息,请参阅 在 64 位系统上安装设备

言论

DiInstallDriver 执行以下操作:

  1. 驱动程序存储中预安装 驱动程序包。 如果驱动程序存储中已预安装同一驱动程序包的实例,DiInstallDriver 首先删除该实例,然后将驱动程序包的新实例添加到驱动程序存储中。
  2. 枚举系统中存在的设备。
  3. 如果 标志 等于零,则仅在指定的驱动程序与设备上当前安装的驱动程序更匹配时,才会在设备上安装驱动程序。
  4. 如果 标志 等于DIIRFLAG_FORCE_INF,则无论 驱动程序包 是否与设备上当前安装的驱动程序匹配,都会在设备上安装驱动程序。
通常,安装应用程序应将 NeedReboot 设置为 NULL,以指示 diInstallDriver,以便在需要重启才能完成安装时提示用户重启系统。 应用程序应仅在以下情况下提供 NeedReboot 指针:
  • 应用程序必须多次调用 DiInstallDriver 才能完成安装。 在这种情况下,应用程序应记录 TRUENeedReboot 值是否由 DiInstallDriver 的任何调用返回;如果是,则提示用户在 DiInstallDriver 返回后重启系统。
  • 在系统重启之前,应用程序必须执行所需的操作,而不是调用 DiInstallDriver。 如果需要系统重启,应用程序应完成所需的操作,然后提示用户重启系统。
  • 应用程序是类安装程序,在这种情况下,类安装程序应在设备的 标志 SP_DEVINSTALL_PARAMS结构的成员中设置DI_NEEDREBOOT标志。
若要在所选设备上安装所选驱动程序,请调用 DiInstallDevice。 有关详细信息,请参阅 简化驱动程序安装的 SetupAPI 函数。

注意

newdev.h 标头将 DiInstallDriver 定义为一个别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将中性编码别名与不中性编码的代码混合使用可能会导致编译或运行时错误不匹配。 有关详细信息,请参阅函数原型的 约定。

要求

要求 价值
最低支持的客户端 在 Windows Vista 和更高版本的 Windows 中可用。
目标平台 桌面
标头 newdev.h (包括 Newdev.h)
Newdev.lib

另请参阅

DiInstallDevice