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 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.
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 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 .
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
FilterCancelSendNetBufferLists FilterSendNetBufferListsComplete NdisFSendNetBufferListsCompleteCommentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour