Partilhar via


Liberando uma fila de VM

Para liberar uma fila de recebimento, um driver sobreposto emite uma solicitação para definir o OID OID_RECEIVE_FILTER_FREE_QUEUE. O InformationBuffer membro 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 superior alocou através do OID_RECEIVE_FILTER_ALLOCATE_QUEUE OID. 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 superior deve liberar todos os filtros que define numa fila antes de liberar a fila. Além disso, um driver de nível superior deve liberar todas as filas de receção que alocou em um adaptador de rede antes de chamar a função NdisCloseAdapterEx para fechar uma associação ao adaptador de rede. O NDIS liberta todas as filas alocadas num adaptador de rede antes de chamar a função MiniportHaltEx do miniport driver .

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

  • Deve parar imediatamente o DMA para recursos de memória compartilhada que estão associados à fila.

  • Gera uma indicação de status para indicar que o DMA está parado.

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

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

Quando um driver de miniporta recebe uma solicitação de definição de OID_RECEIVE_FILTER_FREE_QUEUE, a fila deve entrar no estado Stop DMA, parando o DMA na fila, e o driver de miniporta deve indicar a alteração de estado utilizando a indicação de status NDIS_STATUS_RECEIVE_QUEUE_STATE. Para obter mais informações sobre estados de fila, consulte Estados da fila e operações.

Depois que o driver de miniporta emite a indicação de status NDIS_STATUS_RECEIVE_QUEUE_STATE, ele deve aguardar todas as indicações de recebimento pendentes serem concluídas antes de poder liberar a memória compartilhada associada. Para obter mais informações sobre como liberar memória compartilhada, consulte Shared Memory Resource Allocation.