Classe d’assistance extensible de la plateforme de filtrage Windows

La plateforme de filtrage Windows (WFP) comprend une classe d’assistance Network Diagnostics Framework (NDF), appelée classe d’assistance de plateforme de filtrage (FPHC). FPHC peut aider à identifier les causes profondes des problèmes de connectivité causés par WFP. Les développeurs de pare-feu tiers peuvent implémenter leurs propres classes d’assistance NDF. L’extensibilité de FPHC permet à ces classes d’assistance tierces d’être appelées pendant les diagnostics.

Cette rubrique suppose une connaissance de l’API WFP.

Pourquoi étendre FPHC ?

Tous les développeurs qui écrivent des applications qui appellent l’API WFP doivent écrire une classe d’assistance NDF qui étend FPHC.

FPHC peut identifier WFP comme la cause d’un problème de connectivité. S’il est disponible, FPHC peut également identifier le fournisseur qui a créé le filtre qui bloque le trafic réseau. FPHC transmet ces informations à NDF, qui à son tour peut informer l’utilisateur que WFP provoque le problème de connectivité et donne le nom du fournisseur bloquant le trafic.

Toutefois, FPHC ne peut pas suggérer une action corrective à l’utilisateur, ni fournir la raison pour laquelle le filtre bloque le trafic vers l’utilisateur. Seule une extension FPHC peut effectuer ces tâches.

Considérez une application de pare-feu tierce qui appelle l’API WFP. Si le pare-feu tiers implémente une extension FPHC, des actions personnalisées peuvent alors être implémentées pour gérer les problèmes de connectivité identifiés par NDF. Quand NDF diagnostique qu’une application a été bloquée par le pare-feu tiers, l’extension FPHC peut gérer l’événement de blocage. L’une des façons dont l’extension FPHC peut gérer un événement consiste à présenter à l’utilisateur une invite pour débloquer un programme à l’aide du pare-feu, puis débloquer le programme lors de la confirmation de l’utilisateur. L’extension FPHC peut également gérer un événement en informant l’utilisateur de la raison pour laquelle l’application a été bloquée, par exemple si elle était considérée comme un programme malveillant par le pare-feu.

À propos des diagnostics WFP

Lorsque NDF est appelée pour diagnostiquer un problème réseau, les classes d’assistance sont contactées pour déterminer la cause du problème. Si une classe d’assistance de niveau supérieur détermine qu’une défaillance réseau peut être causée par WFP, elle génère une hypothèse pour FPHC en fonction des informations disponibles. NDF transmet cette hypothèse, sous la forme de plusieurs attributs d’événement, à FPHC. Ces attributs sont décrits en détail dans la section Attributs d’événement FPHC ci-dessous.

Un problème réseau peut être décrit comme un problème de connectivité affectant une tentative de connexion particulière. Par exemple, l’utilisateur a peut-être bloqué accidentellement une application en cliquant par inadvertance sur Ne pas autoriser. Le pare-feu empêche ensuite l’application de se lier à n’importe quel port. L’utilisateur, ne sachant pas pourquoi l’application est bloquée, peut essayer de diagnostiquer le problème via un point d’entrée proposé par l’application. FPHC examine les journaux et s’il trouve une correspondance, il récupère l’ID de filtre et l’ID de fournisseur de ce filtre particulier. À ce stade, FPHC sait qui est le propriétaire de ce filtre, et il remettra le processus de diagnostic à la classe d’assistance appropriée pour un diagnostic plus approfondi.

L’événement le plus récent dans les journaux des événements WFP pour faire correspondre les attributs est sélectionné comme étant pertinent pour le problème réseau. Si aucun événement correspondant n’est trouvé et que l’heure à laquelle l’événement s’est produit est couverte dans le journal WFP, FPHC indique à NDF qu’il est sain. Si aucun événement correspondant n’est trouvé et que les journaux WFP n’incluent pas l’heure à laquelle l’événement s’est produit, FPHC retourne un état indéterminé à NDF.

Si un événement correspondant est trouvé, FPHC utilise l’ID de fournisseur du filtre qui a poussé l’événement à identifier le fournisseur de la règle de sécurité qui a bloqué la connectivité. FPHC vérifie ensuite si une extension de classe d’assistance existe pour ce fournisseur. Si elle existe, FPHC génère une hypothèse pour ce fournisseur, puis NDF appelle l’extension. L’extension doit retourner des informations de diagnostic et de réparation utiles à l’utilisateur.

Inscription de la classe d’assistance

Une extension FPHC doit être inscrite comme décrit dans Inscription des extensions de classe d’assistance NDF. Les développeurs qui implémentent une classe d’assistance doivent inscrire leurs extensions pour s’assurer que l’extension est appelée par NDF, le cas échéant. L’attribut correspondant décrit ci-dessous doit être stocké dans le Registre sous HKLM\System\CurrentControlSet\Control\NetDiagFx\VendorName\HostDLLs\Helper Class DLL\HelperClasses\Helper Class Name\MatchAttributes.

