次の方法で共有


FsRtlOplockBreakH 関数 (ntifs.h)

FsRtlOplockBreakH ルーチンは、日和見ロック (oplocks) CACHE_HANDLE_LEVEL中断します。

構文

NTSTATUS FsRtlOplockBreakH(
  [in]           POPLOCK                       Oplock,
  [in]           PIRP                          Irp,
  [in]           ULONG                         Flags,
  [in, optional] PVOID                         Context,
  [in, optional] POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine,
  [in, optional] POPLOCK_FS_PREPOST_IRP        PostIrpRoutine
);

パラメーター

[in] Oplock

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

[in] Irp

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

[in] Flags

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

OPLOCK_FLAG_COMPLETE_IF_OPLOCKED (0x00000001)

oplock 中断の原因となった操作をブロックまたは保留中にせずに、oplock の中断を続行できるように指定します。

OPLOCK_FLAG_IGNORE_OPLOCK_KEYS (0x00000008)

Windows 7 以降のバージョンでサポートされています。

oplock キーに関係なく、CACHE_HANDLE_LEVEL oplock の中断を続行することを許可するように指定します。

[in, optional] Context

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

[in, optional] CompletionRoutine

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

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

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

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

文脈

Context パラメーターで FsRtlOplockBreakHを するために渡されたコンテキスト情報ポインター。

Irp

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

[in, optional] PostIrpRoutine

I/O 操作をペンドする場合に呼び出される呼び出し元が指定したコールバック ルーチンへのポインター。 ルーチンは、oplock パッケージが IRP をペンする前に呼び出されます。 このパラメーターは省略可能であり、NULLできます。

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

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

文脈

Context パラメーターで FsRtlOplockBreakHを するために渡されたコンテキスト情報ポインター。

Irp

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

戻り値

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

リターン コード 形容
STATUS_CANCELLED
IRP が取り消されました。 STATUS_CANCELLEDはエラー コードです。
STATUS_PENDING
IRP が作業キューにポストされました。 STATUS_PENDINGは成功コードです。
STATUS_CANNOT_BREAK_OPLOCK
日和見ロック (oplock) の中断を実行できません。 IRP はIRP_MJ_CREATE要求です。 FILE_OPEN_REQUIRING_OPLOCK操作の作成オプション パラメーターで指定され、許可された oplock があります。 STATUS_CANNOT_BREAK_OPLOCKはエラー コードです。

備考

操作が oplock CACHE_HANDLE_LEVEL中断する必要がある場合、操作は FsRtlOplockBreakH を呼び出します。

呼び出し元が Flags パラメーターでOPLOCK_FLAG_IGNORE_OPLOCK_KEYS フラグを指定した場合、fsRtlOplockBreakH 、oplock キーに関係なく、すべてのCACHE_HANDLE_LEVEL oplock を中断します。 FsRtlOplockBreakH の既定の動作は、呼び出し元のファイル オブジェクトのキーとキーが一致しない oplock を中断することです。

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

必要条件

要件 価値
サポートされる最小クライアント FsRtlOplockBreakH ルーチンは、Windows 7 以降で使用できます。
ターゲット プラットフォーム の 万国
ヘッダー ntifs.h (Ntifs.h を含む)
ライブラリ NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

関連項目

FltOplockBreakH

FsRtlInitializeOplock