버그 검사 0xA: IRQL_NOT_LESS_OR_EQUAL
IRQL_NOT_LESS_OR_EQUAL 버그 검사의 값은 0x0000000A. 이 버그 검사는 Microsoft Windows 또는 커널 모드 드라이버가 IRQL(인터럽트 요청 수준)에서 잘못된 주소로 페이징된 메모리에 액세스했음을 나타냅니다. 원인은 일반적으로 잘못된 포인터 또는 페이지 가능성 문제입니다.
Important
이 문서는 프로그래머를 위한 것입니다. 컴퓨터를 사용하는 동안 파란색 화면 오류 코드를 받은 고객인 경우 파란색 화면 오류 문제 해결을 참조하세요.
IRQL_NOT_LESS_OR_EQUAL 매개 변수
매개 변수 | 설명 |
---|---|
1 | 액세스할 수 없는 가상 메모리 주소입니다. 이 주소의 !pool을 사용하여 페이징된 풀인지 확인합니다. 오류 에 대한 정보를 수집하는 데 유용할 수 있는 다른 명령은 !pte, !address 및 ln(가장 가까운 기호 나열)입니다. |
2 | 오류 시 IRQL입니다. 값: 2 - IRQL은 오류 당시 DISPATCH_LEVEL. |
3 | 오류를 발생시킨 작업을 설명하는 비트 필드입니다. 비트 3은 이 수준의 보고를 지원하는 칩셋에서만 사용할 수 있습니다. 비트 0 값: 0 - 읽기 작업 1 - 쓰기 작업 비트 3 값: 0 - 실행 작업이 아님 1 - 작업 실행 비트 0 및 비트 3 결합 값: 0x0 - 매개 변수 1의 주소에서 읽기를 시도하는 오류 0x1 - 매개 변수 1의 주소에 쓰기를 시도하는 오류 0x8 - 매개 변수 1의 주소에서 코드를 실행하려고 하는 오류 이 값은 다음으로 인해 발생합니다.
|
4 | 오류 시의 명령 포인터입니다. 이 주소의 ln(가장 가까운 기호 나열) 명령을 사용하여 함수의 이름을 확인합니다. |
원인
이 버그 검사는 부적절한 주소를 사용하는 커널 모드 디바이스 드라이버에 의해 발생합니다.
이 버그 검사는 IRQL(인터럽트 요청 수준)이 발생하는 동안 잘못된 주소에 액세스하려고 했음을 나타냅니다. 원인은 잘못된 메모리 포인터 또는 디바이스 드라이버 코드의 페이지 가능성 문제입니다.
버그 검사를 발생시킨 코딩 오류 유형을 분류하는 데 사용할 수 있는 일반적인 지침은 다음과 같습니다.
매개 변수 1이 0x1000 미만인 경우 문제는 NULL 포인터 역참조일 수 있습니다.
!pool에서 매개 변수 1이 페이징 풀(또는 다른 유형의 페이징 가능 메모리)임을 보고하는 경우 IRQL이 너무 높아 이 데이터에 액세스할 수 없습니다. 하위 IRQL에서 실행하거나 페이지가 없는 풀에 데이터를 할당합니다.
매개 변수 3이 버그 검사가 페이지 가능한 코드를 실행하려고 했음을 나타내는 경우 IRQL이 너무 높아서 이 함수를 호출할 수 없습니다. 낮은 IRQL에서 실행하거나 코드를 페이지 가능으로 표시하지 마세요.
사용 후 또는 비트 대칭 이동으로 인해 잘못된 포인터일 수 있습니다. !pte, !address 및 ln(가장 가까운 기호 나열)을 사용하여 매개 변수 1의 유효성을 조사합니다.
해결
커널 디버거를 사용할 수 있는 경우 스택 추적을 가져옵니다. 먼저 !analyze 디버거 확장을 실행하여 버그 검사에 대한 정보를 표시합니다. !analyze 확장은 근본 원인을 확인하는 데 도움이 될 수 있습니다. 다음으로, k*(스택 백트레이스 표시) 명령 중 하나를 입력하여 호출 스택을 봅니다.
정보 수집
파란색 화면에 나열된 드라이버의 이름을 검사합니다.
오류의 원인이 되는 디바이스 또는 드라이버를 정확히 파악하는 데 도움이 될 수 있는 다른 오류 메시지는 시스템 로그인 이벤트 뷰어 확인하세요. 시스템 로그에서 파란색 화면과 같은 시간 프레임에서 발생한 중요한 오류를 찾습니다.
드라이버 검증 도구
드라이버 검증 도구는 드라이버의 동작을 검사하기 위해 실시간으로 실행되는 도구입니다. 예를 들어 드라이버 검증 도구는 메모리 풀과 같은 메모리 리소스의 사용을 확인합니다. 드라이버 코드 실행에서 오류를 식별하는 경우 드라이버 코드의 해당 부분을 더 자세히 조사할 수 있도록 예외를 사전에 만듭니다. 드라이버 검증 도구 관리자는 Windows에 기본 제공되며 모든 Windows PC에서 사용할 수 있습니다.
드라이버 검증 도구 관리자를 시작하려면 명령 프롬프트에 검증 도구를 입력합니다. 확인할 드라이버를 구성할 수 있습니다. 드라이버를 확인하는 코드는 실행할 때 오버헤드를 추가하므로 가능한 한 적은 수의 드라이버를 확인합니다. 자세한 내용은 드라이버 검증 도구를 참조하세요.
다음 코드는 디버깅 예제를 보여줍니다.
kd> .bugcheck [Lists bug check data.]
Bugcheck code 0000000a
Arguments 00000000 0000001c 00000000 00000000
kd> kb [Lists the stack trace.]
ChildEBP RetAddr Args to Child
8013ed5c 801263ba 00000000 00000000 e12ab000 NT!_DbgBreakPoint
8013eecc 801389ee 0000000a 00000000 0000001c NT!_KeBugCheckEx+0x194
8013eecc 00000000 0000000a 00000000 0000001c NT!_KiTrap0E+0x256
8013ed5c 801263ba 00000000 00000000 e12ab000
8013ef64 00000246 fe551aa1 ff690268 00000002 NT!_KeBugCheckEx+0x194
kd> kv [Lists the trap frames.]
ChildEBP RetAddr Args to Child
8013ed5c 801263ba 00000000 00000000 e12ab000 NT!_DbgBreakPoint (FPO: [0,0,0])
8013eecc 801389ee 0000000a 00000000 0000001c NT!_KeBugCheckEx+0x194
8013eecc 00000000 0000000a 00000000 0000001c NT!_KiTrap0E+0x256 (FPO: [0,0] TrapFrame @ 8013eee8)
8013ed5c 801263ba 00000000 00000000 e12ab000
8013ef64 00000246 fe551aa1 ff690268 00000002 NT!_KeBugCheckEx+0x194
kd> .trap 8013eee8 [Gets the registers for the trap frame at the time of the fault.]
eax=dec80201 ebx=ffdff420 ecx=8013c71c edx=000003f8 esi=00000000 edi=87038e10
eip=00000000 esp=8013ef5c ebp=8013ef64 iopl=0 nv up ei pl nz na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010202
ErrCode = 00000000
00000000 ??????????????? [The current instruction pointer is NULL.]
kd> kb [Gives the stack trace before the fault.]
ChildEBP RetAddr Args to Child
8013ef68 fe551aa1 ff690268 00000002 fe5620d2 NT!_DbgBreakPoint
8013ef74 fe5620d2 fe5620da ff690268 80404690
NDIS!_EthFilterIndicateReceiveComplete+0x31
8013ef64 00000246 fe551aa1 ff690268 00000002 elnkii!_ElnkiiRcvInterruptDpc+0x1d0
설명
이 버그 검사를 생성하는 오류는 일반적으로 결함이 있는 디바이스 드라이버, 시스템 서비스 또는 BIOS를 설치한 후에 발생합니다.
최신 버전의 Windows로 업그레이드하는 동안 버그 확인 0xA 발생하는 경우 디바이스 드라이버, 시스템 서비스, 바이러스 스캐너 또는 새 버전과 호환되지 않는 백업 도구로 인해 오류가 발생할 수 있습니다.
오류 하드웨어 문제 해결: 하드웨어가 최근에 시스템에 추가된 경우 제거하여 오류가 다시 발생하는지 확인합니다. 기존 하드웨어가 실패한 경우 결함이 있는 구성 요소를 제거하거나 교체합니다. 시스템 제조업체에서 제공하는 하드웨어 진단을 실행합니다. 이러한 절차에 대한 자세한 내용은 컴퓨터에 대한 소유자 설명서를 참조하세요.
잘못된 시스템 서비스 문제 해결: 서비스를 사용하지 않도록 설정하고 이 작업을 수행하면 오류가 해결되는지 확인합니다. 그렇다면 가능한 업데이트에 대해 시스템 서비스 제조업체에 문의하세요. 시스템 시작 중에 오류가 발생하면 Windows 복구 옵션을 조사합니다. 자세한 내용은 Windows 10의 복구 옵션을 참조 하세요.
바이러스 백신 소프트웨어 문제 해결: 프로그램을 사용하지 않도록 설정하고 이렇게 하면 오류가 해결되는지 확인합니다. 이 경우 가능한 업데이트에 대해 프로그램 제조업체에 문의하세요.
버그 검사 문제 해결에 대한 일반적인 내용은 버그 확인 블루 스크린 데이터 분석을 참조 하세요.