Windows でハード エラー ポップアップ処理を変更する方法

無人環境では、ユーザーの介入を必要とするハード エラー ポップアップを自動的にディスパッチできます。 この記事では、ハード エラー ポップアップ モードを変更するために必要なコードについて説明します。

元の製品バージョン: Windows
元の KB 番号: 128642

概要

Windows を使用すると、アプリケーションとシステム エラーの原因となるハード エラー ポップアップの処理をユーザーが変更できます。 このようなエラーには、ドライブにディスクがなく、一般的な保護 (GP) エラーが含まれます。

これらのイベントにより、ハード エラー ポップアップが表示されるため、ディスパッチにはユーザーの介入が必要です。 このようなエラーが Windows イベント ログに記録されるように、この動作を変更できます。 エラーがイベント ログに記録されると、ユーザーの介入は必要なく、ハード エラーの既定のハンドラーがシステムによって提供されます。 ユーザーは、イベント ログを調べて、ハード エラーの原因を特定できます。

レジストリ エントリ

次のレジストリ エントリは、Windows でのハード エラー ポップアップ処理を制御します。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Windows\ErrorMode

有効なモード

の有効な値を次に ErrorMode示します。

  • モード 0

    これは、エラーをシリアル化し、応答を待機する既定の動作モードです。

  • モード 1

    エラーがシステムから発生しない場合、これは通常の動作モードです。 エラーがシステムから発生した場合、エラーがイベント ログに記録され、ハード エラーに OK が 返されます。 介入は必要なく、ポップアップは表示されません。

  • モード 2

    これにより、常にエラーがイベント ログに記録され、 OK が ハード エラーに返されます。 ポップアップは表示されません。

すべてのモードでは、システムによって発生したハード エラーがシステム ログに記録されます。 無人サーバーを実行するには、モード 2 を使用します。

ハード エラー ポップアップ モードを変更するサンプル コード

次の関数は、ハード エラー ポップアップ モードを変更します。 関数が成功した場合、戻り値は TRUE です。 関数が失敗した場合、戻り値は FALSE です

BOOL SetGlobalErrorMode(
    DWORD dwErrorMode   // specifies new ErrorMode value
    )
{
    HKEY hKey;
    LONG lRetCode;

    // make sure the value passed isn't out-of-bounds
    if (dwErrorMode > 2)
        return FALSE;

    if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,
                    "SYSTEM\\CurrentControlSet\\Control\\Windows",
                    0,
                    KEY_SET_VALUE,
                    &hKey) != ERROR_SUCCESS)
        return FALSE;

    lRetCode=RegSetValueEx(hKey,
                            "ErrorMode",
                            0,
                            REG_DWORD,
                            (CONST BYTE *) &dwErrorMode,
                            sizeof(DWORD));

    RegCloseKey(hKey);
    if (lRetCode != ERROR_SUCCESS)
        return FALSE;

    return TRUE;
}

ハード エラー ポップアップ モードを取得するためのサンプル コード

次の関数は、ハード エラー ポップアップ モードを取得します。 関数が成功した場合、戻り値は TRUE です。 関数が失敗した場合、戻り値は FALSE です。 関数が成功した場合は、 dwErrorMode エラー ポップアップ モードが含まれます。 それ以外の場合は、 dwErrorMode 未定義です。

BOOL GetGlobalErrorMode(
    LPDWORD dwErrorMode // Pointer to a DWORD to place popup mode
    )
{
    HKEY hKey;
    LONG lRetCode;
    DWORD cbData=sizeof(DWORD);

    if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,
                    "SYSTEM\\CurrentControlSet\\Control\\Windows",
                    0,
                    KEY_QUERY_VALUE,
                    &hKey) != ERROR_SUCCESS)
        return FALSE;

    lRetCode=RegQueryValueEx(hKey,
                            "ErrorMode",
                            0,
                            NULL,
                            (LPBYTE) dwErrorMode,
                            &cbData);

    RegCloseKey(hKey);
    if (lRetCode != ERROR_SUCCESS)
        return FALSE;

    return TRUE;
}