Le tableau suivant montre l’attribut correspondant utilisé pour identifier l’hypothèse à utiliser dans les diagnostics dans le journal des événements WFP.

Nom Type Description
ProviderID REG_SZ Le GUID de l’extension FPHC. Cette valeur doit être identique au GUID du fournisseur WFP.
Cette chaîne respecte la casse. Il doit être stocké dans le Registre en majuscules avec des accolades englobantes et des traits d’union. Par exemple, {C200E360-38C5-11CE-AE62-08002B2B2B79EF} est un ProviderID valide.

Lorsque le ProviderID d’un filtre bloquant correspond à celui d’une classe d’assistance inscrite, FPHC informe NDF d’appeler cette classe d’assistance, ce qui étend la capacité de diagnostic de FPHC.

Attributs d’événement FPHC

Le tableau suivant répertorie les attributs d’événement associés à chaque événement correspondant. Chaque attribut d’événement est stocké dans une structure HELPER_ATTRIBUTE. Ces attributs sont passés par NDF à FPHC lorsqu’un événement correspondant est trouvé. Ceux-ci peuvent à leur tour être passés aux extensions FPHC.

Attribut Valeur ATTRIBUTE_TYPE Description
GUID du fournisseur AT_GUID GUID du fournisseur associé au filtre.
Horodateur AT_OCTET_STRING Mémoire tampon de type FILETIME qui spécifie l’heure à laquelle l’événement s’est produit. Ce timestamp peut être utilisé pour identifier un événement de manière unique.
ipProtocol AT_UINT32 Protocole de couche de transport, au format UINT8.
LocalAddr AT_SOCKADDR Adresse IP et port locaux, stockés dans une structure DIAG_SOCKADDR.
RemoteAddr AT_SOCKADDR Adresse IP et port distants, stockés dans une structure DIAG_SOCKADDR.
userId AT_OCTET_STRING Mémoire tampon de type SID qui représente le userid. Si userId est de longueur 0, le SID n’est pas disponible.
ID_application AT_STRING Mémoire tampon qui stocke l’identificateur d’application récupéré. Si appId a la valeur L"", l’identificateur de l’application n’est pas disponible.

Gestion des événements FPHC

Avant de suggérer des informations de diagnostic et de réparation à l’utilisateur, une extension FPHC doit collecter plus de données que celles fournies par les notifications FPHC. Ces données peuvent être acquises à partir des fonctions de gestion des événements WFP. Ces fonctions sont illustrées dans l’exemple Afficher des événements réseau.

Un exemple de gestion des événements plus détaillé est inclus dans le kit de développement logiciel (SDK). Le code source de l’exemple se trouve dans l’emplacement d’installation du kit de développement logiciel (SDK) sous C:\Program Files\Microsoft SDKs\Windows\<numéro de version>\Samples\NetDs\WFP\DiagEvents. Le kit de développement logiciel (SDK) Windows Vista est disponible à partir du Centre de téléchargement.

Diagnostics FPHC intégrés

En l’absence d’une extension FPHC, FPHC peut diagnostiquer les scénarios répertoriés ci-dessous. La plupart des échecs de connectivité diagnostiqués par FPHC se produisent parce que les pare-feu bloquent le trafic. Les scénarios IPsec sont moins courants.

Le tableau suivant présente certains scénarios provoquant des défaillances de connectivité qui peuvent être diagnostiquées par FPHC, ainsi que les informations de description et de réparation transmises à NDF.

Scénario Description de faible intégrité Informations de réparation
Échec du pare-feu Les paramètres de pare-feu sur cet ordinateur bloquent la connexion. Vérifiez vos paramètres de pare-feu.
Échec du mode principal Vous ne pouvez pas vous connecter en raison d’une incompatibilité de stratégie de sécurité IPsec. Contactez le propriétaire de la stratégie IPsec.
Échec du mode rapide Vous ne pouvez pas vous connecter en raison d’une incompatibilité de stratégie de sécurité IPsec. Contactez le propriétaire de la stratégie IPsec.
Échec du mode utilisateur Vous ne pouvez pas vous connecter en raison d’une incompatibilité de stratégie de sécurité IPsec. Contactez le propriétaire de la stratégie IPsec.
Échec des informations d’identification Vous ne pouvez pas vous connecter, car l’autorité de certification racine sur cet ordinateur ne correspond pas à l’autorité de certification racine sur l’ordinateur distant. Mettez à jour le certificat racine approuvé.
Certificat expiré Le certificat utilisé pour l’authentification IPsec a expiré. Demandez un certificat.
Autres échecs de certificat Un certificat valide n’a pas été trouvé pour l’authentification IPsec. Demandez un certificat.
Échec Kerberos L’ordinateur ne fait pas partie de ce domaine. Joignez cet ordinateur à un domaine.
Clé prépartagée Réinitialisez les clés prépartagées. Réinitialisez les clés prépartagées.

Plateforme de filtrage Windows

Conception d’extensions de classe d’assistance NDF

Inscription d’extensions de classe d’assistance NDF

Exemples de classes d’assistance NDF