Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
[Se aplica a KMDF y UMDF]
El método WdfIoQueueDrain hace que el marco deje de poner en cola las solicitudes de E/S en una cola de E/S, al tiempo que permite que las solicitudes ya en cola se entreguen y procesen.
Sintaxis
VOID WdfIoQueueDrain(
[in] WDFQUEUE Queue,
[in, optional] PFN_WDF_IO_QUEUE_STATE DrainComplete,
[in, optional] WDFCONTEXT Context
);
Parámetros
[in] Queue
Identificador de un objeto de cola de marco.
[in, optional] DrainComplete
Puntero a un EvtIoQueueState proporcionado por el controlador función de devolución de llamada. Este parámetro es opcional y se puede NULL.
[in, optional] Context
Puntero sin tipo a la información de contexto proporcionada por el controlador que el marco pasa al EvtIoQueueState función de devolución de llamada. Este parámetro es opcional y se puede NULL.
Valor devuelto
Ninguno
Observaciones
Se produce una comprobación de errores si el controlador proporciona un identificador de objeto no válido.
Después de que un controlador llame a WdfIoQueueDrain, el marco deja de agregar solicitudes de E/S a la cola especificada. Si el marco recibe solicitudes adicionales para la cola, los completa con un valor de estado de finalización de STATUS_INVALID_DEVICE_STATE.
Si el controlador proporciona un EvtIoQueueState función de devolución de llamada, el marco lo llama después de que se hayan completado o cancelado todas las solicitudes que se entregaron al controlador. Puede modificar el IRQL en el que se ejecuta la devolución de llamada especificando ExecutionLevel en WDF_OBJECT_ATTRIBUTES en tiempo de creación de la cola. Para obtener más información, consulta la sección Comentarios deEVT_WDF_IO_QUEUE_STATE.
El controlador no debe llamar a otro método que cambie el estado de la cola, como WdfIoQueuePurge o WdfIoQueueStart, antes de que el marco haya llamado a EvtIoQueueState.
Si un controlador especifica NULL para DrainComplete, el controlador puede llamar a otra operación de cambio de estado antes de que se completen las solicitudes.
Como procedimiento recomendado, solo debe llamar a WdfIoQueueDrain cuando esté seguro de que las solicitudes de E/S pendientes de la cola se completarán de forma oportuna. De lo contrario, use WdfIoQueuePurge. Para obtener más información, consulte Administración de colas de E/S.
Después de que un controlador haya purgado una cola de E/S, puede reiniciar la cola llamando a WdfIoQueueStart.
Ejemplos
En el ejemplo de código siguiente se purga una cola de E/S y se llama al EvtIoQueueDrainComplete función cuando todas las solicitudes que se entregaron al controlador se han completado o cancelado.
WdfIoQueueDrain(
Queue,
EvtIoQueueDrainComplete,
(WDFCONTEXT) myQueueContext
);
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 | wdfio.h (incluya Wdf.h) |
| Biblioteca | Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF) |
| irQL | <= DISPATCH_LEVEL |
| reglas de cumplimiento de DDI | ChangeQueueState(kmdf), DriverCreate(kmdf), EvtSurpriseRemoveNoSuspendQueue(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), NoCancelFromEvtSurpriseRemove(kmdf) |