Partilhar via


Liberando uma fila de VMs

Para liberar uma fila de recebimento, um driver sobreposto emite um OID_RECEIVE_FILTER_FREE_QUEUE definir solicitação de OID. O membro InformationBuffer da estrutura NDIS_OID_REQUEST contém um ponteiro para uma estrutura NDIS_RECEIVE_QUEUE_FREE_PARAMETERS com um identificador de fila do tipo NDIS_RECEIVE_QUEUE_ID.

OID_RECEIVE_FILTER_FREE_QUEUE libera uma fila de recebimento que um driver excessivamente alocado usando o OID do OID_RECEIVE_FILTER_ALLOCATE_QUEUE . Para obter mais informações sobre como alocar uma fila de recebimento, consulte Alocando uma fila de VM.

Nota A fila padrão, que tem um identificador de fila de NDIS_DEFAULT_RECEIVE_QUEUE_ID, é sempre alocada e não pode ser liberada.

Um driver de sobreposição deve liberar todos os filtros que ele define em uma fila antes de liberar a fila. Além disso, um driver sobreposto deve liberar todas as filas de recebimento alocadas em um adaptador de rede antes de chamar a função NdisCloseAdapterEx para fechar uma associação ao adaptador de rede. O NDIS libera todas as filas alocadas em um adaptador de rede antes de chamar a função MiniportHaltEx do driver de miniport.

Quando um driver de miniporta recebe uma solicitação para liberar uma fila, ele faz o seguinte:

  • Deve interromper imediatamente o AMD para recursos de memória compartilhada associados à fila.

  • Gera uma indicação status para indicar que o AMD foi interrompido.

  • Aguarda que todas as estruturas de NET_BUFFER_LIST pendentes, associadas à fila, sejam retornadas.

  • Libera a memória compartilhada associada e os recursos de hardware.

Quando um driver de miniporto recebe uma solicitação OID_RECEIVE_FILTER_FREE_QUEUE definida, a fila deve entrar no estado Parar DMA, ela interrompe o AMD em uma fila e o driver de miniporto deve indicar a alteração de status usando a indicação NDIS_STATUS_RECEIVE_QUEUE_STATE status. Para obter mais informações sobre estados de fila, consulte Estados e operações de fila.

Depois que o driver de miniporto emite o NDIS_STATUS_RECEIVE_QUEUE_STATE status indicação, ele deve aguardar a conclusão de todas as indicações de recebimento pendentes antes de liberar a memória compartilhada associada. Para obter mais informações sobre como liberar memória compartilhada, consulte Alocação de recursos de memória compartilhada.