确定 UMDF 驱动程序使用过多内存的原因
警告
UMDF 2 是 UMDF 的最新版本,取代了 UMDF 1。 所有新的 UMDF 驱动程序都应使用 UMDF 2 编写。 不会向 UMDF 1 添加任何新功能,并且较新版本的 Windows 10 上对 UMDF 1 的支持有限。 通用 Windows 驱动程序必须使用 UMDF 2。
存档的 UMDF 1 示例可在 Windows 11 版本 22H2 - 2022 年 5 月驱动程序示例更新中找到。
有关详细信息,请参阅使用 UMDF 入门。
本主题介绍如何将 Wudfext.dll 调试器扩展与 User-Mode Driver Framework (UMDF) 版本 1 驱动程序结合使用,以确定 UMDF 驱动程序消耗过多内存的原因。
从 UMDF 版本 2 开始,应改用 Wdfkd.dll 调试器扩展。 有关详细信息,请参阅 Windows 驱动程序框架扩展 (Wdfkd.dll) 。
若要调查内存使用情况,请使用以下步骤:
使用 !wudfext.wudfobject UMDF 调试器扩展在对象树中查看未完成的对象。
!wudfext.wudfobject 扩展显示有关 WDF 对象的信息,其中包括其父关系和子关系。 如果将 Flags 参数的第 0 位设置为 1 (0x01) , 则 !wudfext.wudfobject 将对所传递的对象树执行根目录的递归转储。 若要查看完整的对象树,请使用以下示例命令:
!wudfext.wudfobject <IWDFDriver*> 1
确定是否看到比预期更多的未完成对象。
驱动程序最终可能会泄漏这些对象 (有关泄漏 WDF 对象的详细信息,请参阅 确定驱动程序是否泄漏框架对象) 。
这些对象可能位于对象树中,因此最终会被释放。 但是,它们正在不必要地累积。 这些对象可能需要:
- 对其父对象的更正。
- 使用 IWDFObject::D eleteWdfObject 方法显式删除。