Freigeben über


EVT_WDF_DPC Rückruffunktion (wdfdpc.h)

[Gilt nur für KMDF]

Die EvtDpcFunc-Rückruffunktion eines Treibers führt treiberdefinierte Vorgänge unter IRQL = DISPATCH_LEVEL aus.

Syntax

EVT_WDF_DPC EvtWdfDpc;

void EvtWdfDpc(
  [in] WDFDPC Dpc
)
{...}

Parameter

[in] Dpc

Ein Handle für ein Framework-DPC-Objekt.

Rückgabewert

Keine

Bemerkungen

Um eine EvtDpcFunc-Rückruffunktion zu registrieren, muss Ihr Treiber die Adresse der Funktion in einer WDF_DPC_CONFIG-Struktur platzieren und WdfDpcCreate aufrufen.

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

Die Rückruffunktion EvtDpcFunc wird bei DISPATCH_LEVEL ausgeführt und darf nicht auf auslagerungsfähigen Code zugreifen. Wenn eine EvtDpcFunc-Rückruffunktion Vorgänge am IRQL = PASSIVE_LEVEL ausführen muss, kann sie Frameworkarbeitselemente verwenden.

Anstatt EvtDpcFunc-Rückruffunktionen bereitzustellen, bieten viele Treiber eine einzelne EvtInterruptDpc-Rückruffunktion für jeden Interrupttyp, den ihre Geräte unterstützen. Wenn Ihr Treiber mehrere Frameworkwarteschlangenobjekte für jedes Gerät erstellt, sollten Sie ein separates DPC-Objekt und eine EvtDpcFunc-Rückruffunktion für jede Warteschlange verwenden.

Um die Ausführung einer EvtDpcFunc-Rückruffunktion zu planen, muss der Treiber WdfDpcEnqueue aufrufen. Treiber rufen in der Regel WdfDpcEnqueue über eine EvtInterruptIsr-Rückruffunktion auf.

Wenn ein Treiber WdfDpcEnqueue aufruft, fügt das System das DPC-Objekt der DPC-Warteschlange des Systems hinzu. Wenn das System keine Aufgaben mit höherer Priorität ausführt, entfernt es das Objekt aus der Warteschlange und ruft die EvtDpcFunc-Rückruffunktion des Objekts auf.

Das System fügt das DPC-Objekt der DPC-Warteschlange nicht hinzu, wenn sich das Objekt bereits in der Warteschlange befindet. Eine EvtInterruptIsr-Rückruffunktion kann mehrmals aufgerufen werden, bevor das System die Rückruffunktion EvtDpcFunc aufruft . Daher muss die EvtDpcFunc-Rückruffunktion in der Lage sein, Informationen von mehreren Interrupts zu verarbeiten, und sie muss alle Interrupts verarbeiten, die seit dem letzten Aufruf aufgetreten sind.

In der Regel ist es notwendig, die Ausführung der EvtDpcFunc-Rückruffunktion eines Treibers mit der Ausführung anderer Rückruffunktionen zu synchronisieren. Weitere Informationen finden Sie unter Synchronisieren von Interruptcode.

Um ein Handle für das übergeordnete Objekt eines DPC-Objekts abzurufen, kann die Rückruffunktion EvtDpcFuncWdfDpcGetParentObject aufrufen. Um einen Zeiger auf die zugrunde liegende KDPC-Struktur eines DPC-Objekts abzurufen, kann die EvtDpcFunc-RückruffunktionWdfDpcWdmGetDpc aufrufen.

Weitere Informationen zur Verwendung von EvtDpcFunc-Rückruffunktionen finden Sie unter Servicing an Interrupt.

Anforderungen

Anforderung Wert
Zielplattform Universell
KMDF-Mindestversion 1.0
Kopfzeile wdfdpc.h (einschließen von Wdf.h)
IRQL DISPATCH_LEVEL

Weitere Informationen

EvtInterruptDpc

EvtInterruptIsr

WDF_DPC_CONFIG

WdfDpcCreate

WdfDpcEnqueue

WdfDpcGetParentObject

WdfDpcWdmGetDpc