De afhandeling van pop-ups voor harde fouten wijzigen in Windows

In een omgeving zonder toezicht kunt u pop-ups met harde fouten automatisch verzenden waarvoor tussenkomst van de gebruiker is vereist. Dit artikel bevat de code die u nodig hebt om de pop-upmodus voor harde fouten te wijzigen.

Oorspronkelijke productversie: Windows
Origineel KB-nummer: 128642

Samenvatting

Met Windows kan de gebruiker de verwerking van pop-ups met harde fouten wijzigen die het gevolg zijn van toepassings- en systeemfouten. Dergelijke fouten omvatten geen schijf in het station en algemene beveiligingsfouten (GP).

Deze gebeurtenissen zorgen ervoor dat er een pop-up met een harde fout wordt weergegeven, waarvoor tussenkomst van de gebruiker nodig is om te worden verzonden. Dit gedrag kan worden gewijzigd, zodat dergelijke fouten worden vastgelegd in het Windows-gebeurtenislogboek. Wanneer de fout wordt geregistreerd in het gebeurtenislogboek, is er geen tussenkomst van de gebruiker nodig en biedt het systeem een standaardhandler voor de harde fout. De gebruiker kan het gebeurtenislogboek onderzoeken om de oorzaak van de harde fout te bepalen.

Registervermelding

De volgende registervermelding bepaalt de harde foutafhandeling in Windows:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Windows\ErrorMode

Geldige modi

Hier volgen geldige waarden voor ErrorMode:

  • Modus 0

    Dit is de standaardbedrijfsmodus die de fouten serialiseert en wacht op een antwoord.

  • Modus 1

    Als de fout niet afkomstig is van het systeem, is dit de normale bedrijfsmodus. Als de fout afkomstig is van het systeem, wordt de fout geregistreerd in het gebeurtenislogboek en wordt OK geretourneerd naar de harde fout. Er is geen interventie vereist en de pop-up wordt niet weergegeven.

  • Modus 2

    Hiermee wordt de fout altijd geregistreerd in het gebeurtenislogboek en wordt OK geretourneerd naar de harde fout. Pop-ups worden niet weergegeven.

In alle modi worden door het systeem afkomstige harde fouten vastgelegd in het systeemlogboek. Als u een server zonder toezicht wilt uitvoeren, gebruikt u modus 2.

Voorbeeldcode om de pop-upmodus voor harde fouten te wijzigen

Met de volgende functie wordt de pop-upmodus voor harde fouten gewijzigd. Als de functie slaagt, is de retourwaarde WAAR. Als de functie mislukt, is de retourwaarde ONWAAR.

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

Voorbeeldcode voor het verkrijgen van de pop-upmodus voor harde fouten

De volgende functie verkrijgt de pop-upmodus voor harde fouten. Als de functie slaagt, is de retourwaarde WAAR. Als de functie mislukt, is de retourwaarde ONWAAR. Als de functie slaagt, dwErrorMode bevat de pop-upmodus voor fouten. dwErrorMode Anders is niet gedefinieerd.

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