次の方法で共有


IRP_MJ_FILE_SYSTEM_CONTROL 共用体の FLT_PARAMETERS

操作における FLT_IO_PARAMETER_BLOCK 構造体の MajorFunction フィールドが IRP_MJ_FILE_SYSTEM_CONTROL であるときに使用される共用体コンポーネント。

構文

typedef union _FLT_PARAMETERS {
  ...   ;
  union {
    struct {
      PVPB           Vpb;
      PDEVICE_OBJECT DeviceObject;
    } VerifyVolume;
    struct {
      ULONG                   OutputBufferLength;
      ULONG POINTER_ALIGNMENT InputBufferLength;
      ULONG POINTER_ALIGNMENT FsControlCode;
    } Common;
    struct {
      ULONG                    OutputBufferLength;
      ULONG POINTER_ALIGNMENT  InputBufferLength;
      ULONG POINTER_ALIGNMENT  FsControlCode;
      PVOID                    InputBuffer;
      PVOID                    OutputBuffer;
      PMDL                     OutputMdlAddress;
    } Neither;
    struct {
      ULONG                   OutputBufferLength;
      ULONG POINTER_ALIGNMENT InputBufferLength;
      ULONG POINTER_ALIGNMENT FsControlCode;
      PVOID                   SystemBuffer;
    } Buffered;
    struct {
      ULONG                   OutputBufferLength;
      ULONG POINTER_ALIGNMENT InputBufferLength;
      ULONG POINTER_ALIGNMENT FsControlCode;
      PVOID                   InputSystemBuffer;
      PVOID                   OutputBuffer;
      PMDL                    OutputMdlAddress;
    } Direct;
  } FileSystemControl;
  ...   ;
} FLT_PARAMETERS, *PFLT_PARAMETERS;

メンバー

  • FileSystemControl: 次のメンバーが含まれる構造体。

  • VerifyVolume: IRP_MN_VERIFY_VOLUME 操作に使用される共用体コンポーネント。

  • Vpb: 検証するボリュームのボリューム パラメーター ブロック (VPB) へのポインター。

  • DeviceObject: 検証するボリュームのデバイス オブジェクトへのポインター。

  • Common: IRP_MN_KERNEL_CALL 操作と IRP_MN_USER_FS_REQUEST 操作のすべてのバッファリング メソッドに使用される共用体コンポーネント。

  • Common.OutputBufferLength: Neither.OutputBuffer または Direct.OutputBuffer メンバーが指すバッファーの長さ (バイト単位)。

  • Common.InputBufferLength: Neither.InputBufferBuffered.SystemBuffer、または Direct.InputSystemBuffer メンバーが指すバッファーの長さ (バイト単位)。

  • Common.FsControlCode: ターゲット デバイスのファイル システム、ファイル システム フィルター、またはミニフィルター ドライバーに渡される FSCTL 関数コード。

