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 を使用して参照カウントをデクリメントする必要があります。
要件
要件 | 値 |
---|---|
対象プラットフォーム | ユニバーサル |
Header | wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む) |
Library | NtosKrnl.lib |
[DLL] | NtosKrnl.exe |
IRQL | IRQL <= DISPATCH_LEVEL |
DDI コンプライアンス規則 | HwStorPortProhibitedDDIs(storport), TargetRelationNeedsRef(wdm) |