Bagikan melalui


0x50 Pemeriksaan Bug: PAGE_FAULT_IN_NONPAGED_AREA

Pemeriksaan bug PAGE_FAULT_IN_NONPAGED_AREA memiliki nilai 0x00000050. Ini menunjukkan bahwa memori sistem yang tidak valid telah dirujuk. Biasanya alamat memori salah atau alamat memori menunjuk ke memori yang dibebaskan.

Penting

Artikel ini untuk programmer. Jika Anda adalah pelanggan yang telah menerima kode kesalahan layar biru saat menggunakan komputer Anda, lihat Memecahkan masalah kesalahan layar biru.

Parameter PAGE_FAULT_IN_NONPAGED_AREA

Parameter Deskripsi

1

Alamat memori yang dirujuk

2

Setelah Windows 1507 (TH1) Versi - x64

0: Operasi baca

2: Operasi tulis

10: Jalankan operasi

Setelah Windows 1507 (TH1) Versi - x86

0: Operasi baca

2: Operasi tulis

10: Jalankan operasi

Setelah Versi Windows 1507 (TH1) - Arm

0: Operasi baca

1: Operasi tulis

8: Jalankan operasi

Sebelum Windows 1507 (TH1) Versi x64 / x86

0: Operasi baca

1: Operasi tulis

3

Alamat yang mereferensikan memori (jika diketahui)

4

Jenis kesalahan halaman

0x0 - NONPAGED_BUGCHECK_FREED_PTE - Alamat yang direferensikan ada di entri tabel halaman yang ditandai sebagai gratis.

0x2 - NONPAGED_BUGCHECK_NOT_PRESENT_PAGE_TABLE Alamat yang dirujuk tidak memiliki entri tabel halaman aktif yang valid.

0x03 - NONPAGED_BUGCHECK_WRONG_SESSION - Referensi yang dicoba ke alamat ruang sesi dibuat dalam konteks proses yang tidak memiliki sesi. Biasanya ini berarti pemanggil secara tidak benar mencoba mengakses alamat sesi tanpa mendapatkan referensi objek dengan benar ke proses yang benar dan melampirkannya terlebih dahulu. Subjenis & pemeriksaan bug ini terakhir digunakan di Windows 10 RS3. Dalam Windows 10 RS4 ke atas, kesalahan ini malah muncul sebagai 0x02 (NONPAGED_BUGCHECK_NOT_PRESENT_PAGE_TABLE).

0x04 - NONPAGED_BUGCHECK_VA_NOT_CANONICAL - Upaya referensi ke alamat virtual non-kanonis (ilegal) (Parameter 1) telah dicoba. Penelepon seharusnya tidak pernah mencoba mengakses alamat ini.

0xF - NONPAGED_BUGCHECK_USER_VA_ACCESS_INCONSISTENT - Kode mode Kernel mencoba mengakses alamat virtual mode pengguna ketika akses tersebut tidak diizinkan.

Jika driver yang bertanggung jawab atas kesalahan dapat diidentifikasi, namanya dicetak di layar biru dan disimpan dalam memori di lokasi (PUNICODE_STRING) KiBugCheckDriver. Anda dapat menggunakan perintah dx debugger untuk menampilkan ini - dx KiBugCheckDriver.

Penyebab

Pemeriksaan bug 0x50 dapat disebabkan oleh penginstalan layanan sistem yang rusak atau kode driver yang rusak. Perangkat lunak antivirus juga dapat memicu kesalahan ini, seperti halnya volume NTFS yang rusak.

Ini juga dapat terjadi setelah pemasangan perangkat keras yang rusak atau jika terjadi kegagalan perangkat keras yang diinstal (biasanya terkait dengan RAM yang rusak, baik itu memori utama, cache RAM L2, atau RAM video).

Keterangan

Log Peristiwa: Periksa Pemantau Peristiwa Masuk Sistem untuk pesan kesalahan tambahan yang mungkin membantu menentukan perangkat atau driver yang menyebabkan kesalahan. Untuk informasi selengkapnya, lihat Membuka Pemantau Peristiwa. Cari kesalahan kritis dalam log sistem yang terjadi di kurun waktu yang sama dengan layar biru.

Menyelesaikan driver yang rusak: Periksa nama driver jika yang tercantum di layar biru atau ada di log peristiwa. Hubungi vendor driver untuk melihat apakah driver yang diperbarui tersedia.

Mengatasi masalah layanan sistem yang rusak: Nonaktifkan layanan dan konfirmasikan bahwa ini menyelesaikan kesalahan. Jika demikian, hubungi produsen layanan sistem tentang kemungkinan pembaruan. Jika kesalahan terjadi selama startup sistem, selidiki opsi perbaikan Windows. Untuk informasi selengkapnya, lihat Opsi pemulihan di Windows 10.

