WdfObjectDelete 函数 (wdfobject.h)

[适用于 KMDF 和 UMDF]

WdfObjectDelete 方法删除框架对象及其子对象。

语法

void WdfObjectDelete(
  [in] WDFOBJECT Object
);

参数

[in] Object

框架对象的句柄。

返回值

备注

如果驱动程序提供无效的对象句柄,则会发生 bug 检查。

注意

在 PASSIVE_LEVEL 调用的回调函数无法删除计时器对象。 有关详细信息,请参阅 EVT_WDF_TIMER 回调函数

驱动程序调用 WdfObjectDelete 后,指定对象的引用计数变为零后将被删除。

驱动程序无法调用 WdfObjectDelete 来删除以下框架对象,因为框架始终处理这些对象的删除:

  • 框架子列表对象 (WDFCHILDLIST)
  • 框架设备对象 (WDFDEVICE) ,除非驱动程序已调用 WdfControlDeviceInitAllocate 并创建了 控制设备对象,驱动程序有时必须删除该对象
  • 框架驱动程序对象 (WDFDRIVER)
  • 框架文件对象 (WDFFILEOBJECT)
  • 框架中断对象 (WDFINTERRUPT)
  • 框架队列对象 (WDFQUEUE) ,如果对象表示 默认 I/O 队列 ,或者驱动程序已调用 WdfDeviceConfigureRequestDispatching 来设置队列以接收特定类型的所有 I/O 请求
  • 框架 USB 管道对象 (WDFUSBPIPE)
  • (WDFUSBINTERFACE) 框架 USB 接口对象
  • 框架 WMI 提供程序对象 (WDFWMIPROVIDER)
  • 资源范围列表对象 (WDFIORESLIST)
  • 资源列表对象 (WDFCMRESLIST)
  • 资源要求列表对象 (WDFIORESREQLIST)
有关 框架对象 的完整列表,请参阅框架对象摘要。

WdfObjectDelete 方法可以在框架删除对象及其子对象之前返回。 框架删除子对象的顺序不可预测。

有关 WdfObjectDelete 和框架对象层次结构的清理规则的详细信息,请参阅 框架对象生命周期

必须在 IRQL <= DISPATCH_LEVEL 调用 WdfObjectDelete 方法。 如果驱动程序正在删除控制设备对象,则必须在 IRQL = PASSIVE_LEVEL调用 WdfObjectDelete 。 同样,如果驱动程序正在删除公共缓冲区,则必须在 IRQL = PASSIVE_LEVEL调用 WdfObjectDelete

示例

下面的代码示例删除框架对象及其子对象。

WdfObjectDelete(Object);

要求

要求
目标平台 通用
最低 KMDF 版本 1.0
最低 UMDF 版本 2.0
标头 wdfobject.h (包括 Wdf.h)
Library Wdf01000.sys (KMDF) ;WUDFx02000.dll (UMDF)
IRQL 请参见“备注”部分。
DDI 符合性规则 AddPdoToStaticChildList (kmdf) ControlDeviceDeleted (kmdf) CtlDeviceFinishInitDeviceAdd (kmdf) CtlDeviceFinishInitDrEntry (kmdf) DriverCreate (kmdf) InvalidReqAccessLocal (kmdf) KmdfIrql (kmdf) KmdfIrql2 (kmdf) 、KmdfIrqlExplicit (kmdf) , MemAfterReqCompletedIntIoctlA (kmdf) MemAfterReqCompletedIoctlA (kmdf) MemAfterReqCompletedReadA (kmdf) MemAfterReqCompletedWriteA (kmdf) ReqDelete (kmdf) ReqSendFail (kmdf)

另请参阅

WdfControlDeviceInitAllocate

WdfObjectCreate