FILTER_SEND_NET_BUFFER_LISTS fonction de rappel (ndis.h)

NDIS appelle la fonction FilterSendNetBufferLists pour permettre à un pilote de filtre de filtrer une liste liée de structures NET_BUFFER_LIST .

Note Vous devez déclarer la fonction à l’aide du type FILTER_SEND_NET_BUFFER_LISTS . Pour plus d’informations, consultez la section Exemples suivante.
 

Syntaxe

FILTER_SEND_NET_BUFFER_LISTS FilterSendNetBufferLists;

void FilterSendNetBufferLists(
  [in] NDIS_HANDLE FilterModuleContext,
       PNET_BUFFER_LIST NetBufferList,
  [in] NDIS_PORT_NUMBER PortNumber,
  [in] ULONG SendFlags
)
{...}

Paramètres

[in] FilterModuleContext

Handle de la zone de contexte du module de filtre. Le pilote de filtre a créé et initialisé cette zone de contexte dans la fonction FilterAttach .

NetBufferList

Pointeur vers une liste liée de structures NET_BUFFER_LIST qui spécifient des listes de structures NET_BUFFER . Chaque NET_BUFFER dans la liste mappe une chaîne de dll mdl qui contiennent les données de transmission.

[in] PortNumber

Numéro de port qui identifie un port d’adaptateur miniport. Les numéros de port de l’adaptateur miniport sont attribués en appelant la fonction NdisMAllocatePort . Une valeur zéro identifie le port par défaut d’un adaptateur miniport.

[in] SendFlags

Indicateurs qui définissent des attributs pour l’opération d’envoi. Les indicateurs peuvent être combinés à une opération OR. Pour effacer tous les indicateurs, définissez ce membre sur zéro. Cette fonction prend en charge les indicateurs suivants :

NDIS_SEND_FLAGS_DISPATCH_LEVEL

Spécifie que l’IRQL actuel est DISPATCH_LEVEL. Pour plus d’informations sur cet indicateur, consultez Dispatch IRQL Tracking.

NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK

Spécifie que NDIS doit case activée pour le bouclage. Par défaut, NDIS ne retourne pas en boucle les données au pilote qui a envoyé la demande d’envoi. Un pilote qui se superpose peut remplacer ce comportement en définissant cet indicateur. Lorsque cet indicateur est défini, NDIS identifie toutes les structures NET_BUFFER qui contiennent des données qui correspondent aux critères de réception de la liaison. NDIS indique NET_BUFFER structures qui correspondent aux critères du pilote qui se superpose. Cet indicateur n’a aucun effet sur la vérification du bouclage ou de la boucle arrière sur d’autres liaisons.

NDIS_SEND_FLAGS_SWITCH_SINGLE_SOURCE

Si cet indicateur est défini, tous les paquets d’une liste liée de structures NET_BUFFER_LIST proviennent du même port source de commutateur extensible Hyper-V.

Pour plus d’informations, consultez Indicateurs d’envoi et de réception du commutateur extensible Hyper-V.

Note Si chaque paquet de la liste liée des structures NET_BUFFER_LIST utilise le même port source, l’extension doit définir l’indicateur NDIS_SEND_COMPLETE_FLAGS_SWITCH_SINGLE_SOURCE dans le paramètre SendCompleteFlags de NdisFSendNetBufferListsComplete lorsqu’elle termine la demande d’envoi.
 
Note Cet indicateur est disponible dans NDIS 6.30 et versions ultérieures.
 

NDIS_SEND_FLAGS_SWITCH_DESTINATION_GROUP

Si cet indicateur est défini, tous les paquets d’une liste liée de structures NET_BUFFER_LIST doivent être transférés vers le même port de destination de commutateur extensible.

Pour plus d’informations, consultez Indicateurs d’envoi et de réception du commutateur extensible Hyper-V.

Note Cet indicateur est disponible dans NDIS 6.30 et versions ultérieures.
 

Valeur de retour

None

Remarques

FilterSendNetBufferLists est une fonction facultative. Si un pilote de filtre ne filtre pas les requêtes d’envoi, il peut définir le point d’entrée de cette fonction sur NULL lorsqu’il appelle le Fonction NdisFRegisterFilterDriver .

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 .

Le pilote de filtre peut appeler la fonction NdisSetOptionalHandlers , à partir de la fonction FilterSetModuleOptions , pour spécifier une fonction FilterSendNetBufferLists pour un module de filtre.

Si le pilote de filtre spécifie une fonction FilterSendNetBufferLists , NDIS appelle cette fonction pour filtrer les données contenues dans une liste de structures NET_BUFFER sur le réseau. NDIS spécifie une liste de structures NET_BUFFER dans chaque structure NET_BUFFER_LIST .

Si le pilote de filtre n’a pas spécifié FilterSendNetBufferLists, NDIS appelle le pilote de filtre suivant qui est inférieur dans la pile de pilotes qui a spécifié une fonction FilterSendNetBufferLists . S’il n’existe pas de tels pilotes de filtre sous-jacents, NDIS appelle les pilotes sous-jacents Fonction MiniportSendNetBufferLists .

