Como alterar o tratamento de pop-up de erro no Windows

Em um ambiente autônomo, você pode querer enviar automaticamente pop-ups de erro rígidos que exigem intervenção do usuário. Este artigo fornece o código necessário para alterar o modo pop-up de erro rígido.

Versão original do produto: Windows
Número de KB original: 128642

Resumo

O Windows permite que o usuário altere o tratamento de pop-ups de erro rígido resultantes de erros de aplicativo e sistema. Esses erros não incluem nenhum disco na unidade e falhas de GP (proteção geral).

Esses eventos fazem com que um pop-up de erro difícil seja exibido, o que requer a intervenção do usuário para despachar. Esse comportamento pode ser modificado para que esses erros sejam registrados no log de eventos do Windows. Quando o erro é registrado no log de eventos, nenhuma intervenção do usuário é necessária e o sistema fornece um manipulador padrão para o erro rígido. O usuário pode examinar o log de eventos para determinar a causa do erro rígido.

Entrada do Registro

A entrada do registro a seguir controla o tratamento de pop-up de erro rígido no Windows:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Windows\ErrorMode

Modos válidos

A seguir estão valores válidos para ErrorMode:

  • Modo 0

    Esse é o modo operacional padrão que serializa os erros e aguarda uma resposta.

  • Modo 1

    Se o erro não for proveniente do sistema, este será o modo operacional normal. Se o erro for proveniente do sistema, isso registrará o erro no log de eventos e retornará OK para o erro difícil. Nenhuma intervenção é necessária e o pop-up não é visto.

  • Modo 2

    Isso sempre registra o erro no log de eventos e retorna OK para o erro difícil. Pop-ups não são vistos.

Em todos os modos, erros rígidos originados pelo sistema são registrados no log do sistema. Para executar um servidor autônomo, use o modo 2.

Código de exemplo para alterar o modo pop-up de erro rígido

A função a seguir altera o modo pop-up de erro rígido. Se a função for bem-sucedida, o valor retornado será TRUE. Se a função falhar, o valor retornado será 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;
}

Código de exemplo para obter o modo pop-up de erro rígido

A função a seguir obtém o modo pop-up de erro rígido. Se a função for bem-sucedida, o valor retornado será TRUE. Se a função falhar, o valor retornado será FALSE. Se a função for bem-sucedida, dwErrorMode contém o modo pop-up de erro. Caso contrário, dwErrorMode é indefinido.

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