Mode de contournement des données
Le mode de contournement des données du pilote de filtre peut améliorer les performances du système. NDIS n’appelle pas les fonctions FilterXxx qui sont contournées. Par exemple, si les services d’envoi et de réception ne sont pas requis pour une application de filtre donnée, le pilote de filtre peut contourner les fonctions d’envoi et de réception.
Un pilote de filtre spécifie les points d’entrée par défaut, pour les fonctions qui peuvent être contournées, lors de l’initialisation du pilote lorsqu’il appelle la fonction NdisFRegisterFilterDriver . Les points d’entrée sont NULL pour les fonctions qui sont contournées par défaut. Pour plus d’informations sur l’initialisation, consultez Initialisation d’un pilote de filtre.
Pour modifier l’état de contournement au moment de l’exécution, le pilote doit spécifier un point d’entrée pour la fonction FilterSetModuleOptions lors de l’initialisation du pilote. Le pilote peut initialiser une structure NDIS_FILTER_PARTIAL_CHARACTERISTICS et passer les nouvelles caractéristiques à la fonction NdisSetOptionalHandlers à partir du contexte de FilterSetModuleOptions.
NDIS appelle la fonction FilterSetModuleOptions , le cas échéant, au début d’une opération de redémarrage. Un pilote de filtre peut définir le mode de contournement indépendamment pour chaque module de filtre. Pour plus d’informations, consultez Démarrage d’un module de filtre.
Les pilotes de filtre peuvent contourner les fonctions FilterXxx facultatives suivantes qui sont spécifiées dans la structure NDIS_FILTER_DRIVER_CHARACTERISTICS :
FilterSendNetBufferListsComplete
FilterCancelSendNetBufferLists
Pour définir une fonction FilterXxx en mode de contournement, un pilote de filtre spécifie NULL pour le point d’entrée de cette fonction. Toutefois, si un pilote appelle une fonction NDIS qui a une fonction FilterXxx associée, il doit fournir un point d’entrée pour cette fonction FilterXxx . Par exemple, si un pilote appelle la fonction NdisFIndicateReceiveNetBufferLists , il doit fournir une fonction FilterReturnNetBufferLists .
Si un pilote de filtre spécifie une fonction FilterSendNetBufferLists et qu’il met en file d’attente les requêtes d’envoi, il doit également spécifier une fonction FilterCancelSendNetBufferLists .
Si un pilote de filtre spécifie une fonction FilterReceiveNetBufferLists ou FilterReturnNetBufferLists , le pilote doit également spécifier une fonction FilterStatus .
Pour modifier ses paramètres de mode de contournement au moment de l’exécution, un pilote de filtre peut appeler la fonction NdisFRestartFilter . NdisFRestartFilter planifie une opération de pause qui est suivie d’une opération de redémarrage pour le module de filtre spécifié. Lorsque NDIS appelle FilterSetModuleOptions, le pilote de filtre peut modifier les fonctions de ce module de filtre en appelant NdisSetOptionalHandlers et en spécifiant un nouvel ensemble de points d’entrée.
Note La pause et le redémarrage peuvent entraîner la suppression de certains paquets réseau sur le chemin d’accès de transmission ou de réception, ou les deux. Les protocoles réseau qui fournissent un mécanisme de transport fiable peuvent réessayer l’opération d’E/S réseau en cas de perte de paquet, mais d’autres protocoles qui ne garantissent pas la fiabilité ne réessayent pas l’opération.
Un pilote de filtre peut inscrire des fonctions facultatives supplémentaires qui prennent en charge les services de pilotes facultatifs. Le pilote inscrit ces services facultatifs dans la fonction FilterSetOptions . Pour plus d’informations sur ces services facultatifs, consultez Configuration des services de pilotes de filtre facultatifs.