Compartir a través de


Operaciones de retiro

Las operaciones de retirada pueden aumentar 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 de NET_BUFFER_LIST .

NDIS proporciona las siguientes funciones de retiro:

NdisRetreatNetBufferDataStart

NdisRetreatNetBufferListDataStart

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

Para obtener el nuevo DataLength, NDIS agrega el dataOffsetDelta especificado por el controlador a la dataLength actual. Si el tamaño del espacio de datos sin usar es mayor que DataOffsetDelta, una operación de retirada reduce dataOffset . En este caso, el nuevo DataOffset es el dataOffset actual menos DataOffsetDelta .

Si DataOffsetDelta es mayor que DataOffset, una operación de retirada asigna un nuevo espacio de datos. En este caso, NDIS ajusta dataOffset en consecuencia.

En el caso de las operaciones de envío, NDIS asigna memoria si no hay suficiente espacio de datos sin usar para satisfacer una solicitud de retirada. Si no se requiere ninguna asignación de memoria, NDIS simplemente ajusta DataOffset y DataLength . 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 devolución de recepción, NDIS simplemente ajusta dataOffset y DataLength en consecuencia. La operación de retirada invierte la operación de avance que tuvo lugar durante el procesamiento de recepción. Después de la operación de retirada, el espacio de datos usado contiene los datos de encabezado que los controladores subyacentes usan durante el procesamiento de recepción.