Habilitar y deshabilitar interrupciones

Si el controlador controla las interrupciones del dispositivo, debe proporcionar funciones de devolución de llamada EvtInterruptEnable y EvtInterruptDisable que habiliten y deshabiliten las interrupciones. Normalmente, estas funciones de devolución de llamada se ejecutan en el DIRQL del dispositivo y deben hacer lo necesario para habilitar y deshabilitar el mecanismo de interrupción de un dispositivo. En el caso de las interrupciones de nivel pasivo, estas funciones de devolución de llamada se ejecutan en IRQL = PASSIVE_LEVEL manteniendo el bloqueo de interrupción de nivel pasivo.

Si el controlador debe realizar operaciones adicionales relacionadas con la habilitación o deshabilitación de interrupciones, y si estas operaciones adicionales no se pueden realizar en IRQL = DIRQL, el controlador también puede proporcionar las funciones de devolución de llamada EvtDeviceD0EntryPostInterruptsEnabled y EvtDeviceD0ExitPreInterruptsDisabled . Estas dos funciones de devolución de llamada se ejecutan en IRQL = PASSIVE_LEVEL sin bloqueo de interrupción y pueden llamar a métodos de objeto de marco que no están disponibles en IRQL = DIRQL.

El marco llama a las funciones de devolución de llamada EvtInterruptEnable y EvtDeviceD0EntryPostInterruptsEnabled del controlador cada vez que el dispositivo entra en su estado de trabajo (D0), después de que el marco haya llamado a la función de devolución de llamada EvtDeviceD0Entry del controlador.

El marco llama a las funciones de devolución de llamada EvtDeviceD0ExitPreInterruptsDisable yEvtInterruptDisable del controlador cada vez que el dispositivo deja su estado de trabajo, antes de que el marco llame a la función de devolución de llamada EvtDeviceD0Exit del controlador. Para obtener más información sobre cuándo el marco llama a las funciones de devolución de llamada de un controlador, consulte Escenarios de administración de energía y PnP.

No debe suponer que un dispositivo usará los mismos recursos de interrupción cada vez que el marco llama a la función de devolución de llamada EvtInterruptEnable del controlador. A veces, el administrador de PnP redistribuye los recursos del sistema y puede asignar nuevos recursos de interrupción al dispositivo.

El controlador puede llamar a WdfInterruptGetInfo para determinar los recursos de interrupción de un dispositivo. El controlador puede llamar a WdfInterruptGetDevice para determinar el dispositivo al que pertenece un objeto de interrupción. (Algunos controladores pueden llamar a WdfInterruptWdmGetInterrupt).

Para habilitar y deshabilitar las interrupciones directamente, el controlador puede llamar a los métodos WdfInterruptEnable y WdfInterruptDisable del objeto de interrupción, que llaman a las funciones de devolución de llamada de evento EvtInterruptEnable y EvtInterruptDisable del controlador. Sin embargo, la mayoría de los controladores solo deben permitir que el marco llame a las funciones de devolución de llamada EvtInterruptEnable y EvtInterruptDisable en los momentos adecuados.