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


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

Не используйте структуру FSRTL_COMMON_FCB_HEADER за пределами FSRTL_ADVANCED_FCB_HEADER структуры. Структура FSRTL_COMMON_FCB_HEADER содержит сведения о контексте, которые файловая система хранит о файле, каталоге, томе или альтернативном потоке данных.

Синтаксис

typedef struct _FSRTL_COMMON_FCB_HEADER {
  CSHORT        NodeTypeCode;
  CSHORT        NodeByteSize;
  UCHAR         Flags;
  UCHAR         IsFastIoPossible;
  UCHAR         Flags2;
  UCHAR         Reserved : 4;
  UCHAR         Version : 4;
  PERESOURCE    Resource;
  PERESOURCE    PagingIoResource;
  LARGE_INTEGER AllocationSize;
  LARGE_INTEGER FileSize;
  LARGE_INTEGER ValidDataLength;
} FSRTL_COMMON_FCB_HEADER;

Члены

NodeTypeCode

Зарезервировано для использования системы.

NodeByteSize

Зарезервировано для использования системы.

Flags

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

Ценность Значение
FSRTL_FLAG_FILE_MODIFIED Зарезервировано для использования системы.
FSRTL_FLAG_FILE_LENGTH_CHANGED Зарезервировано для использования системы.
FSRTL_FLAG_LIMIT_MODIFIED_PAGES Зарезервировано для использования системы. Драйверы файловой системы (за исключением драйверов фильтров), которые должны задавать или очищать предел измененных данных для файла, должен вызывать CcSetDirtyPageThreshold.
FSRTL_FLAG_ACQUIRE_MAIN_RSRC_EX Зарезервировано для использования системы.
FSRTL_FLAG_ACQUIRE_MAIN_RSRC_SH Зарезервировано для использования системы.
FSRTL_FLAG_USER_MAPPED_FILE Диспетчер кэша задает этот флаг, чтобы указать, что представление сопоставляется с файлом.
FSRTL_FLAG_ADVANCED_HEADER Этот флаг указывает, что файловая система использует FSRTL_ADVANCED_FCB_HEADER вместо FSRTL_COMMON_FCB_HEADER в структурах блока управления файлами (FCB). Этот флаг необходим, так как использование FSRTL_COMMON_FCB_HEADER структуры за пределами FSRTL_ADVANCED_FCB_HEADER структуры устарело.
FSRTL_FLAG_EOF_ADVANCE_ACTIVE Зарезервировано для использования системы.

IsFastIoPossible

Этот элемент должен быть одним из следующих значений:

Ценность Значение
FastIoIsPossible Быстрый ввод-вывод возможен.
FastIoIsQuestionable Для файла существует монопольная блокировка диапазона байтов. Вызывающий объект должен вызывать FastIoCheckIfPossible файловой системы.
FastIoIsNotPossible FcB для файла является плохим, или оппортунистическая блокировка (также называемая oplock) для файла.

Дополнительные сведения об этих значениях см. в справочных записях для FsRtlAreThereCurrentFileLocks, FsRtlCopyReadи FsRtlCopyWrite.

Flags2

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

Ценность Значение
FSRTL_FLAG2_DO_MODIFIED_WRITE Дополнительные сведения см. в следующей таблице.
FSRTL_FLAG2_PURGE_WHEN_MAPPED Если этот флаг задан, диспетчер кэша будет очищать карту кэша, когда пользователь сначала сопоставляет файл.
FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS Этот флаг указывает, что файловая система использует FSRTL_ADVANCED_FCB_HEADER вместо FSRTL_COMMON_FCB_HEADER в его структурах FCB. Этот флаг является обязательным, так как использование FSRTL_COMMON_FCB_HEADER структуры за пределами FSRTL_ADVANCED_FCB_HEADER структуры устарело.
FSRTL_FLAG2_IS_PAGING_FILE Если задано, этот заголовок FCB связан с файлом страницы.

Флаг FSRTL_FLAG2_DO_MODIFIED_WRITE используется вместе с элементом FsContext2 элемента файла для потока файлов следующим образом:

  • Если элемент FsContext2 элемента файла не имеет значения NULL, поток файлов представляет открытый экземпляр файла или каталога, а значение этого флага игнорируется операционной системой.

  • Если FsContext2 член файла имеет значение NULL, и этот флаг не задан, объект файла является объектом потока, а поток — это поток без записи (MNW).

  • Если FsContext2 член файла имеет значение NULL, и этот флаг задан, объект файла является объектом потока, а поток доступен для записи.

Reserved

Зарезервировано для использования системы. Драйверы должны задать для этого битового поля нулевое значение.

Version

Зарезервировано для использования системы. Это битовое поле задается макросом FsRtlSetupAdvancedHeader или FsRtlSetupAdvancedHeaderEx. Начиная с Windows Vista, значение этого битового поля FSRTL_FCB_HEADER_V1 или больше; в противном случае значение FSRTL_FCB_HEADER_V0. Дополнительные сведения см. в FSRTL_ADVANCED_FCB_HEADER.

Resource

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

Драйверы фильтров должны рассматривать этот элемент как непрозрачный.

PagingIoResource

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

Драйверы фильтров должны рассматривать этот элемент как непрозрачный.

AllocationSize

Размер выделения для потока файлов.

Дополнительные сведения о членах AllocationSize, FileSizeи ValidDataLength см. в CcInitializeCacheMap.

FileSize

Размер файла потока.

ValidDataLength

Допустимая длина данных потока файлов.

Замечания

Файловые системы должны задать FsContext член каждого объекта файла, чтобы указать FSRTL_ADVANCED_FCB_HEADER структуру. Эта структура может быть внедрена в структуру контекста контекста потока для файловой системы (оставшаяся часть этой структуры зависит от файловой системы). Как правило, структура FSRTL_ADVANCED_FCB_HEADER является блоком управления файлами (FCB). Однако в некоторых файловых системах, поддерживающих несколько потоков данных, таких как NTFS, это блок управления потоками (SCB).

Для поддержки диспетчера фильтров и контекстов фильтрации файловые системы должны использовать структуру FSRTL_ADVANCED_FCB_HEADER в своих объектах контекста потока. Все файловые системы Майкрософт используют эту структуру, и все сторонние разработчики файловой системы также должны сделать это. ФКБ и SCB для всех классов открытых запросов, включая открытые тома запросы, должны включать эту структуру.

Если файл используется в качестве разбиения по страницам, FSRTL_ADVANCED_FCB_HEADER структура должна быть выделена из непагрегированного пула. В противном случае его можно выделить из страничного или непагированного пула.

Требования

Требование Ценность
заголовка ntifs.h (include Ntifs.h, Fltkernel.h)

См. также

CcInitializeCacheMap

FSRTL_ADVANCED_FCB_HEADER

FSRTL_PER_STREAM_CONTEXT

FsRtlAreThereCurrentFileLocks

FsRtlCopyRead

FsRtlCopyWrite

FsRtlSetupAdvancedHeader

FsRtlSetupAdvancedHeaderEx