Compartir vía


Administración de datos de red de controladores intermedios

Un controlador intermedio recibe NET_BUFFER_LIST estructuras con uno o varios MDL asociados de un controlador de nivel superior para enviar a través de la red. El controlador intermedio puede pasar los datos al controlador subyacente llamando a NdisSendNetBufferLists si el controlador tiene un borde inferior sin conexión o llamando a NdisCoSendNetBufferLists si el controlador tiene un borde inferior orientado a la conexión. Como alternativa, el controlador intermedio puede realizar algunas acciones para modificar el contenido de los búferes encadenados o el orden o el tiempo de los datos entrantes en relación con otras transmisiones.

Según el propósito del controlador intermedio, este controlador puede reempaquetar búferes encadenados a estructuras de NET_BUFFER_LIST entrantes. Por ejemplo, un controlador intermedio vuelve a empaquetar los datos de red en las siguientes circunstancias:

  • El controlador intermedio recibe un búfer de datos mayor de un controlador de protocolo excesivamente que se puede enviar en un único búfer a través del medio subyacente. Por lo tanto, el controlador intermedio debe dividir los datos entrantes en búferes más pequeños.

  • El controlador intermedio cambia la longitud o el contenido de los datos de red comprimiendo o cifrando los datos antes de reenviar cada envío al controlador subyacente.

Para obtener información sobre cómo crear la administración de datos de red, consulte Administración del búfer de controladores de protocolo.

NDIS proporciona interfaces para clonar y fragmentar estructuras NET_BUFFER_LIST . Para obtener más información sobre la clonación y las estructuras de fragmentación, vea Estructuras de NET_BUFFER_LIST derivadas.

NET_BUFFER_LIST estructuras se pueden asignar según sea necesario, en tiempo de inicialización del controlador o en la función ProtocolBindAdapterEx . Un desarrollador de controladores intermedios puede, si es necesario y por motivos de rendimiento, asignar una serie de estructuras en el momento de la inicialización para que ProtocolReceiveNetBufferLists tenga recursos preasignados en los que copiar los datos entrantes para indicar a un controlador de nivel superior, y de modo que MiniportSendNetBufferLists tenga disponibles estructuras NET_BUFFER_LIST (y posiblemente búferes) para pasar los datos de red entrantes al siguiente controlador inferior.

Si un controlador intermedio copia los datos enviados o recibidos a un nuevo búfer o búfer, y la longitud de los datos reales del último búfer es menor que la longitud asignada del búfer, el controlador intermedio puede llamar a NdisAdjustMdlLength para ajustar el búfer a la longitud real de los datos.

Un controlador intermedio con un borde inferior sin conexión siempre recibe datos entrantes de un adaptador de miniport subyacente de su función ProtocolReceiveNetBufferLists .

Un controlador intermedio con un borde inferior orientado a la conexión siempre recibe datos entrantes de un adaptador de miniport subyacente de su función ProtocolCoReceiveNetBufferLists .