次の方法で共有


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

こちらもご覧ください

FLT_CALLBACK_DATA

FLT_IS_FASTIO_OPERATION

FLT_IS_FS_FILTER_OPERATION

FLT_IS_IRP_OPERATION

IoIsOperationSynchronous