NdisAllocateNetBuffer, fonction (ndis/nblapi.h)

Appelez la fonction NdisAllocateNetBuffer pour allouer et initialiser une structure NET_BUFFER à partir d’un pool de structures NET_BUFFER .

Syntaxe

NDIS_EXPORTED_ROUTINE NET_BUFFER * NdisAllocateNetBuffer(
  [in]           NDIS_HANDLE PoolHandle,
  [in, optional] MDL         *MdlChain,
  [in]           ULONG       DataOffset,
  [in]           SIZE_T      DataLength
);

Paramètres

[in] PoolHandle

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

[in, optional] MdlChain

Pointeur vers une chaîne MDL que NDIS utilise pour initialiser la nouvelle structure NET_BUFFER . MdlChain peut être NULL.

[in] DataOffset

Décalage initial, en octets, entre le début de la mémoire tampon et le début de l’espace de données utilisé dans la chaîne MDL. L’espace de données avant ce décalage est un espace de données inutilisé. Par conséquent, cette valeur représente également la quantité initiale d’espace de remplissage disponible dans la chaîne MDL. Si MdlChain a la valeur NULL, DataOffset doit être 0.

[in] DataLength

Longueur de l’espace de données utilisé, en octets, dans la chaîne MDL. Si MdlChain a la valeur NULL, DataLength doit être 0.

Valeur retournée

NdisAllocateNetBuffer retourne un pointeur vers la structure NET_BUFFER allouée par NDIS. Si l’allocation a échoué, ce pointeur a la valeur NULL.

Remarques

Appelez NdisFreeNetBuffer pour libérer une structure NET_BUFFER qui a été allouée à partir d’un pool de structures NET_BUFFER .

NotezNET_BUFFER et NET_BUFFER_LIST structures doivent être allouées à partir d’un pool de mémoires tampons NDIS. Un pilote ne doit pas allouer et initialiser une structure NET_BUFFER ou NET_BUFFER_LIST à partir de son pool de mémoire privée ou de la pile.
 
Le NET_BUFFER préalloué peut être réutilisé en le réinitialisant avec une autre chaîne MDL lorsqu’il possède NET_BUFFER, mais les champs DataOffset, DataLength, CurrentMdl et CurrentMdlOffset dans NET_BUFFER doivent être cohérents avec la nouvelle chaîne MDL.

Par exemple, si la chaîne MDL d’origine contient XDataLength et YDataOffset, et que CurrentMdl commence par la deuxième MDL (M) dans la chaîne MDL d’origine, CurrentMdlOffset a la valeur Z. Le champ MdlChain dans NET_BUFFER_DATA doit ensuite pointer vers une nouvelle chaîne MDL qui contient X’DataLength et Y’DataOffset. Si CurrentMdl commence par la troisième MDL (M') dans la nouvelle chaîne MDL, CurrentMdlOffset a la valeur Z', et les macros suivantes doivent être utilisées pour définir des champs dans NET_BUFFER :

NET_BUFFER_FIRST_MDL(_NB) = New MDL chain;
NET_BUFFER_DATA_LENGTH(_NB) = X';
NET_BUFFER_DATA_OFFSET(_NB) = Y';
NET_BUFFER_CURRENT_MDL(_NB) = M';
NET_BUFFER_CURRENT_MDL_OFFSET(_NB) = Z';

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), NdisAllocateNetBuffer(ndis)

Voir aussi

NET_BUFFER

NET_BUFFER_LIST

NdisAllocateNetBufferPool

NdisFreeNetBuffer