So ändern Sie die Behandlung von Popups für harte Fehler in Windows

In einer unbeaufsichtigten Umgebung möchten Sie möglicherweise automatisch Popups für harte Fehler senden, die einen Benutzereingriff erfordern. In diesem Artikel erhalten Sie den Code, den Sie zum Ändern des Popupmodus für harte Fehler benötigen.

              Originalversion des Produkts: Windows
Ursprüngliche KB-Nummer: 128642

Zusammenfassung

Windows ermöglicht es dem Benutzer, die Behandlung von Popups für harte Fehler zu ändern, die aus Anwendungs- und Systemfehlern resultieren. Zu diesen Fehlern gehören kein Datenträger im Laufwerk und fehler beim allgemeinen Schutz (GP).

Diese Ereignisse führen dazu, dass ein Popup für einen harten Fehler angezeigt wird, für den benutzereingriff erforderlich ist. Dieses Verhalten kann so geändert werden, dass solche Fehler im Windows-Ereignisprotokoll protokolliert werden. Wenn der Fehler im Ereignisprotokoll protokolliert wird, ist kein Benutzereingriff erforderlich, und das System stellt einen Standardhandler für den harten Fehler bereit. Der Benutzer kann das Ereignisprotokoll untersuchen, um die Ursache des harten Fehlers zu ermitteln.

Registrierungseintrag

Der folgende Registrierungseintrag steuert die Popupbehandlung für harte Fehler in Windows:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Windows\ErrorMode

Gültige Modi

Im Folgenden sind gültige Werte für ErrorMode:

  • Modus 0

    Dies ist der Standardbetriebsmodus, der die Fehler serialisiert und auf eine Antwort wartet.

  • Modus 1

    Wenn der Fehler nicht vom System stammt, ist dies der normale Betriebsmodus. Wenn der Fehler vom System stammt, protokolliert dies den Fehler im Ereignisprotokoll und gibt OK für den harten Fehler zurück. Es ist kein Eingriff erforderlich, und das Popup wird nicht angezeigt.

  • Modus 2

    Dadurch wird der Fehler immer im Ereignisprotokoll protokolliert und für den harten Fehler "OK " zurückgegeben. Popups werden nicht angezeigt.

In allen Modi werden vom System stammende harte Fehler im Systemprotokoll protokolliert. Verwenden Sie modus 2, um einen unbeaufsichtigten Server auszuführen.

Beispielcode zum Ändern des Popupmodus für harte Fehler

Die folgende Funktion ändert den Popupmodus für harte Fehler. Wenn die Funktion erfolgreich ist, ist der Rückgabewert TRUE. Wenn die Funktion fehlschlägt, ist der Rückgabewert 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;
}

Beispielcode zum Abrufen des Popupmodus für einen harten Fehler

Die folgende Funktion ruft den Popupmodus für harte Fehler ab. Wenn die Funktion erfolgreich ist, ist der Rückgabewert TRUE. Wenn die Funktion fehlschlägt, ist der Rückgabewert FALSE. Wenn die Funktion erfolgreich ist, dwErrorMode enthält den Fehler-Popupmodus. dwErrorMode Andernfalls ist undefiniert.

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;
}