ID Artikel: 818501 - Kajian Terakhir: 30 Januari 2012 - Revisi: 3.0

Bagaimana untuk men-debug sistem setelah Anda menerima "Stop kode galat 0x0000000A (IRQL_NOT_LESS_OR_EQUAL)"

Tips SistemThis article applies to a different operating system than the one you are using. Article content that may not be relevant to you is disabled.
Perbesar semua | Perkecil semua

RINGKASAN

Artikel ini menjelaskan cara menggunakan sampel debugging sesi untuk menentukan pengandar khusus yang menyebabkan pesan galat berikut:
Berhenti kesalahan IRQL_NOT_LESS_OR_EQUAL (0xA)

GEJALA

Setelah Anda menginstal pengandar, sistem berhenti merespons, dan Anda menerima pesan galat berikut di NT!KiActivateWaiterQueue + 0x27:
Berhenti kesalahan IRQL_NOT_LESS_OR_EQUAL (0xA)
Awal setumpuk jejak menunjukkan bahwa masalah adalah Cepat lemak driver.

PENYEBAB

Masalah ini biasanya terjadi karena driver panggilan baik The IoQueueWorkItem fungsi atau ExQueueWorkItem fungsi dua kali pada item pekerjaan yang sama sebelum work item dijalankan.

Pengandar perangkat yang statis mengalokasikan baik IO_WORKITEM struktur atau WORK_QUEUE_ITEM struktur sangat rentan terhadap masalah ini. Device driver yang melakukan seperti statis alokasi harus menjamin bahwa mereka tidak mencoba untuk Gunakan item statis dialokasikan sementara itu sudah antri.

INFORMASI LEBIH LANJUT

Untuk men-debug sebuah sistem yang telah berhenti merespons dengan kesalahan yang disebutkan dalam "Gejala", ikuti langkah berikut:
  1. Dengan asumsi bahwa Anda menginstal pengandar yang bernama, untuk contoh, Xyz.sys, sistem berhenti merespons, dan Anda menerima galat stop 0xA yang disebutkan sebelumnya.
  2. Mulai debugger dengan simbol-simbol yang benar, dan kemudian Ikuti contoh debugging yang dijelaskan nanti dalam artikel ini.

    Contoh ini menggunakan kernel debugger. Anda dapat menggunakan KD atau WinDbg. Anda juga dapat menggunakan metode ini dengan memungkinkan driver verifier.
  3. The KV perintah di debugger menunjukkan tumpukan. Tumpukan berikut jejak menunjukkan bahwa WORKER_QUEUE telah rusak.
    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. Jika Anda memeriksa tumpukan pada langkah 3, Anda mungkin berpikir bahwa Lemak cepat adalah pengandar yang rusak. Namun, KQUEUE struktur menunjukkan rusak 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. Dereferencing BERKEDIP struktur, poin untuk WORK_QUEUE_ITEM (di sini, itu adalah benar-benar parameter pertama di IO_WORKITEM).

    Catatan Definisi struktur IO_WORKITEM tersedia menggunakan server simbol untuk Windows XP dan kemudian Versi bahasa Indonesia. Struktur yang sama dalam versi sebelumnya dari Windows, walaupun simbol tidak tersedia.
    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 
    Catatan Isi dari objek perangkat tidak menunjukkan bahwa itu adalah aktif perangkat objek. Namun, Konteks bidang ini berlaku, dan ! kolam renang perintah menunjukkan pooltag dari Pelakunya kolam renang Tag.
  6. Untuk menentukan apakah alamat rutin berlaku, gunakan ln perintah pada alamat kolam renang. Jika Anda memiliki simbol, hasil menggunakan ln perintah di kolam renang alamat harus sesuai dengan alamat di pengandar pelakunya. Oleh karena itu, tebakan adalah bahwa IO_WORKITEM sesuai dengan beberapa perangkat yang dibuat oleh pengemudi kolam renang Tag.
  7. Dalam kode berikut, bekerja antrian berisi satu item. Oleh karena itu, dereferencing BERKEDIP adalah cara mudah untuk menemukannya. Karena pekerjaan antrian dapat berisi beberapa item, Anda harus dereference BERKEDIP setiap item pekerjaan sampai Anda menemukan pekerjaan item yang BERKEDIP poin kembali ke KQUEUE.
    kd> !pool 81f4a14c
    Pool page 81f4a14c region is Nonpaged pool
    *81f4a140 size: 2b8 previous size: 8 (Allocated) *Culprit Pool Tag

PEMECAHAN MASALAH

Untuk mencegah sistem untuk menghentikan dengan galat berhenti ini, Matikan dan kemudian Ganti pengandar perangkat yang rusak yang ditemukan melalui sesi debugging.
Untuk lebih informasi, klik nomor artikel berikut ini untuk melihat artikel di Basis Pengetahuan Microsoft:
314063  (http://support.microsoft.com/kb/314063/ ) Pemecahan masalah galat Stop 0xA pada Windows XP
Untuk informasi lebih lanjut dan dokumentasi dari Windows DDK, kunjungi situs-situs Website MSDN berikut:
Bug Check 0xA: IRQL_NOT_LESS_OR_EQUAL
http://msdn2.Microsoft.com/en-us/library/ms793589.aspx (http://msdn2.microsoft.com/en-us/library/ms793589.aspx)
IoQueueWorkItem
http://msdn2.Microsoft.com/en-us/library/aa490574.aspx (http://msdn2.microsoft.com/en-us/library/aa490574.aspx)

Berlaku bagi:
  • Microsoft Windows XP Professional
  • Microsoft Windows XP Home Edition
  • Microsoft Windows XP Driver Development Kit
Kata kunci: 
kbhowto kbkmode kbddk kbmt KB818501 KbMtid
Penerjemahan MesinPenerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:818501  (http://support.microsoft.com/kb/818501/en-us/ )