次の方法で共有


FsRtlCheckUpperOplock 関数 (ntifs.h)

FsRtlCheckUpperOplock ルーチンは、oplock が変更状態を保持するときに、セカンダリ または階層化されたファイル システムで日和見ロック (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 ハンドル (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 の場合、STATUS_PENDINGを返すのではなく、oplock ブレークの処理中に FsRtlCheckUpperOplock ブロック
STATUS_CANNOT_BREAK_OPLOCK oplock の中断を実行できません。 中断を制限する条件については、「フラグの」を参照してください。
STATUS_PENDING 日和見ロックの中断が進行中です。 指定した場合、PrePendIrpRoutine が保留中の操作の通知として呼び出されます。 CompletionRoutine は、oplock ブレークが完了したときに呼び出されます。 STATUS_PENDINGは成功コードです。

必要条件

要件 価値
サポートされる最小クライアント Windows 8.1
ターゲット プラットフォーム の 万国
ヘッダー ntifs.h (Ntifs.h を含む)
ライブラリ NtosKrnl.lib
DLL NtosKrnl.exe
IRQL IRQL <= APC_LEVEL

関連項目

FsRtlCheckOplockEx

FsRtlUpperOplockFsctrl