ObDereferenceObjectDeferDeleteWithTag 函式 (wdm.h)

ObDereferenceObjectDeferDeleteWithTag 例程會遞減指定對象的參考計數、延遲刪除物件以避免死結,並將四位元組標記值寫入物件以支援對象參考追蹤

語法

void ObDereferenceObjectDeferDeleteWithTag(
  [in] PVOID Object,
  [in] ULONG Tag
);

參數

[in] Object

物件的指標。 呼叫端會在建立 物件時,或從上一次呼叫 ObReferenceObjectByHandleWithTag 例程開啟對象之後取得這個指標。

[in] Tag

指定四位元組的自訂標籤值。 如需詳細資訊,請參閱接下來的<備註>一節。

傳回值

備註

ObDereferenceObjectDeferDeleteWithTag 類似於 ObDereferenceObjectWithTag ,不同之處在於,當對象的參考計數達到零時, ObDereferenceObjectDeferDeleteWithTag 會將對象刪除要求傳遞給背景工作線程。 在 IRQL = PASSIVE_LEVEL 執行的背景工作線程,稍後會刪除 物件。

如果目前線程立即刪除物件可能會導致死結,請勿呼叫 ObDereferenceObjectWithTag 來取值物件。 請改為呼叫 ObDereferenceObjectDeferDeleteWithTag 來取值物件。

例如,如果 ObDereferenceObjectWithTag 用來取值 核心交易 管理員 (KTM) 對象,當驅動程式堆疊上的較高層級驅動程式持有鎖定時,可能會發生這類死結。

如需物件效能和物件屬性的詳細資訊,請參閱 ObDereferenceObjectWithTag。 如需對象參考的詳細資訊,請參閱 物件的生命週期

ObDereferenceObjectDeferDelete 例程類似於 ObDereferenceObjectDeferDeleteWithTag,不同之處在於它不會讓呼叫端將自定義標記寫入物件。 在 Windows 7 和更新版本的 Windows 中, ObDereferenceObjectDeferDelete 一律會將預設標籤值寫入物件 ('tlfD') 。 對 ObDereferenceObjectDeferDelete 的呼叫與指定 Tag = 'tlfD' 的 ObDereferenceObjectDeferDeleteWithTag 呼叫具有相同的效果。

若要在 Windows 偵錯工具中檢視對象參考追蹤,請使用 !obtrace 內核模式調試程式延伸模組。 在 Windows 7 中,如果已啟用對象參考追蹤, 則會增強 !obtrace 延伸模組以顯示物件參考標記。 根據預設,對象參考追蹤會關閉。 使用 全域旗標編輯器 (Gflags) 來啟用對象參考追蹤。 如需詳細資訊,請參閱 對象參考追蹤與標記

規格需求

需求
最低支援的用戶端 適用於 Windows 7 和更新版本的 Windows 作業系統。
目標平台 Universal
標頭 wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h、Fltkernel.h)
程式庫 NtosKrnl.lib
Dll NtosKrnl.exe
IRQL <= DISPATCH_LEVEL

另請參閱

ObDereferenceObjectDeferDelete

ObDereferenceObjectWithTag

ObReferenceObjectByHandleWithTag