NET_BUFFER Struktur (ndis/nbl.h)

Die NET_BUFFER Struktur gibt Daten an, die über das Netzwerk übertragen oder empfangen werden.

Syntax

typedef struct _NET_BUFFER {
  union {
    struct {
      NET_BUFFER *Next;
      MDL        *CurrentMdl;
      ULONG      CurrentMdlOffset;
      union {
        ULONG  DataLength;
        SIZE_T stDataLength;
      };
      MDL        *MdlChain;
      ULONG      DataOffset;
    };
    SLIST_HEADER      Link;
    NET_BUFFER_HEADER NetBufferHeader;
  };
  USHORT           ChecksumBias;
  USHORT           Reserved;
  NDIS_HANDLE      NdisPoolHandle;
  PVOID            NdisReserved[2];
  PVOID            ProtocolReserved[6];
  PVOID            MiniportReserved[4];
  PHYSICAL_ADDRESS DataPhysicalAddress;
  union {
    NET_BUFFER_SHARED_MEMORY *SharedMemoryInfo;
    SCATTER_GATHER_LIST      *ScatterGatherList;
  };
} NET_BUFFER, *PNET_BUFFER;

Member

Next

Ein Zeiger auf die nächste NET_BUFFER Struktur in einer verknüpften Liste von NET_BUFFER Strukturen. Wenn diese Struktur die letzte NET_BUFFER Struktur in der Liste ist, ist dieses Element NULL.

CurrentMdl

Ein Zeiger auf die erste MDL, die der aktuelle Treiber verwendet. Dieses Element bietet eine Optimierung, die die Leistung verbessert, indem Sie mdLs überspringen, die der aktuelle Treiber nicht verwendet.

CurrentMdlOffset

Der Offset in Bytes bis zum Anfang des verwendeten Datenraums in der MDL, die vom CurrentMdl-Element angegeben wird.

DataLength

Die Länge in Bytes des verwendeten Datenraums in der MDL-Kette. Die maximale Länge ist 0xFFFFFFFF Bytes.

stDataLength

Die Länge in Bytes des verwendeten Datenraums in der MDL-Kette. Die maximale Länge ist 0xFFFFFFFF Bytes. Dieses Element ist identisch mit DataLength, aber sein Typ ist SIZE_T anstelle von ULONG.

MdlChain

Ein Zeiger auf eine verknüpfte Liste von MDLs, die einen Datenpuffer zugeordnet haben. Der Datenpuffer speichert die Netzwerkdaten.

DataOffset

Der Offset in Bytes vom Anfang der MDL-Kette bis zum Anfang der Netzwerkdaten in der MDL-Kette. Dieser Offset ist auch die Größe des nicht verwendeten Datenraums in Bytes.

Link

Reserviert für NDIS.

NetBufferHeader

Eine NET_BUFFER_HEADER Struktur. Dies ist ein Duplikat der obigen Union, aus Kompatibilitätsgründen.

ChecksumBias

Die Anzahl der Bytes, die beim Berechnen einer Prüfsumme vom Anfang des Datenpuffers übersprungen werden sollen. Dieses Element wird vom TCP/IP-Protokoll verwendet.

Reserved

Für die zukünftige Verwendung reserviert.

NdisPoolHandle

Ein Poolhandpunkt, der den NET_BUFFER Pool identifiziert, aus dem die NET_BUFFER Struktur zugewiesen wurde.

NdisReserved[2]

Reserviert für NDIS.

ProtocolReserved[6]

Reserviert für die Verwendung durch Protokolltreiber. Protokolltreiber und NDIS-Zwischentreiber können diesen Bereich für eigene Zwecke verwenden. Zwischentreiber können dieses Element nur verwenden, wenn es noch nicht verwendet wird.

MiniportReserved[4]

Reserviert für die Verwendung durch Miniporttreiber. Miniport-Fahrer und NDIS-Zwischentreiber können diesen Bereich für eigene Zwecke verwenden.

DataPhysicalAddress

Hinweis Der Name dieses Elements ist NdisReserved1 für NDIS 6.0-Treiber und ist DataPhysicalAddress für NDIS 6.1 und höher. Für NDIS 6.0-Treiber ist dieses Element für NDIS reserviert.
 
