ObReferenceObjectWithTag-Makro (wdm.h)
Die ObReferenceObjectWithTag-Routine erhöht die Verweisanzahl des angegebenen Objekts und schreibt einen Tagwert mit vier Byte in das Objekt, um die Ablaufverfolgung von Objektverweisen zu unterstützen.
Syntax
void ObReferenceObjectWithTag(
[in] Object,
[in] Tag
);
Parameter
[in] Object
Ein Zeiger auf das -Objekt. Der Aufrufer ruft diesen Zeiger entweder ab, wenn er das -Objekt erstellt, oder aus einem vorherigen Aufruf der ObReferenceObjectByHandleWithTag-Routine , nachdem das Objekt geöffnet wurde.
[in] Tag
Gibt einen benutzerdefinierten Tagwert mit vier Byte an. Weitere Informationen finden Sie im folgenden Abschnitt "Hinweise".
Rückgabewert
Keine
Bemerkungen
ObReferenceObjectWithTag gibt einen Wert zurück, der für die Systemverwendung reserviert ist. Treiber müssen diesen Wert als VOID behandeln.
ObReferenceObjectWithTag erhöht einfach die Anzahl der Zeigerverweis für ein Objekt, ohne Zugriffsprüfungen für das angegebene Objekt durchzuführen. Im Gegensatz dazu überprüfen die Routinen ObReferenceObjectByHandleWithTag und ObReferenceObjectByPointerWithTag , ob der Aufrufer über die erforderlichen Zugriffsrechte für das Objekt verfügt, und schlägt fehl, wenn der Aufrufer nicht über diese Rechte verfügt.
Ein ObReferenceObjectWithTag-Aufruf verhindert das Löschen des angegebenen Objekts zumindest, bis der Treiber entweder die ObDereferenceObjectWithTag-Routine aufruft oder das Objekt schließt. Nachdem das Objekt nicht mehr benötigt wird, muss der Treiber ObDereferenceObjectWithTag aufrufen, um seinen Verweis auf das Objekt zu entfernen.
Wenn die Verweisanzahl für ein Objekt null erreicht, kann eine Kernelmoduskomponente das Objekt löschen. Ein Treiber kann jedoch nur die objekte löschen, die er erstellt hat, und ein Treiber sollte niemals versuchen, ein Objekt zu löschen, das er nicht erstellt hat.
Weitere Informationen zu Objektverweise finden Sie unter Lebenszyklus eines Objekts.
Die ObReferenceObject-Routine ähnelt ObReferenceObjectWithTag, mit der Ausnahme, dass der Aufrufer kein benutzerdefiniertes Tag in ein Objekt schreiben kann. In Windows 7 und höheren Versionen von Windows schreibt ObReferenceObject immer einen Standardtagwert ('tlfD') in das -Objekt. Ein Aufruf von ObReferenceObject hat die gleiche Auswirkung wie ein Aufruf von ObReferenceObjectWithTag , der Tag = 'tlfD' angibt.
Um eine Objektverweisablaufverfolgung in den Windows-Debugtools anzuzeigen, verwenden Sie die Debuggererweiterung !obtrace im Kernelmodus. In Windows 7 wird die Erweiterung !obtrace erweitert, um Objektverweistags anzuzeigen, wenn die Ablaufverfolgung für Objektverweis aktiviert ist. Standardmäßig ist die Objektverweisablaufverfolgung deaktiviert. Verwenden Sie den Global Flags Editor (Gflags), um die Objektverweisablaufverfolgung zu aktivieren. Weitere Informationen finden Sie unter Objektverweisablaufverfolgung mit Tags.
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Verfügbar in Windows 7 und höheren Versionen des Windows-Betriebssystems. |
Zielplattform | Desktop |
Kopfzeile | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h, Fltkernel.h) |
Bibliothek | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL |
DDI-Complianceregeln | HwStorPortProhibitedDIs(storport) |