InitiateSystemShutdownA 関数 (winreg.h)

指定したコンピューターのシャットダウンとオプションの再起動を開始します。

シャットダウンの理由をイベント ログに記録するには、 InitiateSystemShutdownEx 関数を呼び出します。

構文

BOOL InitiateSystemShutdownA(
  [in, optional] LPSTR lpMachineName,
  [in, optional] LPSTR lpMessage,
  [in]           DWORD dwTimeout,
  [in]           BOOL  bForceAppsClosed,
  [in]           BOOL  bRebootAfterShutdown
);

パラメーター

[in, optional] lpMachineName

シャットダウンするコンピューターのネットワーク名。 lpMachineNameNULL または空の文字列の場合、関数はローカル コンピューターをシャットダウンします。

[in, optional] lpMessage

シャットダウン ダイアログ ボックスに表示されるメッセージ。 メッセージが必要ない場合、このパラメーターは NULL にすることができます

Windows Server 2003 および Windows XP: この文字列は、イベント ログ エントリにもコメントとして格納されます。

Windows Server 2003 および Windows XP SP1: 文字列は 3072 TCHAR に制限されています。

[in] dwTimeout

シャットダウン ダイアログ ボックスを表示する時間 (秒単位)。 このダイアログ ボックスが表示されている間は、 AbortSystemShutdown 関数によってシャットダウンを停止できます。

dwTimeout が 0 でない場合、InitiateSystemShutdown は指定されたコンピューターにダイアログ ボックスを表示します。 ダイアログ ボックスには、関数を呼び出したユーザーの名前が表示され、 lpMessage パラメーターで指定されたメッセージが表示され、ユーザーにログオフを求められます。 ダイアログ ボックスは、作成時にビープ音を鳴らし、システム内の他のウィンドウの上に残ります。 ダイアログ ボックスは移動できますが、閉じません。 タイマーは、強制シャットダウンまでの残りの時間をカウントダウンします。

dwTimeout が 0 の場合、コンピューターはダイアログ ボックスを表示せずにシャットダウンし、AbortSystemShutdown でシャットダウンを停止することはできません。

Windows Server 2003 および Windows XP SP1: タイムアウト値は 、MAX_SHUTDOWN_TIMEOUT 秒に制限されます。

Windows Server 2003 および Windows XP SP1: シャットダウンするコンピューターがターミナル サービス サーバーの場合、システムは、シャットダウンが開始されたことを警告するすべてのローカルおよびリモート ユーザーにダイアログ ボックスを表示します。 このダイアログ ボックスには、シャットダウンを要求したユーザー、表示メッセージ ( lpMessage を参照)、およびサーバーがシャットダウンされるまでの時間が含まれます。

[in] bForceAppsClosed

このパラメーターが TRUE の場合、変更が保存されていないアプリケーションは強制的に閉じられます。 これにより、データが失われる可能性があることに注意してください。

このパラメーターが FALSE の場合、アプリケーションを閉じるようユーザーに指示するダイアログ ボックスが表示されます。

[in] bRebootAfterShutdown

このパラメーターが TRUE の場合、コンピューターはシャットダウン直後に再起動します。 このパラメーターが FALSE の場合、システムはすべてのキャッシュをディスクにフラッシュし、システムを安全に電源を切ります。

戻り値

関数が成功すると、戻り値は 0 以外になります。

関数が失敗した場合は、0 を返します。 詳細なエラー情報を得るには、GetLastError を呼び出します。

解説

ローカル コンピューターをシャットダウンするには、呼び出し元のスレッドに SE_SHUTDOWN_NAME 特権が必要です。 リモート コンピューターをシャットダウンするには、呼び出し元のスレッドにリモート コンピューターに 対するSE_REMOTE_SHUTDOWN_NAME 特権が必要です。 既定では、ユーザーはログオンしているコンピューターで SE_SHUTDOWN_NAME 特権を有効にでき、管理者はリモート コンピューターで SE_REMOTE_SHUTDOWN_NAME 特権を有効にすることができます。 詳細については、「特別な特権を使用して実行する」を参照してください。

エラーの一般的な理由としては、無効なコンピューター名やアクセスできないコンピューター名、特権の不足などがあります。 指定したコンピューターでシャットダウンが既に進行中の場合は、エラー ERROR_SHUTDOWN_IN_PROGRESS が返されます。 高速ユーザー切り替えが有効になっているが、ユーザーがログオンしていない場合は、エラー ERROR_NOT_READY を返すことができます。

0 以外の戻り値は、ログオフが成功したことを意味するものではありません。 シャットダウンは非同期プロセスであり、API 呼び出しが返された後、またはまったく発生しない場合があります。 タイムアウト値がゼロの場合でも、シャットダウンはアプリケーション、サービス、さらにはシステムによって中止される可能性があります。 0 以外の戻り値は、権限とパラメーターの検証が成功し、システムがシャットダウン要求を受け入れたことを示します。

この関数を呼び出す場合、呼び出し元は、変更が保存されていないアプリケーションを強制的に閉じるかどうかを指定する必要があります。 呼び出し元がこれらのアプリケーションを強制的に閉じないことを選択し、変更が保存されていないアプリケーションがコンソール セッションで実行されている場合、コンソール セッションにログインしたユーザーがシャットダウンを中止し、変更を保存し、アプリケーションを閉じるか、アプリケーションを強制的に閉じるまで、シャットダウンは進行中です。 この期間中は、コンソール ユーザーを除いてシャットダウンが中止されず、別のシャットダウンが開始されない可能性があります。

bForceAppsClosed パラメーターの値を TRUE に設定してこの関数を呼び出すと、この状況は回避されることに注意してください。 これを行うと、データが失われる可能性があります。

Windows Server 2003 および Windows XP: コンピューターがロックされていて、 bForceAppsClosed パラメーターが FALSE の場合、最後のエラー コードは ERROR_MACHINE_LOCKED。 システムが要求を処理する準備ができていない場合、最後のエラー コードは ERROR_NOT_READY。 アプリケーションはしばらく待ってから、呼び出しを再試行する必要があります。 たとえば、シャットダウン要求が同時にユーザーがシステムにログオンしようとすると、システムがシャットダウンを開始し、 ERROR_NOT_READYを返すためにシステムが読み取られていない可能性があります。 この場合、アプリケーションはしばらく待ってから、呼び出しを再試行する必要があります。

例については、「 シャットダウン ダイアログ ボックスの表示」を参照してください。

注意

winreg.h ヘッダーは、Unicode プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとして InitiateSystemShutdown を定義します。 エンコードに依存しないエイリアスをエンコードニュートラルでないコードと組み合わせて使用すると、コンパイルまたはランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「 関数プロトタイプの規則」を参照してください。

要件

   
サポートされている最小のクライアント Windows XP [デスクトップ アプリ | UWP アプリ]
サポートされている最小のサーバー Windows Server 2003 [デスクトップ アプリのみ | UWP アプリ]
対象プラットフォーム Windows
ヘッダー winreg.h (Windows.h を含む)
Library Advapi32.lib
[DLL] Advapi32.dll

関連項目

AbortSystemShutdown

InitiateSystemShutdownEx

シャットダウン

システム シャットダウン機能