次の方法で共有


FltPerformAsynchronousIo 関数 (fltkernel.h)

ミニフィルター ドライバーは、FltPerformAsynchronousIo 呼び出して、非同期 I/O 操作を開始します。

構文

NTSTATUS FLTAPI FltPerformAsynchronousIo(
  [in, out] PFLT_CALLBACK_DATA               CallbackData,
  [in]      PFLT_COMPLETED_ASYNC_IO_CALLBACK CallbackRoutine,
  [in]      PVOID                            CallbackContext
);

パラメーター

[in, out] CallbackData

FltAllocateCallbackData への以前の呼び出しによって割り当てられたコールバック データ (FLT_CALLBACK_DATA) 構造体ポインター。 このパラメーターは必須であり、NULL することはできません。 呼び出し元は、FltFreeCallbackData 呼び出すことによって、この構造体が不要になったときにこの構造体を解放する役割を担います。

[in] CallbackRoutine

I/O 操作の完了時に呼び出される PFLT_COMPLETED_ASYNC_IO_CALLBACK型指定されたコールバック ルーチンへのポインター。 注: フィルター マネージャーは、開始インスタンスの下にインスタンスがアタッチされているミニフィルター ドライバーのポスト操作コールバック (PFLT_POST_OPERATION_CALLBACK) ルーチンを呼び出した後に、このルーチンを呼び出します (FltAllocateCallbackData するために Instance パラメーターで指定)。 このパラメーターは必須であり、NULL することはできません。 FltPerformAsynchronousIo が失敗した場合でも、フィルター マネージャーは常にこのルーチンを呼び出します。

[in] CallbackContext

CallbackRoutine に渡されるコンテキスト ポインター このパラメーターは省略可能であり、NULL できます。

戻り値

FltPerformAsynchronousIo は、ファイル システムによって I/O 操作が完了したことを示すSTATUS_SUCCESSを返し、CallbackRoutine が指すコールバック ルーチンが呼び出されたことを示します。 それ以外の場合は、次のいずれかの適切な NTSTATUS 値を返します。

リターン コード 形容
STATUS_FLT_INVALID_ASYNCHRONOUS_REQUEST IRP_MJ_CREATE要求は非同期的に実行できません。 これはエラー コードです。
STATUS_PENDING STATUS_PENDING返された操作。 Filter Manager は、CallbackRoutine が I/O 操作が完了したときに指すコールバック ルーチンを呼び出します。 このコードは、操作が開始されたことを示します。
STATUS_FLT_IO_COMPLETE 操作は、開始インスタンスの下にインスタンスがアタッチされているミニフィルター ドライバーの事前操作コールバック ルーチンによって完了しました。

備考

ミニフィルター ドライバーは、FltPerformAsynchronousIo を呼び出して、FltAllocateCallbackData を呼び出して操作のコールバック データ構造 割り当てた後、非同期 I/O 操作を開始します。

FltPerformAsynchronousIo は、開始インスタンス (FltAllocateCallbackData するために Instance パラメーターで指定) の下にアタッチされているミニフィルター ドライバー インスタンスとファイル システムにのみ I/O 操作を送信します。 指定したインスタンスの上に接続されているミニフィルター ドライバーは、I/O 操作を受け取りません。

ミニフィルター ドライバーは、IRP ベースの I/O 操作のみを開始できます。 高速 I/O またはファイル システム フィルター (FSFilter) コールバック操作を開始できません。

ミニフィルター ドライバーでは、次のようなルーチンを使用できない非同期 I/O 操作に対してのみ、fltPerformAsynchronousIo を使用する必要があります。

  • FltReadFile

  • FltWriteFile

IRP_MJ_CREATE要求は非同期的に実行できません。

コールバック データ (FLT_CALLBACK_DATA) 構造体は、CallbackRoutine が呼び出されたコールバック ルーチン 後にいつでも解放または再利用できます。 呼び出し元は、FltFreeCallbackData 呼び出してコールバック データ構造を解放したり、FltReuseCallbackData 呼び出して再利用できるように準備したりできます。

手記

STATUS_SUCCESSとSTATUS_FLT_IO_COMPLETEは、I/O 操作が完了したことを示しますが、I/O 操作の最終的な状態は示しません。 基になるミニフィルター ドライバー、フィルター ドライバー、およびファイル システムによって返される実際の操作状態を確認するには、CallbackRoutine は、CallbackRoutine's CallbackContext パラメーターで受信したコールバック データ構造の IoStatus メンバーを調べる必要があります。

Filter Manager は常に、CallbackRoutine が指すコールバック ルーチン 呼び出します。FltPerformAsynchronousIo が失敗した場合でも、ミニフィルター ドライバーはコールバック ルーチンで直接、解放操作または再利用操作を実行できます。

FltPerformAsynchronousIo の呼び出し元は、操作の FLT_IO_PARAMETER_BLOCK 構造体の IrpFlags メンバーでIRP_PAGING_IO フラグが設定されている場合、IRQL <= APC_LEVEL で実行できます。 (このフラグは、IRP_MJ_READ、IRP_MJ_WRITE、IRP_MJ_QUERY_INFORMATION、およびIRP_MJ_SET_INFORMATION操作でのみ有効です)。それ以外の場合、呼び出し元は IRQL PASSIVE_LEVELで実行されている必要があります。

必要条件

要件 価値
ターゲット プラットフォーム 万国
ヘッダー fltkernel.h (Fltkernel.h を含む)
ライブラリ FltMgr.lib
DLL Fltmgr.sys
IRQL 「解説」セクションを参照してください。

関連項目

FLT_CALLBACK_DATA

FLT_IO_PARAMETER_BLOCK

FltAllocateCallbackData

FltFreeCallbackData

FltPerformSynchronousIo

FltReuseCallbackData する

IRP_MJ_CREATE

PFLT_COMPLETED_ASYNC_IO_CALLBACK

PFLT_POST_OPERATION_CALLBACK