本文將告訴您如何使用範例偵錯工作階段如果要判斷特定的驅動程式造成下列錯誤訊息:
停止錯誤 IRQL_NOT_LESS_OR_EQUAL() 0xA
安裝驅動程式之後,系統會停止回應,並您會收到下列錯誤訊息中
nt!KiActivateWaiterQueue 0x27 +:
停止錯誤 IRQL_NOT_LESS_OR_EQUAL() 0xA
初始的堆疊追蹤會指出問題是發生在Fast Fat 驅動程式。
發生這個問題通常是因為驅動程式可以呼叫任何一個[
IoQueueWorkItem 函式或
ExQueueWorkItem 在同一個工作項目之前的工作項目都有兩個重複的函式尚未執行。
以靜態方式配置可能的裝置驅動程式
IO_WORKITEM 結構或
WORK_QUEUE_ITEM 結構是特別容易發生此問題。裝置驅動程式來執行這類靜態配置必須保證它們不會嘗試已排入佇列時,請使用以靜態方式配置項目。
若要偵錯的系統,已經停止回應,發生錯誤「 徵狀 〉 一件所提及,請依照下列步驟執行:
- 假設您已安裝的驅動程式,都會受到命名,如範例、 Xyz.sys 系統停止回應,您會收到 「 停止 」 錯誤稍早所描述的 0xA。
- 使用正確的符號啟動偵錯工具,然後請依照下列本文稍後所述的偵錯範例。
這個範例使用核心偵錯工具。您可以使用 KD 或 WinDbg。您也可以使用這個方法藉由啟用驅動程式檢查器。 - [ 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
- 如果檢視步驟 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 ]
- 解除參考 閃爍 結構中,它會指向 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 的 發生錯誤之集區標籤. - 若要判斷常式位址是否有效,請使用 ln 集區位址上的命令。如果您擁有符號,結果使用 ln 集區位址上的命令應該會對應到中的地址發生錯誤之驅動程式。因此,來猜測的話, IO_WORKITEM 對應到某些裝置所做的集區的驅動程式標記。
- 下列程式碼中,工作佇列包含單一項目。因此,解除參照 閃爍 就可以輕鬆找到它。由於可能包含工作佇列您必須解除參考多個項目, 閃爍 每個工作項目,直到您找到將工作項目其 閃爍 往回指向 KQUEUE.
kd> !pool 81f4a14c
Pool page 81f4a14c region is Nonpaged pool
*81f4a140 size: 2b8 previous size: 8 (Allocated) *Culprit Pool Tag
如果要避免系統因為遭遇這個停止 」 錯誤請關閉,然後取代所找到的錯誤裝置驅動程式偵錯工作階段。
如需詳細資訊資訊,請按一下下面的文章編號,檢視中的文件Microsoft 知識庫 」:
314063?
(http://support.microsoft.com/kb/314063/
)
停止錯誤 0xA 在 Windows XP 中的疑難排解
如需詳細資訊以及文件記錄Windows DDK,請造訪下列 MSDN 網站:
這篇文章中的資訊適用於:
- Microsoft Windows XP Professional
- Microsoft Windows XP Home Edition (家用版)
- Microsoft Windows XP Driver Development Kit
| kbhowto kbkmode kbddk kbmt KB818501 KbMtzh |
機器翻譯重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:
818501?
(http://support.microsoft.com/kb/818501/en-us/
)
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。