Partilhar via


Envio de estruturas NET_BUFFER de controladores CoNDIS

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

Diagrama ilustrando uma operação básica de envio CoNDIS envolvendo um driver de protocolo, NDIS e um driver de miniporta.

Como mostra a figura anterior, os drivers de protocolo chamam a função NdisCoSendNetBufferLists para enviar estruturas NET_BUFFER_LIST em uma conexão virtual (VC). Em seguida, o NDIS chama a função MiniportCoSendNetBufferLists do driver de miniporta para encaminhar as estruturas NET_BUFFER_LIST para um driver de miniporta subjacente.

Todas as operações de envio baseadas em NET_BUFFER são assíncronas. Portanto, o driver de miniporta sempre chama a função NdisMCoSendNetBufferListsComplete e fornece um código de status apropriado quando termina o envio dos dados. O driver de miniporta pode concluir a operação de envio para cada estrutura NET_BUFFER_LIST de forma independente de outras estruturas NET_BUFFER_LIST. O NDIS chama a função ProtocolCoSendNetBufferListsComplete do driver de protocolo sempre que o driver de miniporta chama NdisMCoSendNetBufferListsComplete.

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

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

Os drivers de protocolos definem o membro SourceHandle na estrutura NET_BUFFER_LIST para o mesmo valor que o parâmetro NdisVcHandle de NdisCoSendNetBufferLists. O NDIS usa o membro SourceHandle para retornar as estruturas NET_BUFFER_LIST para o driver de protocolo que enviou as estruturas NET_BUFFER_LIST.

Os drivers intermediários também definem o membro SourceHandle na estrutura NET_BUFFER_LIST para o valor NdisVcHandle. Se um controlador intermediário encaminhar um pedido de envio, o controlador deverá salvar o valor SourceHandle que o controlador superior forneceu antes de gravar no membro SourceHandle. Quando o NDIS retorna uma estrutura de NET_BUFFER_LIST encaminhada para o driver intermediário, o driver intermediário deve restaurar o SourceHandle que ele salvou.

Os drivers de protocolo podem cancelar solicitações de envio usando os mesmos mecanismos dos drivers sem conexão. Para obter mais informações sobre como cancelar solicitações de envio, consulte Cancelando uma operação de envio.