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

送信時

I/O マネージャー、他のオペレーティング システム コンポーネント、および他のカーネル モード ドライバーは、IRP_MJ_QUERY_INFORMATION リクエストを送信します。 このリクエストは、たとえばユーザーモード アプリケーションが次のような Win32 関数を呼び出したときに送信できます。GetFileInformationByHandleまたは、カーネルモードコンポーネントが呼び出したとき ZwQueryInformationFile.

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

ファイル システム ドライバーは、ファイル オブジェクトを抽出およびデコードして、それがユーザーによるファイルまたはディレクトリのオープンを表すかどうかを判断する必要があります。 存在する場合、ドライバーはクエリを処理し、IRP を完了する必要があります。 それ以外の場合、ドライバーはクエリを処理せずに、必要に応じて IRP を完了する必要があります。

クエリできるファイルおよびディレクトリ情報のタイプはファイル システムによって異なりますが、通常は次の値が含まれます。

  • FileAllInformation
  • FileAlternateNameInformation
  • FileAttributeTagInformation
  • FileBasicInformation
  • FileCompressionInformation
  • FileEaInformation
  • FileInternalInformation
  • FileNameInformation
  • FileNetworkOpenInformation
  • FilePositionInformation
  • FileStandardInformation
  • FileStreamInformation
  • FileHardLinkInformation

FileAccessInformation、FileAlignmentInformation、および FileModeInformation 情報タイプをパラメータとして渡すこともできますが、ZwQueryInformationFile、この情報はファイルシステムに依存しません。 したがって ZwQueryInformationFile ファイル システムに IRP_MJ_QUERY_INFORMATION リクエストを送信せずに、この情報を直接提供します。

考えられるすべての情報タイプのリストについては、次の FILE_INFORMATION_CLASS 列挙を参照してください。ntifs.h.

操作: ネットワークリダイレクタドライバ

基づいていないネットワーク リダイレクター ドライバーRDBSS FileAllInformation または FileNameInformation の IRP_MJ_QUERY_INFORMATION リクエストを受け取る IRP_MJ_QUERY_INFORMATION は、サーバー名の前にバックスラッシュを 1 つ付けたファイル名の完全な "\server\share\file" パスで応答する必要があります。FileAllInformation または FileNameInformation のリクエストは、ファイル名の完全な「\server\share\file」パス。サーバー名の前に 1 つのバックスラッシュが付きます。 この形式の名前情報は、汎用名前付け規則 (UNC) 名 (\\server\share\folder\filename.txt など)、または、マップされたドライブにあるファイル (x:\folder\filename.txt など) としてアクセスされるファイルに対して返される必要があります。

ネットワーク ミニリダイレクター ドライバー (rdbss.sys に動的にリンクするドライバー、または rdbsslib.lib に静的にリンクするドライバー) の場合、RDBSS は FileNameInformation の IRP_MJ_QUERY_INFORMATION 要求を処理し、正しい名前情報を返します。 ネットワーク ミニリダイレクター ドライバーの場合、RDBSS は、要求の名前情報部分の FileAllInformation に対する IRP_MJ_QUERY_INFORMATION 要求を処理します。 FileAllInformation リクエストの他の部分は、解決するために別個のリクエストとしてネットワーク ミニリダイレクター ドライバーに送信されます。

FileAlternateNameInformation の IRP_MJ_QUERY_INFORMATION リクエストを受信したネットワーク リダイレクターは、ファイルに短縮名が存在する場合、パス情報を含まないファイルの短縮名 (8.3 文字) で応答する必要があります。

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

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

