FsRtlCheckUpperOplock 関数 (ntifs.h)

FsRtlCheckUpperOplock ルーチンは、変更状態を保持するときに、セカンダリ ファイル システムまたは階層化されたファイル システムで、日和見ロック (oplock) チェックを提供します。 ネットワーク リダイレクターやクラスタリング ファイル サービスなどのセカンダリ ファイル システムは、セカンダリ ファイル システムによって下位ファイル システムに保持されている oplock が状態を変更したときに FsRtlCheckUpperOplock を呼び出します。 状態の変更は、中断またはアップグレードによって発生する可能性があります。 FsRtlCheckUpperOplock は、必要に応じて上位ファイル システムの oplock を中断して、新しい下位 oplock 状態を確認します。 呼び出し元は、中断確認と保留中の状態の通知に対してオプションのコールバックを提供することもできます。

構文

NTSTATUS FsRtlCheckUpperOplock(
  [in]           POPLOCK                       Oplock,
  [in]           ULONG                         NewLowerOplockState,
  [in, optional] PVOID                         CompletionRoutineContext,
  [in, optional] POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine,
                 POPLOCK_FS_PREPOST_IRP        PrePendRoutine,
  [in]           ULONG                         Flags
);

パラメーター

[in] Oplock

ファイルの不透明な oplock ポインター。 このポインターは、 FsRtlInitializeOplock の以前の呼び出しによって初期化されている必要があります。

[in] NewLowerOplockState

セカンダリ ファイル システムによって下位のファイル システムに保持されている要求された oplock を表す値。 これは、次のビットごとの OR の組み合わせです。

意味
OPLOCK_LEVEL_CACHE_READ oplock Read (R) 型を示します。
OPLOCK_LEVEL_CACHE_WRITE oplock Write (W) 型を示します。
OPLOCK_LEVEL_CACHE_HANDLE oplock Handle (H) 型を示します。

[in, optional] CompletionRoutineContext

CompletionRoutine パラメーターと PrePendIrpRoutine パラメーターが指すコールバック ルーチンに渡される呼び出し元定義のコンテキスト情報へのポインター。

[in, optional] CompletionRoutine

呼び出し元が指定したコールバック ルーチンへのポインター。 日和見ロックの中断が進行中の場合、中断が完了すると、このルーチンが呼び出されます。 このパラメーターは省略可能であり、NULL にすることができます。 NULL の場合、呼び出し元は、日和見ロックの中断が完了するまで待機状態になります。

このルーチンの宣言とパラメーターの説明は次のとおりです。

typedef VOID
(*POPLOCK_WAIT_COMPLETE_ROUTINE) (
      _In_ PVOID Context,
      _In_opt_ PIRP Irp
      );
パラメーター 説明
コンテキスト CompletionRoutineContext パラメーターで FsRtlCheckUpperOplock に渡されたコンテキスト情報ポインター。
Irp I/O 操作の IRP への省略可能なポインター。 FsRtlCheckUpperOplock は常にこれを NULL に設定します。

PrePendRoutine

FsRtlCheckUpperOplock がSTATUS_PENDINGを返す場合に呼び出される呼び出し元が指定したコールバック ルーチンへのポインター。 このパラメーターは省略可能であり、NULL にすることができます。

このルーチンの宣言とパラメーターの説明は次のとおりです。

typedef VOID
(*POPLOCK_FS_PREPOST_IRP) (
      _In_ PVOID Context,
      _in_opt_ PIRP Irp
      );
パラメーター 説明
コンテキスト CompletionRoutineContext パラメーターで FsRtlCheckUpperOplock に渡されたコンテキスト情報ポインター。
Irp I/O 操作の IRP への省略可能なポインター。 FsRtlCheckUpperOplock は常にこれを NULL に設定します。

[in] Flags

関連付けられたファイル I/O 操作のビットマスク。 ファイル システムまたはフィルター ドライバーは、 FsRtlCheckUpperOplock の動作を指定するビットを設定します。 Flags パラメーターには、次のオプションがあります。

意味
OPLOCK_UPPER_FLAG_CHECK_NO_BREAK (0x00010000) NewLowerOplockState の値によって oplock が中断された場合は、STATUS_CANNOT_BREAK_OPLOCKを返します。
OPLOCK_UPPER_FLAG_NOTIFY_REFRESH_READ (0x00020000) 読み取り専用 (R) の上部の oplocks を中断し、R 所有者に対して、再び R を要求する可能性があることを通知します。他のすべての上位 oplock チェックでは、STATUS_CANNOT_BREAK_OPLOCKが返されます。

戻り値

FsRtlCheckUpperOplock は、次のいずれかの適切な NTSTATUS コードを返します。

リターン コード 説明
STATUS_SUCCESS oplock の中断は必要ありません。または、中断が確認されました。 CompletionRoutine が NULL の場合、fsRtlCheckUpperOplock は、STATUS_PENDINGを返すのではなく、oplock 中断の処理中にブロックします。
STATUS_CANNOT_BREAK_OPLOCK oplock ブレークは実行できません。 中断を制限する条件については、「 フラグ 」を参照してください。
STATUS_PENDING 日和見ロックの中断が進行中です。 指定した場合、 PrePendIrpRoutine は保留中の操作の通知として呼び出されます。 Oplock の中断が完了すると、CompletionRoutine が呼び出されます。 STATUS_PENDINGは成功コードです。

要件

要件
サポートされている最小のクライアント Windows 8.1
対象プラットフォーム ユニバーサル
Header ntifs.h (Ntifs.h を含む)
Library NtosKrnl.lib
[DLL] NtosKrnl.exe
IRQL IRQL <= APC_LEVEL

こちらもご覧ください

FsRtlCheckOplockEx

FsRtlUpperOplockFsctrl