IRP_MJ_QUERY_VOLUME_INFORMATION (FS- und Filtertreiber)
Sendebedingungen
Der E/A-Manager sendet die IRP_MJ_QUERY_VOLUME_INFORMATION-Anforderung . Sie kann beispielsweise gesendet werden, wenn eine Benutzermodusanwendung eine Win32-Funktion wie GetDiskFreeSpace oder GetFileType aufgerufen hat.
Vorgang: Dateisystemtreiber
Der Dateisystemtreiber sollte das Dateiobjekt extrahieren und decodieren, um zu bestimmen, ob das Zielgerätobjekt das Steuergerätobjekt des Dateisystems ist. Wenn dies der Grund ist, und wenn die Anforderung für ein Handle ausgestellt wurde, das ein offenes Volume (oder ein geöffnetes Objekt auf dem Volume) ist, sollte der Dateisystemtreiber die Anforderung verarbeiten und die IRP abschließen.
Andernfalls sollte der Dateisystemtreiber die Abfrage fehlschlagen und die IRP abschließen.
Die Typen von Volumeinformationen, die abgefragt werden können, sind dateisystemabhängig, enthalten jedoch im Allgemeinen die folgenden Werte:
- FileFsAttributeInformation
- FileFsDeviceInformation
- FileFsSizeInformation
- FileFsVolumeInformation
Eine Liste aller möglichen Informationstypen finden Sie unter IrpSp-Parameters.QueryVolume.FsInformationClass>.
Vorgang: Netzwerkumleitungstreiber
Ein Netzwerkumleitung, der eine Anforderung für FileFsDeviceInformation empfängt, muss FILE_REMOTE_DEVICE als eine der Optionen für den DeviceCharacteristics-Member der zurückgegebenen FILE_FS_DEVICE_INFORMATION-Struktur einschließen.
Vorgang: Legacy-Dateisystemfiltertreiber
Der Filtertreiber sollte diesen IRP an den nächstniedrigen Treiber im Stapel übergeben.
Parameter
Ein Dateisystem oder Filtertreiber ruft IoGetCurrentIrpStackLocation für den angegebenen IRP auf, um einen Zeiger auf den eigenen Stapelspeicherort im IRP zu erhalten. In den folgenden Parametern verweist Irp auf den IRP und IrpSp auf die IO_STACK_LOCATION. Der Treiber kann die Informationen verwenden, die in den folgenden Membern des IRP und des IRP-Stapelspeicherorts festgelegt sind, um eine Abfragevolume-Informationsanforderung zu verarbeiten:
DeviceObject ist ein Zeiger auf das Zielgerätobjekt.
Irp->AssociatedIrp.SystemBuffer verweist auf einen vom System bereitgestellten Ausgabepuffer, in dem die Volumeinformationen zurückgegeben werden sollen. Diese Informationen werden in einer der folgenden Strukturen gespeichert:
- FILE_FS_ATTRIBUTE_INFORMATION
- FILE_FS_CONTROL_INFORMATION
- FILE_FS_DEVICE_INFORMATION
- FILE_FS_DRIVER_PATH_INFORMATION
- FILE_FS_FULL_SIZE_INFORMATION
- FILE_FS_OBJECTID_INFORMATION
- FILE_FS_SIZE_INFORMATION
- FILE_FS_VOLUME_FLAGS_INFORMATION
- FILE_FS_VOLUME_INFORMATION
- FILE_FS_SECTOR_SIZE_INFORMATION
Die FileFsVolumeFlagsInformation-Klasse und die zugehörige FILE_FS_VOLUME_INFORMATION-Struktur sind unter Windows Vista und höheren Versionen verfügbar.
Irp->IoStatus verweist auf eine IO_STATUS_BLOCK-Struktur, die den endgültigen Abschluss status und Informationen zum angeforderten Vorgang empfängt.
Irp->UserBuffer ist ein optionaler Zeiger auf einen vom Aufrufer bereitgestellten Ausgabepuffer, in den die Inhalte von Irp-AssociatedIrp.SystemBuffer> während der E/A-Vervollständigung durch den E/A-Manager kopiert werden. Treiber verwenden diesen Puffer nicht, um Daten für die Anforderung zurückzugeben.
IrpSp->FileObject verweist auf das Dateiobjekt, das DeviceObject zugeordnet ist.
DerParameter IrpSp-FileObject> enthält einen Zeiger auf das RelatedFileObject-Feld, das auch eine FILE_OBJECT-Struktur ist. Das Feld RelatedFileObject der FILE_OBJECT-Struktur ist während der Verarbeitung von IRP_MJ_QUERY_VOLUME_INFORMATION ungültig und sollte nicht verwendet werden.
IrpSp->MajorFunction ist auf IRP_MJ_QUERY_VOLUME_INFORMATION festgelegt.
IrpSp->Parameters.QueryVolume.FsInformationClass ist der Typ der Volumeinformationen, die vom Dateisystem zurückgegeben werden sollen. Dieser Member kann einer der folgenden Werte sein.
Wert | Bedeutung |
---|---|
FileFsAttributeInformation | Gibt eine FILE_FS_ATTRIBUTE_INFORMATION-Struktur zurück, die Attributinformationen zum dateisystem enthält, das für das Volume verantwortlich ist. |
FileFsControlInformation | Gibt eine FILE_FS_CONTROL_INFORMATION-Struktur zurück, die Dateisystemsteuerungsinformationen zum Volume enthält. |
FileFsDeviceInformation | Gibt eine FILE_FS_DEVICE_INFORMATION-Struktur zurück, die Geräteinformationen für das Volume enthält. |
FileFsDriverPathInformation | Gibt eine FILE_FS_DRIVER_PATH_INFORMATION-Struktur zurück, die Informationen darüber enthält, ob sich ein angegebener Treiber im E/A-Pfad für das Volume befindet. Der Absender der IRP_MJ_QUERY_VOLUME_INFORMATION-Anforderung muss den Namen des Treibers in der FILE_FS_DRIVER_PATH_INFORMATION-Struktur speichern, bevor der IRP an den Dateisystemvolumegerätestapel gesendet wird. |
FileFsFullSizeInformation | Gibt eine FILE_FS_FULL_SIZE_INFORMATION-Struktur zurück, die Informationen über den gesamt verfügbaren Speicherplatz auf dem Volume enthält. |
FileFsObjectIdInformation | Gibt eine FILE_FS_OBJECTID_INFORMATION-Struktur zurück, die dateisystemspezifische Objekt-ID-Informationen für das Volume enthält. Diese Objekt-ID-Informationen sind nicht identisch mit dem (GUID-basierten) eindeutigen Volumenamen, den das Betriebssystem zugewiesen hat. |
FileFsSizeInformation | Gibt eine FILE_FS_SIZE_INFORMATION-Struktur zurück, die Informationen über den Speicherplatz auf dem Volume enthält, der dem Benutzer zur Verfügung steht, der dem Thread zugeordnet ist, der die IRP_MJ_QUERY_VOLUME_INFORMATION-Anforderung ausgelöst hat. |
FileFsVolumeInformation | Gibt einen FILE_FS_VOLUME_INFORMATION zurück, der Informationen zum Volume enthält, z. B. Volumebezeichnung, Seriennummer und Erstellungszeit. |
FileFsSectorSizeInformation | Gibt eine FILE_FS_SECTOR_SIZE_INFORMATION-Struktur zurück, die Informationen zu den physischen und logischen Sektorgrößen eines Volumes enthält. |
- IrpSp->Parameters.QueryVolume.Length ist die Länge des Puffers in Bytes, auf den Irp-UserBuffer> verweist. Bei der Rückgabe empfängt diese Variable die Anzahl von Bytes, die in den Puffer geschrieben werden.
Weitere Informationen
FILE_FS_DRIVER_PATH_INFORMATION