Compartilhar via


Função WdfIoTargetPurge (wdfiotarget.h)

[Aplica-se a KMDF e UMDF]

O método WdfIoTargetPurge cancela todas as solicitações de E/S enfileiradas em um destino de E/S local, remoto ou especializado e impede que novas solicitações de E/S sejam enfileiradas. O método também tenta cancelar solicitações de E/S que deixaram a fila do destino de E/S e inseriram drivers inferiores.

Sintaxe

VOID WdfIoTargetPurge(
  [in] WDFIOTARGET                   IoTarget,
  [in] WDF_IO_TARGET_PURGE_IO_ACTION Action
);

Parâmetros

[in] IoTarget

Um identificador para um objeto de destino de E/S local ou remoto obtido de uma chamada anterior para WdfDeviceGetIoTarget ou WdfIoTargetCreate ou de um método fornecido por um destino de E/S especializado, como WdfUsbTargetPipeGetIoTarget .

[in] Action

Um valor digitado WDF_IO_TARGET_PURGE_IO_ACTIONque indica se a estrutura deve aguardar para retornar de WdfIoTargetPurge até que todas as solicitações entregues sejam concluídas ou canceladas.

Valor de retorno

Nenhum

Observações

Uma verificação de bug ocorre se o driver fornece um identificador de objeto inválido.

Se o driver tiver chamado anteriormente WdfUsbTargetPipeConfigContinuousReader, WdfIoTargetPurge deverá ser chamado em IRQL = PASSIVE_LEVEL. Se o driver não tiver chamado WdfUsbTargetPipeConfigContinuousReader e se o parâmetro Action de WdfIoTargetPur é WdfIoTargetPurgeIo, WdfIoTargetPurge podem ser chamados em IRQL <= DISPATCH_LEVEL. Caso contrário, WdfIoTargetPurge deverá ser chamado em IRQL = PASSIVE_LEVEL.

Para tornar WdfIoTargetPurge uma chamada síncrona, o driver pode definir o valor WdfIoTargetPurgeIoAndWait do parâmetro Action. Nesse caso, WdfIoTargetPurge aguarda retornar até que todas as solicitações entregues sejam concluídas ou canceladas.

Depois que um driver tiver chamado WdfIoTargetPurge, ele ainda poderá enviar uma solicitação para o destino definindo o sinalizador WDF_REQUEST_SEND_OPTION_IGNORE_TARGET_STATE na estrutura de WDF_REQUEST_SEND_OPTIONS da solicitação. Por exemplo, um driver pode enviar uma solicitação, como uma solicitação para redefinir um pipe USB (consulte WdfUsbTargetPipeResetSynchronously), para um dispositivo depois que o driver tiver chamado WdfIoTargetPurge.

Quando um driver chama WdfIoTargetPurge, a estrutura não tenta cancelar ou aguardar solicitações de E/S que foram enviadas anteriormente para o destino usando o sinalizador WDF_REQUEST_SEND_OPTION_IGNORE_TARGET_STATE ou o sinalizador de WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET na estrutura de WDF_REQUEST_SEND_OPTIONS da solicitação.

Depois que um driver limpar uma fila de E/S, ele poderá reiniciar a fila chamando WdfIoTargetStart.

O driver deve chamar WdfIoTargetStart, WdfIoTargetStop e WdfIoTargetPurge de forma síncrona. Depois que o driver chama uma dessas funções, ele não deve chamar nenhuma das outras até que a chamada anterior retorne.

O driver pode chamar WdfIoTargetPurge várias vezes sem chamar WdfIoTargetStart. Por exemplo, o driver pode fazer o seguinte:

  1. Chame WdfIoTargetPurge e especifique um valor de Ação de WdfIoTargetPurgeIo.
  2. Determine se o destino deve retomar o processamento de solicitações de E/S.
  3. Se o destino for retomado, chame WdfIoTargetStart. Caso contrário, chame WdfIoTargetPurge novamente com um valor de Ação de WdfIoTargetPurgeIoAndWait.

Para obter mais informações sobre estados de destino de E/S, consulte Controlando ade estado de um destino de E/S geral.

Para obter mais informações sobre destinos de E/S, consulte Usando destinos de E/S.

Exemplos

O exemplo de código a seguir mostra como uma função de retorno de chamada EvtDeviceD0Exit pode chamar WdfIoTargetPurge, se o driver usar um leitor contínuo para um pipe USB.

NTSTATUS
MyEvtDeviceD0Exit(
    IN  WDFDEVICE Device,
    IN  WDF_POWER_DEVICE_STATE TargetState
)
{
    PDEVICE_CONTEXT  pDeviceContext;
    pDeviceContext = GetMyDeviceContext(Device);

    WdfIoTargetPurge(
                    WdfUsbTargetPipeGetIoTarget(pDeviceContext->InterruptPipe),
                    WdfIoTargetPurgeIoAndWait
                    );

    return STATUS_SUCCESS;
}

Requisitos

Requisito Valor
da Plataforma de Destino Universal
versão mínima do KMDF 1.11
versão mínima do UMDF 2.0
cabeçalho wdfiotarget.h (inclua Wdf.h)
Biblioteca Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL Consulte a seção Comentários.
regras de conformidade de DDI DriverCreate(kmdf)

Consulte também

WDF_IO_TARGET_PURGE_IO_ACTION

WdfIoTargetCreate

WdfIoTargetGetState

WdfIoTargetStart

WdfIoTargetStop