Méthode IWDFInterrupt ::AcquireInterruptLock (wudfddi.h)
[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. Pour plus d’informations, consultez Prise en main avec UMDF.]
La méthode AcquireInterruptLock commence une séquence de code qui s’exécute tout en tenant le verrou d’un objet d’interruption.
Syntaxe
void AcquireInterruptLock();
Valeur de retour
None
Remarques
Lorsqu’un pilote appelle AcquireInterruptLock, le système acquiert le verrou d’interruption de l’infrastructure.
Lorsque le pilote appelle ReleaseInterruptLock, le système libère le verrou d’interruption.
Vous pouvez utiliser AcquireInterruptLock et ReleaseInterruptLock si votre pilote doit exécuter quelques lignes de code sans être préempté et avec interruption de maintenance désactivée.
Votre pilote ne peut pas appeler AcquireInterruptLock avant que l’infrastructure ait appelé la fonction de rappel OnInterruptEnable du pilote ou après que l’infrastructure ait appelé la fonction de rappel OnInterruptDisable du pilote.
Une fois que votre pilote a appelé AcquireInterruptLock, il ne doit plus appeler la méthode pour le même objet d’interruption avant d’appeler ReleaseInterruptLock.
Lors de l’exécution dans un thread arbitraire, tel qu’une méthode de rappel de file d’attente d’E/S, les pilotes doivent appeler IWDFInterrupt ::TryToAcquireInterruptLock au lieu de IWDFInterrupt ::AcquireInterruptLock. Par exemple, le pilote appelle IWDFInterrupt ::TryToAcquireInterruptLock à partir de IQueueCallbackRead ::OnRead.
Cela permet d’éviter le risque d’interblocage, comme décrit dans le scénario suivant.
- Pour déterminer si son appareil a été interrompu, un UMDF envoie des E/S à son bus à partir de son ISR, avec le verrou d’interruption maintenu.
- Le pilote de bus effectue une deuxième requête dans le thread dans lequel il a reçu la requête ci-dessus.
- La routine d’achèvement de la deuxième requête envoie une requête au pilote UMDF.
- La routine de répartition des E/S du pilote UMDF appelle IWDFInterrupt ::AcquireInterruptLock, qui tente ensuite d’acquérir le verrou d’interruption.
Pour plus d’informations sur le verrouillage manuel des interruptions, consultez Synchronisation du code d’interruption.
Pour plus d’informations sur la gestion des interruptions dans les pilotes UMDF, consultez Accès au matériel et Gestion des interruptions.
Configuration requise
Condition requise | Valeur |
---|---|
Fin de la prise en charge | Non disponible dans UMDF 2.0 et versions ultérieures. |
Plateforme cible | Desktop (Expérience utilisateur) |
Version UMDF minimale | 1.11 |
En-tête | wudfddi.h |
DLL | WUDFx.dll |