NET_BUFFER Struktur
NDIS 6.0 und höher NET_BUFFER Strukturen sind analog zu den NDIS_PACKET Strukturen, die von NDIS 5 verwendet werden. x - und frühere Treiber. Jede NET_BUFFER Struktur packt ein Paket mit Netzwerkdaten.
Die folgende Abbildung zeigt die Felder in einer NET_BUFFER-Struktur.
Die NET_BUFFER-Struktur enthält eine NET_BUFFER_HEADER-Struktur im NetBufferHeader-Element . Die NET_BUFFER_HEADER-Struktur enthält eine NET_BUFFER_DATA-Struktur im NetBufferData-Member . Sie sollten NDIS-Makros verwenden, um auf NET_BUFFER Strukturmember zuzugreifen. Eine vollständige Liste dieser Makros finden Sie auf der NET_BUFFER-Strukturreferenzseite.
Einige der NET_BUFFER Strukturmember werden nur von NDIS verwendet. Die Elemente, die Treiber in der Regel verwenden, sind:
ProtocolReserved
Reserviert für die Verwendung durch Protokolltreiber.
MiniportReserved
Reserviert für die Verwendung durch Miniporttreiber.
NdisPoolHandle
Gibt ein Poolhandle an, das den NET_BUFFER Pools identifiziert, aus dem die NET_BUFFER-Struktur zugeordnet wurde.
Nächster
Gibt einen Zeiger auf die nächste NET_BUFFER-Struktur in einer verknüpften Liste von NET_BUFFER-Strukturen an. Wenn dies die letzte NET_BUFFER Struktur in der Liste ist, ist dieser Member NULL.
Datalength
Gibt die Länge der Netzwerkdaten in Byte in der MDL-Kette an.
DataOffset
Gibt den Offset in Bytes vom Anfang des Arbeitsspeichers in der MDL-Kette bis zum Anfang der Netzwerkdaten in der MDL-Kette an.
CurrentMdl
Gibt einen Zeiger auf die erste MDL an, die der aktuelle Treiber verwendet. Dieser Zeiger bietet eine Optimierung, die die Leistung verbessert, indem alle MDLs übersprungen werden, die der aktuelle Treiber nicht verwendet.
CurrentMdlOffset
Gibt den Offset in Bytes zum Anfang des verwendeten Datenbereichs in der MDL an, der vom CurrentMdl-Member der NET_BUFFER-Struktur angegeben wird.
Die folgende Abbildung zeigt die Beziehung zwischen den Elementen CurrentMdl, CurrentMdlOffset, DataOffset und DataLength und dem Datenbereich.
NDIS bietet Funktionen zum Verwalten des Datenraums in der MDL-Kette. Wie Treiber den Datenraum nutzen, ändert sich dynamisch mit dem aktuellen Treiber. Manchmal gibt es Datenspeicher, der derzeit vom aktuellen Treiber nicht genutzt wird. Obwohl der nicht verwendete Datenspeicher derzeit nicht genutzt wird, kann er gültige Daten enthalten. Beispielsweise kann der nicht verwendete Datenbereich im Empfangspfad Headerinformationen enthalten, die von einem Treiber auf niedrigerer Ebene verwendet wurden.
Treiber führen Rückzugs- und Voranschreibvorgänge durch, um den verwendeten Datenspeicherplatz zu vergrößern und zu verringern. Weitere Informationen zu Retreat- und Advance-Vorgängen finden Sie unter Retreat- und Advance-Vorgänge.
Die folgenden Begriffe und Definitionen beschreiben Elemente des NET_BUFFER Datenraums:
Verwendeter Datenbereich
Der verwendete Datenbereich enthält Daten, die der aktuelle Treiber zur aktuellen Zeit verwendet. Treiber erhöhen den belegten Datenspeicher mit Rückzugsvorgängen und reduzieren den verwendeten Datenspeicher mit erweiterten Vorgängen.
Nicht genutzter Datenspeicher
Der aktuelle Treiber verwendet diesen Datenbereich zur aktuellen Zeit nicht.
Gesamtdatengröße
Die Gesamtdatengröße ist die Summe der Größe des verwendeten Datenbereichs und des nicht verwendeten Datenbereichs. Um die Gesamtgröße zu berechnen, fügen Sie dataOffset dem DataLength hinzu.
Rückzug
Rückzugsvorgänge erhöhen die Größe des verwendeten Datenbereichs.
Befördern
Erweiterte Vorgänge verringern die Größe des verwendeten Datenbereichs.