Filtrar o gerenciamento de buffer de driver
Os drivers de filtro criam buffers para copiar dados de rede obtidos de outros drivers ou para iniciar operações de envio ou recebimento.
Se um driver de filtro não criar buffers, o driver não gerenciará pools de buffers. Esse driver simplesmente passa os buffers que recebe de outros drivers.
Um driver de filtro que cria buffers para dar suporte a operações de envio ou recebimento deve gerenciar NET_BUFFER_LIST pools de estrutura e pools de estrutura NET_BUFFER .
Para criar esses pools, os drivers chamam as seguintes funções:
Os drivers de filtro podem usar as seguintes funções para alocar estruturas dos pools:
NdisAllocateNetBufferAndNetBufferList
Chamar NdisAllocateNetBufferAndNetBufferList é mais eficiente do que chamar NdisAllocateNetBufferList seguido por NdisAllocateNetBuffer. No entanto, NdisAllocateNetBufferAndNetBufferList cria apenas uma estrutura NET_BUFFER na estrutura NET_BUFFER_LIST. Para usar NdisAllocateNetBufferAndNetBufferList, o driver deve definir o parâmetro AllocateNetBuffer como TRUE quando chamar NdisAllocateNetBufferListPool.
Os drivers de filtro que originam solicitações de envio devem determinar os requisitos de contexto e de espaço de preenchimento dos drivers subjacentes. Os drivers de filtro usam atributos de reinicialização para determinar os requisitos de preenchimento dos drivers subjacentes. Um driver de filtro deve determinar os requisitos de backfill e de contexto no estado De reinicialização . O driver deve alocar um backfill e espaço de contexto suficientes para toda a pilha. Se necessário, um driver de filtro pode liberar os pools e realocá-los no estado De reinicialização .
Os drivers de filtro usam as seguintes funções para liberar os pools:
Os drivers de filtro usam as seguintes funções para liberar as estruturas alocadas dos pools:
Os drivers devem liberar NET_BUFFER estruturas alocadas com NdisAllocateNetBuffer antes de liberar a estrutura de NET_BUFFER_LIST associada. NET_BUFFER estruturas alocadas com NdisAllocateNetBufferAndNetBufferList são liberadas quando o driver chama NdisFreeNetBufferList para a estrutura de NET_BUFFER_LIST associada.