Freigeben über


NdisAllocateNetBuffer-Funktion (ndis/nblapi.h)

Rufen Sie die NdisAllocateNetBuffer-Funktion auf, um eine NET_BUFFER-Struktur aus einem NET_BUFFER-Strukturpool zuzuordnen 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 von zurückgegeben wurde 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 Bytes vom Anfang des Puffers bis zum Anfang des verwendeten Datenbereichs in der MDL-Kette. Der Datenbereich vor diesem Offset ist ungenutzter Datenbereich. Daher stellt dieser Wert auch die anfängliche Menge des verfügbaren Nachfü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

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

Hinweise

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

Beachten SieNET_BUFFER - und NET_BUFFER_LIST strukturen aus einem NDIS-Pufferpool zugeordnet werden müssen. Ein Treiber darf keine NET_BUFFER- oder NET_BUFFER_LIST-Struktur aus seinem privaten Speicherpool oder dem Stapel zuordnen und initialisieren.
 
Die vorab zugewiesene NET_BUFFER kann wiederverwendet werden, indem sie mit einer anderen MDL-Kette neu initialisiert wird, wenn sie NET_BUFFER besitzt. Die Felder DataOffset, DataLength, CurrentMdl und CurrentMdlOffset in 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, ist 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 (include ndis.h)
Bibliothek Ndis.lib
IRQL <= DISPATCH_LEVEL
DDI-Complianceregeln Irql_NetBuffer_Function(ndis), NdisAllocateNetBuffer(ndis)

Weitere Informationen

NET_BUFFER

NET_BUFFER_LIST

NdisAllocateNetBufferPool

NdisFreeNetBuffer