W_TCP_OFFLOAD_SEND_HANDLER fonction de rappel (ndischimney.h)
[La fonctionnalité de déchargement de cheminée TCP est déconseillée et ne doit pas être utilisée.]
NDIS appelle la fonction MiniportTcpOffloadSend pour transmettre des données sur une connexion TCP déchargée.
Syntaxe
W_TCP_OFFLOAD_SEND_HANDLER WTcpOffloadSendHandler;
NDIS_STATUS WTcpOffloadSendHandler(
[in] IN NDIS_HANDLE MiniportAdapterContext,
[in] IN PVOID MiniportOffloadContext,
[in] IN PNET_BUFFER_LIST NetBufferList
)
{...}
Paramètres
[in] MiniportAdapterContext
Handle vers une zone de contexte allouée de la cible de déchargement dans laquelle la cible de déchargement conserve des informations d’état sur cette instance de l’adaptateur. La cible de déchargement a fourni ce handle à NDIS lorsqu’elle a appelé NdisMSetMiniportAttributes à partir de son Fonction MiniportInitializeEx .
[in] MiniportOffloadContext
Pointeur vers un emplacement de mémoire qui contient une valeur PVOID. Cette valeur PVOID fait référence au contexte de déchargement de miniport qui contient l’objet d’état pour la connexion TCP sur laquelle les données doivent être transmises. La cible de déchargement a fourni cette valeur PVOID lorsqu’elle a déchargé l’objet d’état de connexion TCP.
[in] NetBufferList
Pointeur vers une structure NET_BUFFER_LIST . Cette structure peut être une structure autonome ou la première structure d’une liste liée de structures NET_BUFFER_LIST. Chaque structure NET_BUFFER_LIST de la liste décrit une liste de structures NET_BUFFER . Chaque structure NET_BUFFER dans la liste est mappée à une chaîne de listes de descripteurs mémoire (MDL). Les DLL contiennent les données à transmettre. Les NET_BUFFER_LIST et les structures associées sont verrouillées afin qu’elles restent résidentes dans la mémoire physique. Toutefois, elles ne sont pas mappées dans la mémoire système.
Valeur retournée
NDIS_STATUS_PENDING est la seule valeur de retour autorisée. Une cible de déchargement effectue toujours une demande d’envoi de façon asynchrone en appelant NdisTcpOffloadSendComplete.
Remarques
Une cible de déchargement doit transmettre des données dans l’ordre FIFO (premier entré, premier sorti). L’ordre de la liste liée des structures de NET_BUFFER_LIST que NDIS transmet à NetBufferList représente l’ordre dans lequel la cible de déchargement doit transmettre les données réseau. En outre, une cible de déchargement doit envoyer les données qu’elle reçoit de plusieurs appels au MiniportTcpOffloadSend dans l’ordre dans lequel les données ont été publiées.
Une cible de déchargement doit accepter toutes les demandes d’envoi effectuées à sa fonction MiniportTcpOffloadSend . Si une cible de déchargement ne peut pas terminer une demande d’envoi immédiatement, la cible de déchargement doit mettre la demande en file d’attente jusqu’à ce qu’elle puisse la terminer. La cible de déchargement doit utiliser le membre MiniportReserved d’une structure de NET_BUFFER_LIST pour mettre en file d’attente les demandes d’envoi. Lorsqu’une demande d’envoi est en attente, la cible de déchargement conserve la propriété des structures NET_BUFFER_LIST et de toutes les ressources associées aux structures NET_BUFFER_LIST.
La pile hôte sérialise les requêtes d’envoi par connexion. La pile n’émet pas de demande d’envoi sur une connexion pendant qu’une autre demande d’envoi sur cette connexion est en cours. Cela garantit que la cible de déchargement reçoit toujours les demandes d’envoi dans le bon ordre.
Notez, toutefois, que la pile hôte peut appeler la fonction MiniportTcpOffloadSend sur une connexion avant que la cible de déchargement ait effectué un ou plusieurs appels précédents à la fonction MiniportTcpOffloadSend sur cette même connexion. Notez également que la pile hôte peut appeler la fonction MiniportTcpOffloadSend d’une cible de déchargement sur une connexion pendant qu’un ou plusieurs appels à la fonction MiniportTcpOffloadSend sont en cours sur une autre connexion.
La fonction MiniportTcpOffloadSend doit synchroniser l’accès à ses files d’attente internes de données réseau avec les autres fonctions MiniportXxx de la cible de déchargement qui accèdent aux mêmes files d’attente. Une cible de déchargement peut utiliser des verrous de rotation pour synchroniser l’accès aux files d’attente.
La cible de déchargement doit (mais n’est pas obligatoire) définir le bit PSH sur chaque limite de NET_BUFFER_LIST. La méthode recommandée consiste à définir le bit PSH dans le dernier segment créé à partir des données associées à chaque structure NET_BUFFER_LIST (c’est-à-dire les données décrites par les structures NET_BUFFER associées à la structure NET_BUFFER_LIST). La cible de déchargement peut également définir le bit PSH dans le dernier segment restant de la file d’attente d’envoi avant que la file d’attente d’envoi soit vidée.
La pile hôte ne demande pas à la cible de déchargement d’envoyer des données urgentes.
Configuration requise
Condition requise | Valeur |
---|---|
Plateforme cible | Windows |
En-tête | ndischimney.h (inclure Ndischimney.h) |
IRQL | N’importe quel niveau |