次の方法で共有


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 を指定できます。

AccessModeKernelMode の場合は、このパラメーターを 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)

こちらもご覧ください

ObDereferenceObject

ObReferenceObject

ObReferenceObjectByHandle

ZwClose