Opérations de retraitement
Les opérations de retrait peuvent augmenter la taille de l’espace de données utilisé dans une structure NET_BUFFER ou dans toutes les structures NET_BUFFER d’une structure NET_BUFFER_LIST .
NDIS fournit les fonctions de retrait suivantes :
NdisRetreatNetBufferListDataStart
Les opérations de retrait peuvent parfois allouer des MDL associées à une structure de NET_BUFFER. Pour fournir le mécanisme d’allocation de dll mdl, un pilote peut fournir un point d’entrée facultatif pour une fonction NetAllocateMdl . Si le point d’entrée est NULL, NDIS utilise une méthode par défaut pour allouer des dll MDL. Les dll MDL doivent être libérées dans une fonction NetFreeMdl qui fournit la réciproque du mécanisme utilisé pour allouer le MDL.
Pour obtenir le nouveau DataLength, NDIS ajoute le DataOffsetDelta spécifié par le pilote au DataLength actuel . Si la taille de l’espace de données inutilisé est supérieure à dataOffsetDelta, une opération de retrait réduit le DataOffset . Dans ce cas, le nouveau DataOffset est le DataOffset actuel moins le DataOffsetDelta .
Si DataOffsetDelta est supérieur à DataOffset, une opération de retrait alloue un nouvel espace de données. Dans ce cas, NDIS ajuste le DataOffset en conséquence.
Pour les opérations d’envoi, NDIS alloue de la mémoire si l’espace de données inutilisé n’est pas suffisant pour répondre à une demande de retrait. Si aucune allocation de mémoire n’est requise, NDIS ajuste simplement les données DataOffset et DataLength . Pour de meilleures performances, les pilotes doivent allouer suffisamment de taille totale des données avant l’envoi pour prendre en charge les opérations de retrait de tous les pilotes sous-jacents.
Pour le cas de retour de réception, NDIS ajuste simplement les données DataOffset et DataLength en conséquence. L’opération de retrait inverse l’opération d’avance qui a eu lieu pendant le traitement de réception. Après l’opération de retrait, l’espace de données utilisé contient les données d’en-tête utilisées par les pilotes sous-jacents lors du traitement de réception.