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

本主题介绍如何将 Wudfext.dll 调试器扩展与 User-Mode Driver Framework (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 是否已完成。
    • 确定驱动程序创建的请求是未由驱动程序显式删除,还是由对象树隐式删除。