确定 UMDF 在删除设备时指示文件未完成的原因

本主题介绍如何将 Wudfext.dll 调试器扩展与 User-Mode 驱动程序框架 (UMDF) 版本 1 或 2 驱动程序结合使用,以确定在删除设备时 UMDF 指示存在未完成文件的原因。

对于 UMDF 版本 1,将使用在 wudfext.dll 中实现的扩展命令。 从 UMDF 版本 2 开始,你将使用在 wdfkd.dll 中实现的扩展命令。

若要确定 UMDF 指示未处理文件的原因,请使用以下步骤:

  1. 使用 !wudfext.umdevstack (UMDF 1) 或 !wdfkd.wdfumdevstack (UMDF 2) 转储设备堆栈。 转储包括未完成的 UMDF 堆栈 (,即堆栈中的驱动程序创建的文件对象,而不是由应用程序或另一堆栈中的驱动程序创建的文件对象) 。

  2. 对于每个堆栈内文件,请运行 !wudfext.umfile (UMDF 1) 或 !wdfkd.wdfumfile (UMDF 2) 以获取有关该文件的信息。

    输出包括挂起的 IRP 列表。

  3. 通过使用 !wudfext.umirp (UMDF 1) 或 !wdfkd.wdfumirp (UMDF 2) 获取有关 IRP 的信息,确定每个 IRP 未完成的原因。

    从每个 !wudfext.umirp!wdfkd.wdfumirp 的输出中:

    • 确定 IRP 是否已完成。
    • 确定驱动程序创建的请求不是由驱动程序显式删除,还是由对象树隐式删除。