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 関数を使用して再起動するために登録されているアプリケーションも再起動します。 これらのアプリケーションは、lParam がENDSESSION_CLOSEAPP値に設定されたWM_QUERYENDSESSION メッセージを受信します。 詳細については、「 アプリケーションのガイドライン」を参照してください。 |
|
電源をオフにしても安全な時点までシステムをシャットダウンします。 すべてのファイル バッファーがディスクにフラッシュされ、実行中のすべてのプロセスが停止しました。
呼び出し元プロセスには、SE_SHUTDOWN_NAME特権が必要です。 詳細については、「解説」を参照してください。 このフラグを指定しても、システムが電源オフ機能をサポートしている場合でも、電源はオフになりません。 これを行うには、EWX_POWEROFFを指定する必要があります。SP1 を使用した Windows XP: システムが電源オフ機能をサポートしている場合、このフラグを指定すると電源がオフになります。 |
このパラメーターには、必要に応じて次のいずれかの値を含めることができます。
値 | 説明 |
---|---|
|
ターミナル サービスが有効になっている場合、このフラグは有効になりません。 それ以外の場合、 システムはWM_QUERYENDSESSION メッセージを送信しません。 これにより、アプリケーションでデータが失われる可能性があります。 そのため、緊急時にのみこのフラグを使用する必要があります。 |
|
タイムアウト間隔内にメッセージが WM_QUERYENDSESSION または WM_ENDSESSION に応答しない場合は、強制的にプロセスを終了させます。 詳細については、「解説」を参照してください。 |
[in] dwReason
シャットダウンを開始する理由。 このパラメーターは、 システムシャットダウン理由コードの 1 つである必要があります。
このパラメーターが 0 の場合、SHTDN_REASON_FLAG_PLANNED理由コードは設定されないため、既定のアクションは未定義のシャットダウンであり、"この理由でタイトルが見つかりませんでした" としてログに記録されます。 既定として、計画外のシャットダウンもあります。 システムの構成方法に応じて、計画外のシャットダウンによって、システム状態情報を含むファイルの作成がトリガーされ、シャットダウンが遅れる可能性があります。 したがって、このパラメーターには 0 を使用しないでください。
戻り値
関数が成功すると、戻り値は 0 以外になります。 関数は非同期的に実行されるため、0 以外の戻り値はシャットダウンが開始されたことを示します。 シャットダウンが成功するかどうかは示されません。 システム、ユーザー、または別のアプリケーションがシャットダウンを中止する可能性があります。
関数が失敗した場合は、0 を返します。 詳細なエラー情報を得るには、GetLastError を呼び出します。
解説
ExitWindowsEx 関数は、シャットダウン プロセスを開始するとすぐにを返します。 その後、シャットダウンまたはログオフが非同期的に続行されます。 関数は、呼び出し元のログオン セッション内のすべてのプロセスを停止するように設計されています。 したがって、対話型ユーザーでない場合、関数は実際にコンピューターをシャットダウンしなくても成功します。 対話型ユーザーでない場合は、 InitiateSystemShutdown または InitiateSystemShutdownEx 関数を使用します。
0 以外の戻り値は、ログオフが成功したことを意味するものではありません。 シャットダウンは非同期プロセスであり、API 呼び出しが返された後、またはまったく発生しない場合があります。 タイムアウト値がゼロの場合でも、シャットダウンはアプリケーション、サービス、さらにはシステムによって中止される可能性があります。 0 以外の戻り値は、権限とパラメーターの検証が成功し、システムがシャットダウン要求を受け入れたことを示します。
この関数を呼び出す場合、呼び出し元は、変更が保存されていないアプリケーションを強制的に閉じるかどうかを指定する必要があります。 呼び出し元がこれらのアプリケーションを強制的に閉じないことを選択し、保存されていない変更を含むアプリケーションがコンソール セッションで実行されている場合、コンソール セッションにログインしたユーザーがシャットダウンを中止し、変更を保存し、アプリケーションを閉じるか、アプリケーションを強制的に閉じるまで、シャットダウンは進行中です。 この期間中は、コンソール ユーザーを除いてシャットダウンが中止されず、別のシャットダウンが開始されない可能性があります。
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 セット | ext-ms-win-ntuser-misc-l1-1-0 (Windows 8 で導入) |