Freigeben über


EVT_WDF_OBJECT_CONTEXT_DESTROY Rückruffunktion (wdfobject.h)

[Gilt für KMDF und UMDF]

Die EvtDestroyCallback-Ereignisrückruffunktion eines Treibers führt Vorgänge aus, die dem Löschen eines Frameworkobjekts zugeordnet sind.

Syntax

EVT_WDF_OBJECT_CONTEXT_DESTROY EvtWdfObjectContextDestroy;

void EvtWdfObjectContextDestroy(
  [in] WDFOBJECT Object
)
{...}

Parameter

[in] Object

Ein Handle für ein Frameworkobjekt.

Rückgabewert

Keine

Bemerkungen

Der Treiber kann eine EvtDestroyCallback-Rückruffunktion in einer WDF_OBJECT_ATTRIBUTES-Struktur angeben. Diese Struktur wird als Eingabe für alle Frameworkmethoden verwendet, die Frameworkobjekte erstellen, z. B. WdfDeviceCreate.

Das Framework ruft die Rückruffunktion EvtDestroyCallback auf, nachdem die Verweisanzahl des Objekts auf 0 erhöht wurde. Das Framework löscht das Objekt unmittelbar nach der Rückgabe der Rückruffunktion EvtDestroyCallback .

EvtDestroyCallback kann auf den Objektkontext zugreifen, aber keine Methoden für das Objekt aufrufen.

Wenn ein Treiber sowohl eine EvtCleanupCallback-Rückruffunktion als auch eine EvtDestroyCallback-Rückruffunktion für ein Objekt bereitstellt, ruft das Framework zuerst die Rückruffunktion EvtCleanupCallback auf.

Wenn ein Objekt gelöscht wird, löscht das Framework auch die untergeordneten Elemente des Objekts. Das Framework ruft die EvtCleanupCallback-Rückruffunktionen untergeordneter Objekte auf, bevor die Rückruffunktion EvtCleanupCallback des übergeordneten Objekts aufgerufen wird. Wenn die Verweisanzahl des untergeordneten Objekts 0 ist, ruft das Framework die Rückruffunktion EvtDestroyCallback des untergeordneten Objekts auf. Wenn die Verweisanzahl des übergeordneten Objekts 0 ist, ruft das Framework schließlich die Rückruffunktion EvtDestroyCallback des übergeordneten Objekts auf.

Wenn ein Treiber ein Objekt erstellt, ordnet er manchmal objektspezifische Speicherpuffer zu und speichert die Pufferzeiger im Kontextbereich des Objekts. Die Rückruffunktion EvtCleanupCallback oder EvtDestroyCallback des Treibers kann die Zuordnung dieser Speicherpuffer beheben.

Weitere Informationen zum Löschen von Frameworkobjekten finden Sie unter Framework-Objektlebenszyklus.

In der Regel ruft das Framework die Rückruffunktion EvtDestroyCallback unter IRQL <= DISPATCH_LEVEL auf. In den folgenden Situationen ruft das Framework jedoch die Rückruffunktion unter IRQL = PASSIVE_LEVEL auf:

  • Der Handletyp des Objekts ist WDFDEVICE, WDFDRIVER, WDFDPC, WDFINTERRUPT, WDFIOTARGET, WDFQUEUE, WDFSTRING, WDFTIMER oder WDFWORKITEM.
  • Der Handletyp des Objekts ist WDFMEMORY oder WDFLOOKASIDE, und der Treiber hat PagedPool für den PoolType-Parameter für WdfMemoryCreate oder WdfLookasideListCreate angegeben.
Ab Version 1.9 des Frameworks enthält die Headerdatei wdfroletypes.h einige alternative, objekttypspezifische Funktionstypen für die Rückruffunktion EvtDestroyCallback . Mit diesen alternativen Typen können Überprüfungstools ermittelt werden, ob der Treiber die Rückruffunktion ordnungsgemäß verwendet. Verwenden Sie die folgende Tabelle, um zu bestimmen, welcher Funktionstyp verwendet werden soll.
Objekttyp Funktionstyp
Geräteobjekt EVT_WDF_DEVICE_CONTEXT_DESTROY
E/A-Warteschlangenobjekt EVT_WDF_IO_QUEUE_CONTEXT_DESTROY_CALLBACK
File-Objekt EVT_WDF_FILE_CONTEXT_DESTROY_CALLBACK
Alle anderen Objekte EVT_WDF_OBJECT_CONTEXT_DESTROY

Anforderungen

Anforderung Wert
Zielplattform Universell
KMDF-Mindestversion 1.0
UMDF-Mindestversion 2.0
Kopfzeile wdfobject.h (einschließen von Wdf.h)
IRQL Weitere Informationen finden Sie im Abschnitt mit den Hinweisen.

Weitere Informationen

EvtCleanupCallback

WDF_OBJECT_ATTRIBUTES