버그 검사 0x1E: KMODE_EXCEPTION_NOT_HANDLED
KMODE_EXCEPTION_NOT_HANDLED 버그 검사의 값은 0x0000001E. 버그 검사는 커널 모드 프로그램에서 오류 처리기가 catch하지 않은 예외를 생성했음을 나타냅니다.
Important
이 문서는 프로그래머를 위한 것입니다. Microsoft 고객이며 컴퓨터에 파란색 화면 오류 코드가 표시되는 경우 파란색 화면 오류 문제 해결을 참조하세요.
KMODE_EXCEPTION_NOT_HANDLED 매개 변수
매개 변수 | 설명 |
---|---|
1 | 처리되지 않은 예외 코드입니다. |
2 | 예외가 발생한 주소입니다. |
3 | 예외 레코드의 예외 정보 매개 변수 0입니다. |
4 | 예외 레코드의 예외 정보 매개 변수 0입니다. |
원인
이 버그 검사를 해석하려면 생성된 예외를 식별해야 합니다.
일반적인 예외 코드는 다음과 같습니다.
0x80000002: STATUS_DATATYPE_MISALIGNMENT
정렬되지 않은 데이터 참조가 발견되었습니다.
0x80000003: STATUS_BREAKPOINT
시스템에 커널 디버거가 연결되지 않은 경우 중단점 또는 ASSERT가 발견되었습니다.
0xC0000005: STATUS_ACCESS_VIOLATION
메모리 액세스 위반이 발생했습니다. (버그 검사의 매개 변수 4는 드라이버가 액세스하려고 시도한 주소입니다.)
예외 코드의 전체 목록은 NTSTATUS 값을 참조 하세요. 예외 코드는 Windows 드라이버 키트에 있는 헤더 파일인 ntstatus.h에 정의됩니다. 자세한 내용은 Windows 드라이버 키트의 헤더 파일을 참조 하세요.
설명
이 문제를 디버그할 준비가 되지 않은 경우 버그 확인 블루 스크린 데이터 분석에서 설명하는 몇 가지 기본 문제 해결 기술을 사용할 수 있습니다. 버그 확인 메시지에서 드라이버가 식별되면 드라이버를 사용하지 않도록 설정하거나 제조업체에 드라이버 업데이트를 확인합니다.
하드웨어 비호환성
설치된 새 하드웨어가 설치된 Windows 버전과 호환되는지 확인합니다. 예를 들어 Windows 10 사양에서 필요한 하드웨어에 대한 정보를 가져올 수 있습니다.
결함이 있는 디바이스 드라이버 또는 시스템 서비스
디바이스 드라이버 또는 시스템 서비스에 오류가 발생하면 이 오류가 발생할 수 있습니다. BIOS 비호환성, 메모리 충돌 및 IRQ 충돌과 같은 하드웨어 문제도 이 오류를 생성할 수 있습니다.
드라이버가 버그 확인 메시지에 이름으로 나열된 경우 해당 드라이버를 사용하지 않도록 설정하거나 제거합니다. 최근에 추가된 드라이버 또는 서비스를 사용하지 않도록 설정하거나 제거합니다. 시작 시퀀스 중에 오류가 발생하고 시스템 파티션이 NTFS 파일 시스템으로 형식이 지정된 경우 안전 모드를 사용하여 장치 관리자 드라이버를 사용하지 않도록 설정할 수 있습니다.
시스템 로그인 이벤트 뷰어 버그 확인 0x1E 발생시키는 디바이스 또는 드라이버를 식별하는 데 도움이 될 수 있는 더 많은 오류 메시지를 확인합니다. 또한 시스템 제조업체, 특히 메모리 스캐너에서 제공하는 하드웨어 진단을 실행합니다. 이러한 문제 해결 단계에 대한 자세한 내용은 컴퓨터에 대한 소유자 설명서를 참조하세요.
이 메시지를 생성하는 오류는 Windows 설치 중에 처음 다시 시작한 후 또는 설치가 완료된 후에 발생할 수 있습니다. 오류의 가능한 원인은 시스템 BIOS 비호환성입니다. 시스템 BIOS 버전을 업그레이드하여 BIOS 문제를 해결할 수 있습니다.
해결
이 문제를 디버그할 때 스택 추적을 가져오는 것이 어려울 수 있습니다. 예외 주소(매개 변수 2)는 문제를 일으킨 드라이버 또는 함수를 식별해야 합니다.
예외 코드 0x80000003 하드 코딩된 중단점 또는 어설션이 적중되었지만 시스템이 스위치로 /NODEBUG
시작되었음을 나타냅니다. 이 문제는 거의 발생하지 않습니다. 반복적으로 발생하는 경우 커널 디버거가 연결되어 있고 시스템이 스위치로 /DEBUG
시작되었는지 확인합니다.
예외 코드 0x80000002 발생하면 트랩 프레임에서 자세한 정보를 제공합니다.
알 수 없는 원인
예외의 특정 원인을 알 수 없는 경우 다음 절차를 사용하여 스택 추적을 가져오는 것이 좋습니다.
참고 항목
이 절차에서는 찾을 수 있다고 가정합니다 NT!PspUnhandledExceptionInSystemThread
. 그러나 액세스 위반 충돌과 같은 일부 경우에는 찾을 NT!PspUnhandledExceptionInSystemThread
수 없습니다. 이 경우 을 찾습니다 ntoskrnl!KiDispatchException
. 이 함수에 전달되는 세 번째 매개 변수는 트랩 프레임 주소입니다. 이 주소와 함께 .trap(트랩 프레임 표시) 명령을 사용하여 레지스터 컨텍스트를 올바른 값으로 설정합니다. 그런 다음 스택 추적을 수행하고 다른 명령을 실행할 수 있습니다.
스택 추적 가져오기
일반 스택 추적 프로시저가 실패하는 경우 스택 추적을 얻으려면 다음을 수행합니다.
kb(스택 백트레이스 표시) 명령을 사용하여 스택 추적에 매개 변수를 표시합니다. 에 대한 호출을 찾습니다
NT!PspUnhandledExceptionInSystemThread
. (이 함수가 나열되지 않은 경우 앞의 참고 사항을 참조하세요.)첫 번째 매개 변수
NT!PspUnhandledExceptionInSystemThread
는 구조체에 대한 포인터입니다. 포인터는 문에 대한 포인터를except
포함합니다.typedef struct _EXCEPTION_POINTERS { PEXCEPTION_RECORD ExceptionRecord; PCONTEXT ContextRecord; } EXCEPTION_POINTERS, *PEXCEPTION_POINTERS; ULONG PspUnhandledExceptionInSystemThread( IN PEXCEPTION_POINTERS ExceptionPointers )
해당 주소의 dd(메모리 표시) 명령을 사용하여 필요한 데이터를 표시합니다.
검색된 첫 번째 값은 예외 레코드입니다. 예외 레코드의 경우 .exr(예외 레코드 표시) 명령을 사용합니다.
두 번째 값은 컨텍스트 레코드입니다. 컨텍스트 레코드의 경우 .cxr(컨텍스트 레코드 표시) 명령을 사용합니다.
명령이
.cxr
실행된 후 명령을 사용하여kb
컨텍스트 레코드 정보를 기반으로 하는 스택 추적을 표시합니다. 이 스택 추적은 처리되지 않은 예외가 발생한 호출 스택을 나타냅니다.
버그 확인 예제
다음 예제에서는 x86 프로세서의 버그 검사 0x1E 보여줍니다.
kd> .bugcheck get the bug check data
Bugcheck code 0000001e
Arguments c0000005 8013cd0a 00000000 0362cffff
kd> kb start with a stack trace
FramePtr RetAddr Param1 Param2 Param3 Function Name
8013ed5c 801263ba 00000000 00000000 fe40cb00 NT!_DbgBreakPoint
8013eecc 8013313c 0000001e c0000005 8013cd0a NT!_KeBugCheckEx+0x194
fe40cad0 8013318e fe40caf8 801359ff fe40cb00 NT!PspUnhandledExceptionInSystemThread+0x18
fe40cad8 801359ff fe40cb00 00000000 fe40cb00 NT!PspSystemThreadStartup+0x4a
fe40cf7c 8013cb8e fe43a44c ff6ce388 00000000 NT!_except_handler3+0x47
00000000 00000000 00000000 00000000 00000000 NT!KiThreadStartup+0xe
kd> dd fe40caf8 L2 dump EXCEPTION_POINTERS structure
0xFE40CAF8 fe40cd88 fe40cbc4 ..@...@.
kd> .exr fe40cd88 first DWORD is the exception record
Exception Record @ FE40CD88:
ExceptionCode: c0000005
ExceptionFlags: 00000000
Chained Record: 00000000
ExceptionAddress: 8013cd0a
NumberParameters: 00000002
Parameter[0]: 00000000
Parameter[1]: 0362cfff
kd> .cxr fe40cbc4 second DWORD is the context record
CtxFlags: 00010017
eax=00087000 ebx=00000000 ecx=03ff0000 edx=ff63d000 esi=0362cfff edi=036b3fff
eip=8013cd0a esp=fe40ce50 ebp=fe40cef8 iopl=0 nv dn ei pl nz ac po cy
vip=0 vif=0
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010617
0x8013cd0a f3a4 rep movsb
kd> kb kb gives stack for context record
ChildEBP RetAddr Args to Child
fe40ce54 80402e09 ff6c4000 ff63d000 03ff0000 NT!_RtlMoveMemory@12+0x3e
fe40ce68 80403c18 ffbc0c28 ff6ce008 ff6c4000 HAL!_HalpCopyBufferMap@20+0x49
fe40ce9c fe43b1e4 ff6cef90 ffbc0c28 ff6ce009 HAL!_IoFlushAdapterBuffers@24+0x148
fe40ceb8 fe4385b4 ff6ce388 6cd00800 ffbc0c28 QIC117!_kdi_FlushDMABuffers@20+0x28
fe40cef8 fe439894 ff6cd008 ffb6c820 fe40cf4c QIC117!_cqd_CmdReadWrite@8+0x26e
fe40cf18 fe437d92 ff6cd008 ffb6c820 ff6e4e50 QIC117!_cqd_DispatchFRB@8+0x210
fe40cf30 fe43a4f5 ff6cd008 ffb6c820 00000000 QIC117!_cqd_ProcessFRB@8+0x134
fe40cf4c 80133184 ff6ce388 00000000 00000000 QIC117!_kdi_ThreadRun@4+0xa9
fe40cf7c 8013cb8e fe43a44c ff6ce388 00000000 NT!_PspSystemThreadStartup@8+0x40