次の方法で共有


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

送信時

I/O マネージャー、他のオペレーティング システム コンポーネント、および他のカーネル モード ドライバーは、IRP_MJ_DIRECTORY_CONTROL 要求を送信します。 たとえば、ユーザー モード アプリケーションが ReadDirectoryChangesWFindNextVolumeMountPoint などの Win32 関数を呼び出した場合やカーネル モード コンポーネントが ZwQueryDirectoryFile または ZwQueryDirectoryFileEx を呼び出した場合に送信できます。

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

ファイル システム ドライバーは、マイナー関数コードをチェックして、どのディレクトリ制御操作が要求されているかを判断する必要があります。 有効なマイナー機能コードは次のとおりです。

コード 説明
IRP_MN_QUERY_DIRECTORY ディレクトリクエリリクエストを示します。 クエリできる情報の種類はファイル システムに依存しますが、通常は次の値が含まれます: File BothDirectoryInformation、FileDirectoryInformation、FileFullDirectoryInformation、FileId BothDirectoryInformation、FileIdFullDirectoryInformation、FileNamesInformation、FileObjectIdInformation、FileReparsePointInformation。
IRP_MN_NOTIFY_CHANGE_DIRECTORY ディレクトリへの変更の通知の要求を示します。 通常、ファイル システム ドライバーは、この要求をすぐに満たすのではなく、IRP をプライベート キューに保持します。 ディレクトリに変更が発生すると、ファイル システム ドライバーが通知を実行し、IRP をキューから取り出して完了します。 ファイル システム ドライバーは情報をFILE_NOTIFY_INFORMATION 構造体の形式で返します。
IRP_MN_NOTIFY_CHANGE_DIRECTORY_EX ディレクトリへの変更の通知の要求を示します。 通常、ファイル システム ドライバーは、この要求をすぐに満たすのではなく、IRP をプライベート キューに保持します。 ディレクトリに変更が発生すると、ファイル システム ドライバーが通知を実行し、IRP をキューから取り出して完了します。 ファイル システム ドライバーは、指定されたIrpSp->Parameters.NotifyDirectoryEx.DirectoryNotifyInformationClass に基づいて情報を返します。

Note

FileQuotaInformation 情報クラスは廃止されました。 IRP_MJ_QUERY_QUOTA を代わりに使用する必要があります。

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

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

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

パラメーター

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

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

  • Irp->AssociatedIrp.SystemBuffer は、最終的な完了状態と要求された操作に関する情報を受け取る IO_STATUS_BLOCK 構造体を指します。

  • Irp->UserBufferディレクトリの内容に関する要求された情報を受け取る、呼び出し元が指定した出力バッファーを指します。

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

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

  • IrpSp->フラグ を、IRP_MN_QUERY_DIRECTORYには、次の値の 1 つ以上に設定できます。

フラグ 意味
SL_INDEX_SPECIFIED IrpSp->Parameters.QueryDirectory.FileIndex によってインデックスが指定されたディレクトリ内のエントリからスキャンを開始します。
SL_RESTART_SCAN ディレクトリの最初のエントリからスキャンを開始します。 このフラグが設定されていない場合は、前の IRP_MN_QUERY_DIRECTORY リクエストからスキャンを再開します。
SL_RETURN_SINGLE_ENTRY 見つかった最初のエントリのみを返します。
SL_RETURN_ON_DISK_ENTRIES_ONLY ディレクトリ仮想化またはジャストインタイム拡張を実行するフィルターに対して、単純にリクエストをファイル システムに渡し、現在ディスク上にあるエントリを返すように指示します。

IRP_MN_NOTIFY_CHANGE_DIRECTORY には次のフラグを設定できます。

