структура 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 :
- FsRtlSetupAdvancedHeader
- FsRtlSetupAdvancedHeaderEx
- FsRtlSetupAdvancedHeaderEx2, доступно начиная с Windows 10 версии 20H2.
Следующие флаги задаются этими макросами.
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) |