Utilisation de l’étiquetage de paquets

Un pilote de légende peut étiqueter des paquets intéressants et recevoir une notification des événements qui se produisent sur les paquets balisés. L’étiquetage des paquets est pris en charge dans Windows 7 et les versions ultérieures de Windows.

Pour utiliser l’étiquetage des paquets, le pilote de légende doit implémenter la fonction de rappel FWPS_NET_BUFFER_LIST_NOTIFY_FN0 ou FWPS_NET_BUFFER_LIST_NOTIFY_FN1 . Cette fonction recevra toutes les notifications status pour les paquets balisés. Avant que des paquets individuels puissent être marqués, le pilote de légende doit obtenir une balise de contexte spéciale en appelant FwpsNetBufferListGetTagForContext0. Le pilote de légende peut utiliser la même balise de contexte pour tout ou partie des paquets balisés. Par exemple, un pilote de légende peut différencier les types de paquets balisés à l’aide de différentes balises de contexte.

Pour baliser des paquets, le pilote de légende utilise NET_BUFFER_LIST structures. Le pilote de légende effectue des appels à FwpsNetBufferListAssociateContext0 pour baliser des structures NET_BUFFER_LIST individuelles. Le contexte que le pilote de légende associe au paquet est une valeur 64 bits non signée arbitraire. Lorsqu’un événement est déclenché, le rappel FWPS_NET_BUFFER_LIST_NOTIFY_FN0 ou FWPS_NET_BUFFER_LIST_NOTIFY_FN1 transmet le contexte en tant que paramètre d’entrée afin que le pilote de légende puisse identifier des paquets étiquetés individuels. Le contexte n’est pas utilisé ou évalué par le moteur de filtrage. Il est uniquement passé au rappel pour une utilisation par le pilote de légende.

Les contextes sont automatiquement supprimés des paquets balisés lorsque les paquets quittent la pile. Toutefois, si les paquets n’entrent jamais dans la pile TCP/IP( par exemple, dans le cas d’un pilote de filtre NDIS), les contextes doivent être supprimés manuellement en appelant FwpsNetBufferListRemoveContext0 avec le paramètre netBufferList défini surNULL.

Si une légende doit abandonner tôt les opérations d’étiquetage, les contextes peuvent être supprimés en appelant FwpsNetBufferListRemoveContext0. La suppression d’un contexte déclenche généralement un événement FWPS_NET_BUFFER_LIST_CONTEXT_REMOVED . Pour plus d’informations sur les événements pouvant être déclenchés, consultez l’énumération FWPS_NET_BUFFER_LIST_EVENT_TYPE0 . Dans certains cas, aucun événement n’est déclenché, par exemple lorsque le paquet n’entre jamais dans la pile TCP/IP pour traitement.

Lorsqu’un paquet balisé est cloné, le pilote de légende peut déplacer ou copier le contexte dans le paquet de clone. Pour déplacer le contexte (dans le cas d’un clone), le pilote de légende doit appeler FwpsNetBufferListRetrieveContext0 avec le paramètre removeContext défini sur TRUE. Ensuite, le contexte peut être associé au nouveau paquet. Le processus de copie du contexte (dans le cas d’une duplication) est le même, sauf que le paramètre removeContext de FwpsNetBufferListRetrieveContext0 doit avoir la valeur FALSE.

Les paquets balisés à partir des couches TCP/IP peuvent être récupérés à partir d’un pilote de filtre NDIS. L’inverse est également vrai. L’étiquetage des paquets n’est pas disponible à partir des couches de flux où aucun paquet n’est indiqué à l’exception des segments de données.

Un pilote de légende peut récupérer le contexte d’un paquet en dehors de la fonction FWPS_NET_BUFFER_LIST_NOTIFY_FN0 ou FWPS_NET_BUFFER_LIST_NOTIFY_FN1 en appelant FwpsNetBufferListRetrieveContext0. En règle générale, un pilote de légende récupère le contexte dans son rappel classifyFn .

classifyFn

FWPS_NET_BUFFER_LIST_EVENT_TYPE0

FWPS_NET_BUFFER_LIST_NOTIFY_FN0

FWPS_NET_BUFFER_LIST_NOTIFY_FN1

FwpsNetBufferListAssociateContext0

FwpsNetBufferListGetTagForContext0

FwpsNetBufferListRemoveContext0

FwpsNetBufferListRetrieveContext0

NET_BUFFER_LIST

Pilotes de filtre NDIS