Bagikan melalui


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

  1. Letakkan titik henti tepat setelah driver memanggil IoCreateDevice. Dapatkan alamat DeviceObject .

  2. 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.

  3. Letakkan titik henti tulis pada jumlah penunjuk, menggunakan alamat ObjectHeader:

    kd> ba w4 81a578a8 "k;g" 
    
  4. Gunakan g (Go). Debugger akan menghasilkan log.

  5. Cari pasangan referensi/dereferensi yang tidak cocok -- khususnya, dereferensi yang hilang. (Perhatikan bahwa ObReferenceObject diimplementasikan sebagai makro di dalam kernel.)