Función WdfIoTargetStop (wdfiotarget.h)

[Se aplica a KMDF y UMDF]

El método WdfIoTargetStop deja de enviar solicitudes en cola a un destino de E/S local o remoto.

Sintaxis

void WdfIoTargetStop(
  [in] WDFIOTARGET                  IoTarget,
  [in] WDF_IO_TARGET_SENT_IO_ACTION Action
);

Parámetros

[in] IoTarget

Identificador de un objeto de destino de E/S local o remoto obtenido de una llamada anterior a WdfDeviceGetIoTarget o WdfIoTargetCreate, o desde un método que proporciona un destino de E/S especializado.

[in] Action

Valor WDF_IO_TARGET_SENT_IO_ACTION tipo que especifica cómo el marco debe controlar las solicitudes de E/S que el controlador ha enviado al destino de E/S, si el destino no ha completado las solicitudes.

Valor devuelto

None

Observaciones

Se produce una comprobación de errores si el controlador proporciona un identificador de objeto no válido.

Si el controlador puede detectar errores de dispositivo recuperables, es posible que quiera que el controlador llame a WdfIoTargetStop para detener temporalmente el envío de solicitudes y, después, llame a WdfIoTargetStart para reanudar el envío de solicitudes.

Mientras se detiene, un destino de E/S sigue aceptando nuevas solicitudes, pero no entrega las solicitudes en cola al controlador adecuado.

Para obtener más información sobre los posibles estados para los destinos de E/S, vea Controlar el estado de un destino de E/S general.

Si un controlador llama a WdfUsbTargetPipeConfigContinuousReader para configurar un lector continuo para una canalización USB, la función de devolución de llamada EvtDeviceD0Exit del controlador debe llamar a WdfIoTargetStop para detener el lector.

Si un controlador ha llamado a WdfIoTargetStop, todavía puede enviar una solicitud al destino estableciendo la marca WDF_REQUEST_OPTION_IGNORE_TARGET_STATE en la estructura de WDF_REQUEST_SEND_OPTIONS de la solicitud. Si un controlador establece esta marca, el controlador puede enviar una solicitud, como una solicitud para restablecer una canalización USB (consulte WdfUsbTargetPipeResetSynchronously), a un dispositivo después de que el controlador haya llamado WdfIoTargetStop.

Cuando un controlador llama a WdfIoTargetStop, el marco no intenta cancelar ni esperar solicitudes de E/S que se enviaron anteriormente al destino mediante la marca de WDF_REQUEST_SEND_OPTION_IGNORE_TARGET_STATE o la marca WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET en la estructura de WDF_REQUEST_SEND_OPTIONS de la solicitud.

El controlador debe llamar a WdfIoTargetStart y WdfIoTargetStop de forma sincrónica. Después de que el controlador llame a una de estas funciones, no debe llamar a ninguna de las dos funciones antes de que se devuelva la primera llamada.

El controlador puede llamar a WdfIoTargetStop varias veces desde un único subproceso sin llamar a WdfIoTargetStart. Por ejemplo, el controlador podría hacer lo siguiente:

  1. Llame a WdfIoTargetStop y especifique un valor action de WdfIoTargetLeaveSentIoPending.
  2. Determine si el destino debe reanudar el procesamiento de solicitudes de E/S.
  3. Si el destino debe reanudarse, llame a WdfIoTargetStart. De lo contrario, llame a WdfIoTargetStop de nuevo con un valor action de WdfIoTargetCancelSentIo.
NotaWdfIoTargetStop no es seguro para subprocesos. No es seguro llamar a WdfIoTargetStop simultáneamente desde diferentes subprocesos.
 
Para obtener más información sobre los destinos de E/S, consulte Uso de destinos de E/S.

Si el controlador ha llamado a WdfUsbTargetPipeConfigContinuousReader para la canalización, se debe llamar a WdfIoTargetStop en IRQL = PASSIVE_LEVEL.

Si el controlador no ha llamado a WdfUsbTargetPipeConfigContinuousReader y si el parámetro Action de WdfIoTargetStop es WdfIoTargetLeaveSentIoPending, se puede llamar a WdfIoTargetStop en IRQL <= DISPATCH_LEVEL. De lo contrario, se llama a WdfIoTargetStop en IRQL = PASSIVE_LEVEL.

Ejemplos

En el ejemplo de código siguiente se muestra cómo una función de devolución de llamada EvtDeviceD0Exit puede llamar a WdfIoTargetStop, si el controlador usa un lector continuo para una canalización 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

   
Plataforma de destino Universal
Versión mínima de KMDF 1,0
Versión mínima de UMDF 2,0
Header wdfiotarget.h (incluya Wdf.h)
Library Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL vea la sección Comentarios.
Reglas de cumplimiento de DDI DriverCreate(kmdf), FailD0EntryIoTargetState(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

Consulte también

EvtDeviceD0Exit

WDF_REQUEST_SEND_OPTIONS

WdfDeviceGetIoTarget

WdfIoTargetCreate

WdfIoTargetStart

WdfUsbTargetPipeConfigContinuousReader

WdfUsbTargetPipeResetSynchronously