PROTOCOL_CO_RECEIVE_NET_BUFFER_LISTS fonction de rappel (ndis.h)
La fonction ProtocolCoReceiveNetBufferLists traite les indications des pilotes sous-jacents.
Syntaxe
PROTOCOL_CO_RECEIVE_NET_BUFFER_LISTS ProtocolCoReceiveNetBufferLists;
void ProtocolCoReceiveNetBufferLists(
[in] NDIS_HANDLE ProtocolBindingContext,
[in] NDIS_HANDLE ProtocolVcContext,
[in] PNET_BUFFER_LIST NetBufferLists,
[in] ULONG NumberOfNetBufferLists,
[in] ULONG ReceiveFlags
)
{...}
Paramètres
[in] ProtocolBindingContext
Handle dans une zone de contexte que le pilote de protocole a allouée pour conserver les informations d’état d’une liaison. Ce handle a été passé à NDIS lors d’un appel précédent à NdisOpenAdapterEx.
[in] ProtocolVcContext
Handle vers une zone de contexte allouée par un pilote de protocole dans laquelle ce pilote gère les informations d’état d’exécution par connexion virtuelle (VC). Un client ou un gestionnaire d’appels autonome a fourni ce handle soit lorsqu’il a appelé la fonction NdisCoCreateVc , soit à partir de sa fonction ProtocolCoCreateVc .
[in] NetBufferLists
Liste liée des 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] NumberOfNetBufferLists
Nombre de structures NET_BUFFER_LIST figurant dans la liste liée des structures spécifiées par 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 au niveau du bit. Pour effacer tous les indicateurs, définissez ce paramètre sur zéro. ProtocolCoReceiveNetBufferLists prend en charge les indicateurs suivants :
NDIS_RECEIVE_FLAGS_DISPATCH_LEVEL
L’IRQL actuel est DISPATCH_LEVEL. Pour plus d’informations sur cet indicateur, consultez Dispatch IRQL Tracking.
NDIS_RECEIVE_FLAGS_RESOURCES
NDIS 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 à ProtocolCoReceiveNetBufferLists .
Valeur de retour
None
Remarques
La fonction ProtocolCoReceiveNetBufferLists est requise pour les pilotes de protocole CoNDIS. NDIS appelle ProtocolCoReceiveNetBufferLists après qu’un pilote miniport lié appelle le Fonction NdisMCoIndicateReceiveNetBufferLists . Un appel à ProtocolCoReceiveNetBufferLists peut également se produire à la suite d’un bouclage.
Si l’indicateur NDIS_RECEIVE_FLAGS_RESOURCES dans le paramètre CoReceiveFlags n’est pas défini, le pilote de protocole conserve la propriété des structures de NET_BUFFER_LIST jusqu’à ce qu’il appelle le Fonction NdisReturnNetBufferLists . Si NDIS définit l’indicateur NDIS_RECEIVE_FLAGS_RESOURCES , le pilote de protocole ne peut pas conserver la structure NET_BUFFER_LIST et les ressources associées. NDIS_RECEIVE_FLAGS_RESOURCES indique qu’un pilote sous-jacent a peu de ressources de réception. Dans ce cas, la fonction ProtocolCoReceiveNetBufferLists doit copier les données reçues dans le stockage alloué au protocole et retourner aussi rapidement que possible.
Sur un système multiprocesseur, ProtocolCoReceiveNetBufferLists peut s’exécuter simultanément sur plusieurs processeurs. Dans ce cas, appliquez la protection (par exemple, utiliser des verrous de rotation) aux structures de données critiques auxquelles ProtocolCoReceiveNetBufferLists accède.
NDIS appelle ProtocolCoReceiveNetBufferLists à IRQL<= DISPATCH_LEVEL.
Exemples
Pour définir une fonction ProtocolCoReceiveNetBufferLists , 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 ProtocolCoReceiveNetBufferLists nommée « MyCoReceiveNetBufferLists », utilisez le type PROTOCOL_CO_RECEIVE_NET_BUFFER_LISTS comme indiqué dans cet exemple de code :
PROTOCOL_CO_RECEIVE_NET_BUFFER_LISTS MyCoReceiveNetBufferLists;
Ensuite, implémentez votre fonction comme suit :
_Use_decl_annotations_
VOID
MyCoReceiveNetBufferLists(
NDIS_HANDLE ProtocolBindingContext,
NDIS_HANDLE ProtocolVcContext,
INPNET_BUFFER_LIST NetBufferLists,
ULONG NumberOfNetBufferLists,
ULONG ReceiveFlags
)
{...}
Le type de fonction PROTOCOL_CO_RECEIVE_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 PROTOCOL_CO_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 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
Fonctions d’envoi et de réception du pilote de protocole CoNDIS
MiniportReturnNetBufferLists NdisMCoIndicateReceiveNetBufferLists