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_DRIVER_PATH_INFORMATION
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по