Fortgeschrittene Operationen

Erweiterte Vorgänge verringern die Größe des verwendeten Datenbereichs in einer NET_BUFFER Struktur oder in allen NET_BUFFER Strukturen in einer NET_BUFFER_LIST Struktur.

Treiber verwenden die folgenden Vorausfunktionen:

NdisAdvanceNetBufferDataStart

NdisAdvanceNetBufferListDataStart

Advance-Vorgänge können manchmal MDLs freigeben, die einer NET_BUFFER Struktur zugeordnet sind. Um den Mechanismus zum Freigeben von MDLs bereitzustellen, kann ein Treiber einen optionalen Einstiegspunkt für netFreeMdl-Funktionen bereitstellen. Wenn der Einstiegspunkt NULL ist, verwendet NDIS eine Standardmethode, um MDLs zuzuweisen. MDLs dürfen nur innerhalb einer NetFreeMdl freigegeben werden unter Verwendung des gleichen Gegenmechanismus, der auch bei der Allokierung der MDL in der NetAllocateMdl-Funktion verwendet wurde.

Um den neuen DataLength abzurufen, subtrahiert NDIS das vom Treiber angegebene DataOffsetDelta von der aktuellen DataLength . Wenn eine vorherige Rückschrittoperation neuen Speicherplatz zugewiesen hat, kann die Fortschrittsoperation solchen vorher zugeordneten Speicher freigeben. Wenn ein Vorabvorgang keinen Arbeitsspeicher freinimmt, fügt NDIS einfach den DataOffsetDelta zum aktuellen DataOffset hinzu, um den neuen DataOffset abzurufen. Wenn der vorab ausgeführte Speicher freigegeben wurde, passt NDIS das DataOffset entsprechend an.

Für den Fall des vollständigen Sendens können fortgeschrittene Vorgänge den Speicher freigeben, der in früheren Rückschritt-Vorgängen zugewiesen wurde. Um die Leistung zu verbessern, sollten Treiber die Gesamtgröße der Daten ausreichend zuordnen, bevor sie gesendet werden, um die Rückzugsoperationen aller zugrunde liegenden Treiber zu unterstützen.

Für die Empfangsanzeige passen die vorausgehenden Operationen einfach den DataOffset und die DataLength entsprechend an. Nach dem Vorabvorgang verbleiben die Kopfzeilen niedrigerer Ebenen im nicht verwendeten Datenbereich.