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.
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_LIST_POOL_PARAMETERS
NdisAllocateNetBufferListPool