Freigeben über


NdisAllocateNetBufferAndNetBufferList-Funktion (ndis/nblapi.h)

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

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. Der fAllocateNetBuffer Member der NET_BUFFER_LIST_POOL_PARAMETERS Struktur, die der Aufrufer an NdisAllocateNetBufferListPool übergeben hat, muss auf TRUE und das DataSize Member auf Null festgelegt sein.

[in] ContextSize

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

[in] ContextBackFill

Die Menge nicht genutzten Datenbereichs (Rückfüllbereich), den der Aufrufer benötigt. NDIS fügt diesen Wert dem ContextSize- hinzu und weist zusätzlichen Speicherplatz zu. Die ContextBackFill- muss ein Vielfaches des durch MEMORY_ALLOCATION_ALIGNMENT definierten Werts sein.

[in, optional] MdlChain

Ein Zeiger auf eine MDL-Kette, die von NDIS zum Initialisieren der präallocated NET_BUFFER-Struktur verwendet wird. MdlChain- kann NULL-sein.

[in] DataOffset

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

[in] DataLength

Die Länge des verwendeten 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-.

Bemerkungen

Die Strukturen, die die NdisAllocateNetBufferAndNetBufferList Funktion zuweist, müssen aus einem Pool stammen, der NET_BUFFER_LIST Strukturen umfasst, die mit vorallocatierten NET_BUFFER-Strukturen gekoppelt sind. Um einen solchen Pool zu erstellen, müssen Sie die NdisAllocateNetBufferListPool Funktion mit dem fAllocateNetBuffer Member der NET_BUFFER_LIST_POOL_PARAMETERS Struktur auf TRUEfestgelegt, und das DataSize Member auf Null festgelegt.

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

Die vorinstallierte NET_BUFFER kann wiederverwendet werden, indem sie mit einer anderen MDL-Kette erneut initialisiert wird, wenn sie NET_BUFFERbesitzt, aber die DataOffset-, DataLength, CurrentMdlund CurrentMdlOffset Felder in der NET_BUFFER müssen mit der neuen MDL-Kette konsistent sein.

Wenn beispielsweise die ursprüngliche MDL-Kette XDataLength und YDataOffsetenthält und CurrentMdl mit der zweiten MDL (M) in der ursprünglichen MDL-Kette beginnt, CurrentMdlOffset ist Z. Das feld MdlChain in NET_BUFFER_DATA muss dann auf eine neue MDL-Kette verweisen, die X'DataLength und DataOffsetvon Y enthält. Wenn CurrentMdl mit dem dritten MDL (M') in der neuen MDL-Kette beginnt, CurrentMdlOffsetZ'ist und die folgenden Makros zum Festlegen von Feldern in NET_BUFFERverwendet werden müssen:

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
mindestens unterstützte Client- Unterstützt in NDIS 6.0 und höher.
Zielplattform- Universal
Header- ndis/nblapi.h (include ndis.h)
Library Ndis.lib
IRQL- <= DISPATCH_LEVEL
DDI-Complianceregeln Irql_NetBuffer_Function(ndis), NdisAllocateNetBufferList(ndis), NdisAllocateNetBufferList_InitFail(ndis)

Siehe auch

NET_BUFFER

NET_BUFFER_LIST

NET_BUFFER_LIST_CONTEXT

NET_BUFFER_LIST_POOL_PARAMETERS

NdisAllocateNetBufferListPool

NdisFreeNetBufferList