다음을 통해 공유


버그 검사 0xA: IRQL_NOT_LESS_OR_EQUAL

IRQL_NOT_LESS_OR_EQUAL 버그 검사 값은 0x0000000A. 이 버그 검사 Microsoft Windows 또는 커널 모드 드라이버가 IRQL(인터럽트 요청 수준)에서 잘못된 주소로 페이징된 메모리에 액세스했음을 나타냅니다. 원인은 일반적으로 잘못된 포인터 또는 페이지 가능성 문제입니다.

중요

이 문서는 프로그래머를 위한 것입니다. 컴퓨터를 사용하는 동안 블루 스크린 오류 코드를 받은 고객인 경우 블루 스크린 오류 문제 해결을 참조하세요.

IRQL_NOT_LESS_OR_EQUAL 매개 변수

매개 변수 Description
1 액세스할 수 없는 가상 메모리 주소입니다.

이 주소의 !pool 을 사용하여 페이징 풀인지 확인합니다. 오류에 대한 정보를 수집하는 데 유용할 수 있는 다른 명령은 !pte, !addressln(가장 가까운 기호 나열)입니다.
2 오류 발생 시 IRQL입니다.

:
2 - IRQL은 오류 발생 시 DISPATCH_LEVEL.
3 오류를 발생시킨 작업을 설명하는 비트 필드입니다. 비트 3은 이 수준의 보고를 지원하는 칩셋에서만 사용할 수 있습니다.

비트 0 값:
0 - 읽기 작업
1 - 쓰기 작업

비트 3 값:
0 - 실행 작업이 아님
1 - 실행 작업

비트 0 및 비트 3 결합 값:
0x0 - 매개 변수 1의 주소에서 읽기를 시도하는 오류
0x1 - 매개 변수 1의 주소에 쓰기를 시도하는 오류
0x8 - 매개 변수 1의 주소에서 코드를 실행하려고 하면 오류가 발생합니다.

이 값은 다음으로 인해 발생합니다.
  • DISPATCH_LEVEL 동안 DISPATCH_LEVEL 호출할 수 없는 함수를 호출합니다.
  • 스핀 잠금을 해제하는 것을 잊어 버렸습니다.
  • 코드를 페이지 가능하지 않아야 하는 경우 페이지 가능으로 표시합니다. 예를 들어 코드가 스핀 잠금을 획득하거나 지연 프로시저 호출에서 호출되는 경우입니다.
4 오류 시의 명령 포인터입니다.

이 주소에서 ln(가장 가까운 기호 나열) 명령을 사용하여 함수의 이름을 확인합니다.

원인

이 버그 검사 부적절한 주소를 사용하는 커널 모드 디바이스 드라이버에 의해 발생합니다.

이 버그 검사 IRQL(인터럽트 요청 수준)에서 잘못된 주소에 액세스하려고 했음을 나타냅니다. 원인은 잘못된 메모리 포인터 또는 디바이스 드라이버 코드의 페이지 사용 가능성 문제입니다.

버그 검사 발생시킨 코딩 오류 유형을 분류하는 데 사용할 수 있는 일반적인 지침은 다음과 같습니다.

  • 매개 변수 1이 0x1000 미만인 경우 문제는 NULL 포인터 역참조일 수 있습니다.

  • !pool이 매개 변수 1이 페이징 풀(또는 다른 유형의 페이징 가능한 메모리)임을 보고하는 경우 IRQL이 너무 높아 이 데이터에 액세스할 수 없습니다. 하위 IRQL에서 실행하거나 페이지가 없는 풀에 데이터를 할당합니다.

  • 매개 변수 3이 버그 검사 페이지 가능 코드를 실행하려는 시도였다는 것을 나타내는 경우 IRQL이 너무 높아서 이 함수를 호출할 수 없습니다. 더 낮은 IRQL에서 실행하거나 코드를 페이지 가능으로 표시하지 마세요.

  • 사용 후 사용 또는 비트 대칭 이동으로 인해 잘못된 포인터일 수 있습니다. !pte, !addressln(가장 가까운 기호 나열)을 사용하여 매개 변수 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 복구 옵션을 참조하세요.

바이러스 백신 소프트웨어 문제 해결: 프로그램을 사용하지 않도록 설정하고 이렇게 하면 오류가 해결되는지 확인합니다. 이 경우 가능한 업데이트에 대해 프로그램 제조업체에 문의하세요.

버그 검사 문제 해결에 대한 일반적인 내용은 블루 스크린 데이터를 참조하세요.

추가 정보

버그 검사 코드 참조