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