Função WdfIoQueueDrain (wdfio.h)
[Aplica-se a KMDF e UMDF]
O método WdfIoQueueDrain faz com que a estrutura pare de enfileirar solicitações de E/S para uma fila de E/S, permitindo que solicitações já enfileiradas sejam entregues e processadas.
Sintaxe
void WdfIoQueueDrain(
[in] WDFQUEUE Queue,
[in, optional] PFN_WDF_IO_QUEUE_STATE DrainComplete,
[in, optional] WDFCONTEXT Context
);
Parâmetros
[in] Queue
Um identificador para um objeto de fila de estrutura.
[in, optional] DrainComplete
Um ponteiro para uma função de retorno de chamada EvtIoQueueState fornecida pelo driver. Esse parâmetro é opcional e pode ser NULL.
[in, optional] Context
Um ponteiro não tipado para informações de contexto fornecidas pelo driver que a estrutura passa para a função de retorno de chamada EvtIoQueueState . Esse parâmetro é opcional e pode ser NULL.
Retornar valor
Nenhum
Comentários
Um bug marcar ocorrerá se o driver fornecer um identificador de objeto inválido.
Depois que um driver chama WdfIoQueueDrain, a estrutura para de adicionar solicitações de E/S à fila especificada. Se a estrutura receber solicitações adicionais para a fila, ela as concluirá com uma conclusão status valor de STATUS_INVALID_DEVICE_STATE.
Se o driver fornecer uma função de retorno de chamada EvtIoQueueState , a estrutura a chamará depois que todas as solicitações que foram entregues ao driver tiverem sido concluídas ou canceladas. Você pode modificar o IRQL no qual o retorno de chamada é executado especificando ExecutionLevel em WDF_OBJECT_ATTRIBUTES no momento da criação da fila. Para obter mais informações, consulte a seção Comentários doEVT_WDF_IO_QUEUE_STATE.
O driver não deve chamar outro método que altera o estado da fila, como WdfIoQueuePurge ou WdfIoQueueStart, antes que a estrutura tenha chamado EvtIoQueueState.
Se um driver especificar NULL para DrainComplete, o driver poderá chamar outra operação de alteração de estado antes que as solicitações sejam concluídas.
Como prática recomendada, você só deve chamar WdfIoQueueDrain quando tiver certeza de que as solicitações de E/S pendentes da fila serão concluídas em tempo hábil. Caso contrário, use WdfIoQueuePurge. Para obter mais informações, consulte Gerenciando filas de E/S.
Depois que um driver tiver esvaziado uma fila de E/S, ele poderá reiniciar a fila chamando WdfIoQueueStart.
Exemplos
O exemplo de código a seguir drena uma fila de E/S e chama a função EvtIoQueueDrainComplete de um driver quando todas as solicitações que foram entregues ao driver foram concluídas ou canceladas.
WdfIoQueueDrain(
Queue,
EvtIoQueueDrainComplete,
(WDFCONTEXT) myQueueContext
);
Requisitos
Requisito | Valor |
---|---|
Plataforma de Destino | Universal |
Versão mínima do KMDF | 1.0 |
Versão mínima do UMDF | 2,0 |
Cabeçalho | wdfio.h (inclua Wdf.h) |
Biblioteca | Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF) |
IRQL | <= DISPATCH_LEVEL |
Regras de conformidade da DDI | ChangeQueueState(kmdf), DriverCreate(kmdf), EvtSurpriseRemoveNoSuspendQueue(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), NoCancelFromEvtSurpriseRemove(kmdf) |