Compartilhar via


OID_RECEIVE_FILTER_FREE_QUEUE

Os drivers de protocolo NDIS emitem solicitações de conjunto de OID (identificador de objeto) de OID_RECEIVE_FILTER_FREE_QUEUE para liberar uma fila de recebimento.

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.

Comentários

A solicitação de conjunto de OID de OID_RECEIVE_FILTER_FREE_QUEUE é opcional para drivers de miniporto NDIS 6.20 e posteriores. É obrigatório para drivers de miniporte que dão suporte à interface da fila da máquina virtual.

Depois que um driver sobreposto emite o OID OID_RECEIVE_FILTER_ALLOCATE_QUEUE para alocar uma fila de recebimento, ele emite o OID_RECEIVE_FILTER_FREE_QUEUE OID para liberar a fila de recebimento.

Quando o NDIS solicita um driver de miniporto para liberar uma fila de recebimento de VMQ, ele segue estas etapas:

  1. O adaptador de rede interrompe a transferência de dados de DMA para receber buffers associados à fila de recebimento, após o qual a fila deve entrar no estado DMA Parado. O adaptador de rede provavelmente interrompeu a atividade de DMA quando recebeu a solicitação OID OID_RECEIVE_FILTER_CLEAR_FILTER para limpar o último filtro definido na fila de recebimento.

  2. O driver de miniporto gera uma indicação NDIS_STATUS_RECEIVE_QUEUE_STATE status com o membro QueueState da estrutura de NDIS_RECEIVE_QUEUE_STATE definida como NdisReceiveQueueOperationalStateDmaStopped para notificar o NDIS de que a transferência de DMA foi interrompida.

  3. O driver de miniporto aguarda todos os pacotes de recebimento indicados para que essa fila seja retornada ao driver de miniporto.

  4. O driver de miniporto libera toda a memória compartilhada alocada para os buffers de recebimento do adaptador de rede associados à fila chamando NdisFreeSharedMemory.

  5. O driver de miniporto conclui o OID_RECEIVE_FILTER_FREE_QUEUE solicitação de OID para liberar a fila de recebimento.

Os drivers de miniport chamam a função NdisFreeSharedMemory para liberar memória compartilhada para uma fila. Se o driver de miniporto alocar a memória compartilhada para uma fila não padrão, o driver liberará a memória compartilhada no contexto do OID_RECEIVE_FILTER_FREE_QUEUE OID enquanto ele estiver liberando a fila. Miniportar drivers liberam memória compartilhada que eles alocaram para a fila padrão no contexto da função MiniportHaltEx .

Um driver subjacente deve liberar todos os filtros que ele definiu 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.

Retornar códigos de status

A função MiniportOidRequest do driver de miniport retorna um dos seguintes valores para esta solicitação:

Termo Descrição

NDIS_STATUS_SUCCESS

O driver de miniporte concluiu a solicitação com êxito.

NDIS_STATUS_PENDING

O driver de miniporte concluirá a solicitação de forma assíncrona. Depois que o driver de miniporto tiver concluído todo o processamento, ele deverá ter êxito na solicitação chamando a função NdisMOidRequestComplete , passando NDIS_STATUS_SUCCESS para o parâmetro Status .

NDIS_STATUS_NOT_ACCEPTED

O driver de miniporte está sendo redefinido.

NDIS_STATUS_REQUEST_ABORTED

O driver de miniporto parou de processar a solicitação. Por exemplo, o NDIS chamou a função MiniportResetEx .

O NDIS retorna um dos seguintes códigos de status para esta solicitação:

Código de status Descrição

NDIS_STATUS_SUCCESS

A fila solicitada foi liberada com êxito.

NDIS_STATUS_PENDING

A solicitação está pendente de conclusão. O NDIS passará o código status final e os resultados para o manipulador de conclusão da solicitação OID para o chamador após a conclusão da solicitação.

NDIS_STATUS_INVALID_PARAMETER

O identificador de fila é inválido.

NDIS_STATUS_INVALID_LENGTH

O buffer de informações é muito curto. O NDIS define os DADOS. METHOD_INFORMATION. Membro BytesNeeded na estrutura NDIS_OID_REQUEST para o tamanho mínimo do buffer necessário.

Requisitos

Versão

Com suporte no NDIS 6.20 e posterior.

Cabeçalho

Ntddndis.h (inclua Ndis.h)

Confira também

MiniportHaltEx

NDIS_OID_REQUEST

NDIS_RECEIVE_QUEUE_FREE_PARAMETERS

NDIS_STATUS_RECEIVE_QUEUE_STATE

NdisCloseAdapterEx

NdisFreeSharedMemory

OID_RECEIVE_FILTER_ALLOCATE_QUEUE