Cikk azonosítója: 818501 - Utolsó ellenőrzés: 2006. július 24. - Verziószám: 6.0

Hibakeresés az IRQL_NOT_LESS_OR_EQUAL (0xA) jelű STOP hiba után

RendszertippA jelen cikk az Ön által használttól eltérő operációs rendszerre vonatkozik. A cikk azon tartalmait, amelyek nem relevánsak Önnek, letiltjuk.
Az összes kibontása | Az összes összecsukása

Összefoglaló

Ez a cikk egy olyan hibakeresési eljárást ismertet, amellyel megállapítható, hogy melyik eszközillesztő okozza a következő hibát:
Stop Error IRQL_NOT_LESS_OR_EQUAL (0xA)

A jelenség

Egy eszközillesztő telepítése után a rendszer nem válaszol, és az nt!KiActivateWaiterQueue+0x27 modulban a következő hibaüzenet jelenik meg:
Stop Error IRQL_NOT_LESS_OR_EQUAL (0xA)
A kezdeti verem-nyomkövetési adat azt jelzi, hogy a hiba a Fast Fat illesztőben található.

Oka

Ezt a problémát általában az okozza, hogy az eszközillesztő a munkaelem végrehajtása előtt kétszer hívja meg a munkaelemre az IoQueueWorkItem vagy az ExQueueWorkItem függvényt.

Az IO_WORKITEM vagy a WORK_QUEUE_ITEM struktúrákat statikusan lefoglaló eszközillesztők különösen hajlamosak erre a hibára. Az ilyen statikus foglalást használó eszközillesztőnek biztosítania kell, hogy amíg a statikusan foglalt elem sorban áll, nem próbál meg ahhoz hozzáférni.

További információ

Ha a rendszer „A jelenség” szakaszban említett hibaüzenettel áll le, a hibakereséshez hajtsa végre a következőket:
  1. Tegyük fel, hogy az Xyz.sys nevű eszközillesztő az, amelynek telepítése után a rendszer nem válaszol, és megjelenik az előbb említett stop error 0xA hibaüzenet.
  2. Indítsa el a hibakeresőt a megfelelő szimbólumokkal, majd kövesse a következőkben ismertetett hibakeresési lépéseket.

    Ebben a példában egy kernel hibakeresőt használunk. Használhatja a KD vagy a WinDbg eszközök egyikét. Ezt a módszert az Illesztőprogram-ellenőrző engedélyezésével is követheti.
  3. A kv parancs kiadására a hibakereső kilistázza a vermet. A következő verem-nyomkövetési adatsor azt mutatja, hogy a WORKER_QUEUE sérült meg.
    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. A 3. lépésben áttekintve a verem tartalmát, úgy tűnhet, hogy a Fast Fat illesztőprogram okozza a hibát. Ennek ellenére a KQUEUE struktúra egy sérült LIST_ENTRY bejegyzést mutat:
    kd> dv
    Queue = ffffffff8054eddc
    kd> dt -r1 _KQUEUE 8054eddc
    +0x000 Header :
    +0x000 Type : 0x4 ''
    +0x001 Absolute : 0 '' 0 ''
    +0x002 Size : 0xa ''
    +0x003 Inserted : 0 '' 0 ''
    +0x004 SignalState : 1 1
    +0x008 WaitListHead : _LIST_ENTRY [ 0x823cb438 - 0x823ca6b0 ]
    +0x010 EntryListHead : [ 0x0 - 0x820ae3c8 ]
    +0x000 Flink : (null)
    +0x004 Blink : 0x820ae3c8 [ 0x0 - 0x8054edec ]
  5. A BLINK struktúra hivatkozását feloldva látható, hogy az egy WORK_QUEUE_ITEM elemre mutat (amely itt egy IO_WORKITEM elem első paramétere).

    Megjegyzés: Az IO_WORKITEM struktúra definíciója a Windows XP és újabb rendszerek szimbólum-kiszolgálójának használatával érhető el. A struktúra a Windows rendszer korábbi verzióiban is megegyezik, de a szimbólumok nem elérhetők.
    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 0
    +0x002 Size : 0 0
    +0x004 ReferenceCount : 0 0
    +0x008 DriverObject : (null)
    +0x00c NextDevice : (null)
    +0x010 AttachedDevice : 0x1fde0970
    +0x014 CurrentIrp : (null)
    +0x018 Timer : (null)
    +0x01c Flags : 0 0
    +0x020 Characteristics : 0x490049
    +0x024 Vpb : 0x000c0105
    +0x028 DeviceExtension : 0x0001ffff
    +0x02c DeviceType : 0x86a24
    +0x030 StackSize : 8 '' 8 ''
    +0x034 Queue : __unnamed
    +0x05c AlignmentRequirement : 0x7fffffff
    +0x060 DeviceQueue : _KDEVICE_QUEUE
    +0x074 Dpc : _KDPC
    +0x094 ActiveThreadCount : 0 0
    +0x098 SecurityDescriptor : (null)
    +0x09c DeviceLock : _KEVENT
    +0x0ac SectorSize : 0 0
    +0x0ae Spare1 : 0 0
    +0x0b0 DeviceObjectExtension : (null)
    +0x0b4 Reserved : (null)
    +0x018 Context : 0x81f4a14c  0x81f4a14c 
    Az eszközobjektum tartalma nem mutatja, hogy az érvényes eszközobjektum. Ennek ellenére a Context mező érvényes, és a !pool parancs egy Culprit Pool Tag típusú pooltag elemet jelenít meg.
  6. A Routine cím érvényességének eldöntése a készlet címén végrehajtott ln paranccsal lehetséges. Ha a szimbólumok használata lehetséges, a készlet címen végrehajtott ln parancs eredménye a hibát okozó illesztőprogram címe. Ezért megalapozottan gondolhatjuk azt, hogy az IO_WORKITEM elem egy olyan eszköznek felel meg, amelyet a készletcímke által mutatott illesztőprogram hozott létre.
  7. A következő kódban a munkasor egyelemű. Emiatt a BLINK mutató hivatkozását feloldva könnyű megtalálni azt. Mivel a munkasor több elemet is tartalmazhat, addig kell feloldani az összes elem BLINK változójának hivatkozását, amíg az a munkaelem nem kerül sorra, amelynek a BLINK mutatója a KQUEUE elemre mutat vissza.
    kd> !pool 81f4a14c
    Pool page 81f4a14c region is Nonpaged pool
    *81f4a140 size: 2b8 previous size: 8 (Allocated) *Culprit Pool Tag

