структура 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 :
- 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.) Настоятельно рекомендуется сделать то же самое в файловой системе или системах, чтобы операционная система действовала согласованно во всех файловых системах.
Автоматическое развертывание принудительная блокировка
Принудительная блокировка с автоматическим расширением появилась в Windows 10 версии 20H2. Когда блокировки диспетчера фильтров были первоначально разработаны, большие многопроцессорные системы были очень редкими, и ОЗУ было ценно. В таких системах теперь распространены и ОЗУ не так ограничены, автоматическое расширение push-блокировки обеспечивают выгодный компромисс между потреблением памяти и скоростью.
При автоматическом развертывании принудительной блокировки может автоматически измениться из обычной принудительной блокировки, не поддерживающей кэш, на принудительная блокировка с поддержкой кэша, когда обнаруживается, что она подвержена высокому количеству конфликтов кэша из-за большого количества одновременных общих приобретателей. Функция автоматического развертывания принудительная блокировка больше, чем обычная принудительная блокировка, если она не развернута, но не так велика, как при принудительной блокировке с поддержкой кэша. Этот тип принудительной блокировки более производительен в многопроцессорных системах.
Требования
Требование | Значение |
---|---|
Заголовок | ntifs.h (включая Ntifs.h, Fltkernel.h) |
См. также раздел
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по