Share via


NDIS_TCP_OFFLOAD_RECEIVE_INDICATE Rückruffunktion (ndischimney.h)

[Das TCP-Chimney-Auslagerungsfeature ist veraltet und sollte nicht verwendet werden.]

Ein Auslagerungsziel ruft die NdisTcpOffloadReceiveHandler-Funktion auf, um anzugeben, dass empfangene Netzwerkdaten für die Nutzung durch eine Clientanwendung verfügbar sind.

Syntax

NDIS_TCP_OFFLOAD_RECEIVE_INDICATE NdisTcpOffloadReceiveIndicate;

NDIS_STATUS NdisTcpOffloadReceiveIndicate(
  [in]  IN NDIS_HANDLE NdisOffloadHandle,
  [in]  IN PNET_BUFFER_LIST NetBufferList,
  [in]  IN NDIS_STATUS Status,
  [out] OUT PULONG BytesConsumed
)
{...}

Parameter

[in] NdisOffloadHandle

Ein Handle, das die entladene TCP-Verbindung identifiziert, für die die Angabe hergestellt wird. Beim Entladen der Verbindung wurde dieses Handle im NdisOffloadHandle-Element des NDIS_MINIPORT_OFFLOAD_BLOCK_LIST Struktur, die dem Verbindungszustand zugeordnet war.

[in] NetBufferList

Ein Zeiger auf eine NET_BUFFER_LIST Struktur. Jede NET_BUFFER_LIST Struktur beschreibt eine Liste NET_BUFFER Strukturen. Jede NET_BUFFER Struktur in der Liste wird einer Kette von Speicherdeskriptorlisten (MDLs) zugeordnet. Die MDLs enthalten die empfangenen Daten. Die MDLs sind gesperrt, sodass sie resident bleiben, aber nicht dem Systemspeicher zugeordnet werden.

Die vonNetBufferList angegebene NET_BUFFER_LIST-Struktur muss eine eigenständige Struktur sein und darf nicht die erste Struktur in einer verknüpften Liste von NET_BUFFER_LIST Strukturen sein. Auslagerungsziele können diese Einschränkung umgehen, indem so viele MDLs wie erforderlich an dieselbe NET_BUFFER in einer Auslagerungs empfangen-Anzeige verkettet werden.

[in] Status

Das Auslagerungsziel muss den folgenden status Wert bereitstellen:

NDIS_STATUS_SUCCESS

Dies gibt an, dass der Hoststapel den Besitz der NET_BUFFER_LIST Strukturen und zugeordneten Strukturen behalten kann, bis diese Strukturen an die MiniportTcpOffloadReceiveReturn-Funktion des Auslagerungsziels.

[out] BytesConsumed

Ein Zeiger auf eine Variable mit ULONG-Typ, die die Anzahl von Bytes empfängt, die von der Clientanwendung verwendet wurden.

Rückgabewert

Die NdisTcpOffloadReceiveHandler-Funktion kann einen der folgenden Werte zurückgeben:

Rückgabecode Beschreibung
NDIS_STATUS_SUCCESS
Die Clientanwendung verbrauchte alle angegebenen Empfangsdaten.
NDIS_STATUS_OFFLOAD_DATA_NOT_ACCEPTED
Die Clientanwendung hat alle angegebenen Empfangsdaten abgelehnt.
NDIS_STATUS_OFFLOAD_DATA_PARTIALLY_ACCEPTED
Die Clientanwendung verbrauchte eine Teilmenge der angegebenen Empfangsdaten. Die Menge an Daten in Bytes, die von der Clientanwendung genutzt wurde, wird in der Variablen zurückgegeben, die durch den BytesConsumed-Parameter angegeben wird.

Hinweise

Empfangspuffer werden an die MiniportTcpOffloadReceive-Funktion des Auslagerungsziels. Wenn vorab bereitgestellte Empfangsanforderungen (Puffer, die von der Clientanwendung bereitgestellt werden) für die Verbindung verfügbar sind, sollte das Auslagerungsziel die Empfangsdaten übertragen, indem die NdisTcpOffloadReceiveComplete-Funktion . Weitere Informationen finden Sie unter Übermittlungsalgorithmus.

Alle Empfangsanforderungen müssen vom Auslagerungsziel abgeschlossen werden (auch wenn es sich um Nullbyte-Empfangsanforderungen handelt).

Nachdem ein Auslagerungsziel den Empfang von Daten angegeben hat und diese Daten abgelehnt wurden, kann das Auslagerungsziel nicht erneut angeben, dass Daten erneut angezeigt werden, bis der Hoststapel eine Empfangsanforderung postet:

  • Normale Empfangsanforderungen

    Wenn der Hoststapel normale Empfangsanforderungen postet, muss das Auslagerungsziel diese Anforderungen abschließen, bevor Empfangshinweise erstellt werden. Weitere Informationen finden Sie unter Übermittlungsalgorithmus.

  • Zero-Byte-Empfangsanforderungen

    Der Hoststapel kann eine Nullbyte-Empfangsanforderung senden, um Empfangsanzeigen durch das Auslagerungsziel zu aktivieren. Eine Zero-Byte-Empfangsanforderung ist eine Anforderung, bei der der Wert des DataLength-Elements (weitere Informationen finden Sie unter NET_BUFFER-Struktur ) 0 ist. Eine Zero-Byte-Empfangsanforderung verbraucht keine gepufferten Daten.

