Création d’un objet d’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.
Un pilote UMDF qui gère les interruptions matérielles d’un appareil doit créer un objet d’interruption d’infrastructure pour chaque interruption que chaque appareil peut prendre en charge.
En règle générale, un pilote crée des objets d’interruption de framework dans IDriverEntry::OnDeviceAdd. Toutefois, vous pouvez également créer des objets d’interruption dans IPnpCallbackHardware2::OnPrepareHardware.
Pour créer un objet d’interruption de framework, votre pilote doit initialiser une structure WUDF_INTERRUPT_CONFIG et la passer à la méthode IWDFDevice3::CreateInterrupt . Cette méthode inscrit les fonctions de rappel d’événements fournies par le pilote suivantes :
OnInterruptEnable
Active une interruption matérielle.
OnInterruptDisable
Désactive une interruption matérielle.
OnInterruptIsr
Routine de service d’interruption (ISR) pour l’interruption.
OnInterruptWorkItem
Routine de travail pour l’interruption.
Si vous le souhaitez, le pilote peut appeler IWDFInterrupt::SetPolicy ou IWDFInterrupt::SetExtendedPolicy pour spécifier des paramètres d’interruption supplémentaires.
L’infrastructure appelle la fonction de rappel IDriverEntry::OnDeviceAdd du pilote avant que le gestionnaire Plug-and-Play (PnP) ait affecté des ressources système, telles que des vecteurs d’interruption, à l’appareil. Une fois que le gestionnaire PnP a affecté des ressources, l’infrastructure stocke les ressources d’interruption dans l’objet d’interruption de l’appareil. (Les pilotes qui ne prennent pas en charge Plug-and-Play ne peuvent pas utiliser d’objets d’interruption.)
Les interruptions signalées par message sont prises en charge dans Windows Vista et les versions ultérieures du système d’exploitation. Pour permettre au système d’exploitation de prendre en charge les MSIs pour votre appareil, le fichier INF de votre pilote doit définir certaines valeurs dans le Registre. Pour plus d’informations sur la définition de ces valeurs, consultez Activation des interruptions Message-Signaled dans le Registre.
Si un appareil peut prendre en charge un certain nombre de messages MSI, le gestionnaire PnP tente d’attribuer ce nombre de messages à l’appareil. Si le gestionnaire PnP ne peut pas affecter tous les messages que l’appareil peut prendre en charge, il n’affectera qu’un seul message à l’appareil.
Votre pilote doit créer un objet d’interruption d’infrastructure pour chaque vecteur d’interruption ou message MSI que l’appareil peut prendre en charge. Si le gestionnaire PnP n’accorde pas à l’appareil toutes les ressources d’interruption que l’appareil peut prendre en charge, les objets d’interruption supplémentaires ne seront pas utilisés et leurs fonctions de rappel ne seront pas appelées.