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.
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.
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 |