NdisAllocateFragmentNetBufferList, fonction (ndis/nblapi.h)

Appelez la fonction NdisAllocateFragmentNetBufferList pour créer une structure de NET_BUFFER_LIST fragmentée basée sur les données d’une structure NET_BUFFER_LIST existante.

Syntaxe

NDIS_EXPORTED_ROUTINE NET_BUFFER_LIST * NdisAllocateFragmentNetBufferList(
  [in] NET_BUFFER_LIST *OriginalNetBufferList,
       NDIS_HANDLE     NetBufferListPool,
       NDIS_HANDLE     NetBufferPool,
  [in] ULONG           StartOffset,
  [in] ULONG           MaximumLength,
  [in] ULONG           DataOffsetDelta,
  [in] ULONG           DataBackFill,
  [in] ULONG           AllocateFragmentFlags
);

Paramètres

[in] OriginalNetBufferList

Pointeur vers une structure NET_BUFFER_LIST existante.

NetBufferListPool

Handle obtenu à partir d’un appel au Fonction NdisAllocateNetBufferListPool .

NetBufferPool

Un handle de pool de structure NET_BUFFER qui a été précédemment retourné à partir d’un appel à NdisAllocateNetBufferPool.

[in] StartOffset

Décalage d’octet supplémentaire à partir du début des données dans chaque structure NET_BUFFER . Ce décalage s’ajoute à la valeur du membre DataOffset spécifié dans chaque structure NET_BUFFER.

[in] MaximumLength

Longueur maximale, en octets, de chaque fragment de la nouvelle structure NET_BUFFER_LIST. Chaque fragment est décrit par une structure NET_BUFFER.

[in] DataOffsetDelta

Quantité supplémentaire d’espace de données utilisé que NDIS doit mettre à disposition dans les nouvelles structures NET_BUFFER.

[in] DataBackFill

Quantité d’espace de données en plus de la valeur du paramètre DataOffsetDelta à allouer si l’allocation est nécessaire. Si NDIS doit allouer de la mémoire pour fournir l’espace de données demandé dans DataOffsetDelta, il doit également allouer l’espace supplémentaire spécifié par DataBackFill .

[in] AllocateFragmentFlags

Indicateurs NDIS pouvant être combinés à une opération OR. Définissez ce paramètre sur zéro. Aucun indicateur n’est actuellement défini pour cette fonction.

Valeur retournée

NdisAllocateFragmentNetBufferList retourne un pointeur vers une nouvelle structure de NET_BUFFER_LIST fragmentée. Si l’allocation a échoué, la valeur de retour est NULL.

Remarques

NdisAllocateFragmentNetBufferList alloue et initialise un nouveau fragment NET_BUFFER_LIST structure et NET_BUFFER structures qui décrivent les mêmes données que celles décrites par la structure NET_BUFFER_LIST que l’appelant a transmise à NdisAllocateFragmentNetBufferList.

Si le fragment NET_BUFFER_LIST structure doit avoir des attributs associés à un pool donné, l’appelant doit spécifier le handle de pool dans le paramètre NetBufferListPoolHandle ou NetBufferPoolHandle . Par exemple, le membre ProtocolType de la structure NET_BUFFER_LIST est associé au pool.

Pour chaque structure NET_BUFFER dans la structure source NET_BUFFER_LIST spécifiée, NDIS crée le fragment NET_BUFFER structures comme suit :

  • NDIS crée les fragments à partir du début de l’espace de données utilisé dans la structure source NET_BUFFER et décalée par la valeur spécifiée dans le paramètre StartOffset .
  • NDIS divise l’espace de données utilisé (après prise en compte de StartOffset ) dans la structure NET_BUFFER source en fragments.
  • La longueur de l’espace de données utilisé de chaque fragment est inférieure ou égale à la valeur spécifiée dans le paramètre MaximumLength . L’espace de données utilisé du dernier fragment peut être inférieur à MaximumLength .
  • Chaque fragment est décrit par une nouvelle structure NET_BUFFER et un nouvel ensemble de chaînes MDL.
  • Le décalage de données des nouvelles structures NET_BUFFER est retiré (la valeur du membre DataOffset est réduite) par le nombre d’octets spécifié dans le paramètre DataOffsetDelta .
  • Si NDIS doit allouer de la mémoire pour fournir l’espace de données demandé dans DataOffsetDelta, il doit également allouer l’espace supplémentaire spécifié par DataBackFill .
Le nouveau fragment NET_BUFFER_LIST structure créé par NdisAllocateFragmentNetBufferList n’inclut pas une structure initiale NET_BUFFER_LIST_CONTEXT structure.

Appelez le Fonction NdisFreeFragmentNetBufferList pour libérer une structure NET_BUFFER_LIST et toutes les structures NET_BUFFER associées et chaînes MDL précédemment allouées en appelant NdisAllocateFragmentNetBufferList.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Pris en charge dans NDIS 6.0 et versions ultérieures.
Plateforme cible Universal
En-tête ndis/nblapi.h (include ndis.h)
Bibliothèque Ndis.lib
IRQL <= DISPATCH_LEVEL
Règles de conformité DDI Irql_NetBuffer_Function(ndis),NdisAllocateFragmentNetBufferList(ndis), NdisAllocateFragmentNetBufferList_InitFail(ndis)

Voir aussi

NET_BUFFER

NET_BUFFER_LIST

NET_BUFFER_LIST_CONTEXT

NdisAllocateNetBufferListPool

NdisAllocateNetBufferPool

NdisFreeFragmentNetBufferList