Mengatasi masalah perangkat lunak antivirus: Nonaktifkan program dan konfirmasikan bahwa ini mengatasi kesalahan. Jika ya, hubungi produsen program tentang kemungkinan pembaruan.

Mengatasi masalah volume NTFS yang rusak: Jalankan Chkdsk /f /r untuk mendeteksi dan memperbaiki kesalahan disk. Anda harus memulai ulang sistem sebelum pemindaian disk dimulai pada partisi sistem. Hubungi pembuatan sistem hard driver untuk menemukan alat diagnostik apa pun yang mereka sediakan untuk subsistem hard drive.

Diagnostik Memori Windows: Jalankan alat Windows Memory Diagnostics, untuk menguji memori fisik. Pilih tombol Mulai, lalu pilih Panel Kontrol. Dalam kotak pencarian, ketik Memori, lalu pilih Diagnosis masalah memori komputer Anda. Setelah pengujian dijalankan, gunakan Penampil peristiwa untuk melihat hasil di bawah log Sistem. Cari entri MemoryDiagnostics-Results untuk melihat hasilnya.

Mengatasi masalah perangkat keras yang rusak: Jika perangkat keras telah ditambahkan ke sistem baru-baru ini, hapus untuk melihat apakah kesalahan berulang. Jika perangkat keras yang ada gagal, hapus atau ganti komponen yang rusak. Anda harus menjalankan diagnostik perangkat keras yang disediakan oleh produsen sistem. Untuk detail tentang prosedur ini, lihat manual pemilik untuk komputer Anda.

Untuk informasi pemecahan masalah layar biru umum, lihat Data Layar Biru dan Pemecahan masalah tingkat lanjut untuk Kesalahan henti atau masalah kesalahan layar biru.

Resolusi

Untuk menentukan penyebab spesifik dan untuk membuat perbaikan kode, pengalaman pemrograman dan akses ke kode sumber modul yang rusak, diperlukan.

Biasanya, alamat yang dirujuk berada dalam memori yang dibebaskan atau hanya tidak valid. Ini tidak dapat dilindungi oleh percobaan - kecuali handler -- hanya dapat dilindungi oleh probe atau teknik pemrograman serupa. Untuk informasi tentang penanganan buffer dan pemeriksaan di driver sistem file, lihat Penanganan Buffer. Untuk informasi tentang praktik terbaik untuk pengembangan driver, dan kesalahan umum yang dibuat oleh pengembang driver, lihat Praktik Terbaik Pengembangan Driver Tim Surface.

Gunakan ekstensi !analyze debug dengan opsi -v verbose untuk menampilkan informasi tentang pemeriksaan bug agar berfungsi untuk menentukan akar penyebabnya.

2: kd> !analyze -v
*******************************************************************************
*                                                                             *
*                        Bugcheck Analysis                                    *
*                                                                             *
*******************************************************************************

PAGE_FAULT_IN_NONPAGED_AREA (50)
Invalid system memory was referenced.  This cannot be protected by try-except.
Typically the address is just plain bad or it is pointing at freed memory.
Arguments:
Arg1: ffffffff00000090, memory referenced.
Arg2: 0000000000000000, value 0 = read operation, 1 = write operation.
Arg3: fffff80240d322f9, If non-zero, the instruction address which referenced the bad memory
	address.
Arg4: 000000000000000c, (reserved)

Dalam contoh ini Parameter 2 menunjukkan bahwa pemeriksaan bug terjadi ketika area memori sedang dibaca.

Lihat semua !analyze output untuk mendapatkan informasi tentang apa yang terjadi ketika pemeriksaan bug terjadi. Periksa MODULE_NAME: dan FAULTING_MODULE: untuk melihat kode mana yang terlibat dalam mereferensikan memori sistem yang tidak valid.

Lihat teks tumpukan untuk petunjuk tentang apa yang berjalan ketika kegagalan terjadi. Jika beberapa file cadangan tersedia, bandingkan informasi untuk mencari kode umum yang ada di tumpukan.

Gunakan perintah .trap yang disediakan dalam !analyze output untuk mengatur konteks.

TRAP_FRAME:  fffff98112e8b3d0 -- (.trap 0xfffff98112e8b3d0)

Gunakan perintah debugger seperti gunakan kb (Display Stack Backtrace) untuk menyelidiki kode yang rusak.

Gunakan untuk mencantumkan lm t n modul yang dimuat dalam memori.

Gunakan perintah d, da, db, dc, dd, dD, df, dp, dq, du, dw (Display Memory) untuk menyelidiki area memori yang direferensikan oleh parameter 1 dan parameter 3.

