ObReferenceObjectWithTag 宏 (wdm.h)

ObReferenceObjectWithTag 例程递增指定对象的引用计数,并将四字节标记值写入对象以支持对象引用跟踪

语法

void ObReferenceObjectWithTag(
  [in]  Object,
  [in]  Tag
);

参数

[in] Object

指向对象的指针。 调用方在创建对象时或从上一次调用 ObReferenceObjectByHandleWithTag 例程打开对象后获取此指针。

[in] Tag

指定四字节自定义标记值。 有关更多信息,请参见下面的“备注”部分。

返回值

备注

ObReferenceObjectWithTag 返回为系统使用保留的值。 驱动程序必须将此值视为 VOID。

ObReferenceObjectWithTag 只是递增对象的指针引用计数,而无需对指定对象进行任何访问检查。 相反, ObReferenceObjectByHandleWithTagObReferenceObjectByPointerWithTag 例程验证调用方是否具有对象所需的访问权限,如果调用方没有这些权限,则失败。

ObReferenceObjectWithTag 调用至少会阻止删除指定的对象,直到驱动程序调用 ObDereferenceObjectWithTag 例程,或关闭对象。 不再需要对象后,驱动程序必须调用 ObDereferenceObjectWithTag 以删除对对象的引用。

当对象的引用计数达到零时,内核模式组件可以删除该对象。 但是,驱动程序只能删除它创建的对象,并且驱动程序绝不应尝试删除它未创建的任何对象。

有关对象引用的详细信息,请参阅 对象的生命周期

ObReferenceObject 例程类似于 ObReferenceObjectWithTag,只不过它不允许调用方将自定义标记写入对象。 在 Windows 7 及更高版本的 Windows 中, ObReferenceObject 始终向对象写入默认标记值 ('tlfD') 。 对 ObReferenceObject 的调用与对 ObReferenceObjectWithTag 的调用的效果相同,该 调用指定 Tag = 'tlfD'。

若要在 Windows 调试工具中查看对象引用跟踪,请使用 !obtrace 内核模式调试器扩展。 在 Windows 7 中,如果启用了对象引用跟踪, 则会增强 !obtrace 扩展以显示对象引用标记。 默认情况下,对象引用跟踪处于关闭状态。 使用 全局标志编辑器 (Gflags) 启用对象引用跟踪。 有关详细信息,请参阅 带有标记的对象引用跟踪

要求

   
最低受支持的客户端 在 Windows 7 及更高版本的 Windows 操作系统中可用。
目标平台 桌面
Header wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h、Fltkernel.h)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
DDI 符合性规则 HwStorPortProhibitedDDI (storport)

请参阅

ObDereferenceObjectWithTag

ObReferenceObject

ObReferenceObjectByHandleWithTag

ObReferenceObjectByPointerWithTag