NdisMIndicateReceiveNetBufferLists, fonction (ndis.h)
Les pilotes Miniport appellent la fonction NdisMIndicateReceiveNetBufferLists pour indiquer la réception des données du réseau.
Syntaxe
void NdisMIndicateReceiveNetBufferLists(
[in] NDIS_HANDLE MiniportAdapterHandle,
PNET_BUFFER_LIST NetBufferList,
[in] NDIS_PORT_NUMBER PortNumber,
[in] ULONG NumberOfNetBufferLists,
[in] ULONG ReceiveFlags
);
Paramètres
[in] MiniportAdapterHandle
Poignée de miniport que NDIS a passée au Fonction MiniportInitializeEx .
NetBufferList
Liste liée de NET_BUFFER_LIST structures allouées par le pilote miniport.
[in] PortNumber
Numéro de port qui identifie un port d’adaptateur miniport. Pour affecter un numéro de port d’adaptateur miniport, appelez la fonction NdisMAllocatePort . Une valeur zéro identifie le port par défaut d’un adaptateur miniport. Utilisez le port par défaut si le pilote miniport n’a pas alloué de ports pour l’adaptateur spécifié.
[in] NumberOfNetBufferLists
Nombre de structures NET_BUFFER_LIST figurant dans la liste liée des structures dans NetBufferLists .
[in] ReceiveFlags
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_RECEIVE_FLAGS_DISPATCH_LEVEL
Spécifie que l’IRQL actuel est DISPATCH_LEVEL. Pour plus d’informations sur cet indicateur, consultez Dispatch IRQL Tracking.
NDIS_RECEIVE_FLAGS_RESOURCES
Spécifie que le pilote miniport récupère la propriété des structures NET_BUFFER_LIST et de toutes les structures NET_BUFFER attachées immédiatement après l’appel à NdisMIndicateReceiveNetBufferLists retourné.
NDIS_RECEIVE_FLAGS_SINGLE_ETHER_TYPE
Spécifie que toutes les structures NET_BUFFER_LIST dans la liste dans NetBufferLists ont le même type de protocole (EtherType).
Pilotes miniport
NDIS_RECEIVE_FLAGS_SINGLE_ETHER_TYPE est éventuellement défini par des pilotes miniports qui sont certains que toutes les NBL d’une chaîne NBL ont le même EtherType. En définissant cet indicateur, le pilote miniport informe NDIS et les protocoles de couche supérieure qu’ils n’ont pas besoin d’examiner chaque paquet à la recherche de son EtherType, ce qui augmente les performances. Les pilotes miniport ne sont jamais requis pour définir cet indicateur.
Filtres légers (LDF)
Lors de l’indication de nouvelles réceptions, un filtre léger (LWF) peut également définir NDIS_RECEIVE_FLAGS_SINGLE_ETHER_TYPE s’il est certain que toutes les NCL d’une chaîne NBL ont le même EtherType. Toutefois, comme les pilotes miniport, les LDF ne sont jamais nécessaires pour définir cet indicateur dans ce cas et peuvent toujours choisir d’effacer l’indicateur.
Lors du passage des réceptions de la couche inférieure, si un LWF modifie l’EtherType des NBL, le LWF doit effacer l’indicateur si les NBL n’ont plus le même EtherType.
Lors du passage de réceptions provenant de la couche inférieure, si un LWF modifie l’EtherType des NBL, le LWF peut éventuellement définir cet indicateur s’il est certain que toutes les NCL d’une chaîne NBL ont le même EtherType. Dans ce cas, le LWF n’est jamais nécessaire pour définir cet indicateur et peut toujours choisir de l’effacer.
Lors de la consommation de réceptions de la couche inférieure, si cet indicateur est défini, un LWF peut supposer que chaque NBL de la chaîne a le même EtherType. Le LWF n’est jamais nécessaire pour lire cet indicateur et peut choisir de toujours lire etherType à partir de chaque NBL.
Lors de la combinaison de plusieurs chaînes NBL, un LWF doit effacer cet indicateur, sauf s’il est certain que la nouvelle chaîne NBL a un EtherType homogène.
Pilotes de protocole
Lors de la consommation de réceptions provenant de la couche inférieure, si NDIS_RECEIVE_FLAGS_SINGLE_ETHER_TYPE est défini, le protocole peut supposer que chaque NBL de la chaîne a le même EtherType. Un protocole n’est jamais nécessaire pour lire cet indicateur et peut choisir de toujours lire etherType à partir de chaque NBL.
NDIS_RECEIVE_FLAGS_SINGLE_VLAN
Spécifie que toutes les structures NET_BUFFER_LIST dans la liste dans NetBufferLists appartiennent au même réseau local virtuel.
NDIS_RECEIVE_FLAGS_PERFECT_FILTERED
Spécifie que toutes les structures NET_BUFFER_LIST de la liste dans NetBufferLists incluent uniquement les données qui correspondent au filtre de paquets et à la liste d’adresses de multidiffusion qui sont affectées à l’adaptateur miniport.
NDIS_RECEIVE_FLAGS_SINGLE_QUEUE
Spécifie que toutes les structures NET_BUFFER_LIST dans la liste dans NetBufferLists appartiennent à la même file d’attente de machines virtuelles. Un pilote miniport doit définir cet indicateur pour toutes les indications de réception sur une file d’attente si l’indicateur NDIS_RECEIVE_QUEUE_PARAMETERS_PER_QUEUE_RECEIVE_INDICATION a été défini dans le membre Flags du NDIS_RECEIVE_QUEUE_PARAMETERS structure lorsque cette file d’attente a été allouée.
NDIS_RECEIVE_FLAGS_SHARED_MEMORY_INFO_VALID
Spécifie que toutes les structures NET_BUFFER_LIST de la liste dans NetBufferLists contiennent des informations de mémoire partagée valides. Lorsque cet indicateur est défini sur un NET_BUFFER_LIST reçu, NDIS traite les informations de mémoire partagée comme valides. Lorsque cet indicateur n’est pas défini, NDIS et les pilotes ignorent les informations de mémoire partagée. Par exemple, les pilotes intermédiaires qui modifient les données de paquets peuvent utiliser cet indicateur pour déterminer si les données doivent être copiées. Les pilotes Miniport peuvent utiliser l’indicateur pour déterminer comment libérer la mémoire associée à une file d’attente de machine virtuelle lorsqu’une file d’attente est supprimée.
NDIS_RECEIVE_FLAGS_MORE_NBLS
Réservé.
Valeur de retour
None
Remarques
Un pilote miniport appelle généralement la fonction NdisMIndicateReceiveNetBufferLists à partir de sa fonction MiniportInterruptDPC . Lorsqu’un pilote miniport appelle NdisMIndicateReceiveNetBufferLists, il spécifie une liste de structures NET_BUFFER_LIST dans le paramètre NetBufferLists . NDIS transmet les structures NET_BUFFER_LIST au Fonction ProtocolReceiveNetBufferLists des pilotes de protocole liés.
Les pilotes Miniport doivent définir le membre SourceHandle de chaque structure NET_BUFFER_LIST sur la même valeur que le paramètre MiniportAdapterHandle .
Si un pilote miniport appelle NdisMIndicateReceiveNetBufferLists et efface l’indicateur de NDIS_RECEIVE_FLAG_RESOURCES dans le paramètre ReceiveFlags , NDIS retourne les structures NET_BUFFER_LIST indiquées au pilote miniport Fonction MiniportReturnNetBufferLists . Dans ce cas, le pilote miniport ne doit pas récupérer les structures NET_BUFFER_LIST tant que NDIS n’a pas retourné les structures NET_BUFFER_LIST à la fonction MiniportReturnNetBufferLists du pilote miniport.
Si un pilote miniport appelle NdisMIndicateReceiveNetBufferLists et définit l’indicateur NDIS_RECEIVE_FLAG_RESOURCES dans le paramètre ReceiveFlags , cela indique que le pilote miniport doit récupérer immédiatement la propriété des structures NET_BUFFER_LIST . Dans ce cas, NDIS n’appelle pas la fonction MiniportReturnNetBufferLists du pilote miniport pour retourner les structures NET_BUFFER_LIST . Au lieu de cela, NDIS retourne les structures NET_BUFFER_LIST au pilote miniport lors du retour de NdisMIndicateReceiveNetBufferLists. Le pilote miniport doit récupérer les structures NET_BUFFER_LIST immédiatement après le retour de NdisMIndicateReceiveNetBufferLists . Pour récupérer les structures NET_BUFFER_LIST , un pilote miniport peut appeler son propre Fonction MiniportReturnNetBufferLists .
La définition de l’indicateur de NDIS_RECEIVE_FLAG_RESOURCES dans le paramètre ReceiveFlags force les pilotes de protocole à copier les données réseau et à libérer les structures NET_BUFFER_LIST sur le pilote miniport. Les enregistreurs de pilotes doivent concevoir leurs pilotes miniport avec suffisamment de structures de NET_BUFFER_LIST préallouées pour éviter toute copie inutile.
L’appelant de NdisMIndicateReceiveNetBufferLists doit initialiser correctement les structures NET_BUFFER_LIST , les structures NET_BUFFER attachées et toutes les dll MDL attachées.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Pris en charge dans NDIS 6.0 et versions ultérieures. |
Plateforme cible | Universal |
En-tête | ndis.h (inclure Ndis.h) |
Bibliothèque | Ndis.lib |
IRQL | <= DISPATCH_LEVEL |
Règles de conformité DDI | Irql_SendRcv_Function(ndis) |