Funzione NdisAllocateFragmentNetBufferList (ndis/nblapi.h)

Chiamare la funzione NdisAllocateFragmentNetBufferList per creare una nuova struttura NET_BUFFER_LIST frammentata in base ai dati in una struttura NET_BUFFER_LIST esistente.

Sintassi

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

Parametri

[in] OriginalNetBufferList

Puntatore a una struttura NET_BUFFER_LIST esistente.

NetBufferListPool

Handle ottenuto da una chiamata all'oggetto Funzione NdisAllocateNetBufferListPool .

NetBufferPool

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

[in] StartOffset

Offset di byte aggiuntivo dall'inizio dei dati in ogni struttura di NET_BUFFER . Questo offset viene aggiunto al valore del membro DataOffset specificato in ogni struttura NET_BUFFER.

[in] MaximumLength

Lunghezza massima, in byte, per ogni frammento nella nuova struttura di NET_BUFFER_LIST. Ogni frammento viene descritto da una struttura NET_BUFFER.

[in] DataOffsetDelta

Quantità aggiuntiva di spazio dati usato che NDIS deve rendere disponibile nelle nuove strutture di NET_BUFFER.

[in] DataBackFill

Quantità di spazio dati oltre al valore del parametro DataOffsetDelta da allocare se è necessaria l'allocazione. Se NDIS deve allocare memoria per fornire lo spazio dati richiesto in DataOffsetDelta, deve allocare anche lo spazio aggiuntivo specificato da DataBackFill .

[in] AllocateFragmentFlags

Flag NDIS che possono essere combinati con un'operazione OR. Impostare questo parametro su zero. Attualmente non sono presenti flag definiti per questa funzione.

Valore restituito

NdisAllocateFragmentNetBufferList restituisce un puntatore a una nuova struttura NET_BUFFER_LIST frammentata. Se l'allocazione non è riuscita, il valore restituito è NULL.

Commenti

NdisAllocateFragmentNetBufferList alloca e inizializza una nuova struttura di frammento NET_BUFFER_LIST e NET_BUFFER strutture che descrivono gli stessi dati descritti dalla struttura NET_BUFFER_LIST passata al chiamante NdisAllocateFragmentNetBufferList.

Se la struttura del frammento NET_BUFFER_LIST deve avere attributi associati a un determinato pool, il chiamante deve specificare l'handle del pool nel parametro NetBufferListPoolHandle o NetBufferPoolHandle . Ad esempio, il membro ProtocolType della struttura NET_BUFFER_LIST è associato al pool.

Per ogni struttura NET_BUFFER nell'NET_BUFFER_LIST struttura di origine specificata, NDIS crea il frammento NET_BUFFER strutture come indicato di seguito:

  • NDIS crea i frammenti a partire dall'inizio dello spazio dati usato nella struttura di origine NET_BUFFER e offset dal valore specificato nel parametro StartOffset .
  • NDIS divide lo spazio dati usato(dopo la contabilità per StartOffset ) nella struttura di origine NET_BUFFER in frammenti.
  • La lunghezza dello spazio dati usato di ogni frammento è minore o uguale al valore specificato nel parametro MaximumLength . Lo spazio dati usato dell'ultimo frammento può essere minore di MaximumLength .
  • Ogni frammento viene descritto da una nuova struttura NET_BUFFER e da un nuovo set di catene MDL.
  • L'offset dei dati delle nuove strutture di NET_BUFFER viene ritirato (il valore del membro DataOffset viene ridotto) in base al numero di byte specificati nel parametro DataOffsetDelta .
  • Se NDIS deve allocare memoria per fornire lo spazio dati richiesto in DataOffsetDelta, deve allocare anche lo spazio aggiuntivo specificato da DataBackFill .
La nuova struttura di frammento NET_BUFFER_LIST creata da NdisAllocateFragmentNetBufferList non include un'inizializzazione NET_BUFFER_LIST_CONTEXT struttura.

Chiamare l'oggetto Funzione NdisFreeFragmentNetBufferList per liberare una struttura NET_BUFFER_LIST e tutte le strutture NET_BUFFER associate e le catene MDL assegnate in precedenza chiamando NdisAllocateFragmentNetBufferList.

Requisiti

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

Vedi anche

NET_BUFFER

NET_BUFFER_LIST

NET_BUFFER_LIST_CONTEXT

NdisAllocateNetBufferListPool

NdisAllocateNetBufferPool

NdisFreeFragmentNetBufferList