Partager via


Réception de données dans les pilotes de protocole

La figure suivante illustre une opération de réception de base, qui implique un pilote de protocole, NDIS et des pilotes sous-jacents dans une pile de pilotes.

Diagramme illustrant une opération de réception de base impliquant un pilote de protocole, NDIS et des pilotes sous-jacents dans une pile de pilotes.

NDIS appelle la fonction ProtocolReceiveNetBufferLists d’un pilote de protocole pour traiter les indications de réception provenant des pilotes sous-jacents. NDIS appelle ProtocolReceiveNetBufferLists après qu’un pilote sous-jacent appelle une fonction d’indication de réception (par exemple, NdisMIndicateReceiveNetBufferLists) pour indiquer les données réseau reçues ou les données de bouclage.

Si l’indicateur NDIS_RECEIVE_FLAGS_RESOURCES dans le paramètre ReceiveFlags de ProtocolReceiveNetBufferLists n’est pas défini, le pilote de protocole conserve la propriété des structures NET_BUFFER_LIST jusqu’à ce qu’il appelle la 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. L’indicateur de NDIS_RECEIVE_FLAGS_RESOURCES défini indique qu’un pilote sous-jacent est faible 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 aussi rapidement que possible.

Note NDIS peut modifier les indicateurs indiqués par un pilote sous-jacent. Par exemple, si un pilote miniport définit l’indicateur de NDIS_RECEIVE_FLAGS_RESOURCES dans le paramètre ReceiveFlags de la fonction NdisMIndicateReceiveNetBufferLists , NDIS peut copier les données indiquées et passer la copie à ProtocolReceiveNetBufferLists avec l’indicateur NDIS_RECEIVE_FLAGS_RESOURCES effacé.

Note Si l’indicateur NDIS_RECEIVE_FLAGS_RESOURCES est défini, le pilote de protocole doit conserver l’ensemble d’origine des 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 une par une dans la pile, mais avant que la fonction ne retourne, elle doit restaurer la liste liée d’origine.

Les pilotes de protocole appellent la fonction NdisReturnNetBufferLists pour libérer la propriété d’une liste de structures NET_BUFFER_LIST , ainsi que les structures de NET_BUFFER associées et les données réseau.