Men-debug Pembongkaran Driver yang Gagal
Driver tidak akan dibongkar jika ada referensi bocor ke DeviceObject atau DriverObject. Ini adalah penyebab umum bongkar muatan driver yang gagal.
Selain IoCreateDevice, ada beberapa fungsi yang merujuk ke DriverObject dan DeviceObject. Jika Anda tidak mengikuti panduan untuk menggunakan fungsi, Anda akhirnya akan membocorkan referensi.
Berikut adalah contoh cara men-debug masalah ini. Meskipun DeviceObject digunakan dalam contoh ini, teknik ini berfungsi untuk semua objek.
Memperbaiki driver yang gagal dibongkar
Letakkan titik henti tepat setelah driver memanggil IoCreateDevice. Dapatkan alamat DeviceObject .
Temukan header objek dengan menggunakan ekstensi !object pada alamat objek ini:
kd> !object 81a578c0 Object: 81a578c0 Type: (81bd0e70) Device ObjectHeader: 81a578a8 HandleCount: 0 PointerCount: 3 Directory Object: e1001208 Name: Serial0
Variabel pertama dalam ObjectHeader adalah jumlah pointer atau jumlah referensi.
Letakkan titik henti tulis pada jumlah penunjuk, menggunakan alamat ObjectHeader:
kd> ba w4 81a578a8 "k;g"
Gunakan g (Go). Debugger akan menghasilkan log.
Cari pasangan referensi/dereferensi yang tidak cocok -- khususnya, dereferensi yang hilang. (Perhatikan bahwa ObReferenceObject diimplementasikan sebagai makro di dalam kernel.)