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


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

Для поддержки контекстов файлов (если применимо), контекстов потоков и контекстов объекта файла (дескриптора потока) файловая система должна использовать структуру 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, а FltSupportsFileContextsExtrue (если для параметра Instance передается допустимое значение, отличное от NULL).

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

Для поддержки контекстов файлов файловая система должна:

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

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

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