FltCheckOplockEx 関数 (fltkernel.h)
ミニフィルター ドライバーは、FltCheckOplockEx ルーチンを呼び出して、ファイルの現在の日和見ロック (oplock) 状態の IRP ベースのファイル I/O 操作のコールバック データ構造を同期します。
構文
FLT_PREOP_CALLBACK_STATUS FLTAPI FltCheckOplockEx(
[in] POPLOCK Oplock,
[in] PFLT_CALLBACK_DATA CallbackData,
[in] ULONG Flags,
[in, optional] PVOID Context,
[in, optional] PFLTOPLOCK_WAIT_COMPLETE_ROUTINE WaitCompletionRoutine,
[in, optional] PFLTOPLOCK_PREPOST_CALLBACKDATA_ROUTINE PrePostCallbackDataRoutine
);
パラメーター
[in] Oplock
ファイルの不透明な oplock ポインター。 このポインターは、FltInitializeOplockを
[in] CallbackData
I/O 操作のコールバック データ FLT_CALLBACK_DATA構造体へのポインター。
[in] Flags
関連付けられているファイル I/O 操作のビットマスク。 ミニフィルター ドライバーは、FltCheckOplockExの動作
OPLOCK_FLAG_COMPLETE_IF_OPLOCKED (0x00000001)
oplock の中断の原因となった操作をブロックまたは保留中にせずに、日和見ロックの中断を続行できるようにします。
OPLOCK_FLAG_OPLOCK_KEY_CHECK_ONLY (0x00000002)
FltCheckOplockEx
OPLOCK_FLAG_BACK_OUT_ATOMIC_OPLOCK (0x00000004)
FsRtlCheckOplockEx が、FltOplockFsctrl ルーチンの呼び出しによって以前に設定された状態を元に戻す必要があることを指定します。 fltOplockFsctrl は、IRP_MJ_CREATE要求が処理されるときに呼び出されます。 このIRP_MJ_CREATE要求は、create options パラメーターのFILE_OPEN_REQUIRING_OPLOCK フラグを指定します。 通常、OPLOCK_FLAG_BACK_OUT_ATOMIC_OPLOCK フラグは、以前に失敗したときにこのような作成要求の最終処理で使用されます。
OPLOCK_FLAG_IGNORE_OPLOCK_KEYS (0x00000008)
日和見ロック キーに関係なく、すべての日和見ロックの中断を続行できるようにします。
[in, optional] Context
WaitCompletionRoutine を
[in, optional] WaitCompletionRoutine
呼び出し元が指定したコールバック ルーチンへのポインター。 oplock の中断が進行中の場合、フィルター マネージャーは、oplock の中断が完了したときに、このルーチンを呼び出します。 このパラメーターは省略可能であり、NULL
このルーチンは、次のように宣言されます。
typedef VOID
(*PFLTOPLOCK_WAIT_COMPLETE_ROUTINE) (
IN PFLT_CALLBACK_DATA CallbackData,
IN PVOID Context
);
このルーチンには、次のパラメーターがあります。
CallbackData
I/O 操作のコールバック データ構造へのポインター。
、WaitCompleteRoutine が呼び出されると、IoStatus サブ構造体にエラー状態 (STATUS_CANCELLED など) が入力される可能性があることに注意してください。 この状態を検査し、適切に対応する必要があります。
文脈
FltCheckOplockExを
[in, optional] PrePostCallbackDataRoutine
I/O 操作が作業キューにポストされた場合に呼び出される呼び出し元が指定したコールバック ルーチンへのポインター。 このパラメーターは省略可能であり、NULL
このルーチンは、次のように宣言されます。
typedef VOID
(*PFLTOPLOCK_PREPOST_CALLBACKDATA_ROUTINE) (
IN PFLT_CALLBACK_DATA CallbackData,
IN PVOID Context
);
CallbackData
I/O 操作のコールバック データ構造へのポインター。
文脈
FltCheckOplockExを
戻り値
FltCheckOplockEx
リターン コード | 形容 |
---|---|
|
FltCheckOplockEx プールの割り当てエラーが発生した |
|
oplock の中断が開始され、フィルター マネージャーが I/O 操作を作業キューにポストしました。 I/O 操作は、CallbackData パラメーターが指すコールバック データによって表されます。 |
|
CallbackData パラメーターが指すコールバック データはペンドされず、I/O 操作が直ちに実行されました。 呼び出し元が Flags パラメーターにOPLOCK_FLAG_COMPLETE_IF_OPLOCKEDを指定した場合、I/O 操作が実行されなかった場合でも、実際には oplock の中断が進行中である可能性があることに注意してください。 これが状況かどうかを判断するために、呼び出し元は、FLT_CALLBACK_DATA コールバック データ構造の IoStatus メンバーの IO_STATUS_BLOCK 構造体の Status メンバーにSTATUS_OPLOCK_BREAK_IN_PROGRESSがあるかどうかを確認する必要があります。 |
備考
ミニフィルター ドライバーは、FltCheckOplockEx
I/O 操作によって oplock が中断される場合、oplock の中断が開始されます。
oplock の中断が完了するまで I/O 操作を続行できない場合、FltCheckOplockEx
はFLT_PREOP_PENDINGを返し、 PrePostCallbackDataRoutine パラメーターが指すコールバック ルーチンを呼び出します。ミニフィルター ドライバーが oplock を使用する場合は、oplock の中断を引き起こす可能性がある I/O 操作の任意の事前操作コールバック (
PFLT_PRE_OPERATION_CALLBACK ) ルーチンから fltCheckOplockEx呼び出す必要があります。 この規則は、次の種類の I/O 操作に適用されます。これらの操作は、oplock の中断を引き起こす可能性があるためです。 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
IRP_MJ_ACQUIRE_FOR_SECTION_SYNCHRONIZATION
I/O 操作は、IRP ベースの I/O 操作である必要があります。 特定のコールバック データ構造が IRP ベースの I/O 操作を表すかどうかを判断するには、FLT_IS_IRP_OPERATION マクロを使用します。
ミニフィルターは、WaitCompletionRoutineで指定されたコールバック内で FltCheckOplockEx
日和見ロックの詳細については、Microsoft Windows SDK のドキュメントを参照してください。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | FltCheckOplockEx ルーチンは、Windows 7 以降で使用できます。 |
ターゲット プラットフォーム の |
万国 |
ヘッダー | fltkernel.h (Fltkernel.h を含む) |
ライブラリ | FltMgr.lib |
IRQL | <= APC_LEVEL |
関連項目
FltInitializeOplock の
FltOplockFsctrl を