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 используется внутри диспетчера ввода-вывода> и не должен использоваться драйверами фильтров файловой системы или файловой системы.

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

FILE_ALIGNMENT_INFORMATION

FILE_ATTRIBUTE_TAG_INFORMATION

FILE_BASIC_INFORMATION

FILE_INTERNAL_INFORMATION

FILE_NAME_INFORMATION

FILE_NETWORK_OPEN_INFORMATION

FILE_POSITION_INFORMATION

FILE_STANDARD_INFORMATION

FILE_STREAM_INFORMATION

FILE_LINKS_INFORMATION

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoCheckEaBufferValidity

IoGetCurrentIrpStackLocation

IRP

IRP_MJ_SET_INFORMATION

ZwQueryInformationFile