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 true。 如果函数在系统中的一个或多个设备上成功安装驱动程序,则 DiInstallDriver 也会返回 true TRUE。 如果在驱动程序存储中未成功安装驱动程序包,DiInstallDriver 返回 FALSE,可以通过调用 getLastError来检索记录的错误。 GetLastError 可能返回的一些更常见的错误值如下所示:
返回代码 | 描述 |
---|---|
|
调用方没有管理员权限。 默认情况下,Windows 要求调用方具有管理员权限,才能在 驱动程序存储中预安装 驱动程序包。 |
|
指定的 INF 文件的路径不存在。 |
|
为 标志指定的值 不等于零或DIIRFLAG_FORCE_INF。 |
|
调用应用程序是一个 32 位应用程序,它尝试在 64 位环境中执行,这是不允许的。 有关详细信息,请参阅 在 64 位系统上安装设备。 |
言论
DiInstallDriver 执行以下操作:
- 在 驱动程序存储中预安装 驱动程序包。 如果驱动程序存储中已预安装同一驱动程序包的实例,DiInstallDriver 首先删除该实例,然后将驱动程序包的新实例添加到驱动程序存储中。
- 枚举系统中存在的设备。
- 如果 标志 等于零,则仅在指定的驱动程序与设备上当前安装的驱动程序更匹配时,才会在设备上安装驱动程序。
- 如果 标志 等于DIIRFLAG_FORCE_INF,则无论 驱动程序包 是否与设备上当前安装的驱动程序匹配,都会在设备上安装驱动程序。
- 应用程序必须多次调用 DiInstallDriver 才能完成安装。 在这种情况下,应用程序应记录 TRUENeedReboot 值是否由 DiInstallDriver 的任何调用返回;如果是,则提示用户在 DiInstallDriver 返回后重启系统。
- 在系统重启之前,应用程序必须执行所需的操作,而不是调用 DiInstallDriver。 如果需要系统重启,应用程序应完成所需的操作,然后提示用户重启系统。
- 应用程序是类安装程序,在这种情况下,类安装程序应在设备的 标志 SP_DEVINSTALL_PARAMS结构的成员中设置DI_NEEDREBOOT标志。
注意
newdev.h 标头将 DiInstallDriver 定义为一个别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将中性编码别名与不中性编码的代码混合使用可能会导致编译或运行时错误不匹配。 有关详细信息,请参阅函数原型的
要求
要求 | 价值 |
---|---|
最低支持的客户端 | 在 Windows Vista 和更高版本的 Windows 中可用。 |
目标平台 | 桌面 |
标头 | newdev.h (包括 Newdev.h) |
库 | Newdev.lib |