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 nuevos controladores UMDF deben escribirse mediante 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 a UMDF.

Un controlador OnInterruptIsr función de devolución de llamada de eventos proporciona 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 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.

[in] Reserved

Reservado para uso del sistema.

Valor devuelto

Ninguno

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 un OnInterruptIsr función de devolución de llamada, 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.

El OnInterruptIsr función de devolución de llamada es una rutina de servicio de interrupción (ISR) del controlador UMDF, que se llama a 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 no compartidas o MSI, 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 pueda perderse 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 un OnInterruptWorkItem devolución de llamada. Para poner en cola un elemento de trabajo, el controlador llama al método IWDFInterrupt::QueueWorkItemForIsr.

Para obtener más información sobre cómo controlar las 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 un OnInterruptIsr función de devolución de llamada 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 Valor
fin del soporte técnico No disponible en UMDF 2.0 y versiones posteriores.
de la plataforma de destino de Escritorio
versión mínima de UMDF 1.11
encabezado de wudfinterrupt.h

Consulte también