Rückzugsvorgänge
Rückzugsvorgänge können die Größe des verwendeten Datenraums in einer NET_BUFFER-Struktur oder in allen NET_BUFFER-Strukturen in einer NET_BUFFER_LIST-Struktur erhöhen.
NDIS bietet die folgenden Rückzugsfunktionen:
NdisRetreatNetBufferListDataStart
Rückzugsvorgänge können manchmal MDLs zuordnen, die einer NET_BUFFER-Struktur zugeordnet sind. Um den Mechanismus für die Zuweisung von MDLs bereitzustellen, kann ein Treiber einen optionalen Einstiegspunkt für eine NetAllocateMdl-Funktion bereitstellen. Wenn der Einstiegspunkt NULL ist, verwendet NDIS eine Standardmethode, um MDLs zuzuweisen. MDLs müssen innerhalb einer NetFreeMdl-Funktion freigegeben werden, die das Reziproz des Mechanismus bereitstellt, der zum Zuweisen der MDL verwendet wurde.
Um die neue DataLength abzurufen, fügt NDIS das vom Treiber angegebene DataOffsetDelta zum aktuellen DataLength hinzu. Wenn die Größe des nicht verwendeten Datenbereichs größer als der DataOffsetDelta ist, reduziert ein Rückzugsvorgang das DataOffset . In diesem Fall ist das neue DataOffset das aktuelle DataOffset abzüglich der DataOffsetDelta .
Wenn DataOffsetDelta größer als DataOffset ist, ordnet ein Rückzugsvorgang neuen Datenbereich zu. In diesem Fall passt NDIS das DataOffset entsprechend an.
Bei Sendevorgängen weist NDIS Arbeitsspeicher zu, wenn nicht genügend ungenutzter Datenspeicher vorhanden ist, um eine Rückzugsanforderung zu erfüllen. Wenn keine Speicherzuordnung erforderlich ist, passt NDIS einfach das DataOffset und DataLength an. Um eine bessere Leistung zu erzielen, sollten Treiber vor dem Senden genügend Gesamtdatengröße zuordnen, um die Rückzugsvorgänge aller zugrunde liegenden Treiber zu berücksichtigen.
Für den Empfangsrückgabefall passt NDIS einfach dataOffset und DataLength entsprechend an. Der Rückzugsvorgang kehrt den Vorauslaufvorgang um, der während der Empfangsverarbeitung stattgefunden hat. Nach dem Rückzugsvorgang enthält der verwendete Datenbereich die Headerdaten, die zugrunde liegende Treiber während der Empfangsverarbeitung verwendet haben.