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