"Stop 0x0000000A (IRQL_NOT_LESS_OR_EQUAL) 오류 코드"를 받은 후 시스템을 디버깅 하는 방법

기술 자료 번역 기술 자료 번역
기술 자료: 818501 - 이 문서가 적용되는 제품 보기.
모두 확대 | 모두 축소

요약

이 문서에서는 예제 디버깅 세션을 사용 하는 방법을 설명 합니다. 다음 오류 메시지를 발생 시키는 특정 드라이버를 확인.
IRQL_NOT_LESS_OR_EQUAL 오류 중지 (0xA)

현상

드라이버를 설치한 후 시스템이 중지 응답 하지, 및 다음과 같은 오류 메시지가 나타날 nt!KiActivateWaiterQueue + 0x27:
IRQL_NOT_LESS_OR_EQUAL 오류 중지 (0xA)
초기 스택 추적 문제를입니다의 Fast Fat 드라이버입니다.

원인

프로시저 호출 드라이버 때문에이 문제가 일반적으로 발생 는 IoQueueWorkItem 함수 또는 해당 ExQueueWorkItem 작업 항목 전에 두 번 동일한 작업 항목에 함수 실행 되었습니다.

하나를 정적으로 할당할 장치 드라이버를 IO_WORKITEM 구조 나는 WORK_QUEUE_ITEM 구조에 있는이 문제에 특히 취약 합니다. 장치 드라이버 이러한 정적을 수행할 할당 합니다 보장은 하 려 하지 않습니다 항목이 정적으로 할당 된 항목이 대기열에 있는 동안 사용 합니다.

추가 정보

