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 |