Partager via


Prise en charge du système de fichiers pour les contextes

Pour prendre en charge les contextes de fichiers (le cas échéant), les contextes de flux et les contextes d’objet de fichier (handle de flux), un système de fichiers doit utiliser la structure FSRTL_ADVANCED_FCB_HEADER . Tous les systèmes de fichiers Microsoft Windows utilisent cette structure, et tous les développeurs de systèmes de fichiers tiers sont fortement encouragés à le faire également. Pour plus d’informations, consultez FsRtlSetupAdvancedHeader et FSRTL_ADVANCED_FCB_HEADER.

Les systèmes de fichiers NTFS et FAT ne prennent pas en charge les contextes de fichiers, de flux ou d’objets de fichier sur les fichiers de pagination, dans le chemin de précréation ou de post-fermeture, ou pour les opérations de IRP_MJ_NETWORK_QUERY_OPEN .

Un pilote de minifiltre peut déterminer si un système de fichiers prend en charge les contextes de flux et les contextes d’objet de fichier pour un objet de fichier donné en appelant FltSupportsStreamContexts et FltSupportsStreamHandleContexts, respectivement.

Les contextes de fichiers sont disponibles sur Windows Vista et versions ultérieures.

Pour les systèmes de fichiers (tels que FAT) qui ne prennent en charge qu’un seul flux de données par fichier, les contextes de fichiers sont équivalents aux contextes de flux. Ces systèmes de fichiers prennent généralement en charge les contextes de flux, mais ne prennent pas en charge les contextes de fichiers. Au lieu de cela, le gestionnaire de filtres fournit cette prise en charge, en utilisant la prise en charge existante du système de fichiers pour les contextes de flux. Pour les instances de pilote de minifiltre attachées à ces systèmes de fichiers, FltSupportsFileContexts retourne FALSE, tandis que FltSupportsFileContextsEx retourne TRUE (lorsqu’une valeur non NULL valide est transmise pour le paramètre Instance ).

Si un type de contexte n’est pas pris en charge sur un fichier, le minifiltre ne peut pas attacher un contexte de ce type à ce fichier.

Pour prendre en charge les contextes de fichiers, un système de fichiers doit :

  • Incorporez un membre FileContextSupportPointer de type PVOID dans sa structure de contexte de fichier, généralement le bloc de contexte de fichier (FCB). Le système de fichiers doit initialiser ce membre sur NULL.

  • Utilisez FsRtlSetupAdvancedHeaderEx (au lieu de FsRtlSetupAdvancedHeader) pour initialiser sa structure de contexte de flux, en passant un pointeur valide vers le membre FileContextSupportPointer (incorporé dans la structure de contexte de fichier correspondante) pour le paramètre FileContextSupportPointer . Pour plus d’informations, consultez FsRtlSetupAdvancedHeaderEx et FSRTL_ADVANCED_FCB_HEADER.

  • Appelez FsRtlTeardownPerFileContexts pour libérer toutes les structures de contexte de fichier qui filtrent et que les pilotes de minifiltre sont associés à un fichier lorsque le système de fichiers supprime sa structure de contexte de fichier pour le fichier.