Freigeben über


IWDFInterrupt::AcquireInterruptLock-Methode (wudfddi.h)

[Warnung: UMDF 2 ist die neueste Version von UMDF und ersetzt UMDF 1. Alle neuen UMDF-Treiber sollten mit UMDF 2 geschrieben werden. Es werden keine neuen Features zu UMDF 1 hinzugefügt, und es gibt eingeschränkte Unterstützung für UMDF 1 für neuere Versionen von Windows 10. Universelle Windows-Treiber müssen UMDF 2 verwenden. Weitere Informationen finden Sie unter Erste Schritte mit UMDF-.]

Die AcquireInterruptLock--Methode beginnt eine Codesequenz, die ausgeführt wird, während die Sperre eines Interruptobjekts gehalten wird.

Syntax

void AcquireInterruptLock();

Rückgabewert

Nichts

Bemerkungen

Wenn ein Treiber AcquireInterruptLockaufruft, erwirbt das System die Unterbrechungssperre des Frameworks.

Wenn der Treiber ReleaseInterruptLockaufruft, gibt das System die Unterbrechungssperre frei.

Sie können AcquireInterruptLock- und ReleaseInterruptLock- verwenden, wenn Ihr Treiber einige Codezeilen ausführen muss, ohne dass die Wartung vorab und mit deaktiviertem Interrupt deaktiviert wird.

Ihr Treiber kann AcquireInterruptLock nicht aufrufen, bevor das Framework die OnInterruptEnable- Rückruffunktion des Treibers aufgerufen hat oder nachdem das Framework die OnInterruptDisable Rückruffunktion des Treibers aufgerufen hat.

Nachdem Ihr Treiber AcquireInterruptLockaufgerufen hat, darf die Methode nicht erneut für dasselbe Interruptobjekt aufgerufen werden, bevor ReleaseInterruptLock-aufgerufen wird.

Beim Ausführen in einem beliebigen Thread, z. B. einer E/A-Warteschlangenrückrufmethode, müssen Treiber IWDFInterrupt::TryToAcquireInterruptLock anstelle von IWDFInterrupt::AcquireInterruptLockaufrufen. Beispielsweise ruft der Treiber IWDFInterrupt::TryToAcquireInterruptLock von IQueueCallbackRead::OnReadauf.

Dadurch wird die Möglichkeit eines Deadlocks vermieden, wie im folgenden Szenario beschrieben.

  1. Um festzustellen, ob das Gerät unterbrochen wurde, sendet eine UMDF E/A von innerhalb des ISR an seinen Bus, wobei die Unterbrechungssperre gehalten ist.
  2. Der Bustreiber schließt eine zweite Anforderung im selben Thread ab, in dem er die oben genannte Anforderung erhalten hat.
  3. Die Abschlussroutine der zweiten Anforderung sendet eine Anforderung an den UMDF-Treiber.
  4. Die E/A-Verteilerroutine des UMDF-Treibers ruft IWDFInterrupt::AcquireInterruptLockauf, wodurch dann Deadlocks versucht, die Unterbrechungssperre abzurufen.
Der Treiber darf nicht versuchen, die Sperre rekursiv abzurufen. Wenn eine Verbindung mit dem Debugger besteht, führt das Framework in diesem Szenario einen Haltepunkt ein.

Weitere Informationen zur manuellen Unterbrechungssperre finden Sie unter Synchronisieren von Interruptcode.

Weitere Informationen zum Behandeln von Unterbrechungen in UMDF-Treibern finden Sie unter Zugreifen auf Hardware und Behandeln von Interrupts.

Anforderungen

Anforderung Wert
Ende des Supports In UMDF 2.0 und höher nicht verfügbar.
Zielplattform- Desktop
Mindest-UMDF-Version 1.11
Header- wudfddi.h
DLL- WUDFx.dll

Siehe auch

IWDFInterrupt-

IWDFInterrupt::ReleaseInterruptLock

WdfInterruptAcquireLock-