如何记录到全局记录器会话

使用以下过程将驱动程序配置为记录到全局记录器跟踪会话:

  1. 将以下定义添加到驱动程序代码。 在 WPP_CONTROL_GUIDS 宏定义和 跟踪消息头文件的 include 语句之间插入定义。

    #define WPP_GLOBALLOGGER
    
  2. 使用 Tracelog 配置全局记录器跟踪会话。 最简单的命令如下所示:

    tracelog -start GlobalLogger
    

    有关完整说明(包括用于配置全局记录器跟踪会话的参数),请参阅 Tracelog 命令语法全局记录器跟踪会话

    有关示例,请参阅 示例 13:创建全局记录器会话

    此命令创建并配置跟踪会话,但直到重新启动系统 (步骤 5) 后,会话才会启动。

  3. HKLM\System\CurrentControlSet\Control\WMI\GlobalLogger 子项下,为跟踪提供程序的 控件 GUID 添加名为 的子项。 在 Windows Vista 及更高版本的 Windows 中,控件 GUID 必须括在大括号 ( {} ) 中。

    tracelog -start GlobalLogger 命令将 GlobalLogger 子项添加到注册表。 ControlGUID 子项将驱动程序建立为全局记录器跟踪会话的跟踪提供程序。

    例如,若要将 Tracedrv 示例驱动程序配置为登录到运行 Windows XP 的计算机上的全局记录器跟踪会话,请为 Tracedrv 控件 GUID 添加名为 的子项, d58c126f-b309-11d1-969e-0000f875a5bc: HKLM\SYSTEM\CurrentControlSet\Control\WMI\GlobalLogger\d58c126f-b309-11d1-969e-0000f875a5bc

    TraceDrv 是一个专为软件跟踪而设计的示例驱动程序,可在 GitHub 上的 Windows 驱动程序示例 存储库中找到。

  4. 若要配置跟踪提供程序,请将以下注册表项添加到 ControlGUID 子项。 这些条目是可选的,其值由驱动程序定义。

    注册表项名称 数据类型 说明

    标记

    REG_DWORD

    指定提供程序的 跟踪标志

    标志的含义由每个跟踪提供程序独立定义。 通常,标志表示越来越详细的报告级别。

    级别

    REG_DWORD

    指定提供程序的 跟踪级别

    Level 值的含义由每个跟踪提供程序独立定义。 通常,跟踪级别表示事件的严重性, (信息、警告或错误) 。

请注意, Flags 条目的名称为复数, 级别 条目的名称为单数。

  1. 重启系统。 这会启动全局记录器跟踪会话。

测试完成后,删除 ControlGUID 子项,或将 GlobalLogger 子项中的 Start 条目的值设置为 0。 否则,将运行全局记录器会话,每次重启系统时,驱动程序都会记录到该会话。

备注

当存在WPP_GLOBALLOGGER时,WPP 会添加读取注册表的代码,并确定全局记录器会话是否正在运行,以及是否启用驱动程序来跟踪到全局记录器会话。 此代码取代了驱动程序将从标准跟踪会话接收的启用通知。

此外,由于全局记录器会话不提供回调通知,Windows 假定已发生回调,并相应地继续。

WPP 定义仅生成少量代码,因此无需在测试后将其从代码中删除。