Freigeben über


NdisAllocateNetBuffer-Funktion (ndis/nblapi.h)

Rufen Sie die NdisAllocateNetBuffer--Funktion auf, um eine NET_BUFFER Struktur aus einem NET_BUFFER Strukturpool zuzuweisen und zu initialisieren.

Syntax

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

Parameter

[in] PoolHandle

Ein NET_BUFFER Strukturpoolhandle, das zuvor von einem Aufruf an NdisAllocateNetBufferPool.

[in, optional] MdlChain

Ein Zeiger auf eine MDL-Kette, die NDIS zum Initialisieren der neuen NET_BUFFER-Struktur verwendet. 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 Datenbereichsin Bytes in der MDL-Kette. Wenn MdlChainNULL-ist, muss DataLength- 0 sein.

Rückgabewert

NdisAllocateNetBuffer gibt einen Zeiger auf die NET_BUFFER Struktur zurück, die NDIS zugewiesen hat. Wenn die Zuordnung nicht erfolgreich war, ist dieser Zeiger NULL-.

Bemerkungen

Rufen Sie NdisFreeNetBuffer- auf, um eine NET_BUFFER Struktur zu freigeben, die aus einem NET_BUFFER Strukturpool zugeordnet wurde.

HinweisNET_BUFFER und NET_BUFFER_LIST Strukturen müssen aus einem NDIS-Pufferpool zugeordnet werden. Ein Treiber darf eine NET_BUFFER- oder NET_BUFFER_LIST-Struktur nicht aus dem privaten Speicherpool oder dem Stapel zuordnen und initialisieren.
 
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, CurrentMdl, und CurrentMdlOffset Felder in 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), NdisAllocateNetBuffer(ndis)

Siehe auch

NET_BUFFER

NET_BUFFER_LIST

NdisAllocateNetBufferPool

NdisFreeNetBuffer