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
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für