Partager via


IWDFInterrupt ::AcquireInterruptLock, méthode (wudfddi.h)

[Avertissement : UMDF 2 est la dernière version de UMDF et remplace UMDF 1. Tous les nouveaux pilotes UMDF doivent être écrits à l’aide de UMDF 2. Aucune nouvelle fonctionnalité n’est ajoutée à UMDF 1 et il existe une prise en charge limitée de UMDF 1 sur les versions plus récentes de Windows 10. Les pilotes Windows universels doivent utiliser UMDF 2. Pour plus d’informations, consultez Bien démarrer avec UMDF.]

La méthode AcquireInterruptLock commence une séquence de code qui s’exécute lors de la conservation du verrou d’un objet d’interruption.

Syntaxe

void AcquireInterruptLock();

Valeur de retour

Aucun

Remarques

Lorsqu’un pilote appelle AcquireInterruptLock, le système acquiert le verrou d’interruption du framework.

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 une maintenance d’interruption désactivée.

Votre pilote ne peut pas appeler AcquireInterruptLock avant que l’infrastructure n’ait appelé la fonction de rappel OnInterruptEnable du pilote ou une fois que l’infrastructure a appelé le OnInterruptDisable du pilote fonction de rappel.

Une fois que votre pilote appelle AcquireInterruptLock, il ne doit pas appeler à nouveau 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 évite la possibilité d’interblocage, comme décrit dans le scénario suivant.

  1. Pour déterminer si son appareil a été interrompu, une UMDF envoie des E/S à son bus à partir de son ISR, avec le verrou d’interruption conservé.
  2. Le pilote de bus termine une deuxième requête dans le même thread dans lequel il a reçu la demande 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 distribution d’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. Si elle est connectée au débogueur, l’infrastructure 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 aux interruptions matérielles et de gestion des interruptions.

Exigences

Exigence Valeur
fin du support Indisponible dans UMDF 2.0 et versions ultérieures.
plateforme cible Bureau
version minimale de UMDF 1.11
d’en-tête wudfddi.h
DLL WUDFx.dll

Voir aussi

IWDFInterrupt

IWDFInterrupt ::ReleaseInterruptLock

WdfInterruptAcquireLock