структура FILE_STREAM_INFORMATION (ntifs.h)

Структура FILE_STREAM_INFORMATION используется для перечисления потоков для файла.

Синтаксис

typedef struct _FILE_STREAM_INFORMATION {
  ULONG         NextEntryOffset;
  ULONG         StreamNameLength;
  LARGE_INTEGER StreamSize;
  LARGE_INTEGER StreamAllocationSize;
  WCHAR         StreamName[1];
} FILE_STREAM_INFORMATION, *PFILE_STREAM_INFORMATION;

Члены

NextEntryOffset

Смещение следующей записи FILE_STREAM_INFORMATION. Этот элемент равен нулю, если другие записи не следуют за этим элементом.

StreamNameLength

Длина строки StreamName в байтах.

StreamSize

Размер потока в байтах.

StreamAllocationSize

Размер выделения файлового потока в байтах. Обычно это значение кратно размеру сектора или кластера базового физического устройства.

StreamName[1]

Строка Юникода, содержащая имя потока.

Комментарии

Структура FILE_STREAM_INFORMATION используется для перечисления потоков для файла. Эту операцию можно выполнить с помощью любого из следующих способов:

  • Путем вызова FltQueryInformationFile или ZwQueryInformationFile и указания FileStreamInformation для параметра FileInformationClass . При возврате буфер FileInformation содержит структуру FILE_STREAM_INFORMATION для каждого файлового потока.

  • Отправив IRP_MJ_QUERY_INFORMATION запрос в файловую систему и указав FileStreamInformation в параметре FileInformationClass . При возвращении Irp-AssociatedIrp.SystemBuffer> содержит структуру FILE_STREAM_INFORMATION для каждого файлового потока.

Для запроса этих сведений не требуются определенные права доступа. Таким образом, эта информация доступна, пока файл открыт.

Поддержка перечисления потоков зависит от файловой системы. Если файловая система не поддерживает перечисление потоков, она должна возвращать STATUS_INVALID_PARAMETER или STATUS_NOT_IMPLEMENTED для этих запросов.

Если файловая система поддерживает перечисление потоков, но в файле нет потоков, кроме потока данных по умолчанию, который не называется, файловая система должна возвращать одну FILE_STREAM_INFORMATION структуру, содержащую либо "::$DATA", либо строку Юникода нулевой длины в качестве StreamName.

NTFS возвращает "::$DATA" в качестве streamName для потока данных по умолчанию.

Для именованного потока данных NTFS добавляет ":$DATA" к имени потока. Например, для потока данных пользователя с именем "Авторы" NTFS возвращает ":Authors:$DATA" в качестве StreamName.

При вызове подпрограммы, например ZwCreateFile , для открытия именованного файлового потока можно опустить часть имени ":$DATA". Например, чтобы открыть поток "Авторы" файла с именем "Book", вызывающий объект может указать "Book:Authors" или "Book:Authors:$DATA" в качестве имени потока. Оба имени эквивалентны.

Размер буфера, передаваемого в параметре FileInformation в FltQueryInformationFile или ZwQueryInformationFile , должен быть не ниже sizeof (FILE_STREAM_INFORMATION). Если этот буфер недостаточно велик для хранения структуры FILE_STREAM_INFORMATION для каждого потока файлов, FltQueryInformationFile или ZwQueryInformationFile возвращает STATUS_BUFFER_OVERFLOW или STATUS_BUFFER_TOO_SMALL. Так как такой неудачный вызов FltQueryInformationFile или ZwQueryInformationFile не возвращает требуемый размер буфера, драйверы фильтров должны выполнять один или несколько дополнительных вызовов FltQueryInformationFile или ZwQueryInformationFile, передавая буфер большего размера в каждом вызове, пока буфер не будет достаточно большим.

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

  • Путем вызова FltQueryVolumeInformation или ZwQueryVolumeInformationFile и указания FileFsAttributeInformationInformation для параметра FsInformationClass . При возврате буфер FsInformation содержит структуру FILE_FS_ATTRIBUTE_INFORMATION. Если бит FILE_NAMED_STREAMS задан в элементе FileSystemAttributes этой структуры, файловая система поддерживает именованные потоки.

  • Отправив IRP_MJ_QUERY_VOLUME_INFORMATION запрос в файловую систему и указав FileFsAttributeInformation для параметра FsInformationClass . При возврате Irp-AssociatedIrp.SystemBuffer> содержит структуру FILE_FS_ATTRIBUTE_INFORMATION. Если бит FILE_NAMED_STREAMS задан в элементе FileSystemAttributes этой структуры, файловая система поддерживает именованные потоки.

Структура FILE_STREAM_INFORMATION должна быть выровнена по границе LONGLONG (8 байт). Если буфер содержит две или более из этих структур, значение NextEntryOffset в каждой записи, за исключением последней, попадает на 8-байтовую границу.

Требования

Требование Значение
Заголовок ntifs.h (включая Ntifs.h, Fltkernel.h)

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

FltQueryInformationFile

FltQueryVolumeInformation

IRP_MJ_QUERY_INFORMATION

IRP_MJ_QUERY_VOLUME_INFORMATION

ZwCreateFile

ZwQueryInformationFile

ZwQueryVolumeInformationFile