Le pilote de filtre peut filtrer les données et envoyer les données filtrées aux pilotes sous-jacents. Pour chaque NET_BUFFER structure soumise à FilterSendNetBufferLists, un pilote de filtre peut effectuer les opérations suivantes :

  • Passez la mémoire tampon au pilote sous-jacent suivant en appelant la fonction NdisFSendNetBufferLists . Le pilote de filtre peut modifier le contenu de la mémoire tampon avant d’appeler NdisFSendNetBufferLists. Dans ce cas, NDIS appelle le Fonction FilterSendNetBufferListsComplete une fois que les pilotes sous-jacents ont terminé la demande d’envoi.
  • Rejetez la mémoire tampon en appelant la fonction NdisFSendNetBufferListsComplete .
  • Mettre en file d’attente la mémoire tampon dans une structure de données locale pour un traitement ultérieur.
  • Copiez la mémoire tampon et proviennent d’une demande d’envoi avec la copie. L’opération d’envoi est similaire à une demande d’envoi lancée par un pilote de filtre. Dans ce cas, le pilote doit renvoyer la mémoire tampon d’origine au pilote surchargant en appelant la fonction NdisFSendNetBufferListsComplete .
Une fois l’opération d’envoi terminée, un pilote de filtre inverse les modifications, le cas échéant, apportées aux descripteurs de mémoire tampon qu’il a effectuées dans la fonction FilterSendNetBufferLists . Le pilote appelle la fonction NdisFSendNetBufferListsComplete pour renvoyer la liste liée des structures de NET_BUFFER_LIST aux pilotes qui se superposent et pour retourner la status finale de la demande d’envoi.

Si un module de filtre est à l’état Suspendu , le pilote de filtre ne doit pas être à l’origine des demandes d’envoi pour ce module de filtre. Si NDIS appelle FilterSendNetBufferLists, le pilote ne doit pas appeler NdisFSendNetBufferLists pour transmettre les données tant que le pilote n’est pas redémarré. Le pilote doit appeler immédiatement NdisFSendNetBufferListsComplete pour terminer l’opération d’envoi. Il doit définir la status complète dans chaque structure NET_BUFFER_LIST sur NDIS_STATUS_PAUSED.

NDIS appelle FilterSendNetBufferLists à IRQL <= DISPATCH_LEVEL.

Exemples

Pour définir une fonction FilterSendNetBufferLists , vous devez d’abord fournir une déclaration de fonction qui identifie le type de fonction que vous définissez. Windows fournit un ensemble de types de fonctions pour les pilotes. La déclaration d’une fonction à l’aide des types de fonction permet à l’analyse du code pour les pilotes, le vérificateur de pilotes statique (SDV) et d’autres outils de vérification de trouver les erreurs, et il s’agit d’une exigence pour l’écriture de pilotes pour le système d’exploitation Windows.

Par exemple, pour définir une fonction FilterSendNetBufferLists nommée « MySendNetBufferLists », utilisez le type FILTER_SEND_NET_BUFFER_LISTS comme indiqué dans cet exemple de code :

FILTER_SEND_NET_BUFFER_LISTS MySendNetBufferLists;

Ensuite, implémentez votre fonction comme suit :

_Use_decl_annotations_
VOID
 MySendNetBufferLists(
    NDIS_HANDLE  FilterModuleContext,
    PNET_BUFFER_LIST  NetBufferLists,
    NDIS_PORT_NUMBER  PortNumber,
    ULONG  SendFlags
    )
  {...}

Le type de fonction FILTER_SEND_NET_BUFFER_LISTS est défini dans le fichier d’en-tête Ndis.h. Pour identifier plus précisément les erreurs lors de l’exécution des outils d’analyse du code, veillez à ajouter l’annotation Use_decl_annotations à votre définition de fonction. L’annotation Use_decl_annotations garantit que les annotations appliquées au type de fonction FILTER_SEND_NET_BUFFER_LISTS dans le fichier d’en-tête sont utilisées. Pour plus d’informations sur la configuration requise pour les déclarations de fonction, consultez Déclaration de fonctions à l’aide de types de rôles de fonction pour les pilotes NDIS.

Pour plus d’informations sur Use_decl_annotations, consultez Annotating Function Behavior.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Pris en charge dans NDIS 6.0 et versions ultérieures.
Plateforme cible Windows
En-tête ndis.h (inclure Ndis.h)
IRQL <= DISPATCH_LEVEL

Voir aussi

FilterAttach

FilterCancelSendNetBufferLists FilterSendNetBufferListsComplete

FilterSetModuleOptions

MiniportSendNetBufferLists

NET_BUFFER

NET_BUFFER_LIST

NdisFRegisterFilterDriver

NdisFSendNetBufferLists

NdisFSendNetBufferListsComplete

NdisMAllocatePort

NdisSetOptionalHandlers

NdisWriteEventLogEntry