Während der Initialisierung sollte das Auslagerungsziel zwei Pufferpools zuordnen, die jeweils NET_BUFFER_LIST Strukturen und NET_BUFFER-Strukturen enthalten. Das Auslagerungsziel verwendet einen Pool zum Erstellen von Empfangsanzeigen über den TCP-Schornstein beim Aufrufen der NdisTcpOffloadReceiveHandler-Funktion . Das Auslagerungsziel verwendet den anderen Pool, um Empfangsanzeigen über die NDIS-Schnittstelle ohne Auslagerung beim Aufrufen der NdisMIndicateReceiveNetBufferLists-Funktion .

Jeder zugeordneten NET_BUFFER_LIST Struktur darf nur eine NET_BUFFER Struktur zugeordnet sein. Die Anzahl solcher zuzuordnenden Strukturen hängt vom Treiberschreiber ab. Weitere Informationen zum Zuordnen solcher Strukturen finden Sie unter Miniport-Treiberpufferverwaltung.

Sofern keine verzögerte Bestätigung erfolgt, sollte das Auslagerungsziel empfangene Daten bestätigen, sobald das Auslagerungsziel über interne Puffer verfügt, in denen die Daten abgelegt werden können. Das Auslagerungsziel kann empfangene Daten vor, während oder nach dem Aufruf der NdisTcpOffloadReceiveHandler-Funktion bestätigen.

Das Auslagerungsziel stellt beim Aufrufen der NdisTcpOffloadReceiveHandler-Funktion immer den Statuswert NDIS_STATUS_SUCCESS bereit. Dies gibt an, dass der Hoststapel den Besitz der NET_BUFFER_LIST Strukturen und zugeordneten Strukturen behalten kann, bis diese Strukturen an das Auslagerungsziel zurückgegeben werden.

  • Wenn der Hoststapel NDIS_STATUS_SUCCESS zurückgibt, was angibt, dass die Clientanwendung die Empfangsdaten akzeptiert und verwendet hat, gibt der Hoststapel die NET_BUFFER_LIST Strukturen an die MiniportTcpOffloadReceiveReturn-Funktion des Auslagerungsziels. Der Hoststapel legt die vom Parameter BytesConsumed angegebene Variable auf die Anzahl der Bytes fest, die vom Auslagerungsziel angegeben wurden.
  • Wenn der Hoststapel NDIS_STATUS_NOT_ACCEPTED zurückgibt, was angibt, dass die Clientanwendung die Empfangsdaten abgelehnt hat, nimmt das Auslagerungsziel den Besitz der angegebenen NET_BUFFER_LIST Strukturen wieder auf, wenn die Funktion NdisTcpOffloadReceiveHandler zurückgegeben wird. Das Auslagerungsziel muss die Empfangsdaten in Erwartung puffern, dass die Clientanwendung Empfangspuffer für die Verbindung postet. Nachdem die Clientanwendungsbeiträge Puffer empfangen haben, kopiert das Auslagerungsziel die gepufferten Empfangsdaten in die bereitgestellten Puffer und schließt die gebuchten Puffer durch Aufrufen der NdisTcpOffloadReceiveComplete-Funktion . Weitere Informationen finden Sie unter Übermittlungsalgorithmus. Der Hoststapel legt die vom BytesConsumed-Parameter angegebene Variable auf 0 fest.
  • Wenn der Hoststapel NDIS_STATUS_OFFLOAD_DATA_PARTIALLY_ACCEPTED zurückgibt, was angibt, dass die Clientanwendung eine Teilmenge der Empfangsdaten verbraucht hat, nimmt das Auslagerungsziel den Besitz der angegebenen NET_BUFFER_LIST Strukturen wieder auf, wenn die NdisTcpOffloadReceiveHandler-Funktion zurückgibt. Der Hoststapel legt die vom BytesConsumed-Parameter angegebene Variable auf einen Wert ungleich Null fest, der die Menge an Daten in Bytes angibt, die von der Clientanwendung genutzt wurde. Das Auslagerungsziel muss die verbleibenden Empfangsdaten in Erwartung puffern, dass die Clientanwendung die Empfangspuffer für die Verbindung postet.
Beachten Sie, dass das Auslagerungsziel beim Aufrufen der NdisTcpOffloadReceiveHandler-Funktion nie den Statuswert NDIS_STATUS_RESOURCES bereitstellt.

Im RcvIndicationSize-Member der TCP_OFFLOAD_STATE_CACHED-Struktur kann der Hoststapel die optimale Anzahl von Datenbytes angeben, die das Auslagerungsziel in einem einzelnen Aufruf der NdisTcpOffloadReceiveHandler-Funktion bereitstellen soll. Weitere Informationen finden Sie unter Verwenden der angegebenen Empfangsanzeigegröße.

Anforderungen

Anforderung Wert
Zielplattform Universell
Header ndischimney.h (include Ndischimney.h)
IRQL DISPATCH_LEVEL

Weitere Informationen

MDL

MiniportInitializeEx

MiniportTcpOffloadReceive

MiniportTcpOffloadReceiveReturn

NET_BUFFER

NET_BUFFER_LIST

NdisMRegisterMiniportDriver