次の方法で共有


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 任意のレベル

関連項目

FLT_CALLBACK_DATA

FLT_IS_FASTIO_OPERATION

FLT_IS_FS_FILTER_OPERATION

FLT_IS_IRP_OPERATION

IoIsOperationSynchronous