이름 및 설명 © Microsoft Corporation. Windows SDK의 헤더 파일과 CC BY 4.0 라이선스로 게시된 Microsoft Learn 설명서에서 가져왔습니다. 설명은 Microsoft가 번역한 경우 한국어로 표시됩니다.Microsoft Learn의 시스템 오류 코드
자주 발생하는 오류
Windows Update, 설치 및 파일
열리지 않거나 종료되는 프로그램
블루스크린(버그 확인)
작동 방식
Windows는 서로 다른 네 계열의 번호로 오류를 보고합니다. 5나 1603 같은 Win32 코드는 GetLastError가 반환하는 값입니다. 0x80070005 같은 HRESULT는 COM, Windows Update, 설치 프로그램에서 사용합니다. 0xC0000005 같은 NTSTATUS는 커널에서 오며 프로그램이 종료될 때 나타납니다. 0xD1 같은 버그 확인 코드는 블루스크린의 코드입니다. 이 도구는 네 계열을 한꺼번에 검색하며 Microsoft가 Windows SDK에 게시한 이름과 텍스트를 보여 줍니다.
많은 HRESULT에는 Win32 코드나 NTSTATUS가 들어 있습니다. 0x80070005처럼 값에 FACILITY_WIN32가 있으면 이 도구는 그 안에 든 Win32 코드와 설명도 보여 줍니다. 오류를 실제로 설명해 주는 것이 바로 이 설명입니다. 또한 값의 비트를 심각도, 오류를 일으킨 구성 요소를 나타내는 facility, 그 facility 안의 코드로 나눠 줍니다.
예시
0x80070005FACILITY_WIN32 (7) · 5 → ERROR_ACCESS_DENIED0x8007로 시작하는 HRESULT는 마지막 네 자리에 Win32 코드를 담고 있습니다. 0x0005는 5, 즉 액세스 거부입니다.-10737418190xC0000005 · STATUS_ACCESS_VIOLATION이벤트 뷰어나 프로세스 종료 코드에서는 값이 부호 있는 10진수로 표시되는 경우가 많습니다. 액세스 위반을 나타내는 같은 NTSTATUS입니다.16030x80070643 · ERROR_INSTALL_FAILUREWindows Installer는 설치에 실패하면 1603으로 끝나고, Windows Update는 같은 오류를 HRESULT 0x80070643으로 보고합니다.활용 사례
- 해결 방법을 찾기 전에 Windows Update, Microsoft Store 또는 설치 프로그램 오류의 의미를 파악합니다.
- 프로세스 종료 코드나 이벤트 뷰어에 표시되는 값을 상수 이름으로 바꿉니다.
- 중지 코드로 블루스크린의 버그 확인 코드를 식별합니다.
- Windows API로 프로그래밍하면서 ERROR_ACCESS_DENIED나 E_INVALIDARG 같은 상수의 값을 찾습니다.
- 번역되어 표시된 오류의 영어 원문을 확인해 포럼이나 설명서에서 검색합니다.
자주 묻는 질문
같은 숫자가 서로 다른 두 오류로 나타나는 이유는 무엇인가요?
각 계열은 코드에 별도로 번호를 매깁니다. 0x7B는 Win32 오류 123(파일 이름이 잘못됨)이면서 블루스크린의 버그 확인 코드 INACCESSIBLE_BOOT_DEVICE이기도 합니다. 어느 쪽인지는 상황으로 구분합니다. 블루스크린에서 나왔다면 버그 확인 코드이고, 프로그램이나 명령이 반환했다면 Win32입니다.
Win32 코드를 HRESULT로 변환하려면 어떻게 하나요?
HRESULT_FROM_WIN32 매크로를 사용합니다. 코드를 16진수로 바꾸고 앞에 0x8007을 붙입니다. 그러면 오류 비트가 1, facility가 7(WIN32)이 됩니다. 5는 0x80070005가 되고, 1603(0x643)은 0x80070643이 됩니다. 되돌리려면 마지막 네 자리를 가져옵니다.
음수가 나타나는 이유는 무엇인가요?
오류 HRESULT와 NTSTATUS는 최상위 비트가 1이므로 부호 있는 정수로 표시하면 음수가 됩니다. -2147024891은 0x80070005이고 -1073741819는 0xC0000005입니다. 이 도구는 두 형식을 모두 받습니다.
일부 설명이 영어로 나오는 이유는 무엇인가요?
번역된 설명은 Microsoft가 Microsoft Learn에서 Win32 코드에 대해 게시한 것입니다. HRESULT, NTSTATUS, 그리고 Learn에서 한국어로 번역하지 않은 Win32 코드의 텍스트는 Windows SDK에 나온 그대로 영어로 표시됩니다.
코드가 나오지 않으면 어떻게 하나요?
프로그램은 자체 코드를 정의할 수 있습니다. 특히 C 비트가 1이거나 Windows가 아닌 facility를 쓰는 코드는 SDK에 없습니다. 이럴 때는 도구가 보여 주는 facility로 어떤 구성 요소가 오류를 일으켰는지 확인하고, 해당 제품의 설명서에서 코드를 검색하세요.