Función WdfIoQueueReadyNotify (wdfio.h)

[Se aplica a KMDF y UMDF]

El método WdfIoQueueReadyNotify 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 una función de devolución de llamada EvtIoQueueState proporcionada por el controlador, si el controlador se registra para recibir una notificación lista, 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 a la función de devolución de llamada EvtIoQueueState , si el controlador se registra para recibir una notificación lista, 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 devuelto 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.
  • El controlador había llamado previamente 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 podría devolver otros valores NTSTATUS.

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

Comentarios

Una vez que un controlador ha llamado a 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 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 el momento 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 distribución 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 WdfIoQueueStopSynchronousmente 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 EvtIoQueueState , es posible que el marco llame a la función de devolución de llamada antes de que WdfIoQueueReadyNotify devuelva.

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 EvtIoQueueReady de un controlador para 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

   
Plataforma de destino Universal
Versión mínima de KMDF 1,0
Versión mínima de UMDF 2,0
Header wdfio.h (incluya Wdf.h)
Library 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