IRP_MJ_QUERY_INFORMATION (FS- und Filtertreiber)

Sendebedingungen

Der E/A-Manager, andere Betriebssystemkomponenten und andere Kernelmodustreiber senden IRP_MJ_QUERY_INFORMATION Anforderungen. Diese Anforderung kann beispielsweise gesendet werden, wenn eine Anwendung im Benutzermodus eine Win32-Funktion wie GetFileInformationByHandle aufgerufen hat oder wenn eine Kernelmoduskomponente ZwQueryInformationFile aufgerufen hat.

Vorgang: Dateisystemtreiber

Der Dateisystemtreiber sollte das Dateiobjekt extrahieren und decodieren, um zu bestimmen, ob es einen Benutzer darstellt, der eine Datei oder ein Verzeichnis geöffnet hat. Wenn dies der Fall ist, sollte der Treiber die Abfrage verarbeiten und die IRP abschließen. Andernfalls sollte der Treiber die IRP nach Bedarf abschließen, ohne die Abfrage zu verarbeiten.

Die Typen von Datei- und Verzeichnisinformationen, die abgefragt werden können, sind dateisystemabhängig, enthalten jedoch im Allgemeinen die folgenden Werte:

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

Obwohl die Informationstypen FileAccessInformation, FileAlignmentInformation und FileModeInformation auch als Parameter an ZwQueryInformationFile übergeben werden können, sind diese Informationen dateisystemunabhängig. Daher stellt ZwQueryInformationFile diese Informationen direkt bereit, ohne eine IRP_MJ_QUERY_INFORMATION Anforderung an das Dateisystem zu senden.

Eine Liste aller möglichen Informationstypen finden Sie in der FILE_INFORMATION_CLASS-Enumeration in ntifs.h.

Vorgang: Netzwerkumleitungstreiber

Ein nicht auf RDBSS basierender Netzwerkumleitungstreiber, der eine IRP_MJ_QUERY_INFORMATION Anforderung für FileAllInformation oder FileNameInformation empfängt, muss mit dem vollständigen Pfad "\server\share\file" für den Dateinamen mit einem einzelnen führenden umgekehrten Schrägstrich vor dem Servernamen reagieren. Dieses Format für Namensinformationen muss für eine Datei zurückgegeben werden, auf die als UNC-Name (Universal Naming Convention) (z . B.\\server\share\folder\filename.txt) zugegriffen wird, oder für eine Datei, die sich auf einem zugeordneten Laufwerk befindet (z. B.x:\folder\filename.txt).

Für einen Netzwerkminiumleitungstreiber (ein Treiber, der dynamisch mit rdbss.sys verknüpft oder statisch mit rdbsslib.lib verknüpft) verarbeitet RDBSS eine IRP_MJ_QUERY_INFORMATION Anforderung für FileNameInformation und gibt die richtigen Namensinformationen zurück. Für einen Netzwerkminiumleitungstreiber verarbeitet RDBSS eine IRP_MJ_QUERY_INFORMATION Anforderung für FileAllInformation für den Teil namensinformationen der Anforderung. Die anderen Teile der FileAllInformation-Anforderung werden als separate Anforderungen an den Netzwerk-Miniumleitungstreiber gesendet, um sie aufzulösen.

Ein Netzwerkumleitungsor, der eine IRP_MJ_QUERY_INFORMATION Anforderung für FileAlternateNameInformation empfängt, sollte mit dem kurzen Namen (8,3 Zeichen) für die Datei ohne Pfadinformationen antworten, wenn ein kurzer Name für die Datei vorhanden ist.

Vorgang: Legacy-Dateisystemfiltertreiber

Der Filtertreiber sollte diesen IRP an den nächstniedrigen Treiber auf dem Stapel übergeben.

Parameter

