Compartir a través de


Mantenimiento de una interrupción (UMDF 1)

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.

Los ejemplos de UMDF 1 archivados se pueden encontrar en la actualización de ejemplos de controladores de Windows 11, versión 22H2 - mayo de 2022.

Para obtener más información, consulta Introducción con UMDF.

El mantenimiento de una interrupción consta de dos pasos:

  1. Guardar información volátil (por ejemplo, registrar contenido) rápidamente, en una rutina de servicio de interrupción.
  2. Procesando la información volátil guardada en una rutina workitem.

Cuando un dispositivo genera una interrupción de hardware, el marco llama a la rutina de servicio de interrupción del controlador (ISR), que los controladores basados en el marco implementan como una función de devolución de llamada OnInterruptIsr .

La función de devolución de llamada OnInterruptIsr , que se ejecuta en PASSIVE_LEVEL, debe guardar rápidamente la información de interrupción, como registrar contenido, poner en cola un objeto workitem para procesar los datos más allá y volver desde el ISR para permitir el mantenimiento de otras interrupciones si se comparte la línea de interrupción. Dado que el ISR del controlador UMDF se ejecuta en PASSIVE_LEVEL, no se recomienda controlar las interrupciones basadas en línea pci. Estas interrupciones suelen compartirse entre varios dispositivos, algunos de los cuales podrían no aceptar retrasos de ISR. Sin embargo, puede controlar las interrupciones de MSI de PCI en un controlador UMDF. Estas interrupciones tienen semántica perimetral y no se comparten.

Normalmente, la función de devolución de llamada OnInterruptIsr programa un objeto workitem para procesar la información guardada más adelante. Los controladores basados en marcos implementan rutinas de trabajo como funciones de devolución de llamada OnInterruptWorkItem .

La mayoría de los controladores usan una única función de devolución de llamada OnInterruptWorkItem para cada tipo de interrupción. Para programar la ejecución de una función de devolución de llamada OnInterruptWorkItem , un controlador debe llamar a IWDFInterrupt::QueueWorkItemForIsr desde la función de devolución de llamada OnInterruptIsr .

Si el controlador crea varios objetos de cola de marco para cada dispositivo, puede considerar la posibilidad de usar un objeto workitem independiente y una función de devolución de llamada OnWorkItem para cada cola. Para programar la ejecución de una función de devolución de llamada OnWorkItem , el controlador primero debe crear uno o varios objetos workitem mediante una llamada a IWdfDevice3::CreateWorkItem, normalmente desde la función de devolución de llamada IDriverEntry::OnDeviceAdd del controlador. A continuación, la función de devolución de llamada OnInterruptIsr del controlador puede llamar a IWDFWorkItem::Enqueue.

Normalmente, los controladores completan las solicitudes de E/S en sus funciones de devolución de llamada OnInterruptWorkItem o OnWorkItem .

Para obtener un ejemplo de un controlador UMDF que controla las interrupciones, consulte el controlador de ejemplo SpbAccelerometer, disponible a partir de la Windows 8 WDK.