Função WdfIoQueuePurge (wdfio.h)
[Aplica-se a KMDF e UMDF]
O método WdfIoQueuePurge faz com que a estrutura pare de enfileirar solicitações de E/S em uma fila de E/S e cancele solicitações não processadas.
Sintaxe
void WdfIoQueuePurge(
[in] WDFQUEUE Queue,
[in, optional] PFN_WDF_IO_QUEUE_STATE PurgeComplete,
[in, optional] WDFCONTEXT Context
);
Parâmetros
[in] Queue
Um identificador para um objeto de fila de estrutura.
[in, optional] PurgeComplete
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 WdfIoQueuePurge, a estrutura para de adicionar solicitações de E/S à fila especificada. A estrutura cancela todas as solicitações que não entregou ao dispositivo de destino e chama a função de retorno de chamada CompletionRoutine do driver para cada uma. A estrutura também tenta cancelar (chamando IoCancelIrp) todas as solicitações entregues ao dispositivo de destino que não foram marcadas como WDF_REQUEST_SEND_OPTION_IGNORE_TARGET_STATE.
Se a estrutura receber solicitações adicionais para a fila, ela as concluirá com um valor status de conclusão 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.
Depois que um driver limpar uma fila de E/S, ele poderá reiniciar a fila chamando WdfIoQueueStart.
Se o driver chamar WdfRequestRequeue depois de chamar WdfIoQueuePurge, a tentativa de remoção poderá ter êxito antes da limpeza ser concluída. Nas versões 1.9 e anteriores do KMDF, essa sequência faz com que o sistema operacional falhe. Esse problema foi corrigido no KMDF versão 1.11 e posterior.
Para obter mais informações sobre o método WdfIoQueuePurge , consulte Gerenciando filas de E/S.
Exemplos
O exemplo de código a seguir limpa uma fila de E/S e não chama uma função de retorno de chamada quando todas as solicitações que foram entregues ao driver foram concluídas ou canceladas.
WdfIoQueuePurge(
ReadQueue,
WDF_NO_EVENT_CALLBACK,
WDF_NO_CONTEXT
);
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 de DDI | ChangeQueueState(kmdf), DriverCreate(kmdf), EvtSurpriseRemoveNoSuspendQueue(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), NoCancelFromEvtSurpriseRemove(kmdf) |