2: kd> db ffffffff00000090
ffffffff`00000090  ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ????????????????
ffffffff`000000a0  ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ????????????????
ffffffff`000000b0  ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ????????????????
ffffffff`000000c0  ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ????????????????
ffffffff`000000d0  ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ????????????????
ffffffff`000000e0  ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ????????????????
ffffffff`000000f0  ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ????????????????
ffffffff`00000100  ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ????????????????

Dalam hal ini tidak terlihat seperti ada data di area memori ini di parameter 1, yang merupakan area memori yang mencoba dibaca.

Gunakan perintah !address untuk melihat parameter 3 yang merupakan alamat instruksi yang mereferensikan memori buruk.

2: kd> !address fffff80240d322f9
Usage:                  Module
Base Address:           fffff802`40ca8000
End Address:            fffff802`415fb000
Region Size:            00000000`00953000
VA Type:                BootLoaded
Module name:            ntoskrnl.exe
Module path:            [\SystemRoot\system32\ntoskrnl.exe]

Gunakan u, ub, uu (Unassemble)Dissasemble dengan parameter 3, untuk memeriksa yang mereferensikan memori buruk. Untuk informasi selengkapnya tentang prosesor X64 dan bahasa perakitan lihat Prosesor x64.

2: kd> u fffff80240d322f9 
nt!RtlSubtreePredecessor+0x9:
fffff802`40d322f9 488b4810        mov     rcx,qword ptr [rax+10h]
fffff802`40d322fd eb07            jmp     nt!RtlSubtreePredecessor+0x16 (fffff802`40d32306)
fffff802`40d322ff 488bc1          mov     rax,rcx
fffff802`40d32302 488b4910        mov     rcx,qword ptr [rcx+10h]
fffff802`40d32306 4885c9          test    rcx,rcx
fffff802`40d32309 75f4            jne     nt!RtlSubtreePredecessor+0xf (fffff802`40d322ff)
fffff802`40d3230b c3              ret
fffff802`40d3230c c3              ret

Gunakan ub untuk membongkar mundur dari alamat tertentu.

Gunakan perintah r (Registers) untuk memeriksa apa yang sedang dijalankan saat bug sistem diperiksa.

2: kd> r
Last set context:
rax=ffffffff00000080 rbx=0000000000000000 rcx=ffffa68337cb7028
rdx=7a107838c48dfc00 rsi=0000000000000000 rdi=0000000000000000
rip=fffff80240d322f9 rsp=ffff840c96510958 rbp=ffffffffffffffff
 r8=ffffffffffffffff  r9=0000000000000000 r10=7ffffffffffffffc
r11=ffff840c96510a10 r12=0000000000000000 r13=0000000000000000
r14=0000000000000000 r15=0000000000000000
iopl=0         nv up ei ng nz na pe nc
cs=0010  ss=0018  ds=0000  es=0000  fs=0000  gs=0000             efl=00010282
nt!RtlSubtreePredecessor+0x9:
fffff802`40d322f9 488b4810        mov     rcx,qword ptr [rax+10h] ds:ffffffff`00000090=????????????????

Dalam hal fffff80240d322f9 ini ada dalam daftar penunjuk instruksi, sobek.

Perintah !pte dan !pool juga dapat digunakan untuk memeriksa memori.

Gunakan !memusage dan untuk memeriksa status umum memori sistem.

Untuk informasi selengkapnya tentang penggunaan memori Windows, lihat Windows Internal Edisi Ke-7 Bagian 1 oleh Pavel Yosifovich, Mark E. Russinovich, David A. Solomon dan Alex Ionescu.

Pemverifikasi Driver

Driver Verifier adalah alat yang berjalan secara real time untuk memeriksa perilaku driver. Misalnya, Driver Verifier memeriksa penggunaan sumber daya memori, seperti kumpulan memori. Jika melihat kesalahan dalam eksekusi kode driver, secara proaktif membuat pengecualian untuk memungkinkan bagian kode driver tersebut diteliti lebih lanjut. Manajer pemverifikasi driver disertakan dalam Windows dan tersedia di semua PC Windows. Gunakan Driver Verifier untuk melacak penyebab spesifik kegagalan.

Untuk memulai manajer pemverifikasi driver, ketik Verifier pada prompt perintah. Anda dapat mengonfigurasi driver mana yang ingin Anda verifikasi. Kode yang memverifikasi driver menambahkan overhead saat berjalan, jadi coba dan verifikasi jumlah driver terkecil mungkin. Jika driver yang rusak diidentifikasi, pilih driver tersebut. Untuk informasi selengkapnya, lihat Pemverifikasi Driver.

Lihat juga

Referensi Bug Check Code