Función WdfInterruptQueueDpcForIsr (wdfinterrupt.h)
[Se aplica a KMDF y UMDF]
El método WdfInterruptQueueDpcForIsr pone en cola la función de devolución de llamada EvtInterruptDpc de un objeto de interrupción de marco para su ejecución.
Sintaxis
BOOLEAN WdfInterruptQueueDpcForIsr(
[in] WDFINTERRUPT Interrupt
);
Parámetros
[in] Interrupt
Identificador de un objeto de interrupción de marco.
Valor devuelto
WdfInterruptQueueDpcForIsr devuelve TRUE si pone correctamente en cola la función de devolución de llamada EvtInterruptDpc del objeto de interrupción. El método devuelve FALSE si la función de devolución de llamada se puso en cola anteriormente y no se ha ejecutado.
Se produce una comprobación de errores si el controlador proporciona un identificador de objeto no válido.
Comentarios
Los controladores suelen llamar a WdfInterruptQueueDpcForIsr desde una función de devolución de llamada EvtInterruptIsr .
La función de devolución de llamada EvtInterruptDpc de un objeto de interrupción solo se puede poner en cola una vez antes de que se ejecute. Por lo tanto, si una llamada a WdfInterruptQueueDpcForIsr se realiza correctamente, las llamadas posteriores devolverán FALSE hasta que el marco desquee la función de devolución de llamada EvtInterruptDpc .
La devolución de llamada EvtInterruptDpc se ejecutará en el procesador que la ha puestos en cola. Si el controlador llama a WdfInterruptQueueDpcForIsr para poner en cola otro DPC mientras una función de devolución de llamada EvtInterruptDpc ya está desqueued o en ejecución, la segunda devolución de llamada EvtInterruptDpc podría incluso ejecutarse antes de que se complete la primera.
Para obtener más información sobre el control de interrupciones en controladores basados en marcos, consulte Control de interrupciones de hardware.
En KMDF 1.11 y versiones posteriores, un controlador puede llamar a WdfInterruptQueueDpcForIsr desde un ISR de nivel pasivo. Tenga en cuenta que un controlador puede registrar un elemento de trabajo o un DPC, pero no ambos.
Ejemplos
En el ejemplo de código siguiente se muestra cómo una función de devolución de llamada EvtInterruptIsr debe poner en cola una función de devolución de llamada EvtInterruptDpc .
BOOLEAN
MyEvtInterruptIsr(
IN WDFINTERRUPT Interrupt,
IN ULONG MessageID
)
{
BOOLEAN queueDpcSuccess;
//
// Save interrupt information for the
// EvtInterruptDpc function.
//
...
//
// Queue the EvtInterruptDpc function.
//
queueDpcSuccess = WdfInterruptQueueDpcForIsr(Interrupt);
...
}
Requisitos
Requisito | Value |
---|---|
Plataforma de destino | Universal |
Versión mínima de KMDF | 1.0 |
Versión mínima de UMDF | 2.0 |
Encabezado | wdfinterrupt.h (incluir Wdf.h) |
Library | Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF) |
IRQL | <=DIRQL |
Reglas de cumplimiento de DDI | DriverCreate(kmdf) |