ObReferenceObjectByPointer 函数 (wdm.h)
ObReferenceObjectByPointer 例程递增给定对象的指针引用计数。
语法
NTSTATUS ObReferenceObjectByPointer(
[in] PVOID Object,
[in] ACCESS_MASK DesiredAccess,
[in, optional] POBJECT_TYPE ObjectType,
[in] KPROCESSOR_MODE AccessMode
);
参数
[in] Object
指向对象主体的指针。
[in] DesiredAccess
指定一个掩码,表示对 对象的请求访问。
[in, optional] ObjectType
指向对象类型的指针。 ObjectType 可以是 *ExEventObjectType、*ExSemaphoreObjectType、*IoFileObjectType、*PsProcessType、*PsThreadType、*SeTokenObjectType、*TmEnlistmentObjectType、*TmResourceManagerObjectType、*TmTransactionManagerObjectType 或 *TmTransactionObjectType。
如果 AccessMode 为 KernelMode,此参数也可以为 NULL。
[in] AccessMode
指示用于访问检查的访问模式。 它必须是 UserMode 或 KernelMode。 较低级别的驱动程序应指定 KernelMode。
返回值
当例程成功递增目标对象正文的引用计数时,ObReferenceObjectByPointer 返回STATUS_SUCCESS。 如果调用是在用户模式下执行的,并且调用方请求的类型与对象正文中的类型不匹配,则例程执行对象类型验证,STATUS_OBJECT_TYPE_MISMATCH返回。 如果请求的类型是符号链接类型 (ObpSymbolicLinkObjectType) ,则无论访问模式是什么,都会返回相同的 NTSTATUS 代码。
备注
调用此例程可防止对象被删除,可能是通过另一个组件对 ObDereferenceObject 或 ZwClose 的调用。 调用方必须使用 ObDereferenceObject 立即递减引用计数,只要使用 对象。
要求
目标平台 | 通用 |
标头 | wdm.h(包括 Wdm.h、Ntddk.h、Ntifs.h) |
Library | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | IRQL <= DISPATCH_LEVEL |
DDI 符合性规则 | HwStorPortProhibitedDDI (storport) , TargetRelationNeedsRef (wdm) |