ObReferenceObjectByPointerWithTag 函数 (wdm.h)

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

语法

NTSTATUS ObReferenceObjectByPointerWithTag(
  [in]           PVOID           Object,
  [in]           ACCESS_MASK     DesiredAccess,
  [in, optional] POBJECT_TYPE    ObjectType,
  [in]           KPROCESSOR_MODE AccessMode,
  [in]           ULONG           Tag
);

参数

[in] Object

指向 对象的指针。 调用方在创建 对象时获取此指针,或者在打开对象后从之前对 ObReferenceObjectByHandleWithTag 例程的调用获取此指针。

[in] DesiredAccess

指定对调用方请求的对象的访问类型。 此参数是 ACCESS_MASK 类型的位掩码。 此字段的解释取决于对象类型。 请勿使用任何通用访问权限。

[in, optional] ObjectType

指向指定对象类型的不透明结构的指针。 此参数指向 OBJECT_TYPE 结构。 将 ObjectType 设置为 NULL 或以下指针值之一,这些值在 Wdm.h 头文件中声明:*ExEventObjectType, *ExSemaphoreObjectType、*IoFileObjectType、*PsProcessType、*PsThreadType、*SeTokenObjectType、*TmEnlistmentObjectType、*TmResourceManagerObjectType、*TmTransactionManagerObjectType 或 *TmTransactionObjectType。 如果 AccessMode 为 KernelMode,此参数可以为 NULL。 如果 ObjectType 不为 NULL,则例程将验证提供的对象类型是否与 Handle 参数指定的对象的对象类型匹配。

[in] AccessMode

指示用于访问检查的访问模式。 将此参数设置为以下 MODE 枚举值之一:

  • UserMode

  • KernelMode

较低级别的驱动程序应指定 KernelMode

[in] Tag

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

返回值

如果调用成功,ObReferenceObjectByPointerWithTag 将返回STATUS_SUCCESS。 可能的错误返回值包括以下内容:

返回代码 说明
STATUS_OBJECT_TYPE_MISMATCH ObjectType 参数为 Object 参数指向的对象指定错误的对象类型,或者 ObjectTypeNULL,但 AccessModeUserMode

注解

此例程访问指定对象的验证。 如果可以授予访问权限,则例程会递增对象引用计数。 此增量可防止在调用方使用 对象时删除对象。 当不再需要对象时,调用方应通过调用 ObDereferenceObjectWithTagObDereferenceObjectDeferDeleteWithTag 例程来递减引用计数。

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

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

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

要求

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

另请参阅

ACCESS_MASK

OBJECT_TYPE

ObDereferenceObjectDeferDeleteWithTag

ObDereferenceObjectWithTag

ObReferenceObjectByPointer

ZwClose