Función WdfIoQueuePurge (wdfio.h)

[Se aplica a KMDF y UMDF]

El método WdfIoQueuePurge hace que el marco deje de poner en cola las solicitudes de E/S a una cola de E/S y cancele las solicitudes sin procesar.

Sintaxis

void WdfIoQueuePurge(
  [in]           WDFQUEUE               Queue,
  [in, optional] PFN_WDF_IO_QUEUE_STATE PurgeComplete,
  [in, optional] WDFCONTEXT             Context
);

Parámetros

[in] Queue

Identificador de un objeto de cola de marco.

[in, optional] PurgeComplete

Puntero a una función de devolución de llamada EvtIoQueueState proporcionada por el controlador. Este parámetro es opcional y puede ser NULL.

[in, optional] Context

Puntero sin tipo a la información de contexto proporcionada por el controlador que el marco pasa a la función de devolución de llamada EvtIoQueueState . Este parámetro es opcional y puede ser NULL.

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 WdfIoQueuePurge, el marco deja de agregar solicitudes de E/S a la cola especificada. El marco cancela todas las solicitudes que no se han entregado al dispositivo de destino y llama a la función de devolución de llamada CompletionRoutine del controlador para cada una. El marco también intenta cancelar (mediante una llamada a IoCancelIrp) las solicitudes entregadas al dispositivo de destino que no estaban marcadas WDF_REQUEST_SEND_OPTION_IGNORE_TARGET_STATE.

Si el marco recibe solicitudes adicionales para la cola, las completa con un valor de estado de finalización de STATUS_INVALID_DEVICE_STATE.

Si el controlador proporciona una función de devolución de llamada EvtIoQueueState , 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.

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

Si el controlador llama a WdfRequestRequeue después de llamar a WdfIoQueuePurge, el intento de puesta en cola puede realizarse correctamente antes de que se complete la purga. En las versiones 1.9 y anteriores de KMDF, esta secuencia hace que el sistema operativo se bloquee. Este problema se ha corregido en kmdf versión 1.11 y posteriores.

Para obtener más información sobre el método WdfIoQueuePurge , consulte Administración de colas de E/S.

Ejemplos

En el ejemplo de código siguiente se purga una cola de E/S y no se llama a una función de devolución de llamada cuando se han completado o cancelado todas las solicitudes que se entregaron al controlador.

WdfIoQueuePurge(
                ReadQueue, 
                WDF_NO_EVENT_CALLBACK, 
                WDF_NO_CONTEXT 
                );

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 (incluir Wdf.h)
Library 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)

Consulte también

EvtIoQueueState

WdfIoQueueDrain

WdfIoQueuePurgeSynchronously