Partilhar via


Gestão de Dados de Rede de Controlador Intermediário

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

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

  • O driver intermediário recebe um buffer de dados maior de um driver de protocolo sobreposto do que aquele que pode ser enviado num único buffer sobre o meio 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 gerenciamento de dados de rede, consulte Protocol Driver Buffer Management.

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

As estruturas NET_BUFFER_LIST 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 no momento da inicialização para que ProtocolReceiveNetBufferLists tenha recursos pré-alocados para copiar dados de entrada para indicar a um driver de nível superior e para que MiniportSendNetBufferLists tenha estruturas de NET_BUFFER_LIST disponíveis (e possivelmente buffers) para passar dados de rede de envio de entrada para o próximo driver inferior.

Se um driver intermediário copia dados enviados ou dados recebidos para um novo buffer ou buffers, e o comprimento dos dados reais no último buffer é menor do que o comprimento alocado do buffer, o driver intermediário pode chamar NdisAdjustMdlLength para ajustar o buffer para o comprimento real dos dados.

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

Um driver intermediário com uma extremidade inferior orientada para a conexão sempre recebe dados de entrada de um adaptador de miniporta subjacente através da sua função ProtocolCoReceiveNetBufferLists.