EVT_WDF_OBJECT_CONTEXT_DESTROY回调函数 (wdfobject.h)

[适用于 KMDF 和 UMDF]

驱动程序的 EvtDestroyCallback 事件回调函数执行与删除框架对象关联的操作。

语法

EVT_WDF_OBJECT_CONTEXT_DESTROY EvtWdfObjectContextDestroy;

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

参数

[in] Object

框架对象的句柄。

返回值

备注

驱动程序可以在WDF_OBJECT_ATTRIBUTES结构中指定 EvtDestroyCallback 回调函数。 此结构用作创建框架对象(如 WdfDeviceCreate)的所有框架方法的输入。

在对象的引用计数减为零后,框架调用 EvtDestroyCallback 回调函数。 框架在 EvtDestroyCallback 回调函数返回后立即删除 对象。

EvtDestroyCallback 可以访问对象上下文,但不能对对象调用任何方法。

如果驱动程序同时为对象提供 EvtCleanupCallback 回调函数和 EvtDestroyCallback 回调函数,框架会首先调用 EvtCleanupCallback 回调函数。

删除对象时,框架还会删除对象的子级。 框架在调用父对象的 EvtCleanupCallback 回调函数之前调用子对象的 EvtCleanupCallback 回调函数。 接下来,如果子对象的引用计数为零,框架将调用子对象的 EvtDestroyCallback 回调函数。 最后,如果父对象的引用计数为零,框架将调用父对象的 EvtDestroyCallback 回调函数。

驱动程序创建对象时,有时会分配特定于对象的内存缓冲区,并将缓冲区指针存储在对象的 上下文空间中。 驱动程序的 EvtCleanupCallbackEvtDestroyCallback 回调函数可以解除分配这些内存缓冲区。

有关删除框架对象的详细信息,请参阅 框架对象生命周期

通常,框架在 IRQL <= DISPATCH_LEVEL调用 EvtDestroyCallback 回调函数。 但是,在以下情况下,框架在 IRQL = PASSIVE_LEVEL 调用回调函数:

  • 对象的句柄类型为 WDFDEVICE、WDFDRIVER、WDFDPC、WDFINTERRUPT、WDFIOTARGET、WDFQUEUE、WDFSTRING、WDFTIMER 或 WDFWORKITEM。
  • 对象的句柄类型为 WDFMEMORY 或 WDFLOOKASIDE,驱动程序已将 PoolType 参数的 PagedPool 指定为 WdfMemoryCreateWdfLookasideListCreate
从框架版本 1.9 开始, wdfroletypes.h 头文件包含 EvtDestroyCallback 回调函数的一些对象类型特定的替代函数类型。 这些替代类型可帮助验证工具确定驱动程序是否正确使用回调函数。 使用下表确定要使用的函数类型。
对象类型 函数类型
设备对象 EVT_WDF_DEVICE_CONTEXT_DESTROY
I/O 队列对象 EVT_WDF_IO_QUEUE_CONTEXT_DESTROY_CALLBACK
File 对象 EVT_WDF_FILE_CONTEXT_DESTROY_CALLBACK
所有其他对象 EVT_WDF_OBJECT_CONTEXT_DESTROY

要求

要求
目标平台 通用
最低 KMDF 版本 1.0
最低 UMDF 版本 2.0
标头 wdfobject.h (包括 Wdf.h)
IRQL 请参见“备注”部分。

另请参阅

EvtCleanupCallback

WDF_OBJECT_ATTRIBUTES