ExitWindowsEx 函数 (winuser.h)
注销交互式用户,关闭系统,或关闭并重启系统。 它将 WM_QUERYENDSESSION 消息发送到所有应用程序,以确定它们是否可以终止。
语法
BOOL ExitWindowsEx(
[in] UINT uFlags,
[in] DWORD dwReason
);
参数
[in] uFlags
关闭类型。 此参数必须包含以下值之一。
值 | 含义 |
---|---|
|
从 Windows 8 开始: 可以通过将 EWX_HYBRID_SHUTDOWN 标志与 EWX_SHUTDOWN 标志组合来准备系统以加快启动速度。 |
|
关闭调用 ExitWindowsEx 函数的进程登录会话中运行的所有进程。 然后,它会注销用户。
此标志只能由在交互式用户的登录会话中运行的进程使用。 |
|
关闭系统并关闭电源。 系统必须支持关机功能。
调用进程必须具有SE_SHUTDOWN_NAME特权。 有关更多信息,请参见下面的“备注”部分。 |
|
关闭系统,然后重启系统。
调用进程必须具有SE_SHUTDOWN_NAME特权。 有关更多信息,请参见下面的“备注”部分。 |
|
关闭系统,然后重启系统,以及已注册使用 RegisterApplicationRestart 函数重启的任何应用程序。 这些应用程序接收 WM_QUERYENDSESSION 消息, lParam 设置为 ENDSESSION_CLOSEAPP 值。 有关详细信息,请参阅 应用程序指南。 |
|
将系统关闭到可以安全关闭电源的点。 所有文件缓冲区都已刷新到磁盘,并且所有正在运行的进程都已停止。
调用进程必须具有SE_SHUTDOWN_NAME特权。 有关更多信息,请参见下面的“备注”部分。 指定此标志不会关闭电源,即使系统支持关机功能。 必须指定EWX_POWEROFF才能执行此操作。使用 SP1 的 Windows XP: 如果系统支持关机功能,则指定此标志会关闭电源。 |
此参数可以选择性地包含以下值之一。
值 | 含义 |
---|---|
|
如果启用了终端服务,则此标志不起作用。 否则,系统不会发送 WM_QUERYENDSESSION 消息。 这可能会导致应用程序丢失数据。 因此,应仅在紧急情况下使用此标志。 |
|
如果进程在超时间隔内不响应 WM_QUERYENDSESSION 或 WM_ENDSESSION 消息,则强制终止。 有关详细信息,请参阅“备注”部分。 |
[in] dwReason
启动关闭的原因。 此参数必须是 系统关闭原因代码之一。
如果此参数为零,则不会设置SHTDN_REASON_FLAG_PLANNED原因代码,因此默认操作是未定义的关闭,该关闭操作记录为“找不到此原因的标题”。 默认情况下,它也是计划外关闭。 根据系统配置方式,计划外关闭会触发创建包含系统状态信息的文件,这可能会延迟关闭。 因此,不要对此参数使用零。
返回值
如果该函数成功,则返回值为非零值。 由于函数以异步方式执行,因此非零返回值指示已启动关闭。 它并不指示关闭是否成功。 系统、用户或其他应用程序可能会中止关闭。
如果函数失败,则返回值为零。 要获得更多的错误信息,请调用 GetLastError。
注解
ExitWindowsEx 函数在启动关闭过程后立即返回。 然后,关闭或注销会异步进行。 函数旨在停止调用方登录会话中的所有进程。 因此,如果你不是交互式用户,函数可以在不实际关闭计算机的情况下成功。 如果你不是交互式用户,请使用 InitiateSystemShutdown 或 InitiateSystemShutdownEx 函数。
非零返回值并不意味着注销已成功或将成功。 关闭是一个异步过程,它可能在 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 () |