Partager via


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.

  1. 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.
  2. Le pilote de bus effectue une deuxième requête dans le thread dans lequel il a reçu la requête ci-dessus.
  3. La routine d’achèvement de la deuxième requête envoie une requête au pilote UMDF.
  4. La routine de répartition des E/S du pilote UMDF appelle IWDFInterrupt ::AcquireInterruptLock, qui tente ensuite d’acquérir le verrou d’interruption.
Le pilote ne doit pas tenter d’acquérir le verrou de manière récursive. S’il est connecté au débogueur, le framework introduit un point d’arrêt dans ce scénario.

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

Voir aussi

IWDFInterrupt

IWDFInterrupt ::ReleaseInterruptLock

WdfInterruptAcquireLock