Función WdfIoQueueDrainSynchronously (wdfio.h)
[Se aplica a KMDF y UMDF]
El método WdfIoQueueDrainSynchronously hace que el marco detenga la puesta en cola de solicitudes de E/S a una cola de E/S, al tiempo que permite que las solicitudes ya en cola se entreguen y procesen. El método devuelve una vez completadas o canceladas todas las solicitudes.
Sintaxis
void WdfIoQueueDrainSynchronously(
[in] WDFQUEUE Queue
);
Parámetros
[in] Queue
Identificador de un objeto de cola de marco.
Valor devuelto
None
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 WdfIoQueueDrainSynchronously, el marco deja de agregar solicitudes de E/S a la cola especificada. Si el marco recibe solicitudes adicionales para la cola, las completa con un valor de estado de finalización de STATUS_INVALID_DEVICE_STATE.
El controlador no debe llamar a otro método que cambie el estado de la cola, como WdfIoQueuePurge o WdfIoQueueStart, antes de que se haya devuelto la llamada a WdfIoQueueDrainSynchronously .
Como procedimiento recomendado, solo debe llamar a WdfIoQueueDrainSynchronousmente cuando esté seguro de que las solicitudes de E/S pendientes de la cola se completarán de forma oportuna. De lo contrario, use WdfIoQueuePurgeSynchronously. Para obtener más información, consulte Administración de colas de E/S.
Una vez que un controlador ha purgado una cola de E/S, puede reiniciar la cola llamando a WdfIoQueueStart.
No llame a WdfIoQueueDrainSynchronously desde las siguientes funciones de devolución de llamada de eventos de objeto de cola, independientemente de la cola con la que está asociada la función de devolución de llamada de evento:
EvtIoDefaultEvtIoDeviceControlEvtIoInternalDeviceControlEvtIoReadEvtIoWrite
Ejemplos
En el ejemplo de código siguiente se purga una cola de E/S.
WdfIoQueueDrainSynchronously(queue);
Requisitos
Requisito | Value |
---|---|
Plataforma de destino | Universal |
Versión mínima de KMDF | 1.0 |
Versión mínima de UMDF | 2.0 |
Encabezado | wdfio.h (incluya Wdf.h) |
Library | Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF) |
IRQL | PASSIVE_LEVEL |
Reglas de cumplimiento de DDI | ChangeQueueState(kmdf), DriverCreate(kmdf), EvtSurpriseRemoveNoSuspendQueue(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), NoCancelFromEvtSurpriseRemove(kmdf) |