Maintenance d’une interruption (UMDF 1)
Avertissement
UMDF 2 est la dernière version d’UMDF et remplace UMDF 1. Tous les nouveaux pilotes UMDF doivent être écrits à l’aide d’UMDF 2. Aucune nouvelle fonctionnalité n’est ajoutée à UMDF 1 et la prise en charge d’UMDF 1 est limitée sur les versions plus récentes de Windows 10. Les pilotes Windows universels doivent utiliser UMDF 2.
Les exemples UMDF 1 archivés se trouvent dans la Windows 11, version 22H2 - Mise à jour des exemples de pilotes de mai 2022.
Pour plus d’informations, consultez Prise en main avec UMDF.
La maintenance d’une interruption se compose de deux étapes :
- Enregistrement rapide d’informations volatiles (telles que le contenu de l’inscription) dans une routine de service d’interruption.
- Traitement des informations volatiles enregistrées dans une routine d’élément de travail.
Lorsqu’un appareil génère une interruption matérielle, l’infrastructure appelle la routine de service d’interruption (ISR) du pilote, que les pilotes basés sur l’infrastructure implémentent en tant que fonction de rappel OnInterruptIsr .
La fonction de rappel OnInterruptIsr , qui s’exécute à PASSIVE_LEVEL, doit enregistrer rapidement les informations d’interruption, telles que l’inscription du contenu, la mise en file d’attente d’un élément de travail pour traiter davantage les données et le retour à partir de l’ISR pour permettre la maintenance d’autres interruptions si la ligne d’interruption est partagée. Étant donné que l’ISR du pilote UMDF s’exécute à PASSIVE_LEVEL, la gestion des interruptions basées sur la ligne PCI n’est pas recommandée. Ces interruptions sont généralement partagées entre plusieurs appareils, dont certains peuvent ne pas accepter les retards ISR. Toutefois, vous pouvez gérer les interruptions MSI PCI dans un pilote UMDF. Ces interruptions ont une sémantique de périmètre et ne sont pas partagées.
En règle générale, la fonction de rappel OnInterruptIsr planifie un élément de travail pour traiter les informations enregistrées ultérieurement. Les pilotes basés sur l’infrastructure implémentent des routines d’élément de travail en tant que fonctions de rappel OnInterruptWorkItem .
La plupart des pilotes utilisent une seule fonction de rappel OnInterruptWorkItem pour chaque type d’interruption. Pour planifier l’exécution d’une fonction de rappel OnInterruptWorkItem , un pilote doit appeler IWDFInterrupt::QueueWorkItemForIsr à partir de la fonction de rappel OnInterruptIsr .
Si votre pilote crée plusieurs objets de file d’attente d’infrastructure pour chaque appareil, vous pouvez envisager d’utiliser un objet workitem distinct et une fonction de rappel OnWorkItem pour chaque file d’attente. Pour planifier l’exécution d’une fonction de rappel OnWorkItem , le pilote doit d’abord créer un ou plusieurs objets workitem en appelant IWdfDevice3::CreateWorkItem, généralement à partir de la fonction de rappel IDriverEntry::OnDeviceAdd du pilote. Ensuite, la fonction de rappel OnInterruptIsr du pilote peut appeler IWDFWorkItem::Enqueue.
Les pilotes effectuent généralement des demandes d’E/S dans leurs fonctions de rappel OnInterruptWorkItem ou OnWorkItem .
Pour obtenir un exemple de pilote UMDF qui gère les interruptions, consultez l’exemple de pilote SpbAccelerometer, disponible à partir du Windows 8 WDK.