Die physische Adresse des Datenteils eines Frames. Dieses Element sollte null sein, wenn der treiber, der NET_BUFFER zugewiesen wurde, die Adresse nicht angibt. Dieses Element ist nur gültig, wenn das NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_HEADER- oder NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_PAYLOAD-Flag im NblFlags-Element der NET_BUFFER_LIST-Struktur festgelegt ist, die dem NET_BUFFER zugeordnet ist.
Hinweis Ein Miniporttreiber kann das DataPhysicalAddress-Element der NET_BUFFER Struktur festlegen, auch wenn die Struktur nicht einem geteilten Frame zugeordnet ist. In diesem Fall enthält DataPhysicalAddress die physische Adresse des Headers MDL.
 

SharedMemoryInfo

Ein Zeiger auf ein NET_BUFFER_SHARED_MEMORY Struktur.

ScatterGatherList

Die SCATTER_GATHER_LIST-Struktur beschreibt eine Punkt-/Sammelliste für DMA.

Bemerkungen

NDIS-Treiber können die folgenden Funktionen aufrufen, um eine NET_BUFFER Struktur zuzuweisen und zu initialisieren:

NDIS-Treiber können die NDIS-Treiber aufrufen NdisAllocateNetBufferListPool-Funktion und dann das fAllocateNetBuffer-Element der NET_BUFFER_LIST_POOL_PARAMETERS-Struktur auf TRUE festlegen, wenn ein NET_BUFFER_LIST Strukturpool zugewiesen wird. In diesem Fall wird eine NET_BUFFER Struktur mit jeder NET_BUFFER_LIST Struktur, die der Treiber aus dem Pool zuordnet, vorab zugeordnet.

Verkettet an jede NET_BUFFER Struktur sind mindestens eine Pufferdeskriptoren, die Pufferpuffer zuordnen, die Netzwerkpaketdaten enthalten. Diese Pufferdeskriptoren werden als MDL-Kette im NetBufferHeader-Element angegeben. Solche Netzwerkpaketdaten wurden entweder empfangen oder übertragen.

Um auf zusätzlichen Datenraum in der MDL-Kette zuzugreifen, können NDIS-Treiber die folgenden Funktionen aufrufen:

NDIS-Treiber verwenden in der Regel die MiniportReserved- oder ProtocolReserved-Elemente der NET_BUFFER Struktur, um NET_BUFFER Strukturkontextinformationen beizubehalten.
Hinweis Nur ein Treiber kann MiniportReserved- oder ProtocolReserved-Mitglieder verwenden. Wenn also ein anderer Treiber eine dieser Member verwendet hat, kann ein Zwischentreiber sie nicht verwenden.
 
Um auf Elemente der NET_BUFFER-Struktur zuzugreifen, verwenden Sie die folgenden Makros und Funktionen:

NET_BUFFER_NEXT_NB

NET_BUFFER_FIRST_MDL

NET_BUFFER_DATA_OFFSET

NET_BUFFER_DATA_LENGTH

NET_BUFFER_PROTOCOL_RESERVED

NET_BUFFER_MINIPORT_RESERVED

NET_BUFFER_CHECKSUM_BIAS

NET_BUFFER_CURRENT_MDL

NET_BUFFER_CURRENT_MDL_OFFSET

NdisGetPoolFromNetBuffer

Weitere Informationen zum Verwenden von Nettopuffern finden Sie unter NET_BUFFER Architektur.

Anforderungen

   
Unterstützte Mindestversion (Client) Unterstützt in NDIS 6.0 und höher.
Header ndis/nbl.h (einschließlich ndis.h)

Siehe auch

NET_BUFFER_CHECKSUM_BIAS

NET_BUFFER_CURRENT_MDL

NET_BUFFER_CURRENT_MDL_OFFSET

NET_BUFFER_DATA_LENGTH

NET_BUFFER_DATA_OFFSET

NET_BUFFER_FIRST_MDL

NET_BUFFER_HEADER

NET_BUFFER_LIST

NET_BUFFER_LIST_POOL_PARAMETERS

NET_BUFFER_MINIPORT_RESERVED

NET_BUFFER_NEXT_NB

NET_BUFFER_PROTOCOL_RESERVED

NdisAllocateNetBuffer

NdisAllocateNetBufferAndNetBufferList NdisAllocateNetBufferListPool

NdisGetPoolFromNetBuffer

NdisMSendNetBufferListsComplete NdisRetreatNetBufferDataStart NdisRetreatNetBufferListDataStart

SCATTER_GATHER_LIST