次の方法で共有


FltReissueSynchronousIo 関数 (fltkernel.h)

FltReissueSynchronousIo は 、以前に同期された I/O 操作のパラメーターを使用する新しい同期 I/O 操作を開始します。

構文

VOID FLTAPI FltReissueSynchronousIo(
  [in] PFLT_INSTANCE      InitiatingInstance,
  [in] PFLT_CALLBACK_DATA CallbackData
);

パラメーター

[in] InitiatingInstance

I/O 操作を再開するミニフィルター ドライバー インスタンスへの不透明なインスタンス ポインター。 前の I/O 操作を開始したのと同じインスタンスである必要があります。 このパラメーターは必須であり、NULL に設定することはできません。

[in] CallbackData

以前に同期された I/O 操作からのコールバック データ (FLT_CALLBACK_DATA) 構造体へのポインター。 このパラメーターは必須であり、NULL に設定することはできません。

戻り値

なし

解説

ミニフィルター ドライバーは、同期された I/O 要求を再発行する事後コールバック (PFLT_POST_OPERATION_CALLBACK) ルーチンから FltReissueSynchronousIo を呼び出します。 通常、別のパラメーターで失敗した操作を再発行したり、再解析バウンスを処理したりするために、Postoperation コールバック ルーチンから FltReissueSynchronousIo を呼び出します。 ただし、 FltReissueSynchronousIo を呼び出して、 FltAllocateCallbackData ルーチンと FltPerformSynchronousIo ルーチンの呼び出しによってミニフィルター ドライバーが生成した I/O を再発行することもできます。 この状況では、Postoperation コールバック ルーチンで FltReissueSynchronousIo を呼び出すか、操作コールバック ルーチンのコンテキスト外で呼び出すかは関係ありません。 postoperation コールバック ルーチンのコンテキスト外の呼び出しの場合は、代わりに FltReuseCallbackData ルーチンと FltPerformSynchronousIo ルーチンの使用を検討してください。

呼び出し元は、I/O 要求を再発行する前に、コールバック データ (FLT_CALLBACK_DATA) 構造体の I/O パラメーター ブロックの内容を変更できます。 その場合は、FltReissueSynchronousIo を呼び出す前に FltSetCallbackDataDirty を呼び出す必要があります。

たとえば、ミニフィルター ドライバーが再解析ポイントを使用し、その作成後のコールバック ルーチンが、STATUS_REPARSEを返した作成操作に対して呼び出された場合、ミニフィルター ドライバーは、独自の再解析ポイントの作成操作を再発行できます。 この場合、ミニフィルター ドライバーは次の手順を完了します。

  1. コールバック データ構造体の I/O パラメーター ブロックで、FILE_OPEN_REPARSE_POINT フラグを設定します。

  2. FltSetCallbackDataDirty を呼び出します。

  3. FltReissueSynchronousIo を呼び出して、作成要求を再発行します。

フィルター マネージャーは、( InitiatingInstance パラメーターで指定された) 開始インスタンスの下にアタッチされているミニフィルター ドライバー インスタンスとファイル システムにのみ、再発行された I/O 要求を送信します。 開始インスタンスの上にアタッチされたミニフィルター ドライバー インスタンスは、再発行された I/O 要求を受け取りません。

同期された I/O 操作のみを再発行できます。 ドライバーに再発行機能を提供するには、postoperation コールバック ルーチンで FltReissueSynchronousIo を 呼び出すことによって、ミニフィルター ドライバーは、プリ操作コールバック ルーチンでFLT_PREOP_SYNCHRONIZEを明示的に返す必要があります。

注意

ミニフィルター ドライバーは 、FltIsOperationSynchronous ルーチンを呼び出して、この操作の事前操作コールバック ルーチンがFLT_PREOP_SYNCHRONIZE返されたかどうかを判断しません。 ミニフィルター ドライバーは FltIsOperationSynchronous を呼び出して、操作自体が I/O マネージャーの観点から同期しているかどうかを判断します。

IRP ベースの I/O 操作のみを再発行できます。 高速 I/O 操作とファイル システム フィルター (FSFilter) コールバック操作は再発行できません。 I/O 操作が IRP ベースであるかどうかを判断するには、 FLT_IS_IRP_OPERATION マクロを使用します。

取り消された作成 (IRP_MJ_CREATE) 操作は再発行できません。 作成操作に対して FltReissueSynchronousIo を呼び出す前に、呼び出し元は作成操作のファイル オブジェクトの Flags メンバーをチェックする必要があります。 FO_FILE_OPEN_CANCELLED フラグが設定されている場合は、作成操作が取り消され、このファイル オブジェクトに対してクローズ (IRP_MJ_CLOSE) 操作が発行されることを意味します。 取り消された作成操作に対して FltReissueSynchronousIo が呼び出された場合、フィルター マネージャーは再発行された I/O 要求をSTATUS_CANCELLEDで失敗します。

注意

ミニフィルター ドライバーが作成後のコールバックで作成を再発行する場合、再解析ポイント (CallbackDataTagData フィールド) に関連付けられているバッファーを解放して NULL に設定する必要はありません。 代わりに、フィルター マネージャーはバッファーを解放し、それらに対して NULL に設定します。

要件

要件
サポートされている最小のクライアント Windows 2000 Update Rollup 1 for SP4;Windows XP SP2
サポートされている最小のサーバー Windows Server 2003 SP1
対象プラットフォーム ユニバーサル
Header fltkernel.h (FltKernel.h を含む)
Library FltMgr.lib
[DLL] Fltmgr.sys
IRQL <= APC_LEVEL (非ページング IO はPASSIVE_LEVELでのみ再発行できます)

こちらもご覧ください

FLT_CALLBACK_DATA

FLT_IS_FASTIO_OPERATION

FLT_IS_FS_FILTER_OPERATION

FLT_IS_IRP_OPERATION

FLT_IS_REISSUED_IO

FLT_PARAMETERS (IRP_MJ_CREATE 用)

FltCancelFileOpen

FltIsOperationSynchronous

FltPerformSynchronousIo

FltReuseCallbackData

FltSetCallbackDataDirty

IRP_MJ_CLOSE

IRP_MJ_CREATE

PFLT_POST_OPERATION_CALLBACK

PFLT_PRE_OPERATION_CALLBACK