FltIsOperationSynchronous 関数 (fltkernel.h)
FltIsOperationSynchronous ルーチンは、特定のコールバック データ構造 (FLT_CALLBACK_DATA) が同期または非同期の I/O 操作を表すかどうかを決定します。
構文
BOOLEAN FLTAPI FltIsOperationSynchronous(
[in] PFLT_CALLBACK_DATA CallbackData
);
パラメーター
[in] CallbackData
操作のコールバック データ構造へのポインター (FLT_CALLBACK_DATA)。
戻り値
FltIsOperationSynchronous は、操作が同期の場合は TRUE、操作が非同期の場合は FALSE を返します。
注釈
FltIsOperationSynchronous は、次の条件に従って、特定のコールバック データ構造 (FLT_CALLBACK_DATA) が同期または非同期の I/O 操作を表すかどうかを決定します。
操作が IRP ベースの I/O 操作でない場合、操作は同期です。 操作が IRP ベースであるかどうかを判断するには、 FLT_IS_IRP_OPERATION マクロを使用します。
操作が非同期ページング I/O 操作の場合、このリスト内の他の条件のいずれかが true の場合でも、操作は非同期です。
操作が同期ページング I/O 操作である場合、操作は同期です。
操作のファイル オブジェクトが同期 I/O 用に開かれた場合、操作は同期です。
操作の IRP でIRP_SYNCHRONOUS_API フラグが設定されている場合、操作は同期です。 このフラグは、非同期 I/O 用に開かれたファイル オブジェクトに対して実行された場合でも、常に同期的なIRP_MJ_QUERY_INFORMATIONやIRP_MJ_SET_INFORMATIONなどの操作に設定されます。
上記の条件に該当しない場合、操作は非同期です。
注意
FltIsOperationSynchronous は、コールバック データ構造が、非同期 I/O 用にファイル オブジェクトが開かれた場合でも、METHOD_BUFFEREDで定義された I/O 制御コード (IOCTL) またはファイル システム制御コード (FSCTL) を使用してIRP_MJ_DEVICE_CONTROL、IRP_MJ_INTERNAL_DEVICE_CONTROL、またはIRP_MJ_FILE_SYSTEM_CONTROL操作を表す場合にも TRUE を返します。 このような要求はファイル システムによって同期的に行われる可能性がありますが、これは必ずしもすべての場合に当てはまるとは限りません。
FltIsOperationSynchronous が TRUE を返した場合、I/O 操作が同期されていることを示すわけではありません。 つまり、TRUE 値は、ミニフィルター ドライバーがこの操作の事前操作コールバック (PFLT_POST_OPERATION_CALLBACK) ルーチンでFLT_PREOP_SYNCHRONIZE返されたことを示していません。 代わりに、 FltIsOperationSynchronous は TRUE を返して、I/O 操作が I/O マネージャーの観点から同期していることを示します。
FltIsOperationSynchronous は、高速 I/O、ファイル システム フィルター (FSFilter) コールバック、IRP ベースの操作など、すべての操作クラスに対して呼び出すことができます。
要件
要件 | 値 |
---|---|
対象プラットフォーム | ユニバーサル |
Header | fltkernel.h (Fltkernel.h を含む) |
Library | FltMgr.lib |
[DLL] | Fltmgr.sys |
IRQL | 任意のレベル |