Compartilhar via


Gerenciamento de Dados de Rede de Driver Intermediário

Um driver intermediário recebe NET_BUFFER_LIST estruturas com um ou mais MDLs associados de um driver de nível superior para enviar pela rede. O driver intermediário poderá passar os dados para o driver subjacente chamando NdisSendNetBufferLists se o driver tiver uma borda inferior sem conexão ou chamando NdisCoSendNetBufferLists se o driver tiver uma borda inferior orientada a conexão. Como alternativa, o driver intermediário pode executar algumas ações para modificar o conteúdo dos buffers encadeados ou a ordenação ou o tempo dos dados de entrada em relação a outras transmissões.

Dependendo da finalidade do driver intermediário, esse driver pode reempacotar buffers encadeados a estruturas de NET_BUFFER_LIST de entrada. Por exemplo, um driver intermediário reempacota os dados de rede nas seguintes circunstâncias:

  • O driver intermediário recebe um buffer de dados maior de um driver de protocolo de sobreposição do que pode ser enviado em um único buffer pela mídia subjacente. Consequentemente, o driver intermediário deve dividir os dados de entrada em buffers menores.

  • O driver intermediário altera o comprimento ou o conteúdo dos dados de rede compactando ou criptografando os dados antes de encaminhar cada envio para o driver subjacente.

Para obter informações sobre como criar o gerenciamento de dados de rede, consulte Gerenciamento de buffer de driver de protocolo.

O NDIS fornece interfaces para clonar e fragmentar estruturas de NET_BUFFER_LIST . Para obter mais informações sobre clonagem e fragmentação de estruturas, consulte Estruturas de NET_BUFFER_LIST derivadas.

NET_BUFFER_LIST estruturas podem ser alocadas conforme necessário, no momento da inicialização do driver ou na função ProtocolBindAdapterEx . Um desenvolvedor de driver intermediário pode, se necessário, e por motivos de desempenho, alocar várias estruturas em tempo de inicialização para que ProtocolReceiveNetBufferLists tenha recursos pré-alocados para copiar dados de entrada para indicar para um driver de nível superior e para que MiniportSendNetBufferLists tenha disponível estruturas de NET_BUFFER_LIST (e possivelmente buffers) para passar dados de rede de entrada para o próximo driver inferior.

Se um driver intermediário copiar dados de envio ou dados recebidos para um novo buffer ou buffers e o comprimento dos dados reais no último buffer for menor que o comprimento alocado do buffer, o driver intermediário poderá chamar NdisAdjustMdlLength para ajustar o buffer ao comprimento real dos dados.

Um driver intermediário com uma borda inferior sem conexão sempre recebe dados de entrada de um adaptador de miniporto subjacente de sua função ProtocolReceiveNetBufferLists .

Um driver intermediário com uma borda inferior orientada a conexão sempre recebe dados de entrada de um adaptador de miniporto subjacente de sua função ProtocolCoReceiveNetBufferLists .