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_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_SECTOR_SIZE_INFORMATION

FILE_FS_SIZE_INFORMATION

FILE_FS_VOLUME_INFORMATION

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoGetCurrentIrpStackLocation

IRP

IRP_MJ_SET_VOLUME_INFORMATION

ZwQueryVolumeInformationFile

ZwSetVolumeInformationFile