パラメーター

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

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

  • Irp->AssociatedIrp.SystemBuffer ファイルまたはディレクトリ情報が返される出力バッファを指します。 この情報は、次のいずれかの構造に保存されます。

  • FILE_ALL_INFORMATION

  • FILE_ATTRIBUTE_TAG_INFORMATION

  • FILE_BASIC_INFORMATION

  • FILE_COMPRESSION_INFORMATION

  • FILE_EA_INFORMATION

  • FILE_INTERNAL_INFORMATION

  • FILE_NAME_INFORMATION

  • FILE_NETWORK_OPEN_INFORMATION

  • FILE_POSITION_INFORMATION

  • FILE_STANDARD_INFORMATION

  • FILE_STREAM_INFORMATION

  • FILE_LINKS_INFORMATION

  • Irp->Ioステータス は、最終的な完了ステータスと要求された操作に関する情報を受け取る IO_STATUS_BLOCK構造体を指します。 詳細については、ZwQueryInformationFileIoStatusBlock パラメーターの説明を参照してください。 ルーチンによって返される値。

  • Irp->UserBuffer は、I/O マネージャーによる I/O 完了時に Irp->AssociatedIrp.SystemBuffer の内容がコピーされる、呼び出し元が指定した出力バッファーへの省略可能なポインターです。 ドライバーは、リクエストのデータを返すためにこのバッファーを使用しません。

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

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

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

  • IrpSp->Parameters.QueryFile.FileInformationClass クエリするファイル情報のタイプです。 このメンバーは、次の値の 1 つを指定できます。

    Value 意味
    FileAllInformation ファイルの FILE_ALL_INFORMATION 構造体を返します。
    FileAttributeTagInformation FILE_ATTRIBUTE_TAG_INFORMATION ファイル構造体を返します。
    FileBasicInformation FILE_BASIC_INFORMATION ファイル構造体を返します。
    FileCompressionInformation ファイルの FILE_COMPRESSION_INFORMATION 構造体を返します。
    FileEaInformation ファイルの FILE_EA_INFORMATION 構造体を返します。
    FileInternalInformation FILE_INTERNAL_INFORMATION ファイル構造体を返します。
    FileNameInformation FILE_NAME_INFORMATION ファイル構造体を返します。
    FileNetworkOpenInformation 単体の FILE_NETWORK_OPEN_INFORMATION ファイル構造体を返します。
    FilePositionInformation 単体の FILE_POSITION_INFORMATION ファイル構造体を返します。
    FileStandardInformation 単体の FILE_STANDARD_INFORMATION ファイル構造体を返します。
    FileStreamInformation 単体の FILE_STREAM_INFORMATION ファイル構造体を返します。
    FileHardLinkInformation 単体の FILE_LINKS_INFORMATION ファイル構造体を返します。
  • IrpSp->Parameters.QueryFile.Length は、Irp->AssociatedIrp.SystemBuffer が指すバッファーの長さ (バイト単位) です。

解説

I/O マネージャーは常に IRP_MJ_QUERY_INFORMATION 操作をバッファリングします。 I/O マネージャーは、非ページ プール メモリから、要求されたファイルまたはディレクトリ情報を返すために使用される Irp->AssociatedIrp.SystemBuffer を割り当てます。 その結果、Irp->AssociatedIrp.SystemBuffer オペレーティング システムによって返されるアドレスは常に、IrpSp->Parameters.QueryFile.Length 内で指定された長さの有効なアドレスです。

Irp->AssociatedIrp.UserBuffer I/O マネージャーによって内部的に使用され、ファイル システムまたはファイル システム フィルター ドライバーによって使用されるべきではありません。

関連項目

FILE_ALIGNMENT_INFORMATION

FILE_ATTRIBUTE_TAG_INFORMATION

FILE_BASIC_INFORMATION

FILE_INTERNAL_INFORMATION

FILE_NAME_INFORMATION

FILE_NETWORK_OPEN_INFORMATION

FILE_POSITION_INFORMATION

FILE_STANDARD_INFORMATION

FILE_STREAM_INFORMATION

FILE_LINKS_INFORMATION

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoCheckEaBufferValidity

IoGetCurrentIrpStackLocation

IRP

IRP_MJ_SET_INFORMATION

ZwQueryInformationFile