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

Структура FSRTL_ADVANCED_FCB_HEADER содержит контекстную информацию о файле, которая хранится в файловой системе.

Синтаксис

typedef struct _FSRTL_ADVANCED_FCB_HEADER {
  FSRTL_COMMON_FCB_HEADER          DUMMYSTRUCTNAME;
  PFAST_MUTEX                      FastMutex;
  LIST_ENTRY                       FilterContexts;
  EX_PUSH_LOCK                     PushLock;
  PVOID                            *FileContextSupportPointer;
  union {
    OPLOCK Oplock;
    PVOID  ReservedForRemote;
  };
  PVOID                            AePushLock;
  PVOID                            ReservedContextLegacy;
  ULONG                            BypassIoOpenCount;
  struct _FSRTL_PER_STREAM_CONTEXT *ReservedContext;
} FSRTL_ADVANCED_FCB_HEADER;

Члены

DUMMYSTRUCTNAME

Неименованный член, содержащий структуру типа FSRTL_COMMON_FCB_HEADER.

FastMutex

Указатель на инициализированный быстрый мьютекс, используемый для синхронизации доступа к следующим членам DUMMYSTRUCTNAME:

  • AllocationSize
  • FileSize
  • ValidDataLength

Если он имеется, элемент PushLock используется для синхронизации доступа к элементу FilterContexts ; в противном случае используется FastMutex .

FilterContexts

Указатель на заголовок списка всех структур контекста, связанных с файлом. Драйверы фильтров могут выполнять поиск в этом списке, вызывая FsRtlLookupPerStreamContext и изменяя его, вызывая FsRtlInsertPerStreamContext и FsRtlRemovePerStreamContext.

PushLock

Принудительная блокировка, используемая для синхронизации доступа к списку FilterContexts . Это поле доступно только начиная с Windows Vista (то есть, если битовое поле версииструктуры FSRTL_COMMON_FCB_HEADER больше или равно FSRTL_FCB_HEADER_V1).

FileContextSupportPointer

Указатель на поле указателя, используемое библиотекой среды выполнения файловой системы (FSRTL) для отслеживания контекстов файлов. Если значение не равно NULL, этот элемент должен быть указателем на переменную PVOID в структуре файла для файловой системы, создающей структуру. Если значение NULL, контексты файлов не поддерживаются. Этот элемент доступен только начиная с Windows Vista (то есть, если битовое поле версииструктуры FSRTL_COMMON_FCB_HEADER больше или равно FSRTL_FCB_HEADER_V1).

Oplock

Блокировка для файла или каталога. Это поле доступно только начиная с Windows 8 (то есть, если битовое поле версии структуры FSRTL_COMMON_FCB_HEADER больше или равно FSRTL_FCB_HEADER_V2).

ReservedForRemote

Если файловая система удалена, это поле зарезервировано. Он доступен только начиная с Windows 8 (то есть, если битовое поле версииструктуры FSRTL_COMMON_FCB_HEADER больше или равно FSRTL_FCB_HEADER_V2).

AePushLock

Принудительная блокировка с автоматическим расширением, которая используется вместо PushLock для синхронизации доступа к списку контекстов потока. Подробные сведения см. в разделе Примечания.

AePushlock доступен начиная с Windows 10 версии 20H2 (то есть, если битовое поле версииструктуры FSRTL_COMMON_FCB_HEADER больше или равно FSRTL_FCB_HEADER_V3) и должно быть инициализировано путем вызова FsRtlSetupAdvancedHeaderEx2.

ReservedContextLegacy

BypassIoOpenCount

Отслеживает, сколько дескрипторов открыто в данный момент с включенным BypassIO в этом потоке.

Это поле доступно начиная с Windows 11 (то есть, если битовое поле версии структуры FSRTL_COMMON_FCB_HEADER больше или равно FSRTL_FCB_HEADER_V4).

ReservedContext

Это поле зарезервировано для использования системой. Он используется только в Windows 8.1 по Windows 10 версии 1803 (если битовое поле версииструктуры FSRTL_COMMON_FCB_HEADER больше или равно FSRTL_FCB_HEADER_V3).

Комментарии

Структура FSRTL_ADVANCED_FCB_HEADER является надмножеством структуры FSRTL_COMMON_FCB_HEADER . Файловые системы (включая устаревшие фильтры и драйверы минифильтров, если применимо) должны использовать структуру FSRTL_ADVANCED_FCB_HEADER .

Файловые системы должны использовать один из следующих макросов для инициализации структуры FSRTL_ADVANCED_FCB_HEADER :

Следующие флаги задаются этими макросами.

Flag Значение
FSRTL_FLAG_ADVANCED_HEADER Этот флаг, заданный в элементе Flags структуры FSRTL_COMMON_FCB_HEADER , указывает на поддержку драйверов файловой системы для FSRTL_ADVANCED_FCB_HEADER структур. Этот флаг не следует изменять.
FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS Этот флаг, заданный в элементе Flags2FSRTL_COMMON_FCB_HEADER, указывает на поддержку контекстов драйвера фильтра. Этот флаг можно снять только для файлов подкачки (см. сведения после таблицы).

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

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

Все файловые системы Майкрософт отключают поддержку контекста потока для файлов подкачки, снимите флаг FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS в элементе Flags2FSRTL_COMMON_FCB_HEADER после вызова FsRtlSetupAdvancedHeader. (См. функцию FatCreateFcb в Strucsup.c для примера FASTFAT WDK.) Настоятельно рекомендуется сделать то же самое в файловой системе или системах, чтобы операционная система действовала согласованно во всех файловых системах.

Автоматическое развертывание принудительная блокировка

Принудительная блокировка с автоматическим расширением появилась в Windows 10 версии 20H2. Когда блокировки диспетчера фильтров были первоначально разработаны, большие многопроцессорные системы были очень редкими, и ОЗУ было ценно. В таких системах теперь распространены и ОЗУ не так ограничены, автоматическое расширение push-блокировки обеспечивают выгодный компромисс между потреблением памяти и скоростью.

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

Требования

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

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

FSRTL_COMMON_FCB_HEADER

FSRTL_PER_STREAM_CONTEXT

FsRtlInsertPerStreamContext

FsRtlLookupPerStreamContext

FsRtlRemovePerStreamContext

FsRtlSetupAdvancedHeader

FsRtlSetupAdvancedHeaderEx

FsRtlSetupAdvancedHeaderEx2

FsRtlTeardownPerStreamContexts