FsRtlCheckOplockEx 関数 (ntifs.h)
FsRtlCheckOplockEx ルーチンは、ファイル I/O 操作の IRP を、ファイルの現在の日和見ロック (oplock) 状態と同期します。
構文
NTSTATUS FsRtlCheckOplockEx(
[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 操作のビットマスク。 ファイル システムまたはフィルター ドライバーは、fsRtlCheckOplockExの動作
価値 | 意味 |
---|---|
OPLOCK_FLAG_COMPLETE_IF_OPLOCKED (0x00000001) | oplock の中断の原因となった操作をブロックまたは保留中にせずに、日和見ロックの中断を続行できるように指定します。 |
OPLOCK_FLAG_OPLOCK_KEY_CHECK_ONLY (0x00000002) | Windows 7 以降でサポートされています。 FsRtlCheckOplockEx |
OPLOCK_FLAG_BACK_OUT_ATOMIC_OPLOCK (0x00000004) | Windows 7 以降でサポートされています。 FsRtlCheckOplockEx |
OPLOCK_FLAG_IGNORE_OPLOCK_KEYS (0x00000008) | Windows 7 以降でサポートされています。 日和見ロック キーに関係なく、すべての日和見ロックの中断を続行することを許可するように指定します。 |
OPLOCK_FLAG_PARENT_OBJECT (0x00000010) | Windows 8 以降でサポートされています。 Oplock |
OPLOCK_FLAG_CLOSING_DELETE_ON_CLOSE (0x00000020) | Windows 8 以降でサポートされています。
Irp で指定された I/O 操作が、作成オプションでFILE_DELETE_ON_CLOSE フラグが設定された状態で最初に開かれたハンドルのIRP_MJ_CLEANUPであることを指定します。 Irp |
OPLOCK_FLAG_REMOVING_FILE_OR_LINK (0x00000040) | Windows 8 以降でサポートされています。 そのディレクトリ内のファイルまたはリンクを削除するときの親ディレクトリでの日和見ロックの中断の処理を指定します。 指定した場合、このフラグをOPLOCK_FLAG_PARENT_OBJECTと組み合わせる必要があります。 このフラグは、ファイル・システムがリンクまたはファイルを除去する操作を処理する場合に指定する必要があります。 |
[in, optional] Context
[in, optional] CompletionRoutine
呼び出し元が指定したコールバック ルーチンへのポインター。 日和見ロックの中断が進行中の場合は、中断が完了したときにこのルーチンが呼び出されます。 このパラメーターは省略可能であり、NULL にすることができます。 NULL の場合、呼び出し元は、日和見ロックの中断が完了するまで待機状態になります。
このルーチンは、次のように宣言されます。
typedef VOID
(*POPLOCK_WAIT_COMPLETE_ROUTINE) (
IN PVOID Context,
IN PIRP Irp
);
このルーチンには、次のパラメーターがあります。
パラメーター | 形容 |
---|---|
文脈 | |
Irp | I/O 操作の IRP へのポインター。 |
[in, optional] PostIrpRoutine
I/O 操作が作業キューにポストされた場合に呼び出される呼び出し元が指定したコールバック ルーチンへのポインター。 このパラメーターは省略可能であり、NULL にすることができます。
このルーチンは、次のように宣言されます。
typedef VOID
(*POPLOCK_FS_PREPOST_IRP) (
IN PVOID Context,
IN PIRP Irp
);
このルーチンには、次のパラメーターがあります。
パラメーター | 形容 |
---|---|
文脈 | |
Irp | I/O 操作の IRP へのポインター。 |
戻り値
FsRtlCheckOplockEx
リターン コード | 形容 |
---|---|
STATUS_CANCELLED | IRP が取り消されました。 STATUS_CANCELLEDはエラー コードです。 |
STATUS_CANNOT_BREAK_OPLOCK | 日和見ロック (oplock) の中断を実行できません。 IRP はIRP_MJ_CREATE要求です。 FILE_OPEN_REQUIRING_OPLOCK操作の作成オプション パラメーターで指定され、許可された oplock があります。 |
STATUS_OPLOCK_BREAK_IN_PROGRESS | 日和見ロックの中断が進行中です。 IRP はIRP_MJ_CREATE要求であり、操作の作成オプション パラメーターにFILE_COMPLETE_IF_OPLOCKEDが指定されています。 STATUS_OPLOCK_BREAK_IN_PROGRESSは、OPLOCK_FLAG_COMPLETE_IF_OPLOCKEDが設定され、日和見ロックが解除された場合に返される成功コードです。 |
STATUS_PENDING | 日和見ロックの中断が開始され、IRP の制御が oplock パッケージに渡されました。 CompletionRoutine が NULL の場合、このルーチンは、STATUS_PENDINGを返すのではなく、oplock ブレークの処理中にブロックされます。 STATUS_PENDINGは成功コードです。 |
備考
FsRtlCheckOplockEx は、I/O 操作の IRP を、次の条件に従ってファイルの現在の日和見ロック状態と同期します。
I/O 操作によって日和見ロックが中断される場合、日和見ロックの中断が開始されます。
I/O 操作は、日和見ロックの中断が完了し、
CompletionRoutine の完了ルーチンが指定されるまで続行できない場合は、FsRtlCheckOplockEx はSTATUS_PENDINGを返し、PostIrpRoutineで指定されたコールバック ルーチン呼び出します。 日和見ロックの中断が確認されると、CompletionRoutine のコールバック ルーチン 呼び出されます。 I/O 操作は、日和見ロックの中断が完了し、CompletionRoutine が指定されていない
まで続行できない場合、 FsRtlCheckOplockEx は、日和見ロックの中断が確認されるまで戻りません。
CompletionRoutine が指定されている場合にのみ、PostIrpRoutine を指定する必要があります。
ファイル システムまたはフィルター ドライバーが日和見ロックを使用する場合は、I/O 操作のディスパッチ ルーチンから FsRtlCheckOplockEx を呼び出す必要があります。これにより、日和見ロックの中断が発生する可能性があります。 この規則は、次の種類の 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 のドキュメントを参照してください。
ミニフィルターは、FsRtlCheckOplockExではなく、FltCheckOplockEx
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows Vista |
ターゲット プラットフォーム の |
万国 |
ヘッダー | ntifs.h (Ntifs.h を含む) |
ライブラリ | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |
関連項目
FSCTL_OPBATCH_ACK_CLOSE_PENDING
FSCTL_OPLOCK_BREAK_ACKNOWLEDGE
FltCheckOplockEx の