Compartir a través de


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 de tipo WDF_IO_TARGET_SENT_IO_ACTIONque 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

Ninguno

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 desee 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, consulte 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, el controlador EvtDeviceD0Exit función de devolución de llamada 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 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 (vea WdfUsbTargetPipeResetSynchronously), a un dispositivo después de llamar al controlador 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 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 sincrónicamente. Después de que el controlador llame a una de estas funciones, no debe llamar a ninguna de las 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 puede hacer lo siguiente:

  1. Llame a WdfIoTargetStop y especifique un Action valor 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 de 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 no se ha llamado al controlador 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 un EvtDeviceD0Exit función de devolución de llamada 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

Requisito Valor
de la plataforma de destino de Universal
versión mínima de KMDF 1.0
versión mínima de UMDF 2.0
encabezado wdfiotarget.h (incluya Wdf.h)
Biblioteca Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
irQL Consulte 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