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. UMDF 1 werden keine neuen Features hinzugefügt, und die Unterstützung für UMDF 1 für neuere Versionen von Windows 10 ist eingeschränkt. 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

Keine

Bemerkungen

Wenn ein Treiber AcquireInterruptLock aufruft, ruft das System die Interruptsperre des Frameworks ab.

Wenn der Treiber ReleaseInterruptLock aufruft, gibt das System die Interruptsperre auf.

Sie können AcquireInterruptLock und ReleaseInterruptLock verwenden, wenn Ihr Treiber einige Codezeilen ausführen muss, ohne vorzeitig und mit deaktivierter Interruptwartung ausgeführt zu werden.

Der 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 Der Treiber AcquireInterruptLock aufgerufen hat, darf er die Methode nicht erneut für dasselbe Interruptobjekt aufrufen, 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::AcquireInterruptLock aufrufen. Der Treiber ruft beispielsweise IWDFInterrupt::TryToAcquireInterruptLock von IQueueCallbackRead::OnRead auf.

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

  1. Um zu ermitteln, ob das Gerät unterbrochen wurde, sendet ein UMDF E/A von innerhalb des ISR an seinen Bus, wobei die Interruptsperre beibehalten wird.
  2. Der Bustreiber schließt eine zweite Anforderung im selben Thread ab, in dem er die oben genannte Anforderung empfangen hat.
  3. Die Vervollständigungsroutine der zweiten Anforderung sendet eine Anforderung an den UMDF-Treiber.
  4. Die E/A-Dispatchroutine des UMDF-Treibers ruft IWDFInterrupt::AcquireInterruptLock auf, wodurch dann deadlocks versucht werden, die Interruptsperre 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 zur Behandlung von Interrupts in UMDF-Treibern finden Sie unter Zugreifen auf Hardware und Behandlung von Interrupts.

Anforderungen

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

Weitere Informationen

IWDFInterrupt

IWDFInterrupt::ReleaseInterruptLock

WdfInterruptAcquireLock