NDIS_TCP_OFFLOAD_RECEIVE_INDICATE função de retorno de chamada (ndischimney.h)
[O recurso de descarregamento de chaminé TCP foi preterido e não deve ser usado.]
Um destino de descarregamento chama a função NdisTcpOffloadReceiveHandler para indicar que os dados de rede recebidos estão disponíveis para consumo por um aplicativo cliente.
Sintaxe
NDIS_TCP_OFFLOAD_RECEIVE_INDICATE NdisTcpOffloadReceiveIndicate;
NDIS_STATUS NdisTcpOffloadReceiveIndicate(
[in] IN NDIS_HANDLE NdisOffloadHandle,
[in] IN PNET_BUFFER_LIST NetBufferList,
[in] IN NDIS_STATUS Status,
[out] OUT PULONG BytesConsumed
)
{...}
Parâmetros
[in] NdisOffloadHandle
Um identificador que identifica a conexão TCP descarregada na qual a indicação está sendo feita. Quando a conexão foi descarregada, esse identificador foi fornecido no NdisOffloadHandle membro do NDIS_MINIPORT_OFFLOAD_BLOCK_LIST estrutura associada ao estado da conexão.
[in] NetBufferList
Um ponteiro para uma estrutura NET_BUFFER_LIST. Cada estrutura NET_BUFFER_LIST descreve uma lista de estruturas de NET_BUFFER. Cada estrutura NET_BUFFER na lista é mapeada para uma cadeia de listas de descritores de memória (MDLs). Os MDLs contêm os dados recebidos. Os MDLs são bloqueados para que permaneçam residentes, mas não são mapeados na memória do sistema.
A estrutura de NET_BUFFER_LIST especificada por NetBufferList deve ser uma estrutura autônoma e não pode ser a primeira estrutura em uma lista vinculada de estruturas NET_BUFFER_LIST. Os destinos de descarregamento podem contornar essa limitação encadeando quantas MDLs forem necessárias para o mesmo NET_BUFFER em uma indicação de recebimento de descarregamento.
[in] Status
O destino de descarregamento deve fornecer o seguinte valor de status:
NDIS_STATUS_SUCCESS
Isso indica que a pilha de host pode manter a propriedade das estruturas NET_BUFFER_LIST e das estruturas associadas até que ela retorne essas estruturas para o função MiniportTcpOffloadReceiveReturn do destino de descarregamento.
[out] BytesConsumed
Um ponteiro para uma variável do tipo ULONG que recebe o número de bytes que foram consumidos pelo aplicativo cliente.
Valor de retorno
A função NdisTcpOffloadReceiveHandler pode retornar um dos seguintes valores:
Código de retorno | Descrição |
---|---|
|
O aplicativo cliente consumiu todos os dados de recebimento indicados. |
|
O aplicativo cliente rejeitou todos os dados de recebimento indicados. |
|
O aplicativo cliente consumiu um subconjunto dos dados de recebimento indicados. A quantidade de dados, em bytes, que foi consumida pelo aplicativo cliente é retornada na variável especificada pelo parâmetro BytesConsumed. |
Observações
Os buffers de recebimento são postados no função MiniportTcpOffloadReceive do destino de descarregamento. Se as solicitações de recebimento prepostas (buffers fornecidos pelo aplicativo cliente) estiverem disponíveis para a conexão, o destino de descarregamento deverá transferir os dados de recebimento chamando o função de NdisTcpOffloadReceiveComplete. Para obter mais informações, consulte de algoritmo de entrega.
Todas as solicitações de recebimento devem ser concluídas pelo destino de descarregamento (mesmo que sejam solicitações de recebimento de bytes zero).
Depois que um destino de descarregamento tiver indicado dados de recebimento e que os dados foram recusados, o destino de descarregamento não poderá indicar esses dados novamente até que a pilha de host poste uma solicitação de recebimento:
-
Solicitações de recebimento normais
Se a pilha de host postar solicitações de recebimento normais, o destino de descarregamento deverá concluir essas solicitações antes de fazer qualquer indicação de recebimento. Para obter mais informações, consulte de algoritmo de entrega.
-
Solicitações de recebimento de bytes zero
A pilha de host pode postar uma solicitação de recebimento de bytes zero para habilitar as indicações de recebimento pelo destino de descarregamento. Uma solicitação de recebimento de bytes zero é aquela em que o valor do membro datalength (para obter mais informações, consulte NET_BUFFER estrutura) é zero. Uma solicitação de recebimento de bytes zero não consome dados em buffer.
Cada estrutura de NET_BUFFER_LIST alocada deve ter apenas uma estrutura NET_BUFFER associada a ela. O número dessas estruturas a serem alocadas cabe ao gravador de driver. Para obter mais informações sobre como alocar essas estruturas, consulte Miniport Driver Buffer Management.
Desde que não esteja fazendo uma confirmação atrasada, o destino de descarregamento deve reconhecer os dados recebidos assim que o destino de descarregamento tiver buffers internos nos quais pode depositar os dados. O destino de descarregamento pode reconhecer os dados recebidos antes, durante ou depois de chamar a função NdisTcpOffloadReceiveHandler.
O destino de descarregamento sempre fornece um valor de Status de NDIS_STATUS_SUCCESS ao chamar a função NdisTcpOffloadReceiveHandler. Isso indica que a pilha de host pode manter a propriedade das estruturas NET_BUFFER_LIST e das estruturas associadas até retornar essas estruturas ao destino de descarregamento.
- Se a pilha de host retornar NDIS_STATUS_SUCCESS, indicando que o aplicativo cliente aceitou e consumiu os dados de recebimento, a pilha de host retornará as estruturas de NET_BUFFER_LIST para o função MiniportTcpOffloadReceiveReturn do destino de descarregamento. A pilha de host definirá a variável especificada pelo parâmetro BytesConsumed para o número de bytes indicados pelo destino de descarregamento.
- Se a pilha de host retornar NDIS_STATUS_NOT_ACCEPTED, indicando que o aplicativo cliente rejeitou os dados de recebimento, o destino de descarregamento retomará a propriedade das estruturas de NET_BUFFER_LIST indicadas no retorno da função NdisTcpOffloadReceiveHandler. O destino de descarregamento deve armazenar em buffer os dados de recebimento em antecipação de que o aplicativo cliente postará buffers de recebimento na conexão. Depois que as postagens do aplicativo cliente recebem buffers, o destino de descarregamento copia os dados de recebimento em buffer para os buffers postados e conclui os buffers postados chamando o função de NdisTcpOffloadReceiveComplete. Para obter mais informações, consulte de algoritmo de entrega. A pilha de host definirá a variável especificada pelo parâmetro BytesConsumed como zero.
- Se a pilha de host retornar NDIS_STATUS_OFFLOAD_DATA_PARTIALLY_ACCEPTED, indicando que o aplicativo cliente consumiu um subconjunto dos dados de recebimento, o destino de descarregamento retomará a propriedade das estruturas de NET_BUFFER_LIST indicadas quando a função NdisTcpOffloadReceiveHandler retornar. A pilha de host definirá a variável especificada pelo parâmetro BytesConsumed para um valor diferente de zero que especifica a quantidade de dados, em bytes, que foi consumida pelo aplicativo cliente. O destino de descarregamento deve armazenar em buffer os dados de recebimento restantes, antecipando que o aplicativo cliente postará os buffers de recebimento na conexão.
No RcvIndicationSize membro da estrutura TCP_OFFLOAD_STATE_CACHED, a pilha de host pode especificar o número ideal de bytes de dados que o destino de descarregamento deve fornecer em uma única chamada para a função NdisTcpOffloadReceiveHandler. Para obter mais informações, consulte Usando o tamanho da indicação de recebimento especificado.
Requisitos
Requisito | Valor |
---|---|
da Plataforma de Destino | Universal |
cabeçalho | ndischimney.h (inclua Ndischimney.h) |
IRQL | DISPATCH_LEVEL |