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 evento 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 la 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 la 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 |
---|---|
|
El controlador proporcionó un identificador no válido. |
|
Este valor se devuelve si se produce una de las siguientes acciones:
|
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 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 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 impedir que el marco llame a la función de devolución de llamada EvtIoQueueState , el controlador debe llamar de nuevo a WdfIoQueueReadyNotify con el parámetro QueueReady establecido en NULL. Sin embargo, el controlador debe llamar primero 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 Dispatching Methods for I/O Requests.
Ejemplos
En el ejemplo de código siguiente se registra la función EvtIoQueueReady 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 | 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 | DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |