DiUninstallDriverW 函数 (newdev.h)

DiUninstallDriver 函数通过另一个匹配的驱动程序包安装这些设备(如果可用)或 null 驱动程序(如果没有其他匹配的驱动程序包可用),从安装驱动程序包的任何设备中删除该驱动程序包。 然后,从驱动程序存储中删除指定的驱动程序包

语法

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

参数

[in, optional] hwndParent

顶级窗口的句柄, DiUninstallDriver 应使用该句柄来显示与卸载驱动程序关联的任何用户界面组件。 此参数是可选的,可以设置为 NULL

[in] InfPath

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

[in] Flags

类型为 DWORD 的值,该值指定零个或多个以下标志:DIURFLAG_NO_REMOVE_INF。 通常,此标志应设置为零。

如果此标志为零, DiUninstallDriver 会通过使用另一个匹配的驱动程序包安装这些设备(如果可用)从安装驱动程序包的任何设备中删除驱动程序包;如果没有其他匹配的驱动程序包可用,则删除 null 驱动程序。 但是,如果此标志设置为 DIURFLAG_NO_REMOVE_INF,DiUninstallDriver 会从安装驱动程序包的任何设备中删除驱动程序包,但不会从驱动程序存储中删除驱动程序包。

谨慎: 强制卸载驱动程序包可能会导致将更兼容或更新的驱动程序包替换为兼容性较差或较旧的驱动程序。
 
有关 Windows 如何为设备选择驱动程序包的信息,请参阅 Windows 如何选择驱动程序

[out, optional] NeedReboot

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

返回值

如果函数从安装驱动程序包的任何设备成功删除驱动程序包,并且已成功从系统的驱动程序存储中删除,DiUninstallDriver 将返回 TRUE。 如果未成功从驱动程序存储中卸载驱动程序包, DiUninstallDriver 将返回 FALSE ,并且可以通过调用 GetLastError 来检索记录的错误。 GetLastError 可能返回的一些更常见的错误值如下所示:

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

注解

通常,卸载应用程序应将 NeedReboot 设置为 NULL ,以指示 DiUninstallDriver 在需要重启才能完成删除时提示用户重启系统。 应用程序应仅在以下情况下提供 NeedReboot 指针:

  • 应用程序必须多次调用 DiUninstallDriver 才能完成卸载。 在这种情况下,应用程序应记录对 DiUninstallDriver 的任何调用是否返回 TRUENeedReboot 值,如果是,则提示用户在最终调用 DiUninstallDriver 返回后重启系统。
  • 应用程序必须执行所需的操作,而不是调用 DiUninstallDriver,然后才能重启系统。 如果需要重启系统,应用程序应完成所需的操作,然后提示用户重启系统。

要求

要求
最低受支持的客户端 Windows 10版本 1703 及更高版本的 Windows 中可用。
目标平台 桌面
标头 newdev.h (包括 Newdev.h)
Library Newdev.lib

另请参阅

DiUninstallDevice