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 ベースの操作など、すべてのクラスの操作に対して呼び出すことができます。
必要条件
要件 | 価値 |
---|---|
ターゲット プラットフォーム の | 万国 |
ヘッダー | fltkernel.h (Fltkernel.h を含む) |
ライブラリ | FltMgr.lib |
DLL | Fltmgr.sys |
IRQL | 任意のレベル |
関連項目
IoIsOperationSynchronousの