EVT_WDF_INTERRUPT_DPC Rückruffunktion (wdfinterrupt.h)
[Gilt für KMDF und UMDF]
Die EvtInterruptDpc-Ereignisrückruffunktion eines Treibers verarbeitet Unterbrechungsinformationen, die von der EvtInterruptIsr-Rückruffunktion des Treibers gespeichert wurden.
Syntax
EVT_WDF_INTERRUPT_DPC EvtWdfInterruptDpc;
void EvtWdfInterruptDpc(
[in] WDFINTERRUPT Interrupt,
[in] WDFOBJECT AssociatedObject
)
{...}
Parameter
[in] Interrupt
Ein Handle für ein Framework-Interruptobjekt.
[in] AssociatedObject
Ein Handle für das Framework-Geräteobjekt, das der Treiber an WdfInterruptCreate übergeben hat.
Rückgabewert
Keine
Bemerkungen
Um eine EvtInterruptDpc-Rückruffunktion zu registrieren, muss Ihr Treiber die Adresse der Rückruffunktion in einer WDF_INTERRUPT_CONFIG-Struktur platzieren, bevor WdfInterruptCreate aufgerufen wird.
Treiber führen in der Regel E/A-Anforderungen in ihren EvtInterruptDpc-Rückruffunktionen aus.
Die Rückruffunktion EvtInterruptDpc wird bei DISPATCH_LEVEL ausgeführt und darf nicht auf ausgelagerten Code zugreifen. Wenn eine EvtInterruptDpc-Rückruffunktion Vorgänge unter IRQL = PASSIVE_LEVEL ausführen muss, kann sie Frameworkarbeitselemente verwenden.
In KMDF Version 1.11 und höher kann Ihr Treiber Interrupts auf passiver Ebene unterstützen und entweder ein EvtInterruptWorkItem oder eine EvtInterruptDpc-Rückruffunktion bereitstellen. Wenn Ihr Treiber Interrupts auf passiver Ebene unterstützt und eine EvtInterruptDpc-Rückruffunktion bereitstellt, kann der Treiber die Interruptsperre auf passiver Ebene nicht innerhalb des Rückrufs abrufen.
Die meisten Treiber verwenden eine einzelne EvtInterruptDpc-Rückruffunktion für jeden Interrupttyp. Wenn Ihr Treiber mehrere Framework-Warteschlangenobjekte für jedes Gerät erstellt, können Sie erwägen, für jede Warteschlange ein separates DPC-Objekt und eine evtDpcFunc-Rückruffunktion zu verwenden.
Um die Ausführung einer EvtInterruptDpc-Rückruffunktion zu planen, muss der Treiber WdfInterruptQueueDpcForIsr aus der Rückruffunktion EvtInterruptIsr aufrufen.
Wenn ein Treiber die Ausführung einer EvtInterruptDpc-Rückruffunktion plant, fügt das System der DPC-Warteschlange des Systems ein DPC-Objekt hinzu. Wenn das System keine Aufgaben mit höherer Priorität ausführt, entfernt es das Objekt aus der Warteschlange und ruft die Rückruffunktion EvtInterruptDpc auf.
Das System fügt das DPC-Objekt nicht der DPC-Warteschlange hinzu, wenn sich das Objekt bereits in der Warteschlange befindet. Eine EvtInterruptIsr-Rückruffunktion kann mehrmals aufgerufen werden, bevor das System die EvtInterruptDpc-Rückruffunktion aufruft . Daher muss die EvtInterruptDpc-Rückruffunktion In der Lage sein, Informationen aus mehreren Interrupts zu verarbeiten, und sie muss alle Interrupts verarbeiten, die seit dem letzten Aufruf aufgetreten sind.
In der Regel ist es erforderlich, die Ausführung der EvtInterruptDpc-Rückruffunktion eines Treibers mit der Ausführung anderer Rückruffunktionen zu synchronisieren. Weitere Informationen finden Sie unter Synchronisieren von Interruptcode.
Weitere Informationen zur Behandlung 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.) |