Partilhar via


Enviando estruturas de NET_BUFFER de drivers coNDIS

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

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

Como mostra a figura anterior, os drivers de protocolo chamam a função NdisCoSendNetBufferLists para enviar estruturas de NET_BUFFER_LIST em uma VC (conexão virtual). Em seguida, o NDIS chama a função MiniportCoSendNetBufferLists 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. Portanto, o driver de miniporto sempre chama a função NdisMCoSendNetBufferListsComplete e fornece um código de status apropriado quando termina de enviar os dados. O driver de miniporta pode concluir a operação de envio para cada estrutura NET_BUFFER_LIST independente de outras estruturas NET_BUFFER_LIST. O NDIS chama a função ProtocolCoSendNetBufferListsComplete do driver de protocolo sempre que o driver de miniporto chama NdisMCoSendNetBufferListsComplete.

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

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

Os drivers de protocolo definem o membro SourceHandle na estrutura NET_BUFFER_LIST com o mesmo valor que o parâmetro NdisVcHandle de NdisCoSendNetBufferLists. 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 NdisVcHandle . 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.

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