Поддержка файловой системы для контекстов

Чтобы поддерживать контексты файлов (если применимо), контексты потока и контексты объектов файлов (дескриптор потока), файловая система должна использовать структуру FSRTL_ADVANCED_FCB_HEADER . Все файловые системы Microsoft Windows используют эту структуру, и всем сторонним разработчикам файловой системы настоятельно рекомендуется сделать это. Дополнительные сведения см. в разделе FsRtlSetupAdvancedHeader и FSRTL_ADVANCED_FCB_HEADER.

Файловые системы NTFS и FAT не поддерживают контексты файлов, потоков или файловых объектов в файлах разбиения по страницам, в пути предварительного создания или после закрытия или для операций IRP_MJ_NETWORK_QUERY_OPEN .

Драйвер минифильтра может определить, поддерживает ли файловая система контексты потоков и контексты объектов файлов для заданного объекта файла путем вызова FltSupportsStreamContexts и FltSupportsStreamHandleContexts соответственно.

Контексты файлов доступны в Windows Vista и более поздних версиях.

Для файловых систем (например, FAT), поддерживающих только один поток данных для каждого файла, контексты файлов эквивалентны контекстам потока. Такие файловые системы обычно поддерживают контексты потоков, но не поддерживают контексты файлов. Вместо этого диспетчер фильтров предоставляет эту поддержку, используя существующую поддержку файловой системы для контекстов потока. Для экземпляров драйверов минифильтра, подключенных к этим файловым системам, FltSupportsFileContexts возвращает FALSE, а FltSupportsFileContextsEx возвращает TRUE (если передано допустимое не NULL значение для параметра Instance).

Если тип контекста не поддерживается в файле, мини-фильтр не может подключить контекст этого типа к этому файлу.

Чтобы поддерживать контексты файлов, файловая система должна:

  • Внедрите элемент FileContextSupportPointer типа PVOID в структуру контекста файла, обычно в блок контекста файла (FCB). Файловая система должна инициализировать этот элемент до NULL.

  • Используйте FsRtlSetupAdvancedHeaderEx (вместо FsRtlSetupAdvancedHeader), чтобы инициализировать структуру контекста потока, передав корректный указатель на элемент FileContextSupportPointer, встроенный в соответствующую структуру контекста файла, в качестве параметра FileContextSupportPointer. Дополнительные сведения см. в разделе FsRtlSetupAdvancedHeaderEx и FSRTL_ADVANCED_FCB_HEADER.

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