0x1E pemeriksaan bug: KMODE_EXCEPTION_NOT_HANDLED

Pemeriksaan bug KMODE_EXCEPTION_NOT_HANDLED memiliki nilai 0x0000001E. Pemeriksaan bug menunjukkan bahwa program mode kernel menghasilkan pengecualian yang tidak ditangkap oleh penangan kesalahan.

Penting

Artikel ini untuk programmer. Jika Anda adalah pelanggan Microsoft dan komputer Anda menampilkan kode kesalahan layar biru, lihat Memecahkan masalah kesalahan layar biru.

KMODE_EXCEPTION_NOT_HANDLED parameter

Parameter Deskripsi
1 Kode pengecualian yang tidak ditangani.
2 Alamat tempat pengecualian terjadi.
3 Parameter informasi pengecualian 0 dari rekaman pengecualian.
4 Parameter informasi pengecualian 0 dari rekaman pengecualian.

Penyebab

Untuk menafsirkan pemeriksaan bug ini, Anda harus mengidentifikasi pengecualian mana yang dihasilkan.

Kode pengecualian umum meliputi:

  • 0x80000002: STATUS_DATATYPE_MISALIGNMENT

    Referensi data yang tidak ditandatangani ditemukan.

  • 0x80000003: STATUS_BREAKPOINT

    Titik henti atau ASSERT ditemui ketika tidak ada debugger kernel yang melekat pada sistem.

  • 0xC0000005: STATUS_ACCESS_VIOLATION

    Terjadi pelanggaran akses memori. (Parameter 4 dari pemeriksaan bug adalah alamat yang coba diakses driver.)

Untuk daftar lengkap kode pengecualian, lihat nilai NTSTATUS. Kode pengecualian didefinisikan dalam ntstatus.h, file header yang ada di Windows Driver Kit. Untuk informasi selengkapnya, lihat File header di Windows Driver Kit.

Keterangan

Jika Anda tidak dilengkapi untuk men-debug masalah ini, Anda dapat menggunakan beberapa teknik pemecahan masalah dasar yang dijelaskan dalam data layar Biru. Jika driver diidentifikasi dalam pesan pemeriksaan bug, nonaktifkan driver atau tanyakan kepada produsen untuk pembaruan driver.

Ketidakkompakan perangkat keras

Konfirmasikan bahwa perangkat keras baru yang terinstal kompatibel dengan versi Windows yang terinstal. Misalnya, Anda bisa mendapatkan informasi tentang perangkat keras yang diperlukan pada spesifikasi Windows 10.

Driver perangkat atau layanan sistem yang rusak

Pengandar perangkat atau layanan sistem yang rusak dapat menyebabkan kesalahan ini. Masalah perangkat keras, seperti ketidakcocokan BIOS, konflik memori, dan konflik IRQ, juga dapat menghasilkan kesalahan ini.

Jika driver dicantumkan berdasarkan nama dalam pesan pemeriksaan bug, nonaktifkan atau hapus driver tersebut. Nonaktifkan atau hapus driver atau layanan apa pun yang baru saja ditambahkan. Jika kesalahan terjadi selama urutan startup dan partisi sistem diformat sebagai sistem file NTFS, Anda mungkin dapat menggunakan Mode Aman untuk menonaktifkan driver di Manajer Perangkat.

Periksa Log Masuk Sistem Pemantau Peristiwa untuk pesan kesalahan lainnya yang mungkin membantu Anda mengidentifikasi perangkat atau driver yang menyebabkan pemeriksaan bug 0x1E. Jalankan juga diagnostik perangkat keras yang disediakan oleh produsen sistem, terutama pemindai memori. Untuk informasi selengkapnya tentang langkah-langkah pemecahan masalah ini, lihat manual pemilik untuk komputer Anda.

Kesalahan yang menghasilkan pesan ini mungkin terjadi setelah mulai ulang pertama selama Penyetelan Windows atau setelah Penyetelan selesai. Kemungkinan penyebab kesalahan adalah ketidaksestuan BIOS sistem. Anda dapat mengatasi masalah BIOS dengan meningkatkan versi BIOS sistem.

Resolusi

Anda mungkin merasa sulit untuk mendapatkan jejak tumpukan ketika Anda men-debug masalah ini. Alamat pengecualian (parameter 2) harus mengidentifikasi driver atau fungsi yang menyebabkan masalah.

Kode pengecualian 0x80000003 menunjukkan bahwa titik henti atau pernyataan yang dikodekan secara permanen terpukul, tetapi sistem dimulai dengan /NODEBUG sakelar . Masalah ini jarang terjadi. Jika itu terjadi berulang kali, pastikan bahwa debugger kernel tersambung dan bahwa sistem dimulai dengan /DEBUG sakelar.

Jika kode pengecualian 0x80000002 terjadi, bingkai perangkap menyediakan lebih banyak informasi.

Penyebab tidak diketahui

Jika penyebab spesifik pengecualian tidak diketahui, pertimbangkan untuk menggunakan prosedur berikut untuk mendapatkan jejak tumpukan.

Catatan

Prosedur ini mengasumsikan bahwa Anda dapat menemukan NT!PspUnhandledExceptionInSystemThread. Namun, dalam beberapa kasus, seperti dalam crash pelanggaran akses, Anda tidak akan dapat menemukan NT!PspUnhandledExceptionInSystemThread. Dalam hal ini, cari ntoskrnl!KiDispatchException. Parameter ketiga yang diteruskan ke fungsi ini adalah alamat bingkai trap. Gunakan perintah .trap (display trap frame) dengan alamat ini untuk mengatur konteks register ke nilai yang benar. Kemudian Anda dapat melakukan pelacakan tumpukan dan mengeluarkan perintah lain.

