EVT_WDF_INTERRUPT_ISR función de devolución de llamada (wdfinterrupt.h)
[Se aplica a KMDF y UMDF]
Un controlador EvtInterruptIsr función de devolución de llamada de eventos ofrece una interrupción de hardware.
Sintaxis
EVT_WDF_INTERRUPT_ISR EvtWdfInterruptIsr;
BOOLEAN EvtWdfInterruptIsr(
[in] WDFINTERRUPT Interrupt,
[in] ULONG MessageID
)
{...}
Parámetros
[in] Interrupt
Identificador de un objeto de interrupción del marco.
[in] MessageID
Si el dispositivo usa interrupciones con señal de mensaje (MSIs), este parámetro es el número de mensaje que identifica el mensaje de interrupción de hardware del dispositivo. De lo contrario, este valor es 0.
Valor devuelto
La función de devolución de llamada EvtInterruptIsr debe devolver TRUE si la función atiende la interrupción del hardware. De lo contrario, esta función debe devolver FALSE.
Observaciones
Para registrar una función de devolución de llamada EvtInterruptIsr, el controlador debe colocar la dirección de la función de devolución de llamada en una estructura de WDF_INTERRUPT_CONFIG antes de llamar a WdfInterruptCreate.
El EvtInterruptIsr función de devolución de llamada es una rutina de servicio de interrupción (ISR) del controlador basado en marco, a la que se llama cuando se produce una interrupción de hardware.
Si la interrupción no procede del hardware que este EvtInterruptIsr los servicios de función de devolución de llamada, el controlador debe devolver FALSE. Si se comparte el vector de interrupción, el sistema llama a otra rutina de servicio de interrupción.
Si el controlador no ha solicitado el control de nivel pasivo para un objeto de interrupción, antes de llamar al EvtInterruptIsr función de devolución de llamada, el marco genera el IRQL del procesador al IRQL del dispositivo (DIRQL) y adquiere el bloqueo de giro que el controlador especificó en la estructura WDF_INTERRUPT_CONFIG del objeto de interrupción.
Dado que el EvtInterruptIsr función de devolución de llamada se ejecuta en un IRQL relativamente alto, puede llamar a muy pocos métodos de objeto de marco o rutinas del sistema. Además, esta función de devolución de llamada no puede acceder a código paginable.
Normalmente, el EvtInterruptIsr función de devolución de llamada borra la interrupción del hardware y guarda cualquier información que se pueda perder después de que la función de devolución de llamada devuelva y el sistema reduzca el IRQL (ya que reducir IRQL permite que se produzcan interrupciones adicionales). Los controladores basados en marcos guardan información sobre la interrupción en el espacio de contexto del objeto de interrupción .
Los controladores suelen proporcionar un EvtInterruptDpc función de devolución de llamada para procesar la información guardada en un IRQL inferior. (Algunos controladores proporcionan una o varias funciones de devolución de llamada EvtDpcFunc en lugar de una función de devolución de llamada EvtInterruptDpc). Para obtener información sobre cómo programar una función de devolución de llamada evtInterruptDpc para su ejecución, consulte Mantenimiento de una interrupción.
La función de devolución de llamada EvtInterruptIsr debe ser capaz de atender varias interrupciones antes de que se ejecute la función de devolución de llamada EvtInterruptDpc. Por lo tanto, es posible que el controlador tenga que almacenar datos de interrupción de varias interrupciones y el EvtInterruptIsr yEvtInterruptDpc funciones de devolución de llamada podrían tener que determinar qué datos de interrupción ha sido procesado por completo por el controlador y que no lo ha hecho.
A partir de la versión 1.11 de KMDF, el controlador puede proporcionar control de interrupciones de nivel pasivo. Si el controlador ha solicitado el control de nivel pasivo para un objeto de interrupción, antes de llamar a la EvtInterruptIsr función de devolución de llamada en IRQL = PASSIVE_LEVEL, el marco adquiere el bloqueo de interrupción de nivel pasivo que el controlador configuró en la estructura de WDF_INTERRUPT_CONFIG del objeto de interrupción. Al igual que con el control de interrupciones en DIRQL, la función EvtInterruptIsr del controlador debe guardar información sobre la interrupción para su posterior procesamiento.
Los controladores que admiten el control de interrupciones de nivel pasivo pueden proporcionar una EvtInterruptWorkItem o una función de devolución de llamada EvtInterruptDpc para procesar la información guardada.
Para obtener más información sobre el control de interrupciones en controladores basados en marcos, consulte control de interrupciones de hardware.
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 | wdfinterrupt.h (incluya Wdf.h) |
irQL | (Consulte la sección Comentarios). |