오류와 함께 응답을 중지 하는 시스템을 디버깅 하려면 "현상"절에서 언급 한, 다음과 같이 하십시오.
  1. 라고 하는 드라이버를 설치 하는 대 한 예제, Xyz.sys, 시스템 응답 중지 및 하면 중지 오류를 메시지가 나타납니다. 앞에서 언급 한 0xa입니다.
  2. 올바른 기호를 사용, 디버거를 시작 하 고 다음 이 문서의 뒷부분에 설명 되어 있는 디버깅 예제를 따르십시오.

    이 예제에서는 커널 디버거를 사용합니다. KD 또는 Windbg를 사용할 수 있습니다. 드라이버 확인 프로그램을 사용 하 여이 메서드를 사용할 수도 있습니다.
  3. kv 명령을 사용 하면 스택을 볼. 다음 스택 추적 함을 나타냅니다. WORKER_QUEUE 손상 되었습니다.
    Stack Trace:
    f8979768 804f076c fc502008 ff651fb8 e16de008 nt!KiActivateWaiterQueue+0x27
    f8979790 f8462061 00000000 00000000 00000000 nt!KeWaitForSingleObject+0x198
    f89797ac f8462289 ff651fb8 00000600 ff651fb8 Fastfat!FatWaitSync+0x18
    f897989c f8461e62 ff651fb8 fc502008 e16de008 Fastfat!FatNonCachedIo+0x36b
    f8979a2c f845b6b0 ff651fb8 fc502008 fc502008 Fastfat!FatCommonWrite+0xf29
    f8979a70 804eca36 82378020 fc502008 823d1698 Fastfat!FatFsdWrite+0xaa
    f8979a80 f847f3b8 804f46ad f377404c f8979ab8 nt!IopfCallDriver+0x31
    f8979a90 804eca36 82379a08 e27dac88 f8979aec sr!SrWrite+0xa8
    f8979ad8 804f46ad f376a0a6 823cafb8 82035ca8 nt!IopfCallDriver+0x31
    f8979adc f376a0a6 823cafb8 82035ca8 80570400 nt!IoSetThreadHardErrorMode
  4. 3 단계에서 스택을 검토 하는 경우를 생각할 수 있습니다. 빠른 Fat이 문제가 있는 드라이버입니다. 그러나 해당 KQUEUE 손상 된 구조를 표시합니다. LIST_ENTRY:
    kd> dv
    Queue = ffffffff8054eddc
    kd> dt -r1 _KQUEUE 8054eddc
    +0x000 Header :
    +0x000 Type : 0x4 ''
    +0x001 Absolute : 0 ''
    +0x002 Size : 0xa ''
    +0x003 Inserted : 0 ''
    +0x004 SignalState : 1
    +0x008 WaitListHead : _LIST_ENTRY [ 0x823cb438 - 0x823ca6b0 ]
    +0x010 EntryListHead : [ 0x0 - 0x820ae3c8 ]
    +0x000 Flink : (null)
    +0x004 Blink : 0x820ae3c8 [ 0x0 - 0x8054edec ]
  5. 역참조는 깜박임 구조를 가리키는 하 여 WORK_QUEUE_ITEM (여기에서 첫 번째 매개 변수에서 실제로 것은 IO_WORKITEM).

    참고 구조체 정의 대 한 IO_WORKITEM Windows XP 및 나중에 기호 서버를 사용 하 여 사용 가능 버전입니다. 구조에서 이전 버전의 Windows에서 동일 하지만 됩니다. 기호를 사용할 수 없습니다.
    kd> dt -r1 _IO_WORKITEM 820ae3c8
    +0x000 WorkItem :
    +0x000 List : _LIST_ENTRY [ 0x0 - 0x8054edec ]
    +0x008 WorkerRoutine : 0x8057fb78 nt!IopProcessWorkItem+0
    +0x00c Parameter : 0x820ae3c8
    +0x010 Routine : 0xf289dff0 +0
    +0x014 DeviceObject : 0xfe01b110
    +0x000 Type : 0
    +0x002 Size : 0
    +0x004 ReferenceCount : 0
    +0x008 DriverObject : (null)
    +0x00c NextDevice : (null)
    +0x010 AttachedDevice : 0x1fde0970
    +0x014 CurrentIrp : (null)
    +0x018 Timer : (null)
    +0x01c Flags : 0
    +0x020 Characteristics : 0x490049
    +0x024 Vpb : 0x000c0105
    +0x028 DeviceExtension : 0x0001ffff
    +0x02c DeviceType : 0x86a24
    +0x030 StackSize : 8 ''
    +0x034 Queue : __unnamed
    +0x05c AlignmentRequirement : 0x7fffffff
    +0x060 DeviceQueue : _KDEVICE_QUEUE
    +0x074 Dpc : _KDPC
    +0x094 ActiveThreadCount : 0
    +0x098 SecurityDescriptor : (null)
    +0x09c DeviceLock : _KEVENT
    +0x0ac SectorSize : 0
    +0x0ae Spare1 : 0
    +0x0b0 DeviceObjectExtension : (null)
    +0x0b4 Reserved : (null)
    +0x018 Context : 0x81f4a14c 
    참고 잘못 된 장치 개체의 내용을 표시 하지 않음 장치 개체입니다. 그러나 해당 상황에 맞는 필드는 잘못 하 여 ! 풀 명령 쇼는 pooltag풀 태그 원인.
  6. Routine 주소가 유효한 지 여부를 확인 하려면 사용 하는 ln 풀 주소에 대 한 명령입니다. 기호, 결과가 있는 경우 사용 하 여 ln 주소 풀에서 주소에 대응 해야 원인 드라이버입니다. 따라서 신중히 하는 것은 IO_WORKITEM 해당 풀의 드라이버에서 일부 장치 태그입니다.
  7. 다음 코드에서 작업 대기열 하나만을 들어 있습니다. 항목입니다. 따라서 역참조 하는 깜박임 찾는 쉬운 방법이입니다. 작업 대기열의 작업이 포함 될 수 있으므로 항목을 여러 개를 역참조 해야 합니다 있는 깜박임 각 작업 항목의 찾을 때까지 작업 항목의 깜박임 다시 점 KQUEUE.
    kd> !pool 81f4a14c
    Pool page 81f4a14c region is Nonpaged pool
    *81f4a140 size: 2b8 previous size: 8 (Allocated) *Culprit Pool Tag

해결 방법

시스템이이 중지 오류로 멈추는에서 방지 하기 위해 기능을 해제 하 고 다음을 통해 발견 된 결함이 있는 장치 드라이버를 교체를 디버깅 세션입니다.
자세한 내용은 정보를 문서에서 볼 수 있는 다음 문서 번호를 클릭에 Microsoft 기술 자료를 참조 하십시오.
314063Windows XP에서에서 0xA 중지 오류 문제 해결
자세한 정보 및 설명서에 대 한의 Windows DDK에는 다음 MSDN 웹 사이트를 방문 하십시오.
버그 확인 0xA: IRQL_NOT_LESS_OR_EQUAL
http://msdn2.microsoft.com/en-us/library/ms793589.aspx
IoQueueWorkItem
http://msdn2.microsoft.com/en-us/library/aa490574.aspx

속성

기술 자료: 818501 - 마지막 검토: 2012년 1월 30일 월요일 - 수정: 1.0
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Windows XP Professional
  • Microsoft Windows XP Home Edition
  • Microsoft Windows XP Driver Development Kit
키워드:?
kbhowto kbkmode kbddk kbmt KB818501 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.
이 문서의 영문 버전 보기:818501

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com