Windows에서 하드 오류 팝업 처리를 변경하는 방법

무인 환경에서는 사용자 개입이 필요한 하드 오류 팝업을 자동으로 디스패치할 수 있습니다. 이 문서에서는 하드 오류 팝업 모드를 변경하는 데 필요한 코드를 제공합니다.

원래 제품 버전: Windows
원래 KB 번호: 128642

요약

Windows를 사용하면 사용자가 애플리케이션 및 시스템 오류로 인한 하드 오류 팝업 처리를 변경할 수 있습니다. 이러한 오류에는 드라이브에 디스크가 없고 GP(일반 보호) 오류가 포함됩니다.

이러한 이벤트로 인해 하드 오류 팝업이 표시되어 디스패치에 대한 사용자 개입이 필요합니다. 이러한 오류가 Windows 이벤트 로그에 기록되도록 이 동작을 수정할 수 있습니다. 오류가 이벤트 로그에 기록되면 사용자 개입이 필요하지 않으며 시스템에서 하드 오류에 대한 기본 처리기를 제공합니다. 사용자는 이벤트 로그를 검사하여 하드 오류의 원인을 확인할 수 있습니다.

레지스트리 항목

다음 레지스트리 항목은 Windows에서 하드 오류 팝업 처리를 제어합니다.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Windows\ErrorMode

유효한 모드

다음은 에 유효한 값입니다.ErrorMode

  • 모드 0

    오류를 직렬화하고 응답을 기다리는 기본 운영 모드입니다.

  • 모드 1

    시스템에서 오류가 발생하지 않는 경우 정상 운영 모드입니다. 시스템에서 오류가 발생하면 오류를 이벤트 로그에 기록하고 확인을 하드 오류로 반환합니다. 개입이 필요하지 않으며 팝업이 표시되지 않습니다.

  • 모드 2

    이는 항상 오류를 이벤트 로그에 기록하고 확인을 하드 오류로 반환합니다. 팝업이 표시되지 않습니다.

모든 모드에서 시스템 기반 하드 오류는 시스템 로그에 기록됩니다. 무인 서버를 실행하려면 모드 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;
}