Поделиться через


структура 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 и указав FileStreamInformationInformation для параметра 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:Authors" или "Book:Authors:$DATA" в качестве имени потока. Оба имени эквивалентны.

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

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

  • Вызывая FltQueryVolumeInformation или ZwQueryVolumeInformationFile и указав FileFsAttributeInformation для параметра 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 (include Ntifs.h, Fltkernel.h)

См. также

FltQueryInformationFile

FltQueryVolumeInformation

IRP_MJ_QUERY_INFORMATION

IRP_MJ_QUERY_VOLUME_INFORMATION

ZwCreateFile

ZwQueryInformationFile

ZwQueryVolumeInformationFile