EVT_WDF_INTERRUPT_ISR Rückruffunktion (wdfinterrupt.h)

[Gilt für KMDF und UMDF]

Die EvtInterruptIsr-Ereignisrückruffunktion eines Treibers verwendet einen Hardware-Interrupt.

Syntax

EVT_WDF_INTERRUPT_ISR EvtWdfInterruptIsr;

BOOLEAN EvtWdfInterruptIsr(
  [in] WDFINTERRUPT Interrupt,
  [in] ULONG MessageID
)
{...}

Parameter

[in] Interrupt

Ein Handle für ein Framework-Interruptobjekt.

[in] MessageID

Wenn das Gerät MSIs (Message-SignalEd Interrupts) verwendet, ist dieser Parameter die Nachrichtennummer, die die Hardwareunterbrechungsnachricht des Geräts identifiziert. Andernfalls ist dieser Wert 0.

Rückgabewert

Die Rückruffunktion EvtInterruptIsr muss TRUE zurückgeben, wenn die Funktion den Hardware-Interrupt verwendet. Andernfalls muss diese Funktion FALSE zurückgeben.

Hinweise

Um eine EvtInterruptIsr-Rückruffunktion zu registrieren, muss Ihr Treiber die Adresse der Rückruffunktion in einer WDF_INTERRUPT_CONFIG-Struktur platzieren, bevor WdfInterruptCreate aufgerufen wird.

Die Rückruffunktion EvtInterruptIsr ist eine frameworkbasierte Interrupt-Dienstroutine (INTERRUPT Service Routine, ISR) des Treibers, die aufgerufen wird, wenn ein Hardware-Interrupt auftritt.

Wenn der Interrupt nicht von der Hardware stammt, die diese EvtInterruptIsr-Rückruffunktion bereitstellt, muss der Treiber FALSE zurückgeben. Wenn der Interruptvektor freigegeben wird, ruft das System eine weitere Interruptdienstroutine auf.

Wenn der Treiber keine Behandlung auf passiver Ebene für ein Interruptobjekt angefordert hat, hebt das Framework vor dem Aufrufen der EvtInterruptIsr-Rückruffunktion den IRQL des Prozessors auf die IRQL (DIRQL) des Geräts und ruft die Drehsperre ab, die der Treiber in der WDF_INTERRUPT_CONFIG-Struktur des Interruptobjekts angegeben hat.

Da die Rückruffunktion EvtInterruptIsr mit einem relativ hohen IRQL-Wert ausgeführt wird, kann sie nur sehr wenige Frameworkobjektmethoden oder Systemroutinen aufrufen. Darüber hinaus kann diese Rückruffunktion nicht auf ausgelagerten Code zugreifen.

In der Regel löscht die Rückruffunktion EvtInterruptIsr den Hardwareunterbruch und speichert alle Informationen, die möglicherweise verloren gehen, nachdem die Rückruffunktion zurückgegeben wird, und das System senkt den IRQL (da das Senken des IRQL zusätzliche Interrupts zulässt). Frameworkbasierte Treiber speichern Informationen zum Interrupt im Kontextbereich des Interruptobjekts.

Treiber bieten in der Regel eine EvtInterruptDpc-Rückruffunktion , um die gespeicherten Informationen an einem niedrigeren IRQL zu verarbeiten. (Einige Treiber bieten eine oder mehrere EvtDpcFunc-Rückruffunktionen anstelle einer EvtInterruptDpc-Rückruffunktion .) Informationen zum Planen einer EvtInterruptDpc-Rückruffunktion für die Ausführung finden Sie unter Servicing an Interrupt.

Die Rückruffunktion EvtInterruptIsr muss mehrere Interrupts bedienen können, bevor die Rückruffunktion EvtInterruptDpc ausgeführt wird. Daher muss der Treiber möglicherweise Interruptdaten von mehreren Interrupts speichern, und die Rückruffunktionen EvtInterruptIsr undEvtInterruptDpc müssen möglicherweise ermitteln, welche Interruptdaten vom Treiber vollständig verarbeitet wurden und welche nicht.

Ab Version 1.11 von KMDF kann Ihr Treiber die Behandlung von Interrupts auf passiver Ebene bereitstellen. Wenn der Treiber die Behandlung auf passiver Ebene für ein Interruptobjekt angefordert hat, ruft das Framework vor dem Aufrufen der EvtInterruptIsr-Rückruffunktion dieses Interrupts unter IRQL = PASSIVE_LEVEL die Interruptsperre auf passiver Ebene ab, die der Treiber in der WDF_INTERRUPT_CONFIG-Struktur des Interruptobjekts konfiguriert hat. Wie bei der Interruptbehandlung bei DIRQL sollte die EvtInterruptIsr-Funktion des Treibers weiterhin Informationen zum Interrupt für die spätere Verarbeitung speichern.

Treiber, die die Behandlung von Interrupts auf passiver Ebene unterstützen, können entweder eine EvtInterruptWorkItem - oder eine EvtInterruptDpc-Rückruffunktion bereitstellen, um die gespeicherten Informationen zu verarbeiten.

Weitere Informationen zum Behandeln von Interrupts in frameworkbasierten Treibern finden Sie unter Behandeln von Hardwareunterbrechungen.

Anforderungen

Anforderung Wert
Zielplattform Universell
KMDF-Mindestversion 1.0
UMDF-Mindestversion 2.0
Kopfzeile wdfinterrupt.h (einschließen von Wdf.h)
IRQL (Siehe Abschnitt Hinweise.)

Weitere Informationen

EvtDpcFunc

EvtInterruptDpc

WDF_INTERRUPT_CONFIG

WdfInterruptCreate

WdfInterruptGetDevice

WdfInterruptGetInfo

WdfInterruptWdmGetInterrupt