ObDereferenceObject-Makro (wdm.h)

Die ObDereferenceObject-Routine verringert die Verweisanzahl des angegebenen Objekts und führt Aufbewahrungsprüfungen durch.

Syntax

void ObDereferenceObject(
  [in]  a
);

Parameter

[in] a

Zeiger auf den Text des Objekts.

Rückgabewert

Keine

Bemerkungen

ObDereferenceObject gibt einen Wert zurück, der für die Systemverwendung reserviert ist. Treiber müssen diesen Wert als VOID behandeln.

ObDereferenceObject verringert die Verweisanzahl eines Objekts um eins. Wenn das Objekt als temporär erstellt wurde (das OBJ_PERMANENT-Flag wurde bei der Erstellung nicht angegeben), und die Verweisanzahl null erreicht, kann das Objekt vom System gelöscht werden.

Ein Treiber kann ein von ihm erstelltes temporäres Objekt löschen, indem er seine Verweisanzahl auf 0 (null) verringert. Ein Treiber darf niemals versuchen, ein Objekt zu löschen, das er nicht erstellt hat.

Ein Objekt ist dauerhaft, wenn es mit dem angegebenen OBJ_PERMANENT-Objektattributeflag erstellt wurde. (Weitere Informationen zu Objektattributen finden Sie unter InitializeObjectAttributes.) Ein permanentes Objekt wird mit einer Verweisanzahl von 1 erstellt, sodass es nicht gelöscht wird, wenn der Treiber es dereferenziert. Ein Treiber kann nur ein permanentes Objekt löschen, das er mithilfe der ZwMakeTemporaryObject-Routine erstellt hat, um es temporär zu machen. Führen Sie die folgenden Schritte aus, um ein permanentes Objekt zu löschen, das Sie erstellt haben:

  1. Rufen Sie ObDereferenceObject auf.

  2. Rufen Sie die entsprechende ZwOpenXxx - oder ZwCreateXxx-Routine auf, um bei Bedarf ein Handle für das Objekt zu erhalten.

  3. Rufen Sie ZwMakeTemporaryObject mit dem in Schritt 2 abgerufenen Handle auf.

  4. Rufen Sie ZwClose mit dem in Schritt 2 abgerufenen Handle auf.

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

Anforderungen

Anforderung Wert
Zielplattform Universell
Header wdm.h (include Wdm.h, Ntddk.h, Ntifs.h, Fltkernel.h)
Bibliothek NtosKrnl.lib
DLL NtosKrnl.exe
IRQL IRQL <= DISPATCH_LEVEL
DDI-Complianceregeln HwStorPortProhibitedDIs(storport)

Weitere Informationen

InitializeObjectAttributes

IoGetDeviceObjectPointer

ObDereferenceObjectDeferDelete

ZwClose

ZwMakeTemporaryObject