W_TCP_OFFLOAD_DISCONNECT_HANDLER função de retorno de chamada (ndischimney.h)

[O recurso de descarregamento de chaminé TCP foi preterido e não deve ser usado.]

A função MiniportTcpOffloadDisconnect fecha a metade de envio de uma conexão TCP descarregada. Além disso, se a desconexão a ser executada for uma desconexão normal, o NDIS poderá fornecer dados do aplicativo para a função MiniportTcpOffloadDisconnect que a função deve transmitir antes de enviar um segmento FIN.

Sintaxe

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
)
{...}

Parâmetros

[in] MiniportAdapterContext

O identificador para uma área de contexto alocada de destino de descarregamento na qual o destino de descarregamento mantém informações de estado sobre essa instância do adaptador. O destino de descarregamento forneceu esse identificador ao NDIS quando ele chamou NdisMSetMiniportAttributes de sua Função MiniportInitializeEx .

[in] MiniportOffloadContext

Um ponteiro para um local de memória que contém um valor PVOID. Esse valor PVOID faz referência ao contexto de descarregamento de miniporto que contém o objeto de estado para que a conexão TCP seja desconectada. O destino de descarregamento forneceu esse valor PVOID quando ele descarregou o objeto de estado de conexão TCP.

[in] NetBufferList

Um ponteiro para uma única estrutura de NET_BUFFER_LIST . Apenas uma estrutura NET_BUFFER está associada a essa estrutura NET_BUFFER_LIST.

[in] Flags

Como um dos seguintes valores, o tipo de desconexão que o destino de descarregamento deve executar:

TCP_DISCONNECT_ABORTIVE_CLOSE

O destino de descarregamento deve executar uma desconexão abortiva enviando um segmento RST.

TCP_DISCONNECT_GRACEFUL_CLOSE

O destino de descarregamento deve executar uma desconexão normal enviando um segmento FIN.

Retornar valor

A função MiniportTcpOffloadDisconnect sempre retorna NDIS_STATUS_PENDING. O destino de descarregamento conclui a solicitação de desconexão de forma assíncrona chamando NdisTcpOffloadDisconnectComplete.

Comentários

Dependendo da configuração Sinalizadores , a função MiniportTcpOffloadDisconnect executa uma desconexão abortiva ou uma desconexão normal na conexão TCP especificada.

Desconexão anulativa

Se Flags estiver definido como TCP_DISCONNECT_ABORTIVE_CLOSE, o destino de descarregamento executará uma desconexão abortiva enviando um segmento RST na conexão TCP especificada.

Nota Essa é a única instância em que um destino de descarregamento pode enviar um segmento RST.
 
Antes de chamar o Função NdisTcpOffloadDisconnectComplete para concluir a desconexão abortiva, o destino de descarregamento deve concluir todas as solicitações de envio pendentes na conexão com um valor status de NDIS_STATUS_REQUEST_ABORTED. O destino de descarregamento grava esse valor status no membro Status de cada estrutura NET_BUFFER_LIST na lista vinculada que ele passa para o Função NdisTcpOffloadSendComplete .

Não importa se o destino de descarregamento encerra as solicitações de envio pendentes antes ou depois de enviar o segmento RST.

Se houver indicações de recebimento pendentes ou indicações de evento na conexão, o destino de descarregamento não deverá aguardar a conclusão dessas indicações antes de enviar um segmento RST. O destino de descarregamento deve parar imediatamente o processamento de segmentos de recebimento na conexão e não reconhecer nenhum segmento de recebimento, incluindo os dados de recebimento indicados que não foram consumidos pelo aplicativo cliente.

Quando Flags = TCP_DISCONNECT_ABORTIVE_CLOSE, a estrutura NET_BUFFER associada à estrutura NET_BUFFER_LIST referenciada pelo ponteiro NetBufferList não contém dados. Ou seja, o membro DataLength da estrutura NET_BUFFER_DATA no NetBufferHeader da estrutura NET_BUFFER é zero.

Desconexão normal

Se Flags estiver definido como TCP_DISCONNECT_GRACEFUL_CLOSE, o destino de descarregamento executará uma desconexão normal enviando um segmento FIN na conexão TCP especificada.

Se não houver dados de usuário a serem enviados antes do segmento FIN, a estrutura NET_BUFFER associada à estrutura NET_BUFFER_LIST referenciada pelo ponteiro NetBufferList não conterá dados. Se houver dados do usuário a serem enviados, as MDLs (listas de descritores de memória) associadas à estrutura NET_BUFFER conterão os dados do usuário a serem enviados.

O destino de descarregamento não deve aguardar uma confirmação dos dados transmitidos do usuário antes de enviar um segmento FIN. O destino de descarregamento pode enviar um segmento FIN separado depois de transmitir os dados do usuário ou o destino de descarregamento pode definir o bit FIN no cabeçalho TCP do último segmento de dados de usuário que ele envia.

Da perspectiva do destino de descarregamento, o envio de um segmento FIN fecha a metade do envio da conexão. No entanto, o envio de um segmento FIN não fecha a metade de recebimento da conexão. O host remoto encerra a metade do recebimento da conexão enviando um dos seguintes para o destino de descarregamento:

  • Um segmento FIN, que solicita uma desconexão normal.
  • Um segmento RST, que solicita uma desconexão anulativa.
Depois de enviar um segmento FIN, o destino de descarregamento pode receber segmentos na conexão até que o host remoto inicie uma desconexão normal ou anulativa ou até que o host local encerre o descarregamento da conexão ou inicie uma desconexão abortiva.

Antes das chamadas de destino de descarregamento NdisTcpOffloadDisconnectComplete, ele deve concluir todas as solicitações de envio pendentes na conexão na mesma ordem em que foram entregues ao destino de descarregamento.

Resposta obrigatória a uma solicitação de desconexão

Um destino de descarregamento não deve falhar em uma solicitação de desconexão, a menos que a conexão TCP especificada esteja sendo carregada ou esteja sendo anulada (por exemplo, porque o host remoto enviou um segmento RST na conexão). Se um destino de descarregamento falhar em uma solicitação de desconexão, a pilha de host não reemissará a solicitação de desconexão mais tarde.

Liberando recursos de conexão

O destino de descarregamento não deve liberar recursos para a conexão na qual emitiu uma desconexão abortiva ou normal até que a pilha de host encerre o descarregamento da conexão.

Requisitos

Requisito Valor
Plataforma de Destino Windows
Cabeçalho ndischimney.h (inclua Ndischimney.h)
IRQL Qualquer nível

Confira também

MiniportInitializeEx

MiniportTerminateOffload

NET_BUFFER

NET_BUFFER_DATA

NET_BUFFER_LIST

NET_BUFFER_LIST_INFO

NdisAdvanceNetBufferDataStart

NdisMSetMiniportAttributes

NdisTcpOffloadDisconnectComplete

NdisTcpOffloadSendComplete