Condividi tramite


Funzione NdisAllocateNetBuffer (ndis/nblapi.h)

Chiamare la funzione di NdisAllocateNetBuffer per allocare e inizializzare una struttura NET_BUFFER da un pool di strutture NET_BUFFER.

Sintassi

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

Parametri

[in] PoolHandle

Handle del pool di strutture NET_BUFFER restituito in precedenza da una chiamata a NdisAllocateNetBufferPool.

[in, optional] MdlChain

Puntatore a una catena MDL USATA da NDIS per inizializzare la nuova struttura NET_BUFFER. MdlChain può essere NULL.

[in] DataOffset

Offset iniziale, in byte, dall'inizio del buffer all'inizio del utilizzato spazio dati nella catena MDL. Lo spazio dati prima di questo offset è spazio dati inutilizzato. Pertanto, questo valore rappresenta anche la quantità iniziale di spazio di riempimento disponibile nella catena MDL. Se MdlChain è NULL, DataOffset deve essere 0.

[in] DataLength

Lunghezza del usato spazio dati, in byte, nella catena MDL. Se MdlChain è NULL, DataLength deve essere 0.

Valore restituito

NdisAllocateNetBuffer restituisce un puntatore alla struttura NET_BUFFER allocata da NDIS. Se l'allocazione non è riuscita, questo puntatore viene NULL.

Osservazioni

Chiamare NdisFreeNetBuffer per liberare una struttura NET_BUFFER allocata da un pool di strutture NET_BUFFER.

Le struttureNET_BUFFER e NET_BUFFER_LIST note devono essere allocate da un pool di buffer NDIS. Un driver non deve allocare e inizializzare una struttura NET_BUFFER o NET_BUFFER_LIST dal pool di memoria privato o dallo stack.
 
Il NET_BUFFER preallocato può essere riutilizzato reinizializzandolo con un'altra catena MDL quando è proprietaria di NET_BUFFER, ma i campi DataOffset, DataLength, CurrentMdle CurrentMdlOffset campi in NET_BUFFER devono essere coerenti con la nuova catena MDL.

Ad esempio, se la catena MDL originale contiene XDataLength e YDataOffsete CurrentMdl inizia con il secondo MDL (M) nella catena MDL originale, CurrentMdlOffset è Z. Il campo MdlChain in NET_BUFFER_DATA deve quindi puntare a una nuova catena MDL contenente X'DataLength e Y'DataOffset. Se CurrentMdl inizia con il terzo MDL (M) nella nuova catena MDL, CurrentMdlOffset è Z'e le macro seguenti devono essere usate per impostare i campi in 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';

Fabbisogno

Requisito Valore
client minimo supportato Supportato in NDIS 6.0 e versioni successive.
piattaforma di destinazione Universale
intestazione ndis/nblapi.h (include ndis.h)
libreria Ndis.lib
IRQL <= DISPATCH_LEVEL
regole di conformità DDI Irql_NetBuffer_Function(ndis), NdisAllocateNetBuffer(ndis)

Vedere anche

NET_BUFFER

NET_BUFFER_LIST

NdisAllocateNetBufferPool

NdisFreeNetBuffer