次の方法で共有


FsRtlCheckOplock マクロ (rxprocs.h)

FsRtlCheckOplock ルーチンは、ファイル I/O 操作の IRP をファイルの現在の日和見ロック (oplock) 状態と同期します。

構文

void FsRtlCheckOplock(
   A1,
   A2,
   A3,
   A4,
   A5
);

パラメーター

A1

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

A2

I/O 操作の IRP へのポインター。

A3

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

A4

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

このルーチンは、次のように宣言されています。

typedef VOID
(*POPLOCK_WAIT_COMPLETE_ROUTINE) (
      IN PVOID Context,
      IN PIRP Irp
      );

このルーチンには、次のパラメーターがあります。

コンテキスト

Context パラメーターで FsRtlCheckOplock に渡されたコンテキスト情報ポインター。

Irp

I/O 操作の IRP へのポインター。

A5

I/O 操作が作業キューにポストされた場合に呼び出される呼び出し元から提供されるコールバック ルーチンへのポインター。 このパラメーターは省略可能であり、 NULL にすることができます

このルーチンは、次のように宣言されています。

typedef VOID
(*POPLOCK_FS_PREPOST_IRP) (
      IN PVOID Context,
      IN PIRP Irp
      );

コンテキスト

Context パラメーターで FsRtlCheckOplock に渡されたコンテキスト情報ポインター。

Irp

I/O 操作の IRP へのポインター。

戻り値

なし

解説

FsRtlCheckOplock は、次の条件に従って、I/O 操作の IRP をファイルの現在の日和見ロック状態と同期します。

  • I/O 操作によって日和見ロックが中断する場合、日和見ロックの中断が開始されます。
  • 日和見ロック中断が完了するまで I/O 操作を続行できない場合、 FsRtlCheckOplock はSTATUS_PENDINGを返し、 PostIrpRoutine パラメーターが指すコールバック ルーチンを呼び出します。
ファイル システムまたはフィルター ドライバーが日和見ロックを使用する場合は、日和見ロックの中断を引き起こす可能性がある I/O 操作のディスパッチ ルーチンから FsRtlCheckOplock を呼び出す必要があります。 この規則は、次の種類の I/O 操作に適用されます。これらの操作は、日和見ロックの中断を引き起こす可能性があるためです。

IRP_MJ_CLEANUP

IRP_MJ_CREATE

IRP_MJ_FILE_SYSTEM_CONTROL

IRP_MJ_FLUSH_BUFFERS

IRP_MJ_LOCK_CONTROL

IRP_MJ_READ

IRP_MJ_SET_INFORMATION

IRP_MJ_WRITE

日和見ロックの詳細については、Microsoft Windows SDKドキュメントを参照してください。

ミニフィルターでは、FsRtlCheckOplock ではなく FltCheckOplock を呼び出す必要があります。

要件

要件
サポートされている最小のクライアント このルーチンは、Microsoft Windows 2000 以降のバージョンの Windows オペレーティング システムで使用できます。
対象プラットフォーム ユニバーサル
Header rxprocs.h (FltKernel.h、Ntifs.h を含む)
Library NtosKrnl.lib
[DLL] NtosKrnl.exe
IRQL <= APC_LEVEL

こちらもご覧ください

FSCTL_OPBATCH_ACK_CLOSE_PENDING

FSCTL_OPLOCK_BREAK_ACKNOWLEDGE

FSCTL_OPLOCK_BREAK_ACK_NO_2

FSCTL_OPLOCK_BREAK_NOTIFY

FSCTL_REQUEST_BATCH_OPLOCK

FSCTL_REQUEST_FILTER_OPLOCK

FSCTL_REQUEST_OPLOCK_LEVEL_1

FSCTL_REQUEST_OPLOCK_LEVEL_2

FltCheckOplock

FsRtlCurrentBatchOplock

FsRtlInitializeOplock

FsRtlOplockFsctrl

FsRtlOplockIsFastIoPossible

FsRtlUninitializeOplock