Partager via


PROTOCOL_RECEIVE_NET_BUFFER_LISTS fonction de rappel (ndis.h)

Les processus de fonction ProtocolReceiveNetBufferLists reçoivent des indications des pilotes sous-jacents.

Remarque Vous devez déclarer la fonction à l’aide du type PROTOCOL_RECEIVE_NET_BUFFER_LISTS. Pour plus d’informations, consultez la section Exemples suivants.
 

Syntaxe

PROTOCOL_RECEIVE_NET_BUFFER_LISTS ProtocolReceiveNetBufferLists;

void ProtocolReceiveNetBufferLists(
  [in] NDIS_HANDLE ProtocolBindingContext,
  [in] PNET_BUFFER_LIST NetBufferLists,
  [in] NDIS_PORT_NUMBER PortNumber,
  [in] ULONG NumberOfNetBufferLists,
  [in] ULONG ReceiveFlags
)
{...}

Paramètres

[in] ProtocolBindingContext

Handle vers une zone de contexte allouée par le pilote de protocole pour conserver les informations d’état d’une liaison. Ce handle a été passé à NDIS dans un appel précédent à la fonction NdisOpenAdapterEx.

[in] NetBufferLists

Liste liée de structures NET_BUFFER_LIST allouées par le pilote sous-jacent. Chaque structure NET_BUFFER_LIST est généralement associée à une structure NET_BUFFER.

[in] PortNumber

Numéro de port qui identifie un port d’adaptateur miniport. Le numéro de port par défaut d’un adaptateur miniport est égal à zéro. Les pilotes de protocole qui n’utilisent pas de ports d’adaptateur miniport doivent ignorer ce paramètre.

[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 NDIS récupère la propriété des structures NET_BUFFER_LIST et toutes les structures NET_BUFFER jointes immédiatement après l’appel à ProtocolReceiveNetBufferLists 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).

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 NET_BUFFER_LIST de la liste à NetBufferLists incluent uniquement les données qui correspondent au filtre de paquets et à la liste de 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

ProtocolReceiveNetBufferLists est une fonction requise pour les pilotes de protocole. NDIS appelle ProtocolReceiveNetBufferLists après qu’un pilote miniport lié appelle le NdisMIndicateReceiveNetBufferLists fonction. Un appel à ProtocolReceiveNetBufferLists peut également se produire à la suite d’une bouclage.

Si l’indicateur NDIS_RECEIVE_FLAGS_RESOURCES dans le paramètre ReceiveFlags n’est pas défini, le pilote de protocole conserve la propriété des structures NET_BUFFER_LIST jusqu’à ce qu’il appelle le NdisReturnNetBufferLists fonction.

Si NDIS définit le NDIS_RECEIVE_FLAGS_RESOURCES indicateur du pilote de protocole ne peut pas conserver la structure NET_BUFFER_LIST et les ressources associées. L’indicateur NDIS_RECEIVE_FLAGS_RESOURCES défini indique qu’un pilote sous-jacent s’exécute faiblement sur les ressources de réception. Dans ce cas, la fonction ProtocolReceiveNetBufferLists doit copier les données reçues dans le stockage alloué au protocole et retourner le plus rapidement possible.

Remarque Si l’indicateur de NDIS_RECEIVE_FLAGS_RESOURCES est défini, le pilote de protocole doit conserver l’ensemble d’origine de structures NET_BUFFER_LIST dans la liste liée. Par exemple, lorsque cet indicateur est défini, le pilote peut traiter les structures et les indiquer dans la pile une à la fois, mais avant que la fonction ne la retourne, elle doit restaurer la liste liée d’origine.
 
Sur un système multiprocesseur, cette fonction peut s’exécuter simultanément sur plusieurs processeurs. Appliquez la protection (par exemple, utilisez des verrous de rotation) aux structures de données critiques accessibles par ProtocolReceiveNetBufferLists.

NDIS appelle ProtocolReceiveNetBufferLists au<IRQL = DISPATCH_LEVEL.

exemples de

Pour définir une fonction ProtocolReceiveNetBufferLists, 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 permet d'Analyse du code pour les pilotes, de 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 ProtocolReceiveNetBufferLists nommée « MyReceiveNetBufferLists », utilisez le type PROTOCOL_RECEIVE_NET_BUFFER_LISTS comme indiqué dans cet exemple de code :

PROTOCOL_RECEIVE_NET_BUFFER_LISTS MyReceiveNetBufferLists;

Ensuite, implémentez votre fonction comme suit :

_Use_decl_annotations_
VOID
 MyReceiveNetBufferLists(
    NDIS_HANDLE  ProtocolBindingContext,
    PNET_BUFFER_LIST  NetBufferLists,
    NDIS_PORT_NUMBER  PortNumber,
    ULONG  NumberOfNetBufferLists,
    ULONG ReceiveFlags
    )
  {...}

Le type de fonction PROTOCOL_RECEIVE_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 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 PROTOCOL_RECEIVE_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 annoter le comportement de la fonction.

Exigences

Exigence Valeur
client minimum pris en charge Prise en charge dans NDIS 6.0 et versions ultérieures.
plateforme cible Windows
d’en-tête ndis.h (include Ndis.h)
IRQL <= DISPATCH_LEVEL

Voir aussi

MiniportReturnNetBufferLists

NDIS_RECEIVE_QUEUE_PARAMETERS

NET_BUFFER

NET_BUFFER_LIST

NdisMIndicateReceiveNetBufferLists

NdisOpenAdapterEx

NdisReturnNetBufferLists