次の方法で共有


IRP_MJ_FILE_SYSTEM_CONTROL (FS およびフィルター ドライバー)

送信時

I/O マネージャー、他のオペレーティング システム コンポーネント、および他のカーネル モード ドライバーは、IRP_MJ_FILE_SYSTEM_CONTROL 要求を送信します。 たとえば、ユーザー モード アプリケーションが Win32 メソッドを呼び出したときに送信できます。DeviceIoControl ファイル システム I/O 制御 (FSCTL) 要求を送信する関数。

操作: ファイル システム ドライバー

ファイル システム ドライバーまたはレコグナイザーは、マイナー関数コードをチェックして、どのファイル システム制御操作が要求されているかを判断する必要があります。

ファイル システム ドライバーは、次のマイナー関数コードを処理する必要があります。

コード 説明
IRP_MN_KERNEL_CALL このリクエストは、リクエストのソースが信頼できるカーネル コンポーネントであることを除いて、IRP_MN_USER_FS_REQUEST (以下で説明) と同じです。
IRP_MN_MOUNT_VOLUME ボリュームのマウント要求を示します。 ファイル システム ドライバーが、ファイル システムのフォーマットと一致しないボリュームのこの IRP を受信した場合、ファイル システム ドライバーは STATUS_UNRECOGNIZED_VOLUME を返す必要があります。
IRP_MN_USER_FS_REQUEST Microsoft Win32 DeviceIoControl 関数を呼び出したユーザー モード アプリケーション、ZwDeviceIoControlFile または IoBuildDeviceIoControlRequest を呼び出したカーネル モード コンポーネントの代わりに、FSCTL 要求を示します。 FSCTL 要求の詳細については、Windows SDK ドキュメントの「デバイスの入力および出力制御コード」を参照してください。
IRP_MN_VERIFY_VOLUME ボリューム検証リクエストを示します。 リムーバブル メディアの場合、ファイル システムは、メディアが削除されて返却されたことを検出したときにボリュームを検証し、それが依然として同じ既知のボリュームであることを確認する必要があります。 ボリュームが変更された場合、ファイル システムは未処理のハンドルをすべて無効にする必要があります。 この新しいメディア上のファイル システムが変更されている場合にも、エラーが返されます。 このリクエストは、フロッピー ドライブに最もよく使用されます。

ファイル システム レコグナイザーは、次のマイナー関数コードを処理する必要があります。

コード 説明
IRP_MN_LOAD_FILE_SYSTEM ファイル システムのロード要求を示します。

ファイル システム ドライバーまたは認識エンジンは、要求された操作を実行し、IRP を完了する必要があります。

操作: レガシー ファイル システム フィルター ドライバー

フィルター ドライバーは、この IRP をスタック上の次に下位のドライバーに渡す必要があります。

パラメーター