フラグ 意味
SL_WATCH_TREE 設定 真実このディレクトリのすべてのサブディレクトリも監視する必要がある場合。 ディレクトリ自体のみを監視する場合、FALSE に設定します。
  • IrpSp->主要機能 は IRP_MJ_DIRECTORY_CONTROL に設定されます。

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

    • IRP_MN_QUERY_DIRECTORY
    • IRP_MN_NOTIFY_CHANGE_DIRECTORY
    • IRP_MN_NOTIFY_CHANGE_DIRECTORY_EX
  • IrpSp->Parameters.QueryDirectory.FileIndex は、ディレクトリスキャンを開始するファイルのインデックスです。 SL_INDEX_SPECIFIED フラグが設定されていない場合、この値は無視されます。 このパラメーターは、Win32 関数またはカーネル モード サポート ルーチンでは指定できません。 現在、これは 32 ビット NT ベースのプラットフォーム上にのみ存在する NT 仮想 DOS マシン (NTVDM) によってのみ使用されています。 ファイル インデックスは、親ディレクトリ内のファイルの位置が固定されておらず、並べ替え順序を維持するためにいつでも変更できる NTFS などのファイル システムでは定義されていません。

  • IrpSp->Parameters.QueryDirectory.FileInformationClass は、次のいずれかの値に設定されます。

    Value 意味
    FileBothDirectoryInformation 戻す FILE_BOTH_DIR_INFORMATION 各ファイルの構造。
    FileDirectoryInformation 戻す FILE_DIRECTORY_INFORMATION 各ファイルの構造。
    FileFullDirectoryInformation 戻す FILE_FULL_DIR_INFORMATION" 各ファイルの構造。
    FileIdBothDirectoryInformation 戻す FILE_ID_BOTH_DIR_INFORMATION 各ファイルの構造。
    FileIdFullDirectoryInformation 戻す FILE_ID_FULL_DIR_INFORMATION 各ファイルの構造。
    FileNamesInformation 戻す FILE_NAMES_INFORMATION 各ファイルの構造。
    FileObjectIdInformation 戻す FILE_OBJECTID_INFORMATION 各ファイルの構造。
    FileQuotaInformation 廃止されています。 使用 IRP_MJ_QUERY_QUOTA 代替。
    FileReparsePointInformation ディレクトリの 1 つの FILE_REPARSE_POINT_INFORMATION 構造を返します。
  • IrpSp->Parameters.QueryDirectory.FileName は、指定されたディレクトリ内のファイルのオプションの名前です。

  • IrpSp->Parameters.QueryDirectory.Length は、Irp->UserBuffer が指すバッファーの長さ (バイト単位) です。

  • IrpSp->Parameters.NotifyDirectory.Length は、Irp->UserBuffer が指すバッファーの長さ (バイト単位) です。

  • IrpSp->Parameters.NotifyDirectory.CompletionFilter: 詳細については、FsRtlNotifyFullChangeDirectory に対する CompletionFilter パラメーターの説明を参照してください。

  • IrpSp->Parameters.NotifyDirectoryEx.Length は、Irp->UserBuffer が指すバッファーの長さ (バイト単位) です。

  • IrpSp->Parameters.NotifyDirectoryEx.CompletionFilter: 詳細については、FsRtlNotifyFullChangeDirectory に対する CompletionFilter パラメーターの説明を参照してください。

  • IrpSp->Parameters.NotifyDirectoryEx.DirectoryNotifyInformationClass は、次のいずれかの値です。

    Value 意味
    DirectoryNotifyInformation ディレクトリ変更のために、FILE_NOTIFY_INFORMATION 構造体を返します。
    DirectoryNotifyExtendedInformation ディレクトリの変更ごとに、FILE_NOTIFY_EXTENDED_INFORMATION 構造体を返します。
    DirectoryNotifyFullInformation ディレクトリの変更ごとに、FILE_NOTIFY_FULL_INFORMATION 構造体を返します。

関連項目

FILE_BOTH_DIR_INFORMATION

FILE_DIRECTORY_INFORMATION

FILE_FULL_DIR_INFORMATION

FILE_ID_BOTH_DIR_INFORMATION

FILE_ID_FULL_DIR_INFORMATION

FILE_NAMES_INFORMATION

FILE_OBJECTID_INFORMATION

FILE_REPARSE_POINT_INFORMATION

FsRtlNotifyFullChangeDirectory

FILE_NOTIFY_INFORMATION

FILE_NOTIFY_EXTENDED_INFORMATION

FILE_NOTIFY_FULL_INFORMATION

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoGetCurrentIrpStackLocation

IRP

IRP_MJ_QUERY_QUOTA

ZwQueryDirectoryFile

ZwQueryDirectoryFileEx