Makro ObDereferenceObject (wdm.h)

ObDereferenceObject secara rutin mengurangi jumlah referensi objek yang diberikan dan melakukan pemeriksaan retensi.

Sintaks

void ObDereferenceObject(
  [in]  a
);

Parameter

[in] a

Arahkan ke isi objek.

Nilai kembali

Tidak ada

Keterangan

ObDereferenceObject mengembalikan nilai yang dicadangkan untuk penggunaan sistem. Driver harus memperlakukan nilai ini sebagai VOID.

ObDereferenceObject mengurangi jumlah referensi objek satu per satu. Jika objek dibuat sebagai sementara (bendera OBJ_PERMANENT tidak ditentukan pada pembuatan), dan jumlah referensi mencapai nol, objek dapat dihapus oleh sistem.

Driver dapat menghapus objek sementara yang dibuatnya dengan mengurangi jumlah referensinya menjadi nol. Driver tidak boleh mencoba menghapus objek yang tidak dibuatnya.

Objek bersifat permanen jika dibuat dengan bendera atribut objek OBJ_PERMANENT yang ditentukan. (Untuk informasi selengkapnya tentang atribut objek, lihat InitializeObjectAttributes.) Objek permanen dibuat dengan jumlah referensi satu, sehingga tidak dihapus ketika driver mendereferensikannya. Driver hanya dapat menghapus objek permanen yang dibuatnya dengan menggunakan rutinitas ZwMakeTemporaryObject untuk membuatnya sementara. Gunakan langkah-langkah berikut untuk menghapus objek permanen yang Anda buat:

  1. Panggil ObDereferenceObject.

  2. Panggil rutinitas ZwOpenXxx atau ZwCreateXxx yang sesuai untuk mendapatkan handel untuk objek, jika perlu.

  3. Panggil ZwMakeTemporaryObject dengan handel yang diperoleh di langkah 2.

  4. Panggil ZwClose dengan handel yang diperoleh di langkah 2.

Gunakan ObDereferenceObjectDeferDelete alih-alih ObDereferenceObject untuk objek apa pun, terutama objek Kernel Transaction Manager (KTM), ketika penghapusan segera oleh utas objek saat ini (dengan menggunakan ObDereferenceObject) dapat mengakibatkan kebuntuan.

Persyaratan

Persyaratan Nilai
Target Platform Universal
Header wdm.h (termasuk Wdm.h, Ntddk.h, Ntifs.h, Fltkernel.h)
Pustaka NtosKrnl.lib
DLL NtosKrnl.exe
IRQL IRQL <= DISPATCH_LEVEL
Aturan kepatuhan DDI HwStorPortProhibitedDDIs(storport)

Lihat juga

InitializeObjectAttributes

IoGetDeviceObjectPointer

ObDereferenceObjectDeferDelete

ZwClose

ZwMakeTemporaryObject