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:
- Llame a WdfIoTargetStop y especifique un Action valor 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 de Action de WdfIoTargetCancelSentIo.
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) |