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