Suporte do sistema de arquivos para contextos

Para dar suporte a contextos de arquivo (se aplicável), contextos de fluxo e contextos de objeto de arquivo (identificador de fluxo), um sistema de arquivos deve usar a estrutura FSRTL_ADVANCED_FCB_HEADER . Todos os sistemas de arquivos do Microsoft Windows usam essa estrutura e todos os desenvolvedores de sistema de arquivos de terceiros também são altamente incentivados a fazê-lo. Para obter mais informações, consulte FsRtlSetupAdvancedHeader e FSRTL_ADVANCED_FCB_HEADER.

Os sistemas de arquivos NTFS e FAT não dão suporte a contextos de arquivo, fluxo ou objeto de arquivo em arquivos de paginação, no caminho de pré-criação ou pós-fechamento ou para operações de IRP_MJ_NETWORK_QUERY_OPEN .

Um driver de minifiltro pode determinar se um sistema de arquivos dá suporte a contextos de fluxo e contextos de objeto de arquivo para um determinado objeto de arquivo chamando FltSupportsStreamContexts e FltSupportsStreamHandleContexts, respectivamente.

Os contextos de arquivo estão disponíveis no Windows Vista e posterior.

Para sistemas de arquivos (como FAT) que dão suporte apenas a um único fluxo de dados por arquivo, os contextos de arquivo são equivalentes a contextos de fluxo. Esses sistemas de arquivos geralmente dão suporte a contextos de fluxo, mas não dão suporte a contextos de arquivo. Em vez disso, o gerenciador de filtros fornece esse suporte, usando o suporte existente do sistema de arquivos para contextos de fluxo. Para instâncias de driver de minifiltro anexadas a esses sistemas de arquivos, FltSupportsFileContexts retorna FALSE, enquanto FltSupportsFileContextsEx retorna TRUE (quando um valor não NULL válido é passado para o parâmetro Instance ).

Se não houver suporte para um tipo de contexto em um arquivo, o minifiltro não poderá anexar um contexto desse tipo a esse arquivo.

Para dar suporte a contextos de arquivo, um sistema de arquivos deve:

  • Insira um membro FileContextSupportPointer do tipo PVOID em sua estrutura de contexto de arquivo, geralmente o FCB (bloco de contexto de arquivo). O sistema de arquivos deve inicializar esse membro como NULL.

  • Use FsRtlSetupAdvancedHeaderEx (em vez de FsRtlSetupAdvancedHeader) para inicializar sua estrutura de contexto de fluxo, passando um ponteiro válido para o membro FileContextSupportPointer (inserido na estrutura de contexto de arquivo correspondente) para o parâmetro FileContextSupportPointer . Para obter mais informações, consulte FsRtlSetupAdvancedHeaderEx e FSRTL_ADVANCED_FCB_HEADER.

  • Chame FsRtlTeardownPerFileContexts para liberar todas as estruturas de contexto de arquivo que filtram e os drivers de minifiltro associados a um arquivo quando o sistema de arquivos exclui sua estrutura de contexto de arquivo para o arquivo.