次の方法で共有


I/O 操作用のパラメーターの修正

ミニフィルター ドライバーは、I/O 操作のパラメーターを変更できます。 たとえば、ミニフィルター ドライバーの操作前コールバック ルーチンは、操作のターゲット インスタンスを変更することで、I/O 操作を別のボリュームにリダイレクトできます。 新しいターゲット インスタンスは、別のボリューム上の同じ高度にある同じミニフィルター ドライバーのインスタンスである必要があります。

I/O 操作のパラメータはコールバック データ (FLT_CALLBACK_DATA) 構造体内と、I/O パラメーター ブロック (FLT_IO_PARAMETER_BLOCK) 操作のための構造体内にあります。 ミニフィルタードライバーの操作前コールバック ルーチン操作後のコールバック ルーチン での操作のコールバック データ構造へのポインタを受け取ります。データ 入力パラメータ。 Iopbコールバック データ構造のメンバーは、操作のパラメータを含む I/O パラメータ ブロック構造へのポインタです。

ミニフィルター ドライバーの操作前コールバック ルーチンが I/O 操作のパラメーターを変更した場合、ミニフィルター ドライバー インスタンス スタック内のそのミニフィルター ドライバーの下にあるすべてのミニフィルター ドライバーは、操作前と操作後のコールバック ルーチンで変更されたパラメーターを受け取ります。

変更されたパラメーターは、現在のミニフィルター ドライバーの操作後コールバック ルーチン、またはミニフィルター ドライバー インスタンス スタック内のそのミニフィルター ドライバーより上のミニフィルター ドライバーでは受信されません。 どのような状況でも、ミニフィルター ドライバーの操作前および操作後のコールバック ルーチンは、特定の I/O 操作に対して同じ入力パラメーター値を受け取ります。

I/O 操作のパラメーターを変更した後、操作前または操作後のコールバック ルーチンは、コールバック データ構造体の IoStatus フィールドの内容を変更していない限り、FltSetCallbackDataDirty を呼び出して変更したことを示す必要があります。 それ以外の場合、フィルター マネージャーはパラメーター値の変更を無視します。 FltSetCallbackDataDirty I/O 操作のコールバック データ構造に FLTFL_CALLBACK_DATA_DIRTY フラグを設定します。 ミニフィルター ドライバーは、FltClearCallbackDataDirty を呼び出してこのフラグをテストするか、FltIsCallbackDataDirty を呼び出してクリアできます。

ミニフィルター ドライバーの事前操作コールバック ルーチンが I/O 操作のパラメーターを変更する場合、ミニフィルター ドライバー インスタンス スタック内のそのミニフィルター ドライバーの下にあるすべてのミニフィルター ドライバーは、変更されたパラメーターを受け取ります。データFltObjects 操作前および操作後のコールバック ルーチンにパラメータを入力します。 (ミニフィルター ドライバーは、FltObjects パラメーターが指す FLT_RELATED_OBJECTS 構造体の内容を直接変更することはできません。ただし、ミニフィルター ドライバーが I/O 操作のターゲット インスタンスまたはターゲット ファイル オブジェクトを変更した場合、フィルター マネージャーは、下位のミニフィルター ドライバーに渡される FltObjects 構造体の対応する インスタンス または FileObject メンバーの値を変更します)。

ミニフィルター ドライバーの操作前コールバック ルーチンが行うパラメーターの変更は、ミニフィルター ドライバー独自の操作後コールバック ルーチンによって受信されませんが、操作前コールバック ルーチンは、変更されたパラメーターに関する情報をミニフィルター ドライバー独自の操作後コールバック ルーチンに渡すことができます。 操作前コールバック ルーチンが FLT_PREOP_SUCCESS_WITH_CALLBACK または FLT_PREOP_SYNCHRONIZE を返し、I/O 操作をスタックに渡す場合は、変更されたパラメーター値に関する情報を、CompletionContext 出力パラメーターが指すミニフィルター ドライバー定義構造体に格納できます。 フィルター マネージャーは、この構造体ポインターを CompletionContext 入力パラメーターで操作後のコールバック ルーチンに渡します。

I/O 操作のパラメータの詳細については、「FLT_CALLBACK_DATA」と「FLT_IO_PARAMETER_BLOCK」を参照してください。