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 |