Compartilhar via


Função WdfIoTargetStop (wdfiotarget.h)

[Aplica-se a KMDF e UMDF]

O método WdfIoTargetStop para de enviar solicitações enfileiradas para um destino de E/S local ou remoto.

Sintaxe

void WdfIoTargetStop(
  [in] WDFIOTARGET                  IoTarget,
  [in] WDF_IO_TARGET_SENT_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.

[in] Action

Um valor de tipo WDF_IO_TARGET_SENT_IO_ACTION que especifica como a estrutura deve lidar com solicitações de E/S que o driver enviou para o destino de E/S, se o destino não tiver concluído as solicitações.

Retornar valor

Nenhum

Comentários

Um bug marcar ocorrerá se o driver fornecer um identificador de objeto inválido.

Se o driver puder detectar erros de dispositivo recuperáveis, talvez você queira que o driver chame WdfIoTargetStop para parar temporariamente de enviar solicitações e, em seguida, chame WdfIoTargetStart para retomar o envio de solicitações.

Enquanto parado, um destino de E/S continua a aceitar novas solicitações, mas não entrega as solicitações enfileiradas ao driver apropriado.

Para obter mais informações sobre possíveis estados para destinos de E/S, consulte Controlando o estado de um destino de E/S geral.

Se um driver chamar WdfUsbTargetPipeConfigContinuousReader para configurar um leitor contínuo para um pipe USB, a função de retorno de chamada EvtDeviceD0Exit do driver deverá chamar WdfIoTargetStop para parar o leitor.

Se um driver tiver chamado WdfIoTargetStop, ele ainda poderá enviar uma solicitação para o destino definindo o sinalizador WDF_REQUEST_OPTION_IGNORE_TARGET_STATE na estrutura de WDF_REQUEST_SEND_OPTIONS da solicitação. Se um driver definir esse sinalizador, o driver poderá enviar uma solicitação, como uma solicitação para redefinir um pipe USB (consulte WdfUsbTargetPipeResetSynchronously), para um dispositivo depois que o driver tiver chamado WdfIoTargetStop.

Quando um driver chama WdfIoTargetStop, 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 de WDF_REQUEST_SEND_OPTIONS da solicitação.

Seu driver deve chamar WdfIoTargetStart e WdfIoTargetStop de forma síncrona. Depois que o driver chama uma dessas funções, ele não deve chamar nenhuma das funções antes que a primeira chamada retorne.

Seu driver pode chamar WdfIoTargetStop várias vezes de um único thread sem chamar WdfIoTargetStart. Por exemplo, seu driver pode fazer o seguinte:

  1. Chame WdfIoTargetStop e especifique um valor action de WdfIoTargetLeaveSentIoPending.
  2. Determine se o destino deve retomar o processamento de solicitações de E/S.
  3. Se o destino deve ser retomado, chame WdfIoTargetStart. Caso contrário, chame WdfIoTargetStop novamente com um valor action de WdfIoTargetCancelSentIo.
ObservaçãoWdfIoTargetStop não é thread-safe. Não é seguro chamar WdfIoTargetStop simultaneamente de threads diferentes.
 
Para obter mais informações sobre destinos de E/S, consulte Usando destinos de E/S.

Se o driver tiver chamado WdfUsbTargetPipeConfigContinuousReader para o pipe, WdfIoTargetStop deverá ser chamado em IRQL = PASSIVE_LEVEL.

Se o driver não tiver chamado WdfUsbTargetPipeConfigContinuousReader e se o parâmetro Action de WdfIoTargetStop for WdfIoTargetLeaveSentIoPending, WdfIoTargetStop poderá ser chamado em IRQL <= DISPATCH_LEVEL. Caso contrário, WdfIoTargetStop será chamado em IRQL = PASSIVE_LEVEL.

Exemplos

O exemplo de código a seguir mostra como uma função de retorno de chamada EvtDeviceD0Exit pode chamar WdfIoTargetStop, 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);

    WdfIoTargetStop(
                    WdfUsbTargetPipeGetIoTarget(pDeviceContext->InterruptPipe),
                    WdfIoTargetCancelSentIo
                    );

    return STATUS_SUCCESS;
}

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 wdfiotarget.h (inclua Wdf.h)
Biblioteca Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL Consulte a seção Observações.
Regras de conformidade da DDI DriverCreate(kmdf), FailD0EntryIoTargetState(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

Confira também

EvtDeviceD0Exit

WDF_REQUEST_SEND_OPTIONS

WdfDeviceGetIoTarget

WdfIoTargetCreate

WdfIoTargetStart

WdfUsbTargetPipeConfigContinuousReader

WdfUsbTargetPipeResetSynchronously