Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
A latência é inerente a algumas operações de rede. Devido a essa latência, muitas das funções de borda superior fornecidas por um driver de miniporto e as funções de borda inferior de um driver de protocolo são projetadas para dar suporte à operação assíncrona. Em vez de desperdiçar ciclos de CPU aguardando em um loop que uma tarefa demorada seja concluída ou que um evento de hardware sinalize, os drivers de rede dependem da capacidade de lidar com a maioria das operações de forma assíncrona.
Há suporte para E/S de rede assíncrona usando uma função de conclusão . O exemplo a seguir ilustra o uso de uma função de conclusão para uma operação de envio de rede, mas esse mesmo mecanismo existe para muitas outras operações executadas por um protocolo ou driver de miniporto.
Quando um driver de protocolo chama NDIS para enviar um pacote, resultando em uma chamada para a função MiniportSendNetBufferLists do driver de miniport, o driver de miniport pode tentar concluir essa solicitação imediatamente e retornar um valor de status apropriado como resultado. Para a operação síncrona, as respostas possíveis são NDIS_STATUS_SUCCESS para a conclusão bem-sucedida do envio, NDIS_STATUS_RESOURCES e NDIS_STATUS_FAILURE indicando uma falha de algum tipo.
Mas uma operação de envio pode levar algum tempo para ser concluída enquanto o driver de miniporto (ou NDIS) enfileira o pacote e aguarda que a NIC indique o resultado da operação de envio. A função MiniportSendNetBufferLists do driver de miniport pode lidar com essa operação de forma assíncrona retornando um valor de status de NDIS_STATUS_PENDING. Quando o driver de miniporto conclui a operação de envio, ele chama a função de conclusão, NdisMSendNetBufferListsComplete, passando um ponteiro para o descritor de pacote que foi enviado. Essas informações são passadas para o driver de protocolo, sinalizando a conclusão.
A maioria das operações de driver que podem exigir um tempo estendido para serem concluídas oferece suporte a operação assíncrona com uma função de conclusão semelhante. Essas funções têm nomes do formulário NdisMXxxComplete.
As funções de conclusão também são fornecidas para:
Definir e consultar a configuração.
Reiniciar hardware.
Indique o status.
Indique os dados recebidos.
Transferir dados recebidos.