Compartir a través de


Operaciones avanzadas

Las operaciones avanzadas reducen el tamaño del espacio de datos usado en una estructura de NET_BUFFER o en todas las estructuras de NET_BUFFER de una estructura NET_BUFFER_LIST .

Los controladores usan las siguientes funciones avanzadas:

NdisAdvanceNetBufferDataStart

NdisAdvanceNetBufferListDataStart

A veces, las operaciones avanzadas pueden liberar MDL asociadas a una estructura de NET_BUFFER. Para proporcionar el mecanismo para liberar MDL, un controlador puede proporcionar un punto de entrada opcional para una función NetFreeMdl . Si el punto de entrada es NULL, NDIS usa un método predeterminado para asignar MDL. Las MDL solo deben liberarse dentro de un NetFreeMdl mediante ese mecanismo mutuo que se usó para asignar la MDL en la función NetAllocateMdl .

Para obtener el nuevo DataLength, NDIS resta el dataOffsetDelta especificado por el controlador de la clase DataLength actual. Si una operación de retirada anterior asignó un nuevo espacio de datos, la operación de avance puede liberar dicha memoria asignada previamente. Si una operación de avance no libera memoria, NDIS simplemente agrega DataOffsetDelta al dataOffset actual para obtener el nuevo DataOffset . Si la operación de avance libera memoria, NDIS ajusta dataOffset en consecuencia.

Para el caso completo de envío, las operaciones avanzadas pueden liberar memoria asignada en las operaciones de retirada anteriores. Para mejorar el rendimiento, los controladores deben asignar suficiente tamaño total de datos antes de enviarlos para dar cabida a las operaciones de retirada de todos los controladores subyacentes.

Para el caso de indicación de recepción, las operaciones avanzadas simplemente ajustan DataOffset y DataLength en consecuencia. Después de la operación de avance, los encabezados de las capas inferiores permanecen en el espacio de datos sin usar.