Compartir a través de


Administración del búfer del controlador de miniporte

Los controladores de miniport suelen llamar a NdisAllocateNetBufferListPool desde MiniportInitializeEx para crear un grupo de estructuras de NET_BUFFER_LIST . Los controladores de minipuerto usan estas estructuras para indicar los datos recibidos.

Normalmente, un controlador de minipuerto que asigna una estructura de NET_BUFFER_LIST asignará y pondrá en cola una estructura NET_BUFFER en esa estructura de NET_BUFFER_LIST. Es más eficaz asignar previamente NET_BUFFER estructuras al asignar un grupo de estructuras de NET_BUFFER_LIST que asignar estructuras de NET_BUFFER_LIST y estructuras de NET_BUFFER por separado.

Los controladores miniport pueden llamar a NdisAllocateNetBufferListPool y establecer el parámetro AllocateNetBuffer en TRUE para indicar que las estructuras de NET_BUFFER están preasignadas. En este caso, una estructura de NET_BUFFER se asigna previamente con cada estructura NET_BUFFER_LIST que asigna el controlador desde el grupo. Estos controladores deben llamar a NdisAllocateNetBufferAndNetBufferList para asignar estructuras de este grupo.

Normalmente, un controlador de minipuerto llama a NdisAllocateNetBufferAndNetBufferList desde MiniportInitializeEx para asignar tantos búferes como necesitará para las operaciones de recepción posteriores. En este caso, el controlador administra una lista interna de búferes libres.

La función MiniportReturnNetBufferLists puede preparar una estructura de NET_BUFFER_LIST devuelta para su reutilización en una indicación de recepción posterior. Aunque MiniportReturnNetBufferLists podría devolver las estructuras de NET_BUFFER_LIST a un grupo (por ejemplo, podría llamar a NdisFreeNetBufferList), puede ser más eficaz reutilizar las estructuras sin devolverlas al grupo.

Un controlador de minipuerto debe liberar todas las estructuras NET_BUFFER_LIST y los datos asociados cuando NDIS detiene el adaptador. Un controlador puede llamar a NdisFreeNetBufferList para liberar las estructuras y la función NdisFreeNetBufferListPool para liberar el grupo de NET_BUFFER_LIST.