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) |