在 UMDF 驱动程序中使用 WPP 软件跟踪

WPP 软件跟踪 使你能够添加跟踪消息来帮助调试驱动程序。 此外,框架的事件 记录器 还提供数百条可查看的跟踪消息。

可以使用 TraceView 或 Tracelog 查看 跟踪消息。 还可以 将跟踪消息发送到内核调试器

将跟踪消息添加到驱动程序

若要将跟踪消息添加到基于框架的驱动程序,必须:

  • #include 指令添加到包含任何 WPP 宏的每个驱动程序源文件。 此指令必须 (TMH) 文件标识跟踪消息头。 文件名的格式必须为 <driver-source-file-name.tmh>。

    例如,如果驱动程序包含两个名为 MyDriver1.c 和 MyDriver2.c源文件,则 MyDriver1.c 必须包含:

    #include "MyDriver1.tmh"

    MyDriver2.c 必须包含:

    #include "MyDriver2.tmh"

    在 Microsoft Visual Studio 中生成驱动程序时,WPP 预处理器将生成 .tmh 文件。

  • 在头文件中定义 WPP_CONTROL_GUIDS 宏。 此宏为驱动程序的跟踪消息定义 GUID 和跟踪 标志 。 (对于每个 WDK 基于 UMDF 的示例驱动程序,Internal.h 头文件都包含此宏 )

  • 在驱动程序的 DllMain 例程中包含 WPP_INIT_TRACING 宏。 此宏激活驱动程序中的软件跟踪。 (对于每个 WDK 基于 UMDF 的示例驱动程序,DllSup.h 头文件都包含此宏.)

  • 在驱动程序的 DllMain 例程中包含 WPP_CLEANUP 宏。 此宏会停用驱动程序中的软件跟踪。 (对于每个 WDK 基于 UMDF 的示例驱动程序,DllSup.h 头文件都包含此宏.)

  • 在驱动程序中使用 DoTraceMessage 宏或 宏的自定义版本 来创建跟踪消息。 (对于每个 WDK 基于 UMDF 的示例驱动程序,Internal.h 头文件都包含一个自定义的 macro.)

  • 打开驱动程序项目的“属性页”。 在“解决方案资源管理器”中右键单击驱动程序项目,并选择“属性” 。 在驱动程序的“属性页”中,选择“ 配置属性”,然后选择 “Wpp”。 在“ 常规 ”菜单下,将 “运行 WPP 跟踪 ”设置为“是”。 在“ 文件选项” 菜单下,还应指定框架的 WPP 模板文件,例如:

    {km-WdfDefault.tpl}*.tmh
    

有关向驱动程序添加跟踪消息的详细信息,请参阅 将 WPP 宏添加到驱动程序

使用 WPP 软件跟踪的示例驱动程序

WDK 中所有基于 UMDF 的示例驱动程序都提供启用 WPP 软件跟踪的 DllSup.h、Internal.h 和 Sources 文件。 其中大多数示例驱动程序还使用自定义宏来创建跟踪消息。

查看驱动程序的跟踪消息

如果已将跟踪消息添加到驱动程序,则驱动程序是 跟踪提供程序。 可以使用 跟踪控制器(如 Tracelog)来控制 跟踪会话 并创建 跟踪日志。 可以使用 跟踪使用者(如 Tracefmt)查看消息。

有关如何使用软件跟踪工具的详细信息,请参阅 软件跟踪工具调查

查看 UMDF 跟踪日志

UMDF 日志文件位于 中 %ProgramData%*\\Microsoft\\WDF

可以使用 TraceViewTracelog 查看 UMDF 日志文件。 这两种工具都需要跟踪消息格式 (TMF) 设置跟踪日志消息格式的文件。 TMF 文件在 WDK 的 \tools\tracing 子目录下可用。 (TraceView 中,UMDF 显示为名称为“UMDF-Framework 跟踪”或“框架跟踪”的命名提供程序,具体取决于 UMDF 版本。)

使用 WDF 验证程序 ,可以将跟踪消息发送到 UMDF 跟踪日志和内核调试器。 (不应使用 Tracelog 中的 -kd 选项将跟踪消息发送到内核调试器,因为 Tracelog 可能会中断 UMDF.)

还可以使用 !wmitrace 调试器扩展在调试器 中查看跟踪消息

  1. 在 WinDbg 中,附加到承载驱动程序的 WUDFHost 实例。 有关详细信息,请参阅 如何启用 UMDF 驱动程序的调试

  2. 如果驱动程序使用版本 1.11 或更高版本,并且使用的是 Windows 8 或更高版本中的内核调试器,则可以跳过此步骤。 如果驱动程序使用低于 1.11 的 UMDF 版本,请使用 !wmitrace.tmffile!wmitrace.searchpath 指定特定于平台的跟踪消息格式 (.tmf) 文件或 .tmf 文件的路径。 .tmf 文件位于 WDK 中特定于平台的子目录中。

  3. 使用 !wmitrace.logdump 命令显示跟踪缓冲区的内容:

    !wmitrace.logdump WudfTrace
    

控制跟踪消息

可以使用 WDF 验证程序 提供的用户界面或通过修改注册表值来控制 UMDF 跟踪消息。 应尽可能使用 WDF 验证程序 接口,因为注册表值在 UMDF 的未来版本中可能会更改。 此外,不应在 INF 文件或驱动程序代码中访问这些值。

目前,可以修改以下注册表值,这些值位于 HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF 注册表项下:

  • LogEnable 值控制 UMDF 是否为驱动程序创建跟踪日志。 如果此值设置为 1,则 UMDF 会创建跟踪日志。

  • LogLevel 值控制 UMDF 跟踪消息包含的信息量。 LogLevel 的默认值为 3,这会导致 UMDF 跟踪消息包含错误和警告消息。 将此值设置为 7 以包含错误和警告消息以及非错误信息性消息。 将其设置为 15 以包含 UMDF 能够提供的所有跟踪信息。

  • LogKd 值控制 UMDF 是否将跟踪消息发送到内核调试器。 如果 LogKd 设置为 1,则 UMDF 会将其跟踪消息发送到内核调试器。

  • LogFlushPeriodSeconds 值指定跟踪消息写入跟踪日志的频率(以秒为单位)。

  • LogMinidumpType 值包含的标志指定微型转储文件(如果生成)将包含的信息类型。 有关这些标志的详细信息,请参阅 MINIDUMP_TYPE 枚举。

你可能会在 HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF 注册表项下找到更多注册表值。 不应修改这些值。