ファイル システムまたはフィルター ドライバーは、指定された IRP で IoGetCurrentIrpStackLocation を呼び出して、IRP 内の独自のスタックの場所へのポインターを取得します。 次のパラメーターでは、IrpIRP を指し、IrpSpIO_STACK_LOCATION を指します。 ドライバーは、IRP の次のメンバーと IRP スタックの場所に設定された情報を使用して、ファイル システム制御要求を処理できます。

  • DeviceObject ターゲット デバイス オブジェクトへのポインターです。

  • Irp->AssociatedIrp.SystemBuffer ターゲット ボリュームのファイル システムまたはファイル システム フィルター ドライバーに渡されるシステム提供の入力バッファーを指します。 METHOD_BUFFERED または METHOD_DIRECT I/O に使用されます。 このパラメータが必須かどうかは、特定のファイル システム制御コードによって異なります。

  • Irp->Ioステータス は、最終的な完了ステータスと要求された操作に関する情報を受け取る IO_STATUS_BLOCK構造体を指します。

  • Irp->MdlAddress ターゲット ボリュームのファイル システムまたはファイル システム フィルタ ドライバに渡される出力バッファを記述するメモリ記述子リスト (MDL) のアドレスです。 METHOD_DIRECT I/O に使用されます。 このパラメータが必要かどうかは、特定の I/O 制御コードによって異なります。

  • Irp->UserBuffer ターゲット ボリュームのファイル システムまたはファイル システム フィルター ドライバーに渡される、呼び出し元が提供する出力バッファーを指します。 METHOD_BUFFERED または METHOD_NEITHER I/O に使用されます。 このパラメータがオプションであるか必須であるかは、特定の I/O 制御コードによって異なります。

  • IrpSp->FileObject は、DeviceObject に関連付けられているファイル オブジェクトを指します。

    IrpSp->FileObject パラメーターには、FILE_OBJECT構造体でもある RelatedFileObject フィールドへのポインターが含まれています。 RelatedFileObject FILE_OBJECT 構造体のフィールドは、IRP_MJ_FILE_SYSTEM_CONTROL の処理中は無効であるため、使用しないでください。

  • IrpSp->フラグ IRP_MN_VERIFY_VOLUME に対して SL_ALLOW_RAW_MOUNT に設定できます。

  • IrpSp->MajorFunction は IRP_MJ_FILE_SYSTEM_CONTROL に設定されます。

  • IrpSp->MinorFunction 次のいずれかの値に設定できます。

    • IRP_MN_KERNEL_CALL
    • IRP_MN_LOAD_FILE_SYSTEM
    • IRP_MN_MOUNT_VOLUME
    • IRP_MN_USER_FS_REQUEST
    • IRP_MN_VERIFY_VOLUME
  • IrpSp->Parameters.FileSystemControl.FsControlCode ターゲット ボリュームのファイル システムまたはファイル システム フィルター ドライバーに渡される FSCTL 関数コードです。 IRP_MN_USER_FS_REQUEST でのみ使用します。

    IOCTL および FSCTL リクエストの詳細については、を参照してください。Using I/O Control Codes および Windows SDK ドキュメントの「デバイスの入出力制御コード」。

  • IrpSp->Parameters.FileSystemControl.InputBufferLength は、Irp->AssociatedIrp.SystemBuffer が指すバッファーのサイズ (バイト単位) です。

  • IrpSp->Parameters.FileSystemControl.OutputBufferLength は、Irp->UserBuffer が指すバッファーのサイズ (バイト単位) です。

  • IrpSp->Parameters.FileSystemControl.Type3InputBufferは、METHOD_NEITHER を使用するカーネル モード リクエストの入力バッファです。

  • IrpSp->Parameters.MountVolume.DeviceObject は、ボリュームがマウントされる実際のデバイスのデバイス オブジェクトを指します。 ボリュームがマウントされる実際のデバイスのデバイス オブジェクトを指します。

  • IrpSp->Parameters.MountVolume.Vpb は、マウントされるボリュームのボリューム パラメータ ブロック (VPB) を指します。 リムーバブル メディアをサポートするファイル システムでは、このパラメータで渡された VPB の代わりに、以前に使用された VPB が使用される場合があります。 このようなファイル システムでは、ボリュームがマウントされた後は、このポインタが有効であると想定できなくなります。 これらのファイル システムをフィルター処理するファイル システム フィルター ドライバーは、次のようにこのパラメーターを使用する必要があります。フィルターは、IRP を下位レベルのドライバーに送信する前に、IrpSp->Parameters.MountVolume.Vpb->RealDevice の値を保存する必要があります。 ボリュームが正常にマウントされると、フィルターはストレージ デバイス オブジェクトへのこのポインターを使用して、正しい VPB ポインターを取得できます。

  • IrpSp->Parameters.VerifyVolume.DeviceObject は、検証するボリュームのデバイス オブジェクトを指します。

  • IrpSp->Parameters.VerifyVolume.Vpb は、検証するボリュームの VPB を指します。

関連項目

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoBuildAsynchronousFsdRequest

IoBuildDeviceIoControlRequest

IoBuildSynchronousFsdRequest

IoGetCurrentIrpStackLocation

IRP

ZwDeviceIoControlFile