A megoldás

A rendszer megállása és a STOP hibával kapcsolatos hibaüzenet megjelenése a hibakeresés során azonosított illesztőprogram kikapcsolásával, majd lecserélésével akadályozható meg.
A Microsoft Tudásbázis kapcsolódó cikke:
314063  (http://support.microsoft.com/kb/314063/ ) „Leállítás: 0x0000000A” típusú hibával kapcsolatos problémamegoldás Windows XP rendszerben
A Windows DDK eszközről további információt és dokumentációt talál az MSDN következő webhelyein:
A 0xA bug check-kód (IRQL_NOT_LESS_OR_EQUAL) ismertetése
http://msdn.microsoft.com/library/en-us/Kernel_r/hh/Kernel_r/k104_6f5cb4e5-75d1-433a-864e-19de914aa2e7.xml.asp (http://msdn.microsoft.com/library/en-us/Kernel_r/hh/Kernel_r/k104_6f5cb4e5-75d1-433a-864e-19de914aa2e7.xml.asp)
IoQueueWorkItem
http://msdn.microsoft.com/library/en-us/Kernel_r/hh/Kernel_r/k104_6f5cb4e5-75d1-433a-864e-19de914aa2e7.xml.asp (http://msdn.microsoft.com/library/en-us/Kernel_r/hh/Kernel_r/k104_6f5cb4e5-75d1-433a-864e-19de914aa2e7.xml.asp)

A cikkben található információ a következő(k)re vonatkozik:
  • Microsoft Windows XP Professional
  • Microsoft Windows XP Home Edition
  • Microsoft Windows XP Driver Development Kit
Kulcsszavak: 
kbhowto kbkmode KB818501
A Microsoft tudásbázisban szolgáltatott információkat "az adott állapotban", bárminemű szavatosság vagy garancia nélkül biztosítjuk. A Microsoft kizár mindennemű, akár kifejezett, akár vélelmezett szavatosságot vagy garanciát, ideértve a forgalomképességre és az adott célra való alkalmasságra vonatkozó szavatosságot is. A Microsoft Corporation és annak beszállítói semmilyen körülmények között nem felelősek semminemű kárért, így a közvetlen, a közvetett, az üzleti haszon elmaradásából származó vagy speciális károkért, illetve a kár következményeként felmerülő költségek megtérítéséért, még abban az esetben sem, ha a Microsoft Corporationt vagy beszállítóit az ilyen károk bekövetkeztének lehetőségére figyelmeztették. Egyes államok joga nem teszi lehetővé bizonyos károkért a felelősség kizárását vagy korlátozását, ezért a fenti korlátozások az ön esetében esetleg nem alkalmazhatók.