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 que foi 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 do tipo WDF_IO_TARGET_PURGE_IO_ACTION que indica se a estrutura deve aguardar para retornar de WdfIoTargetPurge até que todas as solicitações entregues sejam concluídas ou canceladas.

Retornar valor

Nenhum

Comentários

Um bug marcar ocorrerá se o driver fornecer 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 WdfIoTargetPurge for WdfIoTargetPurgeIo, WdfIoTargetPurge poderá ser chamado 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 o retorno 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 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 WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET na estrutura WDF_REQUEST_SEND_OPTIONS da solicitação.

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

Seu 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.

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

  1. Chame WdfIoTargetPurge e especifique um valor action 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 action de WdfIoTargetPurgeIoAndWait.

Para obter mais informações sobre os estados de destino de E/S, consulte Controlando o 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
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 Observações.
Regras de conformidade de DDI DriverCreate(kmdf)

Confira também

WDF_IO_TARGET_PURGE_IO_ACTION

WdfIoTargetCreate

WdfIoTargetGetState

WdfIoTargetStart

WdfIoTargetStop