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)
程式庫 User32.lib
Dll User32.dll
API 集合 ext-ms-win-ntuser-misc-l1-1-0 (在 Windows 8)

另請參閱

AdjustTokenPrivileges

HandlerRoutine

登出

SetProcessShutdownParameters

關閉

系統關機函式