Compartir a través de


EVT_WDF_INTERRUPT_ISR función de devolución de llamada (wdfinterrupt.h)

[Se aplica a KMDF y UMDF]

La función de devolución de llamada de eventos EvtInterruptIsr de un controlador atiende 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 de marco.

[in] MessageID

Si el dispositivo usa interrupciones señaladas por mensajes (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.

Comentarios

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.

La función de devolución de llamada EvtInterruptIsr 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 servicio de función de devolución de llamada EvtInterruptIsr , 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 a la función de devolución de llamada EvtInterruptIsr , el marco genera el IRQL del procesador al IRQL (DIRQL) del dispositivo y adquiere el bloqueo de número que el controlador especificado en la estructura de WDF_INTERRUPT_CONFIG del objeto de interrupción.

Dado que la función de devolución de llamada EvtInterruptIsr 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 al código paginable .

Normalmente, la función de devolución de llamada EvtInterruptIsr borra la interrupción de hardware y guarda cualquier información que se pueda perder después de que la función de devolución de llamada se devuelva y el sistema reduce 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 una función de devolución de llamada EvtInterruptDpc 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 las funciones de devolución de llamada EvtInterruptIsr yEvtInterruptDpc podrían tener que determinar qué datos de interrupción han sido procesados 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 función de devolución de llamada EvtInterruptIsr de esa interrupción 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 función de devolución de llamada EvtInterruptWorkItem o 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 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)
IRQL (Vea la sección Comentarios.)

Consulte también

EvtDpcFunc

EvtInterruptDpc

WDF_INTERRUPT_CONFIG

WdfInterruptCreate

WdfInterruptGetDevice

WdfInterruptGetInfo

WdfInterruptWdmGetInterrupt