IRP_MJ_QUERY_VOLUME_INFORMATION (драйверы FS и фильтров)

При отправке

Диспетчер ввода-вывода отправляет запрос IRP_MJ_QUERY_VOLUME_INFORMATION . Его можно отправить, например, если приложение пользовательского режима вызывает функцию Win32, например GetDiskFreeSpace или GetFileType.

Операция: драйверы файловой системы

Драйвер файловой системы должен извлечь и декодировать файловый объект, чтобы определить, является ли объект целевого устройства объектом управляющего устройства файловой системы. Если это так и если запрос был выдан на дескриптор, который является открытым томом (или открытым объектом на томе), драйвер файловой системы должен обработать запрос и завершить IRP.

В противном случае драйвер файловой системы должен завершить запрос и завершить IRP.

Типы сведений о томах, которые можно запрашивать, зависят от файловой системы, но обычно включают следующие значения:

  • FileFsAttributeInformation
  • FileFsDeviceInformation
  • FileFsSizeInformation
  • FileFsVolumeInformation

Список всех возможных типов информации см. в разделе IrpSp-Parameters.QueryVolume.FsInformationClass>.

Операция: драйверы перенаправления сети

Перенаправитель сети, получающий запрос fileFsDeviceInformation, должен включать FILE_REMOTE_DEVICE в качестве одного из вариантов элемента DeviceCharacteristics возвращаемой FILE_FS_DEVICE_INFORMATION структуры.

Операция: устаревшие драйверы фильтров файловой системы

Драйвер фильтра должен передать этот IRP в следующий нижний драйвер в стеке.

Параметры

Драйвер файловой системы или фильтра вызывает IoGetCurrentIrpStackLocation для заданного IRP, чтобы получить указатель на собственное расположение стека в IRP. В следующих параметрах Irp указывает на IRP , а IrpSpна IO_STACK_LOCATION. Драйвер может использовать сведения, заданные в следующих элементах IRP и расположении стека IRP, для обработки запроса на получение сведений о томе запроса:

  • DeviceObject — это указатель на целевой объект устройства.

  • Irp->AssociatedIrp.SystemBuffer указывает на предоставленный системой выходной буфер, в который должны возвращаться сведения о томе. Эти сведения хранятся в одной из следующих структур:

    • 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

    Класс FileFsVolumeFlagsInformation и связанная структура FILE_FS_VOLUME_INFORMATION доступны в Windows Vista и более поздних версиях.

  • Irp->IoStatus указывает на структуру IO_STATUS_BLOCK , которая получает окончательное состояние завершения и сведения о запрошенной операции.

  • Irp->UserBuffer — это необязательный указатель на предоставленный вызывающим объектом выходной буфер, в который диспетчер ввода-вывода копирует содержимое Irp-AssociatedIrp.SystemBuffer во время завершения ввода-вывода>. Драйверы не используют этот буфер для возврата данных для запроса.

  • IrpSp->FileObject указывает на объект файла, связанный с DeviceObject.

    ПараметрIrpSp-FileObject> содержит указатель на поле RelatedFileObject, которое также является FILE_OBJECT структурой. Поле RelatedFileObject структуры FILE_OBJECT недопустимо во время обработки IRP_MJ_QUERY_VOLUME_INFORMATION и не должно использоваться.

  • IrpSp->MajorFunction имеет значение IRP_MJ_QUERY_VOLUME_INFORMATION.

  • IrpSp->Parameters.QueryVolume.FsInformationClass — это тип сведений о томе, возвращаемых файловой системой. Этот элемент может иметь одно из следующих значений.

Значение Значение
FileFsAttributeInformation Возвращает структуру FILE_FS_ATTRIBUTE_INFORMATION , содержащую сведения об атрибутах файловой системы, ответственной за том.
FileFsControlInformation Возвращает структуру FILE_FS_CONTROL_INFORMATION , содержащую сведения об управлении файловой системой тома.
FileFsDeviceInformation Возвращает структуру FILE_FS_DEVICE_INFORMATION , содержащую сведения об устройстве для тома.
FileFsDriverPathInformation Возвращает FILE_FS_DRIVER_PATH_INFORMATION структуру, содержащую сведения о том, находится ли указанный драйвер в пути ввода-вывода для тома. Инициатор запроса IRP_MJ_QUERY_VOLUME_INFORMATION должен сохранить имя драйвера в структуре FILE_FS_DRIVER_PATH_INFORMATION перед отправкой IRP в стек устройств тома файловой системы.
FileFsFullSizeInformation Возвращает структуру FILE_FS_FULL_SIZE_INFORMATION , содержащую сведения об общем объеме свободного места на томе.
FileFsObjectIdInformation Возвращает структуру FILE_FS_OBJECTID_INFORMATION , содержащую сведения об идентификаторе объекта для конкретной файловой системы для тома. Эти сведения об идентификаторе объекта не совпадают с уникальным именем тома (на основе GUID), назначенным операционной системой.
FileFsSizeInformation Возвращает структуру FILE_FS_SIZE_INFORMATION , содержащую сведения о томе, который доступен пользователю, связанному с потоком, отправителем IRP_MJ_QUERY_VOLUME_INFORMATION запроса.
FileFsVolumeInformation Возвращает FILE_FS_VOLUME_INFORMATION , содержащую сведения о томе, такие как метка тома, серийный номер и время создания.
FileFsSectorSizeInformation Возвращает FILE_FS_SECTOR_SIZE_INFORMATION структуру, содержащую сведения о размерах физических и логических секторов тома.
  • IrpSp->Parameters.QueryVolume.Length — это длина (в байтах) буфера, на который указывает Irp-UserBuffer>. При возврате эта переменная получает количество байтов, записанных в буфер.

См. также раздел

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