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

Retornar valor

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.

Comentários

Um destino de descarregamento deve transmitir dados na 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 que recebe 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 para sua função 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 membro MiniportReserved de uma estrutura NET_BUFFER_LIST para enviar solicitações de 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 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.

Observe, no entanto, 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 nessa 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 filas internas de dados de rede com outras funções 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á que o destino de descarregamento envie dados urgentes.

Requisitos

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

Confira também

MiniportInitializeEx

NET_BUFFER_LIST

NdisMSetMiniportAttributes

NdisTcpOffloadSendComplete