Vérification du filtre du système de fichiers

Validation de l’utilisation

Filter Verifier valide l’utilisation suivante dans un pilote de minifiltre :

  • Utilisation correcte des paramètres et du contexte d’appel
  • Valeurs de retour correctes des routines de rappel de préopération et de post-opération
  • Modifications cohérentes et cohérentes des paramètres dans les données de rappel

Suivi des objets du Gestionnaire de filtres

Filter Verifier effectue le suivi des objets de gestionnaire de filtres suivants :

  • Filtrer les contextes (contextes de flux, contextes de fichiers, etc.)
  • Structures de données de rappel
  • Éléments de travail en file d’attente
  • NameInformation structures
  • Objets de fichier
  • Filtrer les objets
  • Objets d’instance
  • Objets de volume

Pour les structures comptabilisées en référence, telles que les contextes de filtre et les structures d’informations de nom, Filter Verifier s’infiltre dans le débogueur lors du déchargement du pilote de filtre si des nombres de références semblent avoir été divulgués. Il affiche des instructions sur la façon d’utiliser l’extension de débogueur !fltkd pour rechercher les structures qui ont fui.

Violations du vérificateur de filtre

Lorsque le vérificateur de filtre détecte une violation, il imprime un message dans le débogueur décrivant la violation. Pour la plupart des violations, il arrête également l’exécution et invite l’utilisateur à prendre des mesures. Par exemple :

FILTER VERIFIER ERROR: A filter returned an unknown pre-operation callback status.
(Filter = FFFFAC04A21CD8A0 (MyFilter), Status = 0xbaadf00d)
Break, ignore, zap or remove ?

Pour continuer, tapez l’une des quatre commandes d’une lettre :

  • B ou b pour l’arrêt : cette opération se décompose dans le débogueur où vous pouvez effectuer une investigation plus approfondie.
  • I ou i pour Ignorer : reprend l’exécution. Si cette violation est à nouveau rencontrée, Filter Verifier imprime le message de violation sur le débogueur, arrête l’exécution et affiche l’invite.
  • Z ou z pour Zap : reprend l’exécution. Si cette violation est à nouveau rencontrée, Filter Verifier imprime le message de violation sur le débogueur, mais n’arrête pas l’exécution.
  • R ou r pour Supprimer : reprend l’exécution. Si cette violation est à nouveau rencontrée, Filter Verifier n’imprimera PAS le message de violation et n’arrêtera PAS l’exécution.

Notes

Lorsque vous utilisez Filter Verifier sur un pilote qui a été créé avec les optimisations du compilateur activées, vous pouvez parfois rencontrer une erreur Filter Verifier qui affirme systématiquement que votre filtre a fait l’objet d’une fuite de références à une ou plusieurs ressources, même si vous ne trouvez pas la cause d’une fuite dans votre code. Le message commence par un texte semblable à ce qui suit :

FILTER VERIFIER ERROR: A filter (Filter = FFFFAC04A21CD8A0 (MyFilter)) leaked references to the following resources:

Vous pouvez également voir un message indiquant que le suivi des objets n’est pas synchronisé, par exemple :

FILTER VERIFIER WARNING: Filter manager verifier object tracking may be out of sync for the system

La cause la plus courante de cette condition est que Filter Verifier n’a pas pu identifier le véritable appelant d’une API Filter Manager en raison d’une optimisation des appels de fin. Cela peut se produire lorsqu’une routine dans votre pilote appelle une API Filter Manager comme dernière ligne. Par exemple :

void MyWorkItemCallback(PFLT_GENERIC_WORKITEM WorkItem,
                        PVOID Filter,
                        PVOID Context)
{
   // Do some stuff
   ...
   FltFreeGenericWorkItem(WorkItem);
}

Il existe deux façons de vérifier que cela s’est produit :

  1. Désactivez l’optimisation de la routine suspecte en l’encapsulant dans #pragma optimize("", off) ... #pragma optimize("", on).
  2. Réorganisez votre code de sorte que l’appel de l’API Filter Manager ne soit pas la dernière chose qui se produit dans votre routine.

Si l’erreur ne se reproduit plus après avoir essayé l’une de ces options, il s’agit probablement d’un faux positif.

Activation de cette option

Vous pouvez activer la fonctionnalité Vérification du filtre du système de fichiers pour un ou plusieurs pilotes à l’aide de la ligne de verifier.exe commande. Pour plus d’informations, consultez Sélection des options du vérificateur de pilote.

La méthode recommandée pour démarrer Filter Verifier consiste à utiliser l’option /standard de verifier.exe, car elle fournit des fonctionnalités utiles supplémentaires telles que le suivi spécial du pool et du pool :

verifier.exe /standard /driver MyFilter.sys

La vérification commence lorsque le pilote de minifiltre s’inscrit auprès du gestionnaire de filtres.

  • Activation du vérificateur de filtre uniquement dans Windows 11 et versions ultérieures de Windows Pour activer l’ensemble minimal de vérifications de filtre, activez les options Vérification des E/S et Vérification du filtre du système de fichiers dans Driver Verifier (verifier.exe). Par exemple :

    verifier.exe /ruleclasses 5 37 /driver MyFilter.sys
    
  • Activation du vérificateur de filtre uniquement dans Windows 10 et versions antérieures de Windows Pour activer l’ensemble minimal de vérifications de filtre, spécifiez le nom du pilote de minifiltre et activez l’option Vérification des E/S dans Driver Verifier (verifier.exe). Par exemple :

    verifier.exe /flags 0x10 /driver MyFilter.sys