Compartir a través de


WUDF_INTERRUPT_ISR función de devolución de llamada (wudfinterrupt.h)

Advertencia

UMDF 2 es la versión más reciente de UMDF y sustituye a UMDF 1. Todos los controladores UMDF nuevos deben escribirse con UMDF 2. No se agregan nuevas características a UMDF 1 y hay compatibilidad limitada con UMDF 1 en versiones más recientes de Windows 10. Los controladores universales de Windows deben usar UMDF 2. Para obtener más información, consulta Introducción con UMDF.

La función de devolución de llamada de eventos OnInterruptIsr de un controlador atiende una interrupción de hardware.

Sintaxis

typedef
BOOLEAN
_Function_class_(WUDF_INTERRUPT_ISR)
WUDF_INTERRUPT_ISR(
    _In_
    IWDFInterrupt* Interrupt,
    _In_
    ULONG MessageID,
    _In_
    ULONG Reserved
    );

typedef WUDF_INTERRUPT_ISR *PFN_WUDF_INTERRUPT_ISR;

Parámetros

[in] Interrupt

Puntero a la interfaz IWDFInterrupt .

[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.

[in] Reserved

Reservado para uso del sistema.

Valor devuelto

None

Observaciones

Devuelve TRUE si el controlador reconoce la propiedad de la interrupción y ha detenido y confirmado la interrupción en su dispositivo. De lo contrario, devuelve FALSE.

Para registrar una función de devolución de llamada OnInterruptIsr , el controlador debe colocar la dirección de la función de devolución de llamada en una estructura de WUDF_INTERRUPT_CONFIG antes de llamar a IWDFDevice3::CreateInterrupt.

La función de devolución de llamada OnInterruptIsr es una rutina de servicio de interrupción (ISR) del controlador UMDF, a la que se llama en PASSIVE_LEVEL cuando se produce una interrupción de hardware.

Para una interrupción desencadenada por el borde o una interrupción con señal de mensaje (MSI), el marco llama a OnInterruptIsr fuera del contexto de distribución de interrupciones del sistema operativo. Esto se debe a que UMDF solo permite interrupciones perimetrales o MSI no compartidas, y el controlador no necesita interactuar con su hardware en este contexto.

Para una interrupción desencadenada por el nivel, el marco llama a OnInterruptIsr en el contexto del envío de interrupciones del sistema operativo. Como resultado, el subproceso de distribución de interrupciones del sistema operativo se bloquea en modo kernel a la espera de una respuesta del controlador.

Normalmente, OnInterruptIsr guarda cualquier información volátil que se pueda perder y borra la interrupción del hardware. Para una interrupción desencadenada por el nivel, el controlador debe detener y confirmar la interrupción en el dispositivo y, a continuación, devolver TRUE si posee la interrupción. El controlador debe realizar cualquier procesamiento adicional en una devolución de llamada OnInterruptWorkItem . Para poner en cola un elemento de trabajo, el controlador llama al método IWDFInterrupt::QueueWorkItemForIsr .

Para obtener más información sobre el control de interrupciones en los controladores UMDF, consulte Acceso a hardware y control de interrupciones.

Ejemplos

El tipo de función se declara en Wudfinterrupt.h, como se indica a continuación.

typedef
BOOLEAN
WUDF_INTERRUPT_ISR(
    _In_
    IWDFInterrupt* Interrupt,
    _In_
    ULONG MessageID,
    _In_
    ULONG Reserved
    );

typedef WUDF_INTERRUPT_ISR *PFN_WUDF_INTERRUPT_ISR;

Para definir una función de devolución de llamada OnInterruptIsr denominada MyInterruptIsr, primero debe proporcionar una declaración de función que requieren SDV y otras herramientas de comprobación, como se indica a continuación:

WUDF_INTERRUPT_NOTIFY  MyInterruptIsr;

A continuación, implemente la función de devolución de llamada de la siguiente manera:

BOOLEAN
  MyInterruptIsr (
    IN IWDFInterrupt*  Interrupt,
    IN ULONG  MessageID,
    IN ULONG Reserved
    )
  {…}

Requisitos

Requisito Value
Finalización del soporte técnico No disponible en UMDF 2.0 y versiones posteriores.
Plataforma de destino Escritorio
Versión mínima de UMDF 1.11
Encabezado wudfinterrupt.h

Consulte también