Başarısız Sürücü Yüklemesinde Hata Ayıklama

DeviceObject veya DriverObjectiçin sızdırılmış bir başvuru varsa sürücü boşaltmaz. Bu, başarısız sürücü yüklemelerinin yaygın bir nedenidir.

ioCreateDevice dışında, DriverObject ve DeviceObjectreferans alır. İşlevleri kullanma yönergelerini izlemezseniz referansı sızdırmak zorunda kalırsınız.

Bu sorunun hatalarını ayıklamaya yönelik bir örnek aşağıda verilmiştir. Bu örnekte DeviceObject kullanılmış olsa da, bu teknik tüm nesneler için çalışır.

Kaldırılamayan bir sürücüyü düzeltme

  1. Sürücü IoCreateDeviceçağırdıktan hemen sonra bir kesme noktası koyun. DeviceObject adresini alın.

  2. Bu nesne adresinde !object uzantısını kullanarak nesne üst bilgisini bulun:

    kd> !object 81a578c0 
    Object: 81a578c0  Type: (81bd0e70) Device
        ObjectHeader: 81a578a8
        HandleCount: 0  PointerCount: 3
        Directory Object: e1001208  Name: Serial0 
    

    ObjectHeader içindeki ilk değişken, işaretçi sayısı veya başvuru sayısı'dır.

  3. ObjectHeaderadresini kullanarak işaretçi sayısına bir yazma kesme noktası koyun:

    kd> ba w4 81a578a8 "k;g" 
    
  4. g (Go) kullanın. Hata ayıklayıcı bir kayıt oluşturur.

  5. Eşleşmeyen referans/dereferans çiftini arayın — özellikle eksik bir dereferansı. (ObReferenceObject çekirdek içinde bir makro olarak uygulandığını unutmayın.)