操作前コールバック ルーチン内で高速 I/O 操作を許可しない
特定の状況では、ミニフィルター ドライバーが、高速 I/O 操作を完了する代わりに、高速 I/O 操作を許可しないことを選択する場合があります。 高速 I/O 操作を許可しないと、高速 I/O パスを操作で使用できなくなります。
I/O 操作の完了と同様に、高速 I/O 操作を許可しないことは、I/O 操作の処理を停止してフィルター マネージャーに返すことを意味します。 ただし、高速 I/O 操作を許可しないことは、高速 I/O 操作を完了することとは違います。 ミニフィルター ドライバーが、I/O マネージャーによって発行された高速 I/O 操作を許可しない場合、I/O マネージャーは同等の IRP ベース操作と同じ操作を再発行する可能性があります。
ミニフィルター ドライバーの操作前コールバック ルーチンが高速 I/O 操作を許可しないとき、フィルター マネージャーは次のようになります。
現在のミニフィルター ドライバーの下のミニフィルター ドライバー、レガシ フィルターまたはファイル システムに操作を送信しません。
ミニフィルター ドライバー インスタンス スタックの現在のミニフィルター ドライバーの上のミニフィルター ドライバーの操作前コールバック ルーチンを呼び出します。
操作に対して現在のミニフィルター ドライバーの操作後コールバック ルーチンが存在していても呼び出しません。
ミニフィルター ドライバーは、操作の操作前コールバック ルーチンから FLT_PREOP_DISALLOW_FASTIO を返すことで、高速 I/O 操作を許可しません。
操作前コールバック ルーチンで、コールバック データ構造体の IoStatus.Status フィールドを設定してはなりません。フィルター マネージャーによってこのフィールドは自動的に STATUS_FLT_DISALLOW_FAST_IO に設定されるためです。
FLT_PREOP_DISALLOW_FASTIO が返されるのは、高速 I/O 操作の場合のみです。 操作が高速 I/O 操作かどうかを判別するには、「FLT_IS_FASTIO_OPERATION」を参照してください。
ミニフィルター ドライバーは、IRP_MJ_SHUTDOWN、IRP_MJ_VOLUME_MOUNT、IRP_MJ_VOLUME_DISMOUNT 操作に対して FLT_PREOP_DISALLOW_FASTIO を返すことはできません。