Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
A figura a seguir ilustra uma operação de envio de um controlador de protocolo, que envolve um controlador de protocolo, NDIS e controladores subjacentes numa pilha de controladores.
Os drivers de protocolo chamam a função NdisSendNetBufferLists para enviar os dados de rede definidos numa lista de estruturas NET_BUFFER_LIST.
Um driver de protocolo deve definir o membro SourceHandle de cada estrutura NET_BUFFER_LIST para o mesmo valor que passa para o parâmetro NdisBindingHandle. O identificador de associação fornece as informações que o NDIS requer para devolver a estrutura NET_BUFFER_LIST ao driver de protocolo após o driver de miniporta subjacente chamar NdisMSendNetBufferListsComplete.
Antes de chamar NdisSendNetBufferLists, um driver de protocolo pode definir informações que acompanham a solicitação de envio com a macro NET_BUFFER_LIST_INFO. Os drivers subjacentes podem recuperar essas informações com a macro NET_BUFFER_LIST_INFO.
Assim que um driver de protocolo chama NdisSendNetBufferLists, ele renuncia à propriedade das estruturas NET_BUFFER_LIST e de todos os recursos associados. O NDIS chama a função ProtocolSendNetBufferListsComplete para retornar as estruturas e os dados ao driver de protocolo. O NDIS pode coletar as estruturas e os dados de várias solicitações de envio em uma única lista encadeada de estruturas NET_BUFFER_LIST antes de passar a lista para ProtocolSendNetBufferListsComplete.
Até que o NDIS chame ProtocolSendNetBufferListsComplete, o status atual de um envio iniciado por driver de protocolo é desconhecido. Um driver de protocolo libera temporariamente a propriedade de todos os recursos alocados para uma requisição de envio quando chama NdisSendNetBufferLists. Um driver de protocolo nunca deve tentar examinar as estruturas NET_BUFFER_LIST ou quaisquer dados associados antes que o NDIS retorne as estruturas para ProtocolSendNetBufferListsComplete.
ProtocolSendNetBufferListsComplete executa qualquer pós-processamento necessário para concluir uma operação de envio. Por exemplo, o driver de protocolo pode notificar os clientes, que solicitaram o driver de protocolo para enviar os dados de rede, que a operação de envio está concluída.
Quando o NDIS chama ProtocolSendNetBufferListsComplete , o driver de protocolo recupera a propriedade de todos os recursos associados às estruturas de NET_BUFFER_LIST especificadas pelo parâmetro NetBufferLists. ProtocolSendNetBufferListsComplete pode liberar esses recursos (por exemplo, chamando NdisFreeNetBuffer e NdisFreeNetBufferList) ou prepará-los para reutilização em uma chamada subsequente para NdisSendNetBufferLists.
Embora o NDIS submeta sempre os dados de rede fornecidos pelo protocolo ao driver de miniporta subjacente na ordem determinada pelo protocolo, tal como passado para NdisSendNetBufferLists, o driver subjacente pode concluir as solicitações de envio em ordem aleatória. Ou seja, cada driver de protocolo vinculado pode confiar no NDIS para enviar os dados de rede que o driver de protocolo passa para NdisSendNetBufferLists na ordem FIFO para o driver subjacente. No entanto, nenhum driver de protocolo pode confiar no driver subjacente para chamar NdisMSendNetBufferListsComplete na mesma ordem.