NdisAllocateFragmentNetBufferList-Funktion (ndis/nblapi.h)

Rufen Sie die Funktion NdisAllocateFragmentNetBufferList auf, um eine neue fragmentierte NET_BUFFER_LIST-Struktur basierend auf den Daten in einer vorhandenen NET_BUFFER_LIST-Struktur zu erstellen.

Syntax

NDIS_EXPORTED_ROUTINE NET_BUFFER_LIST * NdisAllocateFragmentNetBufferList(
  [in] NET_BUFFER_LIST *OriginalNetBufferList,
       NDIS_HANDLE     NetBufferListPool,
       NDIS_HANDLE     NetBufferPool,
  [in] ULONG           StartOffset,
  [in] ULONG           MaximumLength,
  [in] ULONG           DataOffsetDelta,
  [in] ULONG           DataBackFill,
  [in] ULONG           AllocateFragmentFlags
);

Parameter

[in] OriginalNetBufferList

Ein Zeiger auf eine vorhandene NET_BUFFER_LIST-Struktur.

NetBufferListPool

Ein Handle, das von einem Aufruf des abgerufen wurde NdisAllocateNetBufferListPool-Funktion .

NetBufferPool

Ein NET_BUFFER Strukturpoolhandle, das zuvor von einem Aufruf von zurückgegeben wurde NdisAllocateNetBufferPool.

[in] StartOffset

Ein zusätzlicher Byteoffset vom Anfang der Daten in jeder NET_BUFFER-Struktur . Dieser Offset ist zusätzlich zum Wert des DataOffset-Elements , der in jeder NET_BUFFER-Struktur angegeben ist.

[in] MaximumLength

Die maximale Länge (in Bytes) für jedes Fragment in der neuen NET_BUFFER_LIST-Struktur. Jedes Fragment wird durch eine NET_BUFFER-Struktur beschrieben.

[in] DataOffsetDelta

Die zusätzliche Menge des verwendeten Datenraums , den NDIS in der neuen NET_BUFFER-Strukturen zur Verfügung stellen sollte.

[in] DataBackFill

Die Menge des Datenraums zusätzlich zum Wert des DataOffsetDelta-Parameters , der zugewiesen werden soll, wenn die Zuordnung erforderlich ist. Wenn NDIS Arbeitsspeicher zuweisen muss, um den in DataOffsetDelta angeforderten Datenspeicher bereitzustellen, sollte es auch den zusätzlichen Speicherplatz zuordnen, den DataBackFill angibt.

[in] AllocateFragmentFlags

NDIS-Flags, die mit einem OR-Vorgang kombiniert werden können. Legen Sie diesen Parameter auf 0 fest. Für diese Funktion sind derzeit keine Flags definiert.

Rückgabewert

NdisAllocateFragmentNetBufferList gibt einen Zeiger auf eine neue fragmentierte NET_BUFFER_LIST-Struktur zurück. Wenn bei der Zuordnung ein Fehler aufgetreten ist, ist der Rückgabewert NULL.

Hinweise

NdisAllocateFragmentNetBufferList ordnet und initialisiert ein neues Fragment NET_BUFFER_LIST Struktur und NET_BUFFER Strukturen, die dieselben Daten beschreiben, die von der NET_BUFFER_LIST-Struktur beschrieben werden, die der Aufrufer an NdisAllocateFragmentNetBufferList übergeben hat.

Wenn das Fragment NET_BUFFER_LIST Struktur Attribute aufweisen soll, die einem bestimmten Pool zugeordnet sind, muss der Aufrufer das Poolhandle im NetBufferListPoolHandle - oder NetBufferPoolHandle-Parameter angeben. Beispielsweise ist das ProtocolType-Element der NET_BUFFER_LIST-Struktur dem Pool zugeordnet.

Für jede NET_BUFFER Struktur in der angegebenen Quellstruktur NET_BUFFER_LIST erstellt NDIS das Fragment NET_BUFFER Strukturen wie folgt:

  • NDIS erstellt die Fragmente ab dem Anfang des verwendeten Datenbereichs in der Quellstruktur NET_BUFFER und versetzt durch den im StartOffset-Parameter angegebenen Wert.
  • NDIS unterteilt den verwendeten Datenraum (nach Der Abrechnung für das StartOffset ) in der Quellstruktur NET_BUFFER in Fragmente.
  • Die Länge des verwendeten Datenraums jedes Fragments ist kleiner oder gleich dem im MaximumLength-Parameter angegebenen Wert. Der verwendete Datenraum des letzten Fragments kann kleiner als MaximumLength sein.
  • Jedes Fragment wird durch eine neue NET_BUFFER-Struktur und eine neue Gruppe von MDL-Ketten beschrieben.
  • Der Datenoffset des neuen NET_BUFFER-Strukturen wird um die Anzahl von Bytes im DataOffsetDelta-Parameter reduziert (der Wert des DataOffset-Elements wird reduziert).
  • Wenn NDIS Arbeitsspeicher zuweisen muss, um den in DataOffsetDelta angeforderten Datenspeicher bereitzustellen, sollte es auch den zusätzlichen Speicherplatz zuordnen, den DataBackFill angibt.
Das neue Fragment NET_BUFFER_LIST Struktur, das NdisAllocateFragmentNetBufferList erstellt, enthält keine initiale NET_BUFFER_LIST_CONTEXT Struktur.

Rufen Sie die folgenden NdisFreeFragmentNetBufferList-Funktion , um eine NET_BUFFER_LIST-Struktur und alle zugeordneten NET_BUFFER-Strukturen und MDL-Ketten frei zu geben, die zuvor durch Aufrufen von NdisAllocateFragmentNetBufferList zugewiesen wurden.

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), NdisAllocateFragmentNetBufferList(ndis), NdisAllocateFragmentNetBufferList_InitFail(ndis)

Weitere Informationen

NET_BUFFER

NET_BUFFER_LIST

NET_BUFFER_LIST_CONTEXT

NdisAllocateNetBufferListPool

NdisAllocateNetBufferPool

NdisFreeFragmentNetBufferList