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 |
---|---|
|
Die Clientanwendung verbrauchte alle angegebenen Empfangsdaten. |
|
Die Clientanwendung hat alle angegebenen Empfangsdaten abgelehnt. |
|
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.
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.
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 |