NDIS_TCP_OFFLOAD_RECEIVE_INDICATE Rückruffunktion (ndischimney.h)
[Das TCP-Schornstein-Offload-Feature ist veraltet und sollte nicht verwendet werden.]
Ein Offloadziel ruft die NdisTcpOffloadReceiveHandler-Funktion auf, um anzugeben, dass empfangene Netzwerkdaten für die Verwendung 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, mit dem die entladene TCP-Verbindung identifiziert wird, auf der die Angabe erfolgt. Beim Entladen der Verbindung wurde dieser Handle im NdisOffloadHandle- Mitglied des NDIS_MINIPORT_OFFLOAD_BLOCK_LIST Struktur, die dem Verbindungsstatus zugeordnet war.
[in] NetBufferList
Ein Zeiger auf eine NET_BUFFER_LIST Struktur. Jede NET_BUFFER_LIST Struktur beschreibt eine Liste der NET_BUFFER Strukturen. Jede NET_BUFFER Struktur in der Liste ist einer Kette von Speicherdeskriptorlisten (MDLs)zugeordnet. Die MDLs enthalten die empfangenen Daten. Die MDLs sind gesperrt, sodass sie weiterhin vorhanden sind, aber nicht im Systemspeicher zugeordnet sind.
Die durch NetBufferList- angegebene NET_BUFFER_LIST Struktur muss eine eigenständige Struktur sein und kann nicht die erste Struktur in einer verknüpften Liste mit NET_BUFFER_LIST Strukturen sein. Offloadziele können diese Einschränkung umgehen, indem sie so viele MDLs wie nötig an denselben NET_BUFFER in einer Offload-Empfangsanzeige verketten.
[in] Status
Das Offloadziel muss den folgenden Statuswert angeben:
NDIS_STATUS_SUCCESS
Dies gibt an, dass der Hoststapel den Besitz der NET_BUFFER_LIST Strukturen und zugeordneten Strukturen behalten kann, bis sie diese Strukturen an die MiniportTcpOffloadReceiveReturn Funktion des Offload-Ziels.
[out] BytesConsumed
Ein Zeiger auf eine ULONG-Typvariable, die die Anzahl der Bytes empfängt, die von der Clientanwendung verbraucht wurden.
Rückgabewert
Die NdisTcpOffloadReceiveHandler Funktion kann einen der folgenden Werte zurückgeben:
Rückgabecode | Beschreibung |
---|---|
|
Die Clientanwendung hat alle angegebenen Empfangendaten verbraucht. |
|
Die Clientanwendung hat alle angegebenen Empfangendaten abgelehnt. |
|
Die Clientanwendung hat eine Teilmenge der angegebenen Empfangendaten verbraucht. Die Datenmenge in Bytes, die von der Clientanwendung genutzt wurde, wird in der Variablen zurückgegeben, die durch den BytesConsumed Parameter angegeben wurde. |
Bemerkungen
Empfangspuffer werden an die MiniportTcpOffloadReceive Funktion des Offload-Ziels. Wenn vorab bereitgestellte Empfangsanforderungen (Puffer, die von der Clientanwendung bereitgestellt werden) für die Verbindung verfügbar sind, sollte das Offloadziel die Empfangendaten durch Aufrufen der NdisTcpOffloadReceiveComplete-Funktion. Weitere Informationen finden Sie unter Übermittlungsalgorithmus.
Alle Empfangsanforderungen müssen vom Offloadziel abgeschlossen werden (auch wenn sie Zero-Byte-Empfangsanforderungen sind).
Nachdem ein Offloadziel den Empfang von Daten angegeben hat und diese Daten abgelehnt wurden, kann das Offloadziel nicht mehr angeben, dass die Daten erneut angezeigt werden, bis der Hoststapel eine Empfangsanforderung sendet:
-
Normale Empfangsanforderungen
Wenn der Hoststapel normale Empfangsanforderungen sendet, muss das Offloadziel diese Anforderungen abschließen, bevor sie Hinweise erhalten. Weitere Informationen finden Sie unter Übermittlungsalgorithmus.
-
Empfangen von Zero-Byte-Anforderungen
Der Hoststapel kann eine Zero-Byte-Empfangsanforderung bereitstellen, um den Empfang von Anzeigen durch das Offload-Ziel zu ermöglichen. Eine 0-Byte-Empfangsanforderung ist eine Anforderung, in der der Wert des DataLength-Members (weitere Informationen finden Sie unter NET_BUFFER Struktur) null ist. Eine Zero-Byte-Empfangsanforderung verwendet keine gepufferten Daten.
Jede zugeordnete NET_BUFFER_LIST Struktur darf nur eine NET_BUFFER Struktur zugeordnet sein. Die Anzahl solcher Strukturen, die zugeordnet werden sollen, liegt bei dem Treiberschreiber. Weitere Informationen zum Zuordnen solcher Strukturen finden Sie unter Miniport Driver Buffer Management.
Sofern sie keine verzögerte Bestätigung vornimmt, sollte das Offloadziel empfangene Daten bestätigen, sobald das Offload-Ziel interne Puffer enthält, in die die Daten abgelegt werden können. Das Offloadziel kann empfangene Daten vor, während oder nach dem Aufrufen der NdisTcpOffloadReceiveHandler-Funktion bestätigen.
Das Offload-Ziel stellt beim Aufrufen der NdisTcpOffloadReceiveHandler Funktion immer einen Status Wert von NDIS_STATUS_SUCCESS an. Dies gibt an, dass der Hoststapel den Besitz der NET_BUFFER_LIST Strukturen und zugeordneten Strukturen behalten kann, bis sie diese Strukturen an das Offloadziel zurückgibt.
- Wenn der Hoststapel NDIS_STATUS_SUCCESS zurückgibt und angibt, dass die Clientanwendung die Empfangsdaten akzeptiert und genutzt hat, gibt der Hoststapel die NET_BUFFER_LIST Strukturen an die MiniportTcpOffloadReceiveReturn Funktion des Offload-Ziels. Der Hoststapel legt die durch den BytesConsumed Parameter angegebene Variable auf die Anzahl der Bytes fest, die vom Offloadziel angegeben wurden.
- Wenn der Hoststapel NDIS_STATUS_NOT_ACCEPTED zurückgibt und angibt, dass die Clientanwendung die Empfangendaten abgelehnt hat, setzt das Offloadziel den Besitz der angegebenen NET_BUFFER_LIST Strukturen für die Rückgabe der NdisTcpOffloadReceiveHandler Funktion fort. Das Offloadziel muss die Empfangendaten in Erwartung puffern, dass die Clientanwendung Puffer für die Verbindung nach dem Empfang von Puffern sendet. Nachdem die Clientanwendung Puffer empfangen hat, kopiert das Offloadziel die gepufferten Empfangendaten in die geposteten Puffer und schließt die geposteten Puffer ab, indem die geposteten Puffer aufgerufen werden. NdisTcpOffloadReceiveComplete-Funktion. Weitere Informationen finden Sie unter Übermittlungsalgorithmus. Der Hoststapel legt die durch den BytesConsumed Parameter angegebene Variable auf Null fest.
- Wenn der Hoststapel NDIS_STATUS_OFFLOAD_DATA_PARTIALLY_ACCEPTED zurückgibt und angibt, dass die Clientanwendung eine Teilmenge der Empfangsdaten verbraucht hat, setzt das Offloadziel den Besitz der angegebenen NET_BUFFER_LIST Strukturen fort, wenn der NdisTcpOffloadReceiveHandler Funktion zurückgegeben wird. Der Hoststapel legt die variable fest, die vom BytesConsumed Parameter auf einen Wert ungleich Null angegeben wird, der die Datenmenge in Bytes angibt, die von der Clientanwendung verbraucht wurde. Das Offloadziel 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 Offloadziel in einem einzigen Aufruf des NdisTcpOffloadReceiveHandler Funktion bereitstellen soll. Weitere Informationen finden Sie unter Verwenden der angegebenen Empfangsanzeigegröße.
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform- | Universal |
Header- | ndischimney.h (include Ndischimney.h) |
IRQL- | DISPATCH_LEVEL |