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 NET_BUFFER_LIST. Los controladores de miniporte usan estas estructuras para indicar los datos recibidos.

Normalmente, un controlador de miniporte que asigna una estructura de NET_BUFFER_LIST asigna y encola una estructura NET_BUFFER en esa estructura NET_BUFFER_LIST. Es más eficaz asignar previamente NET_BUFFER estructuras cuando se asigna un grupo de estructuras de NET_BUFFER_LIST que asignar estructuras de NET_BUFFER_LIST y estructuras de NET_BUFFER por separado.

Los controladores de 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 preasigna con cada estructura NET_BUFFER_LIST que el controlador asigna a partir del pool. Estos controladores deben llamar a NdisAllocateNetBufferAndNetBufferList para asignar estructuras de este grupo.

Normalmente, un controlador de miniport llama a NdisAllocateNetBufferAndNetBufferList desde MiniportInitializeEx para asignar tantos búferes como requerirá 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 miniporte 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.