ExitWindowsEx 函数 (winuser.h)

注销交互式用户,关闭系统,或关闭并重启系统。 它将 WM_QUERYENDSESSION 消息发送到所有应用程序,以确定它们是否可以终止。

语法

BOOL ExitWindowsEx(
  [in] UINT  uFlags,
  [in] DWORD dwReason
);

参数

[in] uFlags

关闭类型。 此参数必须包含以下值之一。

含义
EWX_HYBRID_SHUTDOWN
0x00400000
从 Windows 8 开始: 可以通过将 EWX_HYBRID_SHUTDOWN 标志与 EWX_SHUTDOWN 标志组合来准备系统以加快启动速度。
EWX_LOGOFF
0
关闭调用 ExitWindowsEx 函数的进程登录会话中运行的所有进程。 然后,它会注销用户。

此标志只能由在交互式用户的登录会话中运行的进程使用。

EWX_POWEROFF
0x00000008
关闭系统并关闭电源。 系统必须支持关机功能。

调用进程必须具有SE_SHUTDOWN_NAME特权。 有关更多信息,请参见下面的“备注”部分。

EWX_REBOOT
0x00000002
关闭系统,然后重启系统。

调用进程必须具有SE_SHUTDOWN_NAME特权。 有关更多信息,请参见下面的“备注”部分。

EWX_RESTARTAPPS
0x00000040
关闭系统,然后重启系统,以及已注册使用 RegisterApplicationRestart 函数重启的任何应用程序。 这些应用程序接收 WM_QUERYENDSESSION 消息, lParam 设置为 ENDSESSION_CLOSEAPP 值。 有关详细信息,请参阅 应用程序指南
EWX_SHUTDOWN
0x00000001
将系统关闭到可以安全关闭电源的点。 所有文件缓冲区都已刷新到磁盘,并且所有正在运行的进程都已停止。

调用进程必须具有SE_SHUTDOWN_NAME特权。 有关更多信息,请参见下面的“备注”部分。

指定此标志不会关闭电源,即使系统支持关机功能。 必须指定EWX_POWEROFF才能执行此操作。使用 SP1 的 Windows XP: 如果系统支持关机功能,则指定此标志会关闭电源。

 

此参数可以选择性地包含以下值之一。

含义
EWX_FORCE
0x00000004
如果启用了终端服务,则此标志不起作用。 否则,系统不会发送 WM_QUERYENDSESSION 消息。 这可能会导致应用程序丢失数据。 因此,应仅在紧急情况下使用此标志。
EWX_FORCEIFHUNG
0x00000010
如果进程在超时间隔内不响应 WM_QUERYENDSESSIONWM_ENDSESSION 消息,则强制终止。 有关详细信息,请参阅“备注”部分。

[in] dwReason

启动关闭的原因。 此参数必须是 系统关闭原因代码之一。

如果此参数为零,则不会设置SHTDN_REASON_FLAG_PLANNED原因代码,因此默认操作是未定义的关闭,该关闭操作记录为“找不到此原因的标题”。 默认情况下,它也是计划外关闭。 根据系统配置方式,计划外关闭会触发创建包含系统状态信息的文件,这可能会延迟关闭。 因此,不要对此参数使用零。

返回值

如果该函数成功,则返回值为非零值。 由于函数以异步方式执行,因此非零返回值指示已启动关闭。 它并不指示关闭是否成功。 系统、用户或其他应用程序可能会中止关闭。

如果函数失败,则返回值为零。 要获得更多的错误信息,请调用 GetLastError。

注解

ExitWindowsEx 函数在启动关闭过程后立即返回。 然后,关闭或注销会异步进行。 函数旨在停止调用方登录会话中的所有进程。 因此,如果你不是交互式用户,函数可以在不实际关闭计算机的情况下成功。 如果你不是交互式用户,请使用 InitiateSystemShutdownInitiateSystemShutdownEx 函数。

非零返回值并不意味着注销已成功或将成功。 关闭是一个异步过程,它可能在 API 调用返回后很久发生,也可能根本不发生。 即使超时值为零,应用程序、服务甚至系统仍可能中止关闭。 非零返回值表示权限和参数验证成功,并且系统已接受关闭请求。

调用此函数时,调用方必须指定是否应强行关闭具有未保存更改的应用程序。 如果调用方选择不强制关闭这些应用程序,并且具有未保存更改的应用程序在控制台会话上运行,则关闭将一直进行,直到登录到控制台会话的用户中止关闭、保存更改、关闭应用程序或强制关闭应用程序。 在此期间,除控制台用户外,关闭可能不会中止,并且可能不会启动另一次关闭。

uFlags 参数的值设置为 EWX_FORCE 调用此函数可避免这种情况。 请记住,执行此操作可能会导致数据丢失。

若要为应用程序设置相对于系统中其他应用程序的关闭优先级,请使用 SetProcessShutdownParameters 函数。

在关闭或注销操作期间,运行的应用程序可以有特定的时间来响应关闭请求。 如果此时间在所有应用程序停止之前过期,系统会显示一个用户界面,允许用户强行关闭系统或取消关闭请求。 如果指定了EWX_FORCE值,系统会在时间过期时强制停止运行的应用程序。

如果指定了EWX_FORCEIFHUNG值,系统会强制关闭挂起的应用程序,并且不显示对话框。

根据情况需要,控制台进程会收到单独的通知消息(CTRL_SHUTDOWN_EVENT或CTRL_LOGOFF_EVENT)。 控制台进程将这些消息路由到其 HandlerRoutine 函数。 ExitWindowsEx 以异步方式发送这些通知消息;因此,当对 ExitWindowsEx 的调用返回时,应用程序无法假定已处理控制台通知消息。

若要关闭或重启系统,调用进程必须使用 AdjustTokenPrivileges 函数启用SE_SHUTDOWN_NAME特权。 有关详细信息,请参阅使用特殊特权运行

示例

有关示例,请参阅 如何关闭系统

要求

   
最低受支持的客户端 Windows XP [桌面应用 | UWP 应用]
最低受支持的服务器 Windows Server 2003 [桌面应用 | UWP 应用]
目标平台 Windows
标头 winuser.h (包括 Windows.h)
Library User32.lib
DLL User32.dll
API 集 在 Windows 8 中引入的 ext-ms-win-ntuser-misc-l1-1-0 ()

另请参阅

AdjustTokenPrivileges

HandlerRoutine

注销

SetProcessShutdownParameters

关闭

系统关闭函数