DiUninstallDriverW 函数 (newdev.h)

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

语法

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 使用其他匹配驱动程序包安装这些设备(如果可用),或者如果没有其他匹配驱动程序包可用,则从安装驱动程序包的任何设备中删除驱动程序包。 但是,如果此标志设置为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
标志 指定的值不等于零或DIURFLAG_NO_REMOVE_INF。
ERROR_IN_WOW64
调用应用程序是一个 32 位应用程序,它尝试在 64 位环境中执行,这是不允许的。 有关详细信息,请参阅 在 64 位系统上安装设备

言论

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

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

要求

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

另请参阅

DiUninstallDevice