Mendapatkan pelacakan tumpukan

Untuk mendapatkan pelacakan tumpukan jika prosedur pelacakan tumpukan normal gagal:

  1. Gunakan perintah kb (tampilkan backtrace tumpukan) untuk menampilkan parameter dalam pelacakan tumpukan. Cari panggilan ke NT!PspUnhandledExceptionInSystemThread. (Jika fungsi ini tidak tercantum, lihat catatan sebelumnya.)

  2. Parameter pertama untuk NT!PspUnhandledExceptionInSystemThread adalah penunjuk ke struktur. Penunjuk berisi pointer ke except pernyataan:

    typedef struct _EXCEPTION_POINTERS {
        PEXCEPTION_RECORD ExceptionRecord;
        PCONTEXT ContextRecord;
        } EXCEPTION_POINTERS, *PEXCEPTION_POINTERS;
    
    ULONG PspUnhandledExceptionInSystemThread(
        IN PEXCEPTION_POINTERS ExceptionPointers
        )
    

    Gunakan perintah dd (memori tampilan) pada alamat tersebut untuk menampilkan data yang Anda butuhkan.

  3. Nilai pertama yang diambil adalah rekaman pengecualian. Untuk rekaman pengecualian, gunakan perintah .exr (rekaman pengecualian tampilan).

    Nilai kedua adalah rekaman konteks. Untuk rekaman konteks, gunakan perintah .cxr (rekaman konteks tampilan).

  4. .cxr Setelah perintah dijalankan, gunakan kb perintah untuk menampilkan jejak tumpukan yang didasarkan pada informasi rekaman konteks. Pelacakan tumpukan ini menunjukkan tumpukan panggilan tempat pengecualian yang tidak tertangani terjadi.

Contoh pemeriksaan bug

Contoh berikut menunjukkan 0x1E pemeriksaan bug pada prosesor x86:

kd> .bugcheck                 get the bug check data
Bugcheck code 0000001e
Arguments c0000005 8013cd0a 00000000 0362cffff

kd> kb                        start with a stack trace 
FramePtr  RetAddr   Param1   Param2   Param3   Function Name 
8013ed5c  801263ba  00000000 00000000 fe40cb00 NT!_DbgBreakPoint 
8013eecc  8013313c  0000001e c0000005 8013cd0a NT!_KeBugCheckEx+0x194
fe40cad0  8013318e  fe40caf8 801359ff fe40cb00 NT!PspUnhandledExceptionInSystemThread+0x18
fe40cad8  801359ff  fe40cb00 00000000 fe40cb00 NT!PspSystemThreadStartup+0x4a
fe40cf7c  8013cb8e  fe43a44c ff6ce388 00000000 NT!_except_handler3+0x47
00000000  00000000  00000000 00000000 00000000 NT!KiThreadStartup+0xe

kd> dd fe40caf8 L2            dump EXCEPTION_POINTERS structure
0xFE40CAF8  fe40cd88 fe40cbc4                   ..@...@.

kd> .exr fe40cd88             first DWORD is the exception record
Exception Record @ FE40CD88:
   ExceptionCode: c0000005
  ExceptionFlags: 00000000
  Chained Record: 00000000
ExceptionAddress: 8013cd0a
NumberParameters: 00000002
   Parameter[0]: 00000000
   Parameter[1]: 0362cfff

kd> .cxr fe40cbc4             second DWORD is the context record
CtxFlags: 00010017
eax=00087000 ebx=00000000 ecx=03ff0000 edx=ff63d000 esi=0362cfff edi=036b3fff
eip=8013cd0a esp=fe40ce50 ebp=fe40cef8 iopl=0         nv dn ei pl nz ac po cy
vip=0    vif=0
cs=0008  ss=0010  ds=0023  es=0023  fs=0030  gs=0000             efl=00010617
0x8013cd0a  f3a4             rep movsb

kd> kb                        kb gives stack for context record
ChildEBP RetAddr  Args to Child
fe40ce54 80402e09 ff6c4000 ff63d000 03ff0000 NT!_RtlMoveMemory@12+0x3e
fe40ce68 80403c18 ffbc0c28 ff6ce008 ff6c4000 HAL!_HalpCopyBufferMap@20+0x49
fe40ce9c fe43b1e4 ff6cef90 ffbc0c28 ff6ce009 HAL!_IoFlushAdapterBuffers@24+0x148
fe40ceb8 fe4385b4 ff6ce388 6cd00800 ffbc0c28 QIC117!_kdi_FlushDMABuffers@20+0x28
fe40cef8 fe439894 ff6cd008 ffb6c820 fe40cf4c QIC117!_cqd_CmdReadWrite@8+0x26e
fe40cf18 fe437d92 ff6cd008 ffb6c820 ff6e4e50 QIC117!_cqd_DispatchFRB@8+0x210
fe40cf30 fe43a4f5 ff6cd008 ffb6c820 00000000 QIC117!_cqd_ProcessFRB@8+0x134
fe40cf4c 80133184 ff6ce388 00000000 00000000 QIC117!_kdi_ThreadRun@4+0xa9
fe40cf7c 8013cb8e fe43a44c ff6ce388 00000000 NT!_PspSystemThreadStartup@8+0x40