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


структура 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

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

BypassIoOpenCount

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

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

ReservedContext

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

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

Комментарии

Структура 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.) Настоятельно рекомендуется сделать то же самое в файловой системе или системах, чтобы операционная система действовала согласованно во всех файловых системах.

Принудительная блокировка с автоматическим расширением

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

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

Требования

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

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

FSRTL_COMMON_FCB_HEADER

FSRTL_PER_STREAM_CONTEXT

FsRtlInsertPerStreamContext

FsRtlLookupPerStreamContext

FsRtlRemovePerStreamContext

FsRtlSetupAdvancedHeader

FsRtlSetupAdvancedHeaderEx

FsRtlSetupAdvancedHeaderEx2

FsRtlTeardownPerStreamContexts