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 .
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) |