Freigeben über


NdisAllocateNetBufferAndNetBufferList-Funktion (ndis/nblapi.h)

Rufen Sie die Funktion NdisAllocateNetBufferAndNetBufferList auf, um eine NET_BUFFER_LIST Struktur zuzuweisen und zu initialisieren, die mit einer vorab zugewiesenen NET_BUFFER-Struktur initialisiert ist.

Syntax

NDIS_EXPORTED_ROUTINE NET_BUFFER_LIST * NdisAllocateNetBufferAndNetBufferList(
  [in]           NDIS_HANDLE          PoolHandle,
  [in]           USHORT               ContextSize,
  [in]           USHORT               ContextBackFill,
  [in, optional] __drv_aliasesMem MDL *MdlChain,
  [in]           ULONG                DataOffset,
  [in]           SIZE_T               DataLength
);

Parameter

[in] PoolHandle

Ein NET_BUFFER_LIST Strukturpoolhandle, das zuvor vom NdisAllocateNetBufferListPool-Funktion . Das fAllocateNetBuffer-Element der NET_BUFFER_LIST_POOL_PARAMETERS Struktur, die der Aufrufer an NdisAllocateNetBufferListPool übergeben hat, muss auf TRUE und das DataSize-Element auf 0 festgelegt worden sein.

[in] ContextSize

Die Menge des verwendeten Datenraums in der NET_BUFFER_LIST_CONTEXT Struktur, die für den Aufrufer reserviert werden soll. ContextSize muss ein Vielfaches des durch MEMORY_ALLOCATION_ALIGNMENT definierten Werts sein.

[in] ContextBackFill

Die Menge des nicht verwendeten Datenspeichers (Nachfüllraum), den der Aufrufer benötigt. NDIS fügt diesen Wert dem ContextSize hinzu und weist zusätzlichen Speicherplatz zu. ContextBackFill muss ein Vielfaches des durch MEMORY_ALLOCATION_ALIGNMENT definierten Werts sein.

[in, optional] MdlChain

Ein Zeiger auf eine MDL-Kette, die NDIS zum Initialisieren der vorab zugewiesenen NET_BUFFER-Struktur verwendet. MdlChain kann NULL sein.

[in] DataOffset

Der anfängliche Offset in Bytes vom Anfang des Puffers bis zum Anfang des verwendeten Datenbereichs in der MDL-Kette. Datenbereich vor diesem Offset ist nicht genutzter Datenbereich. Daher stellt dieser Wert auch die anfängliche Menge des verfügbaren Verfüllbereichs in der MDL-Kette dar. Wenn MdlChainNULL ist, muss DataOffset 0 sein.

[in] DataLength

Die Länge des verwendeten Datenbereichs in Bytes in der MDL-Kette. Wenn MdlChainNULL ist, muss DataLength 0 sein.

Rückgabewert

NdisAllocateNetBufferAndNetBufferList gibt einen Zeiger auf die zugeordnete NET_BUFFER_LIST-Struktur zurück. Die NET_BUFFER_LIST-Struktur enthält eine NET_BUFFER-Struktur. Wenn die Zuordnung nicht erfolgreich war, ist dieser Zeiger NULL.

Hinweise

Die Strukturen, die die NdisAllocateNetBufferAndNetBufferList-Funktion zuweist, müssen aus einem Pool stammen, der NET_BUFFER_LIST Strukturen enthält, die mit vorab zugeordneten NET_BUFFER Strukturen gekoppelt sind. Um einen solchen Pool zu erstellen, müssen Sie den NdisAllocateNetBufferListPool-Funktion , wobei das fAllocateNetBuffer-Element der NET_BUFFER_LIST_POOL_PARAMETERS-Struktur auf TRUE festgelegt ist, und das DataSize-Element auf 0 festgelegt ist.

Beachten SieNET_BUFFER und NET_BUFFER_LIST Strukturen aus einem NDIS-Pufferpool zugeordnet werden müssen. Ein Treiber darf keine NET_BUFFER_LIST- oder NET_BUFFER-Struktur aus seinem privaten Speicherpool oder dem Stapel zuordnen und initialisieren.
 
Rufen Sie die NdisFreeNetBufferList-Funktion auf, um eine NET_BUFFER_LIST-Struktur frei zu geben.

Die vorab zugewiesenen NET_BUFFER können wiederverwendet werden, indem Sie sie mit einer anderen MDL-Kette neu initialisieren, wenn sie NET_BUFFER besitzt. Die Felder DataOffset, DataLength, CurrentMdl und CurrentMdlOffset im NET_BUFFER müssen jedoch mit der neuen MDL-Kette konsistent sein.

Wenn die ursprüngliche MDL-Kette beispielsweise XDataLength und YDataOffset enthält und CurrentMdl mit der zweiten MDL (M) in der ursprünglichen MDL-Kette beginnt, ist CurrentMdlOffsetZ. Das MdlChain-Feld in NET_BUFFER_DATA muss dann auf eine neue MDL-Kette verweisen, die X'DataLength und Y'DataOffset enthält. Wenn CurrentMdl mit der dritten MDL (M') in der neuen MDL-Kette beginnt, lautet CurrentMdlOffsetZ', und die folgenden Makros müssen verwendet werden, um Felder in NET_BUFFER festzulegen:

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

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Unterstützt in NDIS 6.0 und höher.
Zielplattform Universell
Header ndis/nblapi.h (einschließlich ndis.h)
Bibliothek Ndis.lib
IRQL <= DISPATCH_LEVEL
DDI-Complianceregeln Irql_NetBuffer_Function(ndis), NdisAllocateNetBufferList(ndis), NdisAllocateNetBufferList_InitFail(ndis)

Weitere Informationen

NET_BUFFER

NET_BUFFER_LIST

NET_BUFFER_LIST_CONTEXT

NET_BUFFER_LIST_POOL_PARAMETERS

NdisAllocateNetBufferListPool

NdisFreeNetBufferList