0x10D Pemeriksaan Bug: WDF_VIOLATION
Pemeriksaan bug WDF_VIOLATION memiliki nilai 0x0000010D. Ini menunjukkan bahwa Kernel-Mode Driver Framework (KMDF) mendeteksi bahwa Windows menemukan kesalahan dalam driver berbasis kerangka kerja.
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 WDF_VIOLATION
Parameter 1 menunjukkan kode kesalahan tertentu dari pemeriksaan bug. Parameter 4 dicadangkan.
Parameter 1 | Parameter 2 | Parameter 3 | Penyebab Kesalahan |
---|---|---|---|
0x1 |
Penunjuk ke struktur WDF_POWER_ROUTINE_TIMED_OUT_DATA |
Dicadangkan |
Driver berbasis kerangka kerja telah kehabisan waktu selama operasi daya. Ini biasanya berarti bahwa tumpukan perangkat tidak mengatur bit DO_POWER_PAGABLE dan driver mencoba operasi yang dapat dipaginasi setelah tumpukan perangkat halaman dimatikan. |
0x2 |
Telah dipesan |
Telah dipesan |
Upaya sedang dilakukan untuk memperoleh kunci yang saat ini sedang ditahan. |
0x3 |
Handel WDFREQUEST |
Jumlah referensi luar biasa yang tetap ada di kedua buffer |
Windows Driver Framework Verifier mengalami kesalahan fatal. Secara khusus, permintaan I/O selesai, tetapi objek permintaan kerangka kerja tidak dapat dihapus karena ada referensi luar biasa ke buffer input, buffer output, atau keduanya. |
0x4 |
Dicadangkan |
Alamat penelepon |
Parameter NULL diteruskan ke fungsi yang memerlukan nilai non-NULL . |
0x5 |
Nilai handel yang diteruskan |
Dicadangkan |
Handel objek kerangka kerja dari jenis yang salah diteruskan ke metode objek kerangka kerja. |
0x6 |
Lihat tabel di bawah ini. |
||
0x7 |
Handel objek kerangka kerja |
Dicadangkan |
Driver mencoba menghapus objek kerangka kerja dengan salah dengan memanggil WdfObjectDereference untuk menghapus handel alih-alih memanggil WdfObjectDelete. |
0x8 |
Handel objek transaksi DMA |
Dicadangkan |
Operasi terjadi pada objek transaksi DMA saat tidak dalam status yang benar. |
0x9 |
Saat ini tidak digunakan. |
||
0xA |
Penunjuk ke struktur WDF_QUEUE_FATAL_ERROR_DATA |
Dicadangkan |
Kesalahan fatal telah terjadi saat memproses permintaan yang saat ini dalam antrean. |
0xB |
Lihat tabel di bawah ini. |
||
0xC |
Handel WDFDEVICE |
Penunjuk ke PnP IRP baru |
IRP PnP baru yang berubah status tiba saat driver sedang memproses IRP PnP lain yang mengubah status. |
0xD |
Handel WDFDEVICE |
Pointer ke power IRP |
Pemilik kebijakan daya perangkat menerima IRP daya yang tidak dimintanya. Mungkin ada beberapa pemilik kebijakan daya, tetapi hanya satu yang diizinkan. Driver KMDF dapat mengubah kepemilikan kebijakan daya dengan memanggil WdfDeviceInitSetPowerPolicyOwnership. |
0xE |
IRQL tempat fungsi panggilan balik peristiwa dipanggil. |
IRQL tempat fungsi panggilan balik peristiwa dikembalikan. |
Fungsi panggilan balik peristiwa tidak kembali pada IRQL yang sama di mana ia dipanggil. Fungsi panggilan balik mengubah IRQL secara langsung atau tidak langsung (misalnya, dengan memperoleh spinlock, yang meningkatkan IRQL menjadi DISPATCH_LEVEL, tetapi tidak melepaskan spinlock). |
0xF |
Alamat fungsi panggilan balik peristiwa. |
Dicadangkan |
Fungsi panggilan balik peristiwa memasuki wilayah penting, tetapi tidak meninggalkan wilayah penting sebelum kembali. |
Parameter 1 sama dengan 0x6
Jika Parameter 1 sama dengan 0x6, maka kesalahan fatal dibuat dalam menangani permintaan WDF. Dalam hal ini, Parameter 2 lebih lanjut menentukan jenis kesalahan fatal yang telah dibuat, seperti yang didefinisikan oleh enumerasi WDF_REQUEST_FATAL_ERROR.
Parameter 2 | Parameter 3 | Penyebab Kesalahan |
---|---|---|
0x1 |
Alamat IRP |
Tidak ada lagi lokasi tumpukan I/O yang tersedia untuk memformat IRP yang mendasar. |
0x2 |
Nilai handel permintaan WDF |
Upaya dilakukan untuk memformat objek permintaan kerangka kerja yang tidak berisi IRP. |
0x3 |
Nilai handel permintaan WDF |
Driver mencoba mengirim permintaan kerangka kerja yang telah dikirim ke target I/O. |
0x4 |
Penunjuk ke struktur WDR_REQUEST_FATAL_ERROR_INFORMATION_LENGTH_MISMATCH_DATA yang berisi penunjuk ke IRP, nilai handel permintaan WDF, fungsi utama IRP, dan jumlah byte yang dicoba ditulis |
Driver telah menyelesaikan permintaan kerangka kerja, tetapi telah menulis lebih banyak byte ke buffer output daripada yang ditentukan dalam IRP. |
Parameter 1 sama dengan 0xB
Jika Parameter 1 sama dengan 0xB, maka upaya untuk memperoleh atau melepaskan kunci tidak valid. Dalam hal ini, Parameter 3 lebih lanjut menentukan kesalahan yang telah dibuat.
Parameter 2 | Parameter 3 | Penyebab Kesalahan |
---|---|---|
Nilai handel |
0x0 |
Handel yang diteruskan ke WdfObjectAcquireLock atau WdfObjectReleaseLock mewakili objek yang tidak mendukung kunci sinkronisasi. |
Handel kunci putar WDF |
0x1 |
Kunci putaran dilepaskan oleh utas yang tidak memperolehnya. |
Penyebab
Lihat deskripsi setiap kode di bagian Parameter untuk penjelasan tentang penyebabnya.
Resolusi
Ekstensi !analyze debug menampilkan informasi tentang pemeriksaan bug dan dapat membantu dalam mengumpulkan informasi, seperti modul kode yang salah.
Biasanya, file cadangan WDF akan menghasilkan informasi lebih lanjut tentang driver yang menyebabkan pemeriksaan bug ini. Gunakan perintah ini untuk melihat file log.
kd> !wdfkd.wdflogdump <WDF_Driver_Name>
Jika Parameter 1 sama dengan 0x2, periksa tumpukan pemanggil untuk menentukan kunci yang dimaksud.
Jika Parameter 1 sama dengan 0x3, log kesalahan driver Kernel-Mode Driver Framework akan menyertakan detail tentang referensi yang luar biasa.
Jika Parameter 1 sama dengan 0x4, gunakan perintah ln debugger dengan nilai Parameter 3 sebagai argumennya untuk menentukan fungsi mana yang memerlukan parameter non-NULL.
Jika Parameter 1 sama dengan 0x7, gunakan perintah ekstensi Parameter 2!wdfkd.wdfhandle untuk menentukan jenis handel.
Jika Parameter 1 sama dengan 0xA, struktur WDF_QUEUE_FATAL_ERROR_DATA akan menunjukkan permintaan yang bermasalah atau handel antrean. Ini juga akan menunjukkan NTSTATUS, jika tidak STATUS_SUCCESS, jika tersedia.