Compartilhar via


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)

Confira também

EvtIoQueueState

WdfIoQueueDrain

WdfIoQueuePurgeSynchronously