WdfInterruptQueueDpcForIsr-Funktion (wdfinterrupt.h)
[Gilt für KMDF und UMDF]
Die WdfInterruptQueueDpcForIsr-Methode stellt die Rückruffunktion EvtInterruptDpc eines Framework-Interruptobjekts für die Ausführung in die Warteschlange.
Syntax
BOOLEAN WdfInterruptQueueDpcForIsr(
[in] WDFINTERRUPT Interrupt
);
Parameter
[in] Interrupt
Ein Handle für ein Framework-Interruptobjekt.
Rückgabewert
WdfInterruptQueueDpcForIsr gibt TRUE zurück, wenn die Rückruffunktion EvtInterruptDpc des Interruptobjekts erfolgreich in die Warteschlange gestellt wird. Die -Methode gibt FALSE zurück, wenn die Rückruffunktion zuvor in eine Warteschlange eingereiht wurde und nicht ausgeführt wurde.
Eine Fehlerüberprüfung tritt auf, wenn der Treiber ein ungültiges Objekthandle bereitstellt.
Hinweise
Treiber rufen WdfInterruptQueueDpcForIsr in einer EvtInterruptIsr-Rückruffunktion auf.
Die Rückruffunktion EvtInterruptDpc eines Interruptobjekts kann nur einmal in die Warteschlange gestellt werden, bevor es ausgeführt wird. Wenn also ein Aufruf von WdfInterruptQueueDpcForIsr erfolgreich ist, geben nachfolgende Aufrufe FALSE zurück, bis das Framework die Rückruffunktion EvtInterruptDpc dequeuet .
Der EvtInterruptDpc-Rückruf wird auf dem Prozessor ausgeführt, der ihn in die Warteschlange gestellt hat. Wenn Ihr Treiber WdfInterruptQueueDpcForIsr aufruft , um einen anderen DPC in die Warteschlange zu stellen, während eine EvtInterruptDpc-Rückruffunktion bereits dequeuiert oder ausgeführt wird, wird der zweite EvtInterruptDpc-Rückruf möglicherweise sogar ausgeführt, bevor der erste abgeschlossen ist.
Weitere Informationen zum Behandeln von Interrupts in frameworkbasierten Treibern finden Sie unter Behandeln von Hardwareunterbrechungen.
In KMDF 1.11 und höher kann ein Treiber WdfInterruptQueueDpcForIsr von einem ISR auf passiver Ebene aufrufen. Beachten Sie, dass ein Treiber ein Arbeitselement oder einen DPC registrieren kann, aber nicht beides.
Beispiele
Das folgende Codebeispiel zeigt, wie eine EvtInterruptIsr-Rückruffunktion eine EvtInterruptDpc-Rückruffunktion in die Warteschlange stellen soll.
BOOLEAN
MyEvtInterruptIsr(
IN WDFINTERRUPT Interrupt,
IN ULONG MessageID
)
{
BOOLEAN queueDpcSuccess;
//
// Save interrupt information for the
// EvtInterruptDpc function.
//
...
//
// Queue the EvtInterruptDpc function.
//
queueDpcSuccess = WdfInterruptQueueDpcForIsr(Interrupt);
...
}
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform | Universell |
KMDF-Mindestversion | 1.0 |
UMDF-Mindestversion | 2.0 |
Kopfzeile | wdfinterrupt.h (einschließen von Wdf.h) |
Bibliothek | Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF) |
IRQL | <=DIRQL |
DDI-Complianceregeln | DriverCreate(kmdf) |