Freigeben über


ObDereferenceObjectDeferDelete-Funktion (wdm.h)

Die ObDereferenceObjectDeferDelete-Routine verringert die Verweisanzahl für das angegebene Objekt, überprüft die Objektaufbewahrung und vermeidet Deadlocks.

Syntax

void ObDereferenceObjectDeferDelete(
  [in] PVOID Object
);

Parameter

[in] Object

Ein Zeiger auf den Textkörper des Objekts.

Rückgabewert

Keine

Bemerkungen

ObDereferenceObjectDeferDelete ähnelt ObDereferenceObject , mit der Ausnahme, dass der Objekt-Manager die Objektlöschanforderung an einen Workerthread übergibt, wenn die Verweisanzahl des Objekts null erreicht. Daher erfolgt der Löschvorgang später bei IRQL = PASSIVE_LEVEL.

Verwenden Sie ObDereferenceObjectDeferDelete für jedes Objekt, wenn das sofortige Löschen durch den aktuellen Thread des Objekts (mithilfe von ObDereferenceObject) zu einem Deadlock führen kann.

Ein solcher Deadlock kann beispielsweise auftreten, wenn ObDereferenceObject verwendet wird, um ein Kernel Transaction Manager-Objekt (KTM) zu dereferenzieren, wenn ein Treiber auf höherer Ebene im Treiberstapel eine Sperre hält.

Um solche Deadlocks zu vermeiden, verwenden Sie ObDereferenceObjectDeferDelete anstelle von ObDereferenceObject , um das KTM-Objekt zu dereferenzieren.

Informationen zur Objektpermanenz und zu Attributen finden Sie unter ObDereferenceObject.

Anforderungen

Anforderung Wert
Zielplattform Universell
Header wdm.h (include Fltkernel.h, Ntifs.h)
Bibliothek NtosKrnl.lib
DLL NtosKrnl.exe
IRQL IRQL <= DISPATCH_LEVEL

Weitere Informationen

ObDereferenceObject

ObReferenceObject