Freigeben über


Wartung eines Interrupts (UMDF 1)

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.

Die archivierten UMDF 1-Beispiele finden Sie im Windows 11, Version 22H2 – Mai 2022 Treiberbeispiele Update.

Weitere Informationen finden Sie unter Erste Schritte mit UMDF.

Die Wartung eines Interrupts besteht aus zwei Schritten:

  1. Schnelles Speichern flüchtiger Informationen (z. B. Registrieren von Inhalten) in einer Interruptdienstroutine.
  2. Verarbeitung der gespeicherten flüchtigen Informationen in einer Arbeitselementroutine.

Wenn ein Gerät einen Hardware-Interrupt generiert, ruft das Framework die Interrupt-Dienstroutine (ISR) des Treibers auf, die frameworkbasierte Treiber als OnInterruptIsr-Rückruffunktion implementieren.

Die OnInterruptIsr-Rückruffunktion , die bei PASSIVE_LEVEL ausgeführt wird, muss schnell Interruptinformationen speichern, z. B. Den Inhalt registrieren, ein Arbeitselement in die Warteschlange stellen, um die Daten weiter zu verarbeiten, und von der ISR zurückkehren, um die Wartung anderer Interrupts zu ermöglichen, wenn die Interruptzeile gemeinsam genutzt wird. Da der ISR des UMDF-Treibers bei PASSIVE_LEVEL ausgeführt wird, wird die Behandlung von PCI-leitungsbasierten Interrupts nicht empfohlen. Diese Unterbrechungen werden in der Regel von mehreren Geräten gemeinsam genutzt, von denen einige keine ISR-Verzögerungen akzeptieren. Sie können jedoch PCI-MSI-Interrupts in einem UMDF-Treiber verarbeiten. Diese Interrupts verfügen über Edgesemantik und werden nicht freigegeben.

In der Regel plant die OnInterruptIsr-Rückruffunktion ein Arbeitselement, um die gespeicherten Informationen später zu verarbeiten. Frameworkbasierte Treiber implementieren Arbeitselementroutinen als OnInterruptWorkItem-Rückruffunktionen .

Die meisten Treiber verwenden eine einzelne OnInterruptWorkItem-Rückruffunktion für jeden Interrupttyp. Um die Ausführung einer OnInterruptWorkItem-Rückruffunktion zu planen, muss ein Treiber IWDFInterrupt::QueueWorkItemForIsr aus der OnInterruptIsr-Rückruffunktion aufrufen.

Wenn Ihr Treiber mehrere Frameworkwarteschlangenobjekte für jedes Gerät erstellt, sollten Sie ein separates Workitem-Objekt und eine OnWorkItem-Rückruffunktion für jede Warteschlange verwenden. Um die Ausführung einer OnWorkItem-Rückruffunktion zu planen, muss der Treiber zuerst ein oder mehrere Workitem-Objekte erstellen, indem er IWdfDevice3::CreateWorkItem aufruft, in der Regel über die IDriverEntry::OnDeviceAdd-Rückruffunktion des Treibers. Dann kann die OnInterruptIsr-Rückruffunktion des Treibers IWDFWorkItem::Enqueue aufrufen.

Treiber führen in der Regel E/A-Anforderungen in ihren Rückruffunktionen OnInterruptWorkItem oder OnWorkItem aus.

Ein Beispiel für einen UMDF-Treiber, der Interrupts verarbeitet, finden Sie im Beispieltreiber SpbAccelerometer, der ab dem Windows 8 WDK verfügbar ist.