NDIS_TCP_OFFLOAD_RECEIVE_COMPLETE fonction de rappel (ndischimney.h)

[La fonctionnalité de déchargement de la cheminée TCP est déconseillée et ne doit pas être utilisée.]

Une cible de déchargement appelle la fonction NdisTcpOffloadReceiveComplete pour renvoyer les demandes de réception publiées (mémoires tampons de réception) à la pile hôte. La cible de déchargement a précédemment reçu les demandes de réception dans un ou plusieurs appels à son Fonction MiniportTcpOffloadReceive .

Syntaxe

NDIS_TCP_OFFLOAD_RECEIVE_COMPLETE NdisTcpOffloadReceiveComplete;

void NdisTcpOffloadReceiveComplete(
  [in] IN NDIS_HANDLE NdisMiniportHandle,
  [in] IN PNET_BUFFER_LIST NetBufferList
)
{...}

Paramètres

[in] NdisMiniportHandle

Handle que la cible de déchargement obtenue dans un appel précédent à Fonction NdisMRegisterMiniportDriver .

[in] NetBufferList

Pointeur vers une structure NET_BUFFER_LIST . Cette structure peut être autonome ou la première structure d’une liste liée de structures NET_BUFFER_LIST. La cible de déchargement a obtenu ces structures dans un ou plusieurs appels à son Fonction MiniportTcpOffloadReceive .

Valeur de retour

None

Remarques

Une cible de déchargement doit utiliser et retourner les demandes de réception prépostées dans l’ordre dans lequel les demandes ont été affichées dans le Fonction MiniportTcpOffloadReceive de la cible de déchargement. Autrement dit, la cible de déchargement doit utiliser et retourner les demandes de réception prépostées dans l’ordre FIFO (first in, first out).

Une cible de déchargement doit sérialiser les appels à la fonction NdisTcpOffloadReceiveComplete et au Fonction NdisTcpOffloadReceiveHandler par connexion.

La fonction MiniportTcpOffloadReceive d’une cible de déchargement peut être appelée dans le contexte de l’appel d’une cible de déchargement à la fonction NdisTcpOffloadReceiveComplete . Dans ce cas, une cible de déchargement ne doit pas appeler à nouveau la fonction NdisTcpOffloadReceiveComplete tant que l’appel précédent à NdisTcpOffloadReceiveComplete n’a pas été retourné.

Pour améliorer les performances du système, une cible de déchargement peut créer une liste liée qui contient les structures NET_BUFFER_LIST à partir de plusieurs appels à son Fonction MiniportTcpOffloadReceive . La cible de déchargement peut passer une telle liste liée en un seul appel à la fonction NdisTcpOffloadReceiveComplete . Notez qu’une cible de déchargement peut distribuer les demandes de réception qui ont été publiées en un seul appel à Fonction MiniportTcpOffloadReceive sur plusieurs appels d’achèvement tant que la cible de déchargement termine les demandes de réception dans le même ordre qu’elles ont été publiées sur la fonction MiniportTcpOffloadReceive .

Avant d’appeler la fonction NdisTcpOffloadReceiveComplete , la cible de déchargement effectue les opérations suivantes pour chaque structure NET_BUFFER_LIST qu’elle transmet à la fonction :

  • Écrit l’une des valeurs status suivantes dans le membre Status :
    NDIS_STATUS_SUCCESS
    La cible de déchargement a reçu toutes les données associées aux structures NET_BUFFER_LIST référencées par le paramètre NetBufferList . La cible de déchargement a également avancé les variables RcvNxt et RcvWnd dans l’état délégué TCP pour la connexion TCP. La cible de déchargement peut ou non avoir généré un accusé de réception pour les données reçues, selon que la cible de déchargement attend ou non l’envoi d’un accusé de réception différé.
    NDIS_STATUS_REQUEST_ABORTED
    Une erreur s’est produite pendant que la cible de déchargement traitait les données reçues. Si la cible de déchargement fournit des données valides avec les structures NET_BUFFER_LIST pointées vers le paramètre NetBufferList , la cible de déchargement spécifie le nombre d’octets de données valides en appelant la macro NET_BUFFER_LIST_INFO . La cible de déchargement a peut-être reconnu ou non une partie des données reçues.
    NDIS_STATUS_UPLOAD_IN_PROGRESS
    La connexion sur laquelle la mémoire tampon a été publiée est en cours de chargement.
    NDIS_STATUS_INVALID_STATE
    La demande de réception a été publiée après que la cible de déchargement a indiqué une déconnexion en appelant NdisTcpOffloadEventHandler.
  • Spécifie le nombre d’octets de données retournés en appelant la macro NET_BUFFER_LIST_INFO avec l’IDTcpOffloadBytesTransferred.
  • Appelle le Fonction NdisAdvanceNetBufferDataStart . Le paramètre NetBufferList doit pointer vers la structure NET_BUFFER associée à la structure NET_BUFFER_LIST. Le paramètre DataOffsetDelta doit spécifier le nombre d’octets de données que la cible de déchargement placée dans les listes de descripteurs de mémoire (MDL) associées à la structure NET_BUFFER. Le paramètre FreeMdl doit avoir la valeur NULL.

Configuration requise

Condition requise Valeur
Plateforme cible Universal
En-tête ndischimney.h (inclure Ndischimney.h)
IRQL N’importe quel niveau

Voir aussi

MiniportTcpOffloadReceive

NET_BUFFER

NET_BUFFER_LIST

NdisAdvanceNetBufferDataStart

NdisMRegisterMiniportDriver