Enviando dados de rede

A figura a seguir ilustra uma operação de envio básica, que envolve um driver de protocolo, NDIS e um driver de miniporta.

Diagrama mostrando uma operação básica de envio de NDIS com um driver de protocolo, NDIS e um driver de miniporta.

Os drivers de protocolo chamam a função NdisSendNetBufferLists para enviar NET_BUFFER_LIST estruturas em uma associação. O NDIS chama a função MiniportSendNetBufferLists do driver de miniport para encaminhar as estruturas de NET_BUFFER_LIST para um driver de miniporto subjacente.

Todas as operações de envio baseadas em NET_BUFFER são assíncronas. O driver de miniporto chama a função NdisMSendNetBufferListsComplete com um código de status apropriado quando é feito. O envio de cada estrutura NET_BUFFER_LIST pode ser concluído individualmente. O NDIS chama a função ProtocolSendNetBufferListsComplete do driver de protocolo sempre que o driver de miniporto chama NdisMSendNetBufferListsComplete.

Os drivers de protocolo podem recuperar a propriedade das estruturas NET_BUFFER_LIST e de todas as estruturas e dados associados assim que o NDIS chamar a função ProtocolSendNetBufferListsComplete do driver de protocolo.

O driver de miniporta ou o NDIS pode retornar as estruturas de NET_BUFFER_LIST em qualquer ordem. Os drivers de protocolo têm a garantia de que a lista de estruturas de NET_BUFFER anexadas a cada estrutura NET_BUFFER_LIST não foi modificada.

Qualquer driver NDIS pode separar as estruturas de NET_BUFFER em uma estrutura NET_BUFFER_LIST. Qualquer driver NDIS também pode separar os MDLs em uma estrutura NET_BUFFER. No entanto, o driver sempre deve retornar as estruturas de NET_BUFFER_LIST com as estruturas NET_BUFFER e MDLs na forma original. Por exemplo, um driver intermediário pode separar um NET_BUFFER_LIST em duas novas estruturas de NET_BUFFER_LIST e passar parte dos dados originais para o próximo driver. No entanto, quando o driver intermediário concluir o processamento do NET_BUFFER_LIST original, ele deverá retornar o NET_BUFFER_LIST completo com as estruturas de NET_BUFFER e MDLs originais.

Os drivers de protocolo definem o membro SourceHandle na estrutura NET_BUFFER_LIST para o NdisBindingHandle que o NDIS forneceu em uma chamada para a função NdisOpenAdapterEx . O NDIS usa o membro SourceHandle para retornar as estruturas de NET_BUFFER_LIST para o driver de protocolo que enviou as estruturas de NET_BUFFER_LIST.

Os drivers intermediários também definem o membro SourceHandle na estrutura NET_BUFFER_LIST para o valor NdisBindingHandle que o NDIS forneceu em uma chamada para NdisOpenAdapterEx. Se um driver intermediário encaminhar uma solicitação de envio, o driver deverá salvar o valor SourceHandle que o driver sobressalente forneceu antes de gravar no membro SourceHandle . Quando o NDIS retorna uma estrutura NET_BUFFER_LIST encaminhada para o driver intermediário, o driver intermediário deve restaurar o SourceHandle que salvou.