Compartir a través de


Función WdfIoQueueReadyNotify (wdfio.h)

[Se aplica a KMDF y UMDF]

El WdfIoQueueReadyNotify método registra (o anula el registro) una función de devolución de llamada de eventos a la que el marco llama cada vez que una cola de E/S especificada que estaba vacía recibe una o varias solicitudes de E/S especificadas.

Sintaxis

NTSTATUS WdfIoQueueReadyNotify(
  [in]           WDFQUEUE               Queue,
  [in, optional] PFN_WDF_IO_QUEUE_STATE QueueReady,
  [in, optional] WDFCONTEXT             Context
);

Parámetros

[in] Queue

Identificador de un objeto de cola de marco.

[in, optional] QueueReady

Puntero a un controlador proporcionado EvtIoQueueState función de devolución de llamada, si el controlador se registra para recibir notificaciones preparadas o NULL si el controlador está anulando el registro.

[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, si el controlador se registra para recibir notificaciones listas o null si el controlador está anulando el registro.

Valor devuelto

WdfIoQueueReadyNotify devuelve STATUS_SUCCESS si la operación se realiza correctamente. De lo contrario, este método podría devolver uno de los siguientes valores:

Código de retorno Descripción
STATUS_INVALID_PARAMETER
El controlador proporcionó un identificador no válido.
STATUS_INVALID_DEVICE_REQUEST
Este valor se devuelve si se produce una de las siguientes acciones:
  • El miembro DispatchType de la estructura de WDF_IO_QUEUE_CONFIG de la cola de E/S especificada no es WdfIoQueueDispatchManual.
  • Anteriormente, el controlador había llamado a WdfIoQueueReadyNotify y registró una función de devolución de llamada EvtIoQueueState.
  • El controlador está intentando anular el registro de su función de devolución de llamada de notificación, pero una función de devolución de llamada no está registrada o el controlador no ha llamado a WdfIoQueueStop o WdfIoQueueStopSynchronously.
 

Este método también puede devolver otros valores de NTSTATUS.

Se produce una comprobación de errores si el controlador proporciona un identificador de objeto no válido.

Observaciones

Después de llamar a un controlador WdfIoQueueReadyNotify para registrar una función de devolución de llamada EvtIoQueueState, el marco llama a la función de devolución de llamada cada vez que el estado de la cola especificada cambia de vacío a no vacío. En concreto, el marco llama a EvtIoQueueState cuando una solicitud llega a una cola vacía, incluso si el controlador todavía posee las solicitudes entregadas previamente de la cola que aún no se ha completado. 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 marco no llama a EvtIoQueueState mientras se detiene la cola especificada. Cuando se inicia la cola, el marco llama a EvtIoQueueState si la cola no está vacía.

El controlador puede llamar a WdfIoQueueReadyNotify solo para las colas de E/S que usan el método de envío manual .

La función de devolución de llamada EvtIoQueueState normalmente llama a WdfIoQueueRetrieveNextRequest o WdfIoQueueRetrieveRequestByFileObject en un bucle para recuperar todas las solicitudes que han llegado desde la última vez que se ejecutó la función de devolución de llamada.

Para detener que el marco llame a la función de devolución de llamada EvtIoQueueState, el controlador debe llamar a WdfIoQueueReadyNotify de nuevo con el parámetro QueueReady establecido en NULL. Sin embargo, el controlador primero debe llamar a WdfIoQueueStop o WdfIoQueueStopSynchronously para detener la cola de E/S. Posteriormente, el controlador puede llamar a WdfIoQueueStart para reiniciar la cola.

Cuando un controlador llama a WdfIoQueueReadyNotify para registrar una función de devolución de llamada de EvtIoQueueState, es posible que el marco llame a la función de devolución de llamada antes de WdfIoQueueReadyNotify.

Para obtener más información sobre el método WdfIoQueueReadyNotify, vea Métodos de distribución para solicitudes de E/S.

Ejemplos

En el ejemplo de código siguiente se registra la función EvtIoQueueRead y de un controlador, de modo que se llame a esta función cuando la cola de E/S especificada reciba una solicitud de E/S.

Status = WdfIoQueueReadyNotify(
                               ReadQueue,
                               EvtIoQueueReady,
                               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 DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

Consulte también

EvtIoQueueState

WDF_IO_QUEUE_CONFIG

WdfIoQueueRetrieveNextRequest

WdfIoQueueRetrieveRequestByFileObject