Partager via


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 structures NET_BUFFER_LIST 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 à NetBufferLists .

[in] ReceiveFlags

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_RECEIVE_FLAGS_DISPATCH_LEVEL

Spécifie que le runtime d’intégration 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 toutes les structures NET_BUFFER jointes immédiatement après l’appel à NdisMIndicateReceiveNetBufferLists retourne.

NDIS_RECEIVE_FLAGS_SINGLE_ETHER_TYPE

Spécifie que toutes les structures NET_BUFFER_LIST dans la liste à NetBufferLists ont le même type de protocole (EtherType).

pilotes miniports

NDIS_RECEIVE_FLAGS_SINGLE_ETHER_TYPE est éventuellement défini par les pilotes miniports qui sont certains de toutes les listes 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 pour son EtherType, ce qui augmente les performances. Les pilotes miniports ne sont jamais nécessaires pour définir cet indicateur.

filtres légers (LWFs)

Lorsque vous indiquez des réceptions nouvelles, un filtre léger (LWF) peut également définir NDIS_RECEIVE_FLAGS_SINGLE_ETHER_TYPE si c’est certain que toutes les NBL d’une chaîne NBL ont le même EtherType. Toutefois, comme les pilotes miniport, les LWFs ne sont jamais nécessaires pour définir cet indicateur dans ce cas et peuvent toujours choisir d’effacer l’indicateur.

Lorsque vous passez des réceptions à partir de la couche inférieure, si un LWF modifie l’EtherType des listes nbls, l'LWF doit effacer l’indicateur si les LISTES NBL n’ont plus le même EtherType.

Lors de la transmission de réceptions à partir de la couche inférieure, si un LWF modifie l’EtherType des nbls, le LWF peut définir éventuellement cet indicateur s’il est certain que toutes les listes NBL 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.

Lorsque vous consommez des réceptions à partir 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 l’EtherType à partir de chaque NBL.

Lors de la combinaison de plusieurs chaînes NBL, une LWF doit effacer cet indicateur, sauf s’il est certain que la nouvelle chaîne NBL a un EtherType homogéné.

pilotes de protocole

Lorsque vous consommez des réceptions à partir de la couche inférieure, si NDIS_RECEIVE_FLAGS_SINGLE_ETHER_TYPE est définie, 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 l’EtherType à partir de chaque NBL.

NDIS_RECEIVE_FLAGS_SINGLE_VLAN

Spécifie que toutes les structures NET_BUFFER_LIST dans la liste à NetBufferLists appartiennent au même réseau local virtuel.

NDIS_RECEIVE_FLAGS_PERFECT_FILTERED

Spécifie que toutes les structures de NET_BUFFER_LIST dans la liste à NetBufferLists incluent uniquement les données qui correspondent au filtre de paquets et à la liste d’adresses multidiffusion affectées à l’adaptateur miniport.

NDIS_RECEIVE_FLAGS_SINGLE_QUEUE

Spécifie que toutes les structures NET_BUFFER_LIST dans la liste à 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 les indicateurs membre 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 dans la liste à NetBufferLists contiennent des informations de mémoire partagée valides. Lorsque cet indicateur est défini sur un NET_BUFFER_LISTreç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 paquet 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 machines virtuelles lorsqu’une file d’attente est supprimée.

NDIS_RECEIVE_FLAGS_MORE_NBLS

Réservé.

Valeur de retour

Aucun

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 ProtocolReceiveNetBufferLists fonction des pilotes de protocole lié.

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 NDIS_RECEIVE_FLAG_RESOURCES dans le paramètre ReceiveFlags, NDIS retourne les structures NET_BUFFER_LIST indiquées au pilote miniport MiniportReturnNetBufferLists fonction. Dans ce cas, le pilote miniport ne doit pas récupérer les structures NET_BUFFER_LIST tant que NDIS ne renvoie pas les structures NET_BUFFER_LIST au 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 MiniportReturnNetBufferList s du pilote miniport pour renvoyer 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 NdisMIndicateReceiveNetBufferLists retourne. Pour récupérer les structures NET_BUFFER_LIST, un pilote miniport peut appeler son propre MiniportReturnNetBufferLists fonction.

La définition de l’indicateur 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 miniports avec suffisamment de structures 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 les DLL jointes.

Exigences

Exigence Valeur
client minimum pris en charge Prise en charge dans NDIS 6.0 et versions ultérieures.
plateforme cible Universel
d’en-tête ndis.h (include Ndis.h)
bibliothèque Ndis.lib
IRQL <= DISPATCH_LEVEL
règles de conformité DDI Irql_SendRcv_Function(ndis)

Voir aussi

MiniportInitializeEx

MiniportInterruptDPC

MiniportReturnNetBufferLists

NDIS_RECEIVE_QUEUE_PARAMETERS

NET_BUFFER

NET_BUFFER_LIST

NdisMAllocatePort

ProtocolReceiveNetBufferLists