Compartir a través de


Función WdfIoTargetPurge (wdfiotarget.h)

[Se aplica a KMDF y UMDF]

El método WdfIoTargetPurge cancela todas las solicitudes de E/S en cola en un destino de E/S local, remoto o especializado y evita que se ponen en cola las nuevas solicitudes de E/S. El método también intenta cancelar las solicitudes de E/S que han dejado la cola del destino de E/S y han escrito controladores inferiores.

Sintaxis

void WdfIoTargetPurge(
  [in] WDFIOTARGET                   IoTarget,
  [in] WDF_IO_TARGET_PURGE_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 proporcionado por un destino de E/S especializado, como WdfUsbTargetPipeGetIoTarget.

[in] Action

Valor de tipo WDF_IO_TARGET_PURGE_IO_ACTIONque indica si el marco debe esperar a que se devuelva de WdfIoTargetPurge hasta que se completen o cancele todas las solicitudes entregadas.

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 ha llamado previamente a WdfUsbTargetPipeConfigContinuousReader, se debe llamar a WdfIoTargetPurge en IRQL = PASSIVE_LEVEL. Si no se ha llamado al controlador WdfUsbTargetPipeConfigContinuousReader y si el parámetro Action de WdfIoTargetPurge es WdfIoTargetPurgeIo, se puede llamar a WdfIoTargetPurge en IRQL <= DISPATCH_LEVEL. De lo contrario, WdfIoTargetPurge debe llamarse en IRQL = PASSIVE_LEVEL.

Para realizar WdfIoTargetPurge una llamada sincrónica, el controlador puede establecer el WdfIoTargetPurgeIoAndWait valor del parámetro Action. En este caso, WdfIoTargetPurge espera a que se devuelvan hasta que se completen o cancele todas las solicitudes entregadas.

Después de llamar a un controlador WdfIoTargetPurge, todavía puede enviar una solicitud al destino estableciendo la marca WDF_REQUEST_SEND_OPTION_IGNORE_TARGET_STATE en la estructura WDF_REQUEST_SEND_OPTIONS de la solicitud. Por ejemplo, un controlador podría enviar una solicitud, como una solicitud para restablecer una canalización USB (vea WdfUsbTargetPipeResetSynchronously), a un dispositivo después de llamar al controlador WdfIoTargetPurge.

Cuando un controlador llama a WdfIoTargetPurge, el marco no intenta cancelar ni esperar las 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.

Una vez que un controlador ha purgado una cola de E/S, puede reiniciar la cola llamando a WdfIoTargetStart.

El controlador debe llamar a WdfIoTargetStart, WdfIoTargetStop y WdfIoTargetPurge sincrónicamente. Después de que el controlador llame a una de estas funciones, no debe llamar a ninguno de los demás hasta que se devuelva la llamada anterior.

El controlador puede llamar a WdfIoTargetPurge varias veces sin llamar a WdfIoTargetStart. Por ejemplo, el controlador puede hacer lo siguiente:

  1. Llame a WdfIoTargetPurge y especifique un valor Action de WdfIoTargetPurgeIo.
  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 WdfIoTargetPurge de nuevo con un action de valor de WdfIoTargetPurgeIoAndWait.

Para obtener más información sobre los estados de destino de E/S, consulte Control de un estado de destino de E/S general.

Para obtener más información sobre los destinos de E/S, consulte Uso de destinos de E/S.

Ejemplos

En el ejemplo de código siguiente se muestra cómo un EvtDeviceD0Exit función de devolución de llamada puede llamar a WdfIoTargetPurge, 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);

    WdfIoTargetPurge(
                    WdfUsbTargetPipeGetIoTarget(pDeviceContext->InterruptPipe),
                    WdfIoTargetPurgeIoAndWait
                    );

    return STATUS_SUCCESS;
}

Requisitos

Requisito Valor
de la plataforma de destino de Universal
versión mínima de KMDF 1.11
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)

Consulte también

WDF_IO_TARGET_PURGE_IO_ACTION

WdfIoTargetCreate

WdfIoTargetGetState

WdfIoTargetStart

WdfIoTargetStop