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:
- Llame a WdfIoTargetStop y especifique un valor action de WdfIoTargetLeaveSentIoPending.
- Determine si el destino debe reanudar el procesamiento de solicitudes de E/S.
- Si el destino debe reanudarse, llame a WdfIoTargetStart. De lo contrario, llame a WdfIoTargetStop de nuevo con un valor action de WdfIoTargetCancelSentIo.
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
Requisito | Value |
---|---|
Plataforma de destino | Universal |
Versión mínima de KMDF | 1.0 |
Versión mínima de UMDF | 2.0 |
Encabezado | 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) |