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。 如果 AccessModeKernelMode,此参数可以为 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