IOCTL 要求と FSCTL 要求の詳細については、カーネル モードのアーキテクチャ ガイドI/O 制御コードの使用の説明と、Microsoft Windows SDK ドキュメントの「デバイスの入出力制御コード」を参照してください。 (このリソースは、一部の言語や国では利用できない場合があります。)

  • Neither: バッファリング メソッドが METHOD_NEITHER のときに IRP_MN_KERNEL_CALL 操作と IRP_MN_USER_FS_REQUEST 操作に使用される共用体コンポーネント。 バッファリング メソッドの詳細については、「I/O 制御コードの定義」を参照してください。

  • Neither.InputBuffer: 操作の元の要求者が指定した入力バッファーのユーザー モードの仮想アドレス。 I/O マネージャーとフィルター マネージャーでは、これらのアドレスは検証されません。 ユーザー空間アドレスが有効であることを確認するには、ミニフィルターで ProbeForReadProbeForWriteMmProbeAndLockPages などのルーチンを使用し、try/except ブロック内のすべてのバッファー参照を囲む必要があります。 詳細については、「バッファー I/O もダイレクト I/O も使用しない」「ユーザー空間アドレスを参照する際のエラー」を参照してください。

  • Neither.OutputBuffer: 操作の元の要求者が指定した出力バッファーのユーザー モードの仮想アドレス。 I/O マネージャーとフィルター マネージャーでは、これらのアドレスは検証されません。 ユーザー空間アドレスが有効であることを確認するには、ミニフィルターで ProbeForReadProbeForWriteMmProbeAndLockPages などのルーチンを使用し、try/except ブロック内のすべてのバッファー参照を囲む必要があります。 詳細については、「バッファー I/O もダイレクト I/O も使用しない」「ユーザー空間アドレスを参照する際のエラー」を参照してください。 Neither.OutputBuffer は省略可能であり、MDL が Neither.OutputMdlAddress で指定されている場合は NULL にすることができます。 「解説」を参照してください。

  • Neither.OutputMdlAddress: Neither.OutputBuffer メンバーが指すバッファーを記述するメモリ記述子リスト (MDL) のアドレス。 このメンバーは省略可能であり、Neither.OutputBuffer でバッファーが指定されている場合は NULL にすることができます。

  • Buffered: バッファリング メソッドが METHOD_BUFFERED のときに IRP_MN_KERNEL_CALL 操作と IRP_MN_USER_FS_REQUEST 操作に使用される共用体コンポーネント。 バッファリング メソッドの詳細については、「I/O 制御コードの定義」を参照してください。

  • Buffered.SystemBuffer: 操作用にシステムによって割り当てられたバッファーのアドレス。 METHOD_BUFFERED I/O では、このバッファーは入力と出力の両方に使用されます。 詳細については、「データ バッファーにアクセスする方法」を参照してください。

  • Direct: バッファリング メソッドが METHOD_IN_DIRECT または METHOD_OUT_DIRECT のときに IRP_MN_KERNEL_CALL 操作と IRP_MN_USER_FS_REQUEST 操作に使用される共用体コンポーネント。 バッファリング メソッドの詳細については、カーネル モードのアーキテクチャ ガイド「I/O 制御コードの定義」を参照してください。

  • Direct.InputSystemBuffer: 操作の入力バッファーのアドレス。 このバッファーは、カーネル モードから安全にアクセスできるように、オペレーティング システムによってロックダウンされます。 詳細については、「データ バッファーにアクセスする方法」を参照してください。

  • Direct.OutputBuffer: 操作の元の要求者が指定した出力バッファーのユーザー モードの仮想アドレス。 ダイレクト I/O では、METHOD_NEITHER I/O とは異なり、ミニフィルターが I/O 操作の元の要求者と同じプロセス コンテキストにある限り、オペレーティング システムはこのバッファーをロックダウンしてカーネル モードから安全にアクセスできるようにします。 (それ以外の場合は、MmGetSystemAddressForMdlSafe を呼び出して、OutputMdlAddress メンバーが指す MDL からシステム アドレスを取得する必要があります。) 詳細については、「ダイレクト I/O の使用」「ダイレクト I/O のエラー」を参照してください。

  • Direct.OutputMdlAddress: Direct.OutputBuffer メンバーが指すバッファーを記述するメモリ記述子リスト (MDL) のアドレス。 このメンバーは必須であり、NULL にすることはできません。

解説

IRP_MJ_FILE_SYSTEM_CONTROL 操作の FLT_PARAMETERS 構造体には、コールバック データ (FLT_CALLBACK_DATA) 構造体が表すファイル システム制御情報操作のパラメーターが含まれます。 これは、FLT_IO_PARAMETER_BLOCK 構造体に含まれています。

N.OutputBuffer バッファーと N.MdlAddress バッファーの両方が指定されている場合は、ミニフィルターで MDL を使用することをお勧めします。

ミニフィルターが Neither.MdlAddress の値を変更した場合、操作後のコールバックの後、フィルター マネージャーは現在 Neither.MdlAddress に格納されている MDL を解放し、Neither.MdlAddress の以前の値を復元します。

IRP_MJ_FILE_SYSTEM_CONTROL は IRP ベースの操作です。

要件

要件タイプ 要件
ヘッダー Fltkernel.h (Fltkernel.h を含む)

関連項目

FLT_CALLBACK_DATA

FLT_IO_PARAMETER_BLOCK

FLT_IS_FASTIO_OPERATION

FLT_IS_FS_FILTER_OPERATION

FLT_IS_IRP_OPERATION

FLT_PARAMETERS

FltFsControlFile

IoBuildAsynchronousFsdRequest

IoBuildSynchronousFsdRequest

IoVerifyVolume

IRP_MJ_FILE_SYSTEM_CONTROL

MmGetSystemAddressForMdlSafe

MmProbeAndLockPages

ProbeForRead

ProbeForWrite

ZwFsControlFile