Ein Dateisystem oder Filtertreiber ruft IoGetCurrentIrpStackLocation für den angegebenen IRP auf, um einen Zeiger auf den eigenen Stapelspeicherort im IRP abzurufen. In den folgenden Parametern zeigt Irp auf den IRP und IrpSp auf den IO_STACK_LOCATION. Der Treiber kann die Informationen verwenden, die in den folgenden Elementen des IRP- und des IRP-Stapelspeicherorts festgelegt sind, um eine Abfragedateiinformationsanforderung zu verarbeiten:

  • DeviceObject ist ein Zeiger auf das Zielgerätobjekt.

  • Irp->AssociatedIrp.SystemBuffer verweist auf den Ausgabepuffer, in dem die Datei- oder Verzeichnisinformationen zurückgegeben werden sollen. Diese Informationen werden in einer der folgenden Strukturen gespeichert:

  • 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->IoStatus verweist auf eine IO_STATUS_BLOCK-Struktur, die die endgültige Vervollständigung status und Informationen zum angeforderten Vorgang empfängt. Weitere Informationen finden Sie in der Beschreibung des IoStatusBlock-Parameters in ZwQueryInformationFile. Routine.

  • Irp->UserBuffer ist ein optionaler Zeiger auf einen vom Aufrufer bereitgestellten Ausgabepuffer, in den der Inhalt von Irp-AssociatedIrp.SystemBuffer> während der E/A-Vervollständigung vom E/A-Manager kopiert wird. Treiber verwenden diesen Puffer nicht, um Daten für die Anforderung zurückzugeben.

  • IrpSp->FileObject zeigt auf das Dateiobjekt, das DeviceObject zugeordnet ist.

    Der Parameter IrpSp-FileObject> enthält einen Zeiger auf das Feld RelatedFileObject, das ebenfalls eine FILE_OBJECT-Struktur ist. Das Feld RelatedFileObject der FILE_OBJECT-Struktur ist während der Verarbeitung von IRP_MJ_QUERY_INFORMATION ungültig und sollte nicht verwendet werden.

  • IrpSp->MajorFunction ist auf IRP_MJ_QUERY_INFORMATION festgelegt.

  • IrpSp->Parameters.QueryFile.FileInformationClass ist der Typ von Dateiinformationen, die abgefragt werden sollen. Dieser Member kann einer der folgenden Werte sein.

    Wert Bedeutung
    FileAllInformation Gibt eine FILE_ALL_INFORMATION-Struktur für die Datei zurück.
    FileAttributeTagInformation Gibt eine FILE_ATTRIBUTE_TAG_INFORMATION-Struktur für die Datei zurück.
    FileBasicInformation Gibt eine FILE_BASIC_INFORMATION-Struktur für die Datei zurück.
    FileCompressionInformation Gibt eine FILE_COMPRESSION_INFORMATION-Struktur für die Datei zurück.
    FileEaInformation Gibt eine FILE_EA_INFORMATION-Struktur für die Datei zurück.
    FileInternalInformation Gibt eine FILE_INTERNAL_INFORMATION-Struktur für die Datei zurück.
    FileNameInformation Gibt eine FILE_NAME_INFORMATION-Struktur für die Datei zurück.
    FileNetworkOpenInformation Gibt eine einzelne FILE_NETWORK_OPEN_INFORMATION-Struktur für die Datei zurück.
    FilePositionInformation Gibt eine einzelne FILE_POSITION_INFORMATION-Struktur für die Datei zurück.
    FileStandardInformation Gibt eine einzelne FILE_STANDARD_INFORMATION-Struktur für die Datei zurück.
    FileStreamInformation Gibt eine einzelne FILE_STREAM_INFORMATION-Struktur für die Datei zurück.
    FileHardLinkInformation Gibt eine FILE_LINKS_INFORMATION-Struktur für die Datei zurück.
  • IrpSp->Parameters.QueryFile.Length ist die Länge des Puffers in Bytes, auf den Irp-AssociatedIrp.SystemBuffer> verweist.

Hinweise

Der E/A-Manager puffert immer den IRP_MJ_QUERY_INFORMATION Vorgang. Der E/A-Manager weist aus dem nicht ausgelagerten Poolspeicher den Irp-AssociatedIrp.SystemBuffer> zu, der verwendet wird, um die angeforderten Datei- oder Verzeichnisinformationen zurückzugeben. Daher ist der vom Betriebssystem zurückgegebene Irp-AssociatedIrp.SystemBuffer> immer eine gültige Adresse für die in IrpSp-Parameters.QueryFile.Length> angegebene Länge.

Der Irp-AssociatedIrp.UserBuffer wird intern vom E/A-Manager> verwendet und sollte nicht von Dateisystem- oder Dateisystemfiltertreibern verwendet werden.

Weitere Informationen

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