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