IRP_MJ_QUERY_INFORMATION (драйверы FS и фильтров)
При отправке
Диспетчер ввода-вывода, другие компоненты операционной системы и другие драйверы режима ядра отправляют запросы IRP_MJ_QUERY_INFORMATION. Этот запрос может быть отправлен, например, если приложение пользовательского режима вызывает функцию Win32, например GetFileInformationByHandle , или компонент режима ядра вызывает ZwQueryInformationFile.
Операция: драйверы файловой системы
Драйвер файловой системы должен извлечь и декодировать файловый объект, чтобы определить, представляет ли он пользователя, открывающего файл или каталог. Если это так, драйвер должен обработать запрос и завершить IRP. В противном случае драйвер должен завершить IRP соответствующим образом без обработки запроса.
Типы сведений о файлах и каталогах, которые могут запрашиваться, зависят от файловой системы, но обычно включают следующие значения:
- FileAllInformation
- FileAlternateNameInformation
- FileAttributeTagInformation
- FileBasicInformation
- FileCompressionInformation
- FileEaInformation
- FileInternalInformation
- FileNameInformation
- FileNetworkOpenInformation
- FilePositionInformation
- FileStandardInformation
- FileStreamInformation
- FileHardLinkInformation
Хотя типы данных FileAccessInformation, FileAlignmentInformation и FileModeInformation также можно передать в ZwQueryInformationFile в качестве параметра, эти сведения не зависят от файловой системы. Таким образом , ZwQueryInformationFile предоставляет эти сведения напрямую, не отправляя запрос IRP_MJ_QUERY_INFORMATION в файловую систему.
Список всех возможных типов информации см. в перечислении FILE_INFORMATION_CLASS в файле ntifs.h.
Операция. Драйверы перенаправителя сети
Драйвер перенаправителя сети, не основанный на RDBSS, который получает запрос IRP_MJ_QUERY_INFORMATION fileAllInformation или FileNameInformation, должен ответить полным путем "\server\share\file" для имени файла с одной начальной обратной косой чертой перед именем сервера. Этот формат для сведений об имени должен возвращаться для файла, доступного в виде имени UNC ( например,\\server\share\folder\filename.txt) или файла, расположенного на сопоставленном диске (x:\folder\filename.txt, например).
Для драйвера сетевого мини-перенаправления (драйвера, который динамически связывается с rdbss.sys или статически связывается с rdbsslib.lib) RDBSS обрабатывает запрос IRP_MJ_QUERY_INFORMATION fileNameInformation и возвращает правильные сведения об имени. Для драйвера сетевого мини-перенаправления RDBSS обрабатывает запрос IRP_MJ_QUERY_INFORMATION fileAllInformation для части сведений об имени запроса. Другие части запроса FileAllInformation отправляются в виде отдельных запросов драйверу сетевого мини-перенаправления для разрешения.
Сетевой перенаправитель, получающий запрос IRP_MJ_QUERY_INFORMATION fileAlternateNameInformation, должен ответить коротким именем (8,3 символа) для файла без сведений о пути, если для файла существует короткое имя.
Операция: устаревшие драйверы фильтров файловой системы
Драйвер фильтра должен передать этот IRP в следующий нижний драйвер в стеке.
Параметры
Файловая система или драйвер фильтра вызывает IoGetCurrentIrpStackLocation для заданного IRP, чтобы получить указатель на собственное расположение стека в IRP. В следующих параметрах Irp указывает на IRP , а IrpSp — на IO_STACK_LOCATION. Драйвер может использовать сведения, заданные в следующих элементах IRP и расположении стека IRP, для обработки запроса к файлу запроса:
DeviceObject — это указатель на целевой объект устройства.
Irp->AssociatedIrp.SystemBuffer указывает на выходной буфер, в который должны быть возвращены сведения о файле или каталоге. Эти сведения хранятся в одной из следующих структур:
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 указывает на структуру IO_STATUS_BLOCK , которая получает окончательное состояние завершения и сведения о запрошенной операции. Дополнительные сведения см. в описании параметра IoStatusBlock в ZwQueryInformationFile. Обычной.
Irp->UserBuffer — это необязательный указатель на предоставленный вызывающим выходной буфер, в который во время завершения ввода-вывода диспетчером ввода-вывода копируется содержимое Irp-AssociatedIrp.SystemBuffer>. Драйверы не используют этот буфер для возврата каких-либо данных для запроса.
IrpSp->FileObject указывает на объект файла, связанный с DeviceObject.
Параметр IrpSp-FileObject> содержит указатель на поле RelatedFileObject, которое также является FILE_OBJECT структурой. Поле RelatedFileObject структуры FILE_OBJECT недопустимо во время обработки IRP_MJ_QUERY_INFORMATION и не должно использоваться.
IrpSp->MajorFunction имеет значение IRP_MJ_QUERY_INFORMATION.
IrpSp->Parameters.QueryFile.FileInformationClass — это тип запрашиваемых сведений о файлах. Этот элемент может быть одним из следующих значений.
Значение Значение FileAllInformation Возвращает структуру FILE_ALL_INFORMATION для файла. FileAttributeTagInformation Возвращает структуру FILE_ATTRIBUTE_TAG_INFORMATION для файла. FileBasicInformation Возвращает структуру FILE_BASIC_INFORMATION для файла. FileCompressionInformation Возвращает структуру FILE_COMPRESSION_INFORMATION для файла. FileEaInformation Возвращает структуру FILE_EA_INFORMATION для файла. FileInternalInformation Возвращает структуру FILE_INTERNAL_INFORMATION для файла. FileNameInformation Возвращает структуру FILE_NAME_INFORMATION для файла. FileNetworkOpenInformation Возвращает одну структуру FILE_NETWORK_OPEN_INFORMATION для файла. FilePositionInformation Возвращает одну структуру FILE_POSITION_INFORMATION для файла. FileStandardInformation Возвращает одну структуру FILE_STANDARD_INFORMATION для файла. FileStreamInformation Возвращает одну структуру FILE_STREAM_INFORMATION для файла. FileHardLinkInformation Возвращает структуру FILE_LINKS_INFORMATION для файла. IrpSp->Parameters.QueryFile.Length — это длина (в байтах) буфера, на который указывает Irp-AssociatedIrp.SystemBuffer>.
Комментарии
Диспетчер ввода-вывода всегда буферизует операцию IRP_MJ_QUERY_INFORMATION. Диспетчер ввода-вывода выделяет из памяти нестраничного пула Irp-AssociatedIrp.SystemBuffer>, который используется для возврата запрошенных сведений о файле или каталоге. В результате Irp-AssociatedIrp.SystemBuffer>, возвращаемый операционной системой, всегда является допустимым адресом для длины, указанной в IrpSp-Parameters.QueryFile.Length>.
Irp-AssociatedIrp.UserBuffer используется внутри диспетчера ввода-вывода> и не должен использоваться драйверами фильтров файловой системы или файловой системы.
См. также раздел
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по