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 suivants.
 

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 vers 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 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 avec 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 vérifier la bouclage. Par défaut, NDIS ne retourne pas de données au pilote qui a envoyé la demande d’envoi. Un pilote troplyant 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 overlying. Cet indicateur n’a aucun impact sur la vérification de la bouclage ou de la bouclage, 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 de NET_BUFFER_LIST structures 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 lors de la fin de 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 demandes, il peut définir le point d’entrée de cette fonction sur NULL lorsqu’il appelle le NdisFRegisterFilterDriver , fonction.

Si un pilote de filtre spécifie une fonction FilterSendNetBufferLists et qu’il envoie des demandes, il doit également spécifier un FilterCancelSendNetBufferLists , fonction.

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 à la pile de pilotes qui a spécifié une fonction FilterSendNetBufferLists . S’il n’existe aucun tel pilote de filtre sous-jacent, 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 structure NET_BUFFER envoyée à FilterSendNetBufferLists, un pilote de filtre peut effectuer les opérations suivantes :

  • Transmettez 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 après que les pilotes sous-jacents terminent la demande d’envoi.
  • Rejetez la mémoire tampon en appelant la fonction NdisFSendNetBufferListsComplete .
  • File d’attente de la mémoire tampon dans une structure de données locale pour le 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 le pilote de filtre. Dans ce cas, le pilote doit retourner la mémoire tampon d’origine au pilote overlying 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, aux descripteurs de mémoire tampon qu’il a effectués dans la fonction FilterSendNetBufferLists . Le pilote appelle la fonction NdisFSendNetBufferListsComplete pour renvoyer la liste liée de NET_BUFFER_LIST structures aux pilotes surcharrés et retourner l’état final de la demande d’envoi.

Si un module de filtre est dans l’état suspendu , le pilote de filtre ne doit pas provenir d’une demande d’envoi de ce module de filtre. Si NDIS appelle FilterSendNetBufferLists, le pilote ne doit pas appeler NdisFSendNetBufferLists pour transmettre les données jusqu’à ce que le pilote soit redémarré. Le pilote doit appeler NdisFSendNetBufferListsComplete immédiatement pour terminer l’opération d’envoi. Il doit définir l’état complet 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 fonctions aide l’analyse du code pour les pilotes, le vérificateur de pilotes statiques (SDV) et d’autres outils de vérification recherchent des erreurs, et il est nécessaire d’écrire des 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 illustré 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 lorsque vous exécutez les outils d’analyse de 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 les exigences relatives aux 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 Annoter le comportement de la fonction.

Configuration requise

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

Voir aussi

FilterAttach

FilterCancelSendNetBufferLists FilterSendNetBufferListsComplete

FilterSetModuleOptions

MiniportSendNetBufferLists

NET_BUFFER

NET_BUFFER_LIST

NdisFRegisterFilterDriver

NdisFSendNetBufferLists

NdisFSendNetBufferListsComplete

NdisMAllocatePort

NdisSetOptionalHandlers

NdisWriteEventLogEntry