Compartilhar via


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

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

O NDIS chama a função MiniportTcpOffloadSend para transmitir dados em uma conexão TCP descarregada.

Sintaxe

W_TCP_OFFLOAD_SEND_HANDLER WTcpOffloadSendHandler;

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

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 para o 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 a conexão TCP na qual os dados devem ser transmitidos. 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 estrutura NET_BUFFER_LIST. Essa estrutura pode ser uma estrutura autônoma ou a primeira estrutura em uma lista vinculada de estruturas de NET_BUFFER_LIST. Cada estrutura NET_BUFFER_LIST na lista descreve uma lista de estruturas de NET_BUFFER. Cada estrutura NET_BUFFER na lista é mapeada para uma cadeia de MDLs (listas de descritores de memória). Os MDLs contêm os dados a serem transmitidos. Os NET_BUFFER_LIST e as estruturas associadas são bloqueados para que permaneçam residentes na memória física. No entanto, eles não são mapeados na memória do sistema.

Valor de retorno

NDIS_STATUS_PENDING é o único valor retornado permitido. Um destino de descarregamento sempre conclui uma solicitação de envio de forma assíncrona chamando NdisTcpOffloadSendComplete.

Observações

Um destino de descarregamento deve transmitir dados na primeira ordem FIFO (primeiro a entrar e sair). A ordem da lista vinculada de estruturas de NET_BUFFER_LIST que o NDIS passa em NetBufferList representa a ordem na qual o destino de descarregamento deve transmitir os dados de rede. Além disso, um destino de descarregamento deve enviar os dados recebidos de várias chamadas para o MiniportTcpOffloadSend na ordem em que os dados foram postados.

Um destino de descarregamento deve aceitar todas as solicitações de envio feitas à sua função de MiniportTcpOffloadSend. Se um destino de descarregamento não puder concluir uma solicitação de envio imediatamente, o destino de descarregamento deverá enfileirar a solicitação até que ela possa concluí-la. O destino de descarregamento deve usar o MiniportReserved membro de uma estrutura de NET_BUFFER_LIST para enviar solicitações na fila. Enquanto uma solicitação de envio está pendente, o destino de descarregamento mantém a propriedade das estruturas de NET_BUFFER_LIST e todos os recursos associados às estruturas de NET_BUFFER_LIST.

A pilha de host serializa as solicitações de envio por conexão. A pilha não emitirá uma solicitação de envio em uma conexão enquanto outra solicitação de envio nessa conexão estiver em andamento. Isso garante que o destino de descarregamento sempre receba as solicitações de envio na ordem correta.

No entanto, observe que a pilha de host pode chamar a função MiniportTcpOffloadSend em uma conexão antes que o destino de descarregamento tenha concluído uma ou mais chamadas anteriores para a função MiniportTcpOffloadSend na mesma conexão. Observe também que a pilha de host pode chamar a função MiniportTcpOffloadSend de um destino de descarregamento em uma conexão enquanto uma ou mais chamadas para a função MiniportTcpOffloadSend estão em andamento em outra conexão.

A função MiniportTcpOffloadSend deve sincronizar o acesso às suas filas internas de dados de rede com outras funções de miniportXxx do destino de descarregamento que acessam as mesmas filas. Um destino de descarregamento pode usar bloqueios de rotação para sincronizar o acesso às filas.

O destino de descarregamento deve (mas não é necessário) definir o bit PSH em cada limite NET_BUFFER_LIST. A maneira recomendada de fazer isso é definir o bit PSH no último segmento criado a partir dos dados associados a cada estrutura de NET_BUFFER_LIST (ou seja, os dados descritos pelas estruturas de NET_BUFFER associadas à estrutura NET_BUFFER_LIST). Como alternativa, o destino de descarregamento pode definir o bit PSH no último segmento restante na fila de envio antes que a fila de envio seja esvaziada.

A pilha de host não solicitará o destino de descarregamento para enviar dados urgentes.

Requisitos

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

Consulte também

MiniportInitializeEx

NET_BUFFER_LIST

NdisMSetMiniportAttributes

NdisTcpOffloadSendComplete