Partilhar via


Receber dados em drivers de protocolo

A figura a seguir ilustra uma operação de receção básica, envolvendo um driver de protocolo, o NDIS e drivers subjacentes numa pilha de drivers.

Diagrama ilustrando uma operação de receção básica envolvendo um controlador de protocolo, NDIS, e controladores subjacentes numa pilha de controladores.

O NDIS chama a função ProtocolReceiveNetBufferLists de um driver de protocolo para processar indicações de recebimento que vêm de drivers subjacentes. O NDIS chama ProtocolReceiveNetBufferLists depois que um driver subjacente chama uma função de indicação de recebimento (por exemplo, NdisMIndicateReceiveNetBufferLists) para indicar dados de rede recebidos ou dados de loopback.

Se o sinalizador de NDIS_RECEIVE_FLAGS_RESOURCES no parâmetro ReceiveFlags da função ProtocolReceiveNetBufferLists não estiver definido, o driver de protocolo manterá a responsabilidade pelas estruturas NET_BUFFER_LIST até chamar a função NdisReturnNetBufferLists. Se o NDIS configurar o sinalizador NDIS_RECEIVE_FLAGS_RESOURCES, o driver de protocolo não poderá reter a estrutura NET_BUFFER_LIST e os recursos associados. O sinalizador set NDIS_RECEIVE_FLAGS_RESOURCES indica que um driver subjacente está com poucos recursos de recebimento. Nesse caso, a função ProtocolReceiveNetBufferLists deve copiar os dados recebidos para o armazenamento alocado pelo protocolo e retornar o mais rápido possível.

Observação O NDIS pode alterar os sinalizadores que um driver subjacente indica. Por exemplo, se um driver de miniport definir o sinalizador NDIS_RECEIVE_FLAGS_RESOURCES no parâmetro ReceiveFlags da função NdisMIndicateReceiveNetBufferLists, o NDIS poderá copiar os dados indicados e passar a cópia para ProtocolReceiveNetBufferLists com o sinalizador NDIS_RECEIVE_FLAGS_RESOURCES desativado.

Observação Se o sinalizador NDIS_RECEIVE_FLAGS_RESOURCES estiver ativo, o driver de protocolo deve reter o conjunto original de estruturas NET_BUFFER_LIST na lista encadeada. Por exemplo, quando esse sinalizador é definido, o driver pode processar as estruturas e indicá-las na pilha, uma de cada vez, mas antes que a função retorne, ela deve restaurar a lista vinculada original.

Os drivers de protocolo chamam a função NdisReturnNetBufferLists para liberar a propriedade de uma lista de estruturas NET_BUFFER_LIST , juntamente com as estruturas NET_BUFFER associadas e os dados de rede.