Condividi tramite


W_TCP_OFFLOAD_DISCONNECT_HANDLER funzione di callback (ndischimney.h)

[La funzionalità di offload del camino TCP è deprecata e non deve essere usata.]

La funzione MiniportTcpOffloadDisconnect chiude la metà dell'invio di una connessione TCP offloaded. Inoltre, se la disconnessione da eseguire è una disconnessione normale, NDIS può fornire i dati dell'applicazione alla funzione MiniportTcpOffloadDisconnect che la funzione deve trasmettere prima di inviare un segmento FIN.

Sintassi

W_TCP_OFFLOAD_DISCONNECT_HANDLER WTcpOffloadDisconnectHandler;

NDIS_STATUS WTcpOffloadDisconnectHandler(
  [in] IN NDIS_HANDLE MiniportAdapterContext,
  [in] IN PVOID MiniportOffloadContext,
  [in] IN PNET_BUFFER_LIST NetBufferList,
  [in] IN ULONG Flags
)
{...}

Parametri

[in] MiniportAdapterContext

Handle in un'area di contesto allocata di destinazione offload in cui la destinazione di offload gestisce le informazioni sullo stato relative a questa istanza dell'adattatore. La destinazione di offload ha fornito questo handle a NDIS quando viene chiamato NdisMSetMiniportAttributes da Funzione MiniportInitializeEx .

[in] MiniportOffloadContext

Puntatore a una posizione di memoria contenente un valore PVOID. Questo valore PVOID fa riferimento al contesto di offload miniport che contiene l'oggetto stato per la connessione TCP da disconnettere. La destinazione di offload ha fornito questo valore PVOID quando ha scaricato l'oggetto stato della connessione TCP.

[in] NetBufferList

Puntatore a una singola struttura NET_BUFFER_LIST . A questa struttura di NET_BUFFER_LIST è associata una sola struttura NET_BUFFER .

[in] Flags

Come uno dei valori seguenti, il tipo di disconnessione che deve essere eseguita dalla destinazione di offload:

TCP_DISCONNECT_ABORTIVE_CLOSE

La destinazione di offload deve eseguire una disconnessione interrotta inviando un segmento RST.

TCP_DISCONNECT_GRACEFUL_CLOSE

La destinazione di offload deve eseguire una disconnessione normale inviando un segmento FIN.

Valore restituito

La funzione MiniportTcpOffloadDisconnect restituisce sempre NDIS_STATUS_PENDING. La destinazione di offload completa la richiesta di disconnessione in modo asincrono chiamando NdisTcpOffloadDisconnectComplete.

Commenti

A seconda dell'impostazione Flags , la funzione MiniportTcpOffloadDisconnect esegue una disconnessione interrotta o una disconnessione normale sulla connessione TCP specificata.

Disconnessione interrotta

Se Flags è impostato su TCP_DISCONNECT_ABORTIVE_CLOSE, la destinazione di offload esegue una disconnessione interrotta inviando un segmento RST sulla connessione TCP specificata.

Nota Si tratta dell'unica istanza in cui una destinazione di offload può inviare un segmento RST.
 
Prima di chiamare il La funzione NdisTcpOffloadDisconnectComplete per completare la disconnessione interrotta, la destinazione di offload deve completare tutte le richieste di invio in sospeso nella connessione con un valore di stato di NDIS_STATUS_REQUEST_ABORTED. La destinazione di offload scrive questo valore di stato nel membro Status di ogni struttura NET_BUFFER_LIST nell'elenco collegato che passa all'oggetto Funzione NdisTcpOffloadSendComplete .

Non importa se la destinazione di offload termina le richieste di invio in sospeso prima o dopo l'invio del segmento RST.

Se sulla connessione sono presenti indicazioni di ricezione in sospeso o indicazioni di evento, la destinazione di offload non deve attendere il completamento di queste indicazioni prima di inviare un segmento RST. La destinazione di offload deve interrompere immediatamente l'elaborazione dei segmenti di ricezione nella connessione e non confermare i segmenti di ricezione, inclusi i dati di ricezione indicati che non sono stati utilizzati dall'applicazione client.

Quando Flags = TCP_DISCONNECT_ABORTIVE_CLOSE, la struttura NET_BUFFER associata alla struttura NET_BUFFER_LIST a cui fa riferimento il puntatore NetBufferList non contiene dati. Ovvero il membro DataLength della struttura NET_BUFFER_DATA nella struttura NetBufferHeader della struttura NET_BUFFER è zero.

Disconnessione normale

Se Flags è impostato su TCP_DISCONNECT_GRACEFUL_CLOSE, la destinazione di offload esegue una disconnessione normale inviando un segmento FIN sulla connessione TCP specificata.

Se non sono presenti dati utente da inviare prima del segmento FIN, la struttura NET_BUFFER associata alla struttura NET_BUFFER_LIST a cui fa riferimento il puntatore NetBufferList non contiene dati. Se sono presenti dati utente da inviare, gli elenchi dei descrittori di memoria associati alla struttura NET_BUFFER contengono i dati utente da inviare.

La destinazione di offload non deve attendere un riconoscimento dei dati utente trasmessi prima di inviare un segmento FIN. La destinazione di offload può inviare un segmento FIN separato dopo la trasmissione dei dati utente oppure la destinazione di offload può impostare il bit FIN nell'intestazione TCP dell'ultimo segmento di dati utente inviati.

Dal punto di vista della destinazione di offload, l'invio di un segmento FIN chiude la metà dell'invio della connessione. L'invio di un segmento FIN, tuttavia, non chiude la metà della connessione. L'host remoto termina la metà della connessione inviando una delle operazioni seguenti alla destinazione di offload:

  • Segmento FIN, che richiede una disconnessione normale.
  • Segmento RST, che richiede una disconnessione interrotta.
Dopo l'invio di un segmento FIN, la destinazione di offload può ricevere segmenti sulla connessione fino a quando l'host remoto non avvia una disconnessione normale o interrotta o fino a quando l'host locale termina l'offload della connessione o avvia una disconnessione interrotta.

Prima delle chiamate di destinazione di offload NdisTcpOffloadDisconnectComplete, deve completare tutte le richieste di invio in sospeso sulla connessione nello stesso ordine in cui sono state recapitate alla destinazione di offload.

Risposta obbligatoria a una richiesta di disconnessione

Una destinazione di offload non deve avere esito negativo in una richiesta di disconnessione a meno che la connessione TCP specificata non venga caricata o interrotta, ad esempio perché l'host remoto ha inviato un segmento RST sulla connessione. Se una destinazione di offload non riesce una richiesta di disconnessione, lo stack host non eseguirà nuovamente la richiesta di disconnessione in un secondo momento.

Liberare le risorse di connessione

La destinazione di offload non deve liberare risorse per la connessione in cui è stata generata una disconnessione interrotta o normale fino a quando lo stack host non termina l'offload della connessione.

Requisiti

Requisito Valore
Piattaforma di destinazione Windows
Intestazione ndischimney.h (include Ndischimney.h)
IRQL Qualsiasi livello

Vedi anche

MiniportInitializeEx

MiniportTerminateOffload

NET_BUFFER

NET_BUFFER_DATA

NET_BUFFER_LIST

NET_BUFFER_LIST_INFO

NdisAdvanceNetBufferDataStart

NdisMSetMiniportAttributes

NdisTcpOffloadDisconnectComplete

NdisTcpOffloadSendComplete