Partilhar via


OID_RECEIVE_FILTER_FREE_QUEUE

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

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.

Comentários

A solicitação de conjunto OID de OID_RECEIVE_FILTER_FREE_QUEUE é opcional para drivers de miniporta NDIS 6.20 e posteriores. É obrigatório para drivers de miniporta que suportam a interface de fila da máquina virtual.

Depois que um driver sobreposto emite o OID_RECEIVE_FILTER_ALLOCATE_QUEUE OID 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 miniporta para liberar uma fila de recebimento VMQ, ele segue estas etapas:

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

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

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

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

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

Os drivers de miniporta chamam a funçãoNdisFreeSharedMemory para liberar memória compartilhada para uma fila. Se o driver de miniporta alocou a memória compartilhada para uma fila não padrão, o driver libera a memória compartilhada no contexto do OID_RECEIVE_FILTER_FREE_QUEUE OID enquanto está liberando a fila. Os drivers de miniporta liberam memória compartilhada alocada para a fila padrão no contexto da funçãoMiniportHaltEx.

Um driver sobreposto deve liberar todos os filtros que definiu em uma fila antes de liberar a fila. Além disso, um driver sobreposto deve liberar todas as filas de recebimento que alocou em um adaptador de rede antes de chamar a funçãoNdisCloseAdapterEx para fechar uma ligação ao adaptador de rede. O NDIS libera todas as filas alocadas em um adaptador de rede antes de chamar a função deMiniportHaltEx do driver de miniporta.

Códigos de status de retorno

A funçãoMiniportOidRequest do driver de miniportaretorna um dos seguintes valores para essa solicitação:

Vigência Descrição

NDIS_STATUS_SUCCESS

O driver da miniporta concluiu a solicitação com êxito.

NDIS_STATUS_PENDING

O driver de miniporta concluirá a solicitação de forma assíncrona. Depois que o driver de miniporta tiver concluído todo o processamento, ele deverá executar a solicitação chamando a função NdisMOidRequestComplete e passando NDIS_STATUS_SUCCESS para o parâmetro Status .

NDIS_STATUS_NOT_ACCEPTED

O driver da miniporta está sendo redefinido.

NDIS_STATUS_REQUEST_ABORTED

O driver da miniporta parou de processar a solicitação. Por exemplo, o NDIS chamou a funçãoMiniportResetEx.

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

Código de status Descrição

NDIS_STATUS_SUCCESS

A fila solicitada foi liberada com êxito.

NDIS_STATUS_PENDING

O pedido está pendente de conclusão. O NDIS passará o código de status final e os resultados para o manipulador de conclusão de 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 a DATA.METHOD_INFORMATION.BytesNeeded membro na estrutura NDIS_OID_REQUEST para o tamanho mínimo de buffer necessário.

Requerimentos

Versão

Suportado no NDIS 6.20 e posterior.

Cabeçalho

Ntddndis.h (inclui Ndis.h)

Ver também

MiniportHaltEx

NDIS_OID_REQUEST

NDIS_RECEIVE_QUEUE_FREE_PARAMETERS

NDIS_STATUS_RECEIVE_QUEUE_STATE

NdisCloseAdapterEx

NdisFreeSharedMemory

OID_RECEIVE_FILTER_ALLOCATE_QUEUE