如何通过 Windows 事件日志服务启用 WPP 跟踪

Windows 事件日志服务支持 WPP 日志记录和解码。 本主题介绍如何通过 Windows 事件日志服务启用 WPP 跟踪。

在此方案中启用 WPP 跟踪不需要对 WPP 提供程序执行额外的工作。 但是,若要使用 Windows 事件日志服务,必须提供清单和事件日志提供程序。 若要启用 WPP 跟踪,请声明调试通道,并将关联的控件 GUID 指定为 WPP 提供程序声明。

例如:

<instrumentationManifest
    xmlns="http://schemas.microsoft.com/win/2004/08/events"
    xmlns:win="http://manifests.microsoft.com/win/2004/08/windows/events"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema"  xsi:schemaLocation="http://schemas.microsoft.com/win/2004/08/events eventman.xsd"  
    >
   <instrumentation>
        <events>
            <provider name="Microsoft-Windows-mySampleProvider"
                guid="{61CE3EC9-E5E8-4b96-A451-74631A6E0D5C}"
                >
          <channel
        chid="MS_WINDOWS_GE_DEBUG"
        enabled="false"
        isolation="System"
        message="$(string.Microsoft-Windows-GenerateEvent.channel.CHANNEL_DEBUG.message)"
        name="Microsoft-Windows-GenerateEvent/Debug"
        symbol="CHANNEL_DEBUG"
        type="Debug"
        >
        <publishing>
          <level>2</level>
          <keywords>0xFFFFFFFF</keywords>
          <controlGuid>{d58c126f-b309-11d1-969e-0000f875a5bc}</controlGuid>
        </publishing>
        </channel>
       </provider>
    </events>
   </instrumentation>
</instrumentationManifest>

WPP 跟踪并非一直启用,因此默认情况下 ,清单中的 enable 属性应设置为 false。 如果需要 WPP 跟踪,请更改清单中的属性,以便 enabled=“true”。

不能指定或单独选择控件位。 若要启用此通道的所有 WPP 事件,请指定关键字值0XFFFFFFFF。 在内部,控制位映射到关键字;如果知道哪个位映射到特定关键字,则可以选择该关键字以获取一组特定的事件。 在示例清单中,关键字值0xFFFF,因为需要少于 16 个 WPP 控制位。 若要在安装后获取一组特定的事件,可以使用wevtutil.exe命令行实用工具更改关键字。 命令为:

wevtutil sl< 通道名称>/k:<keyword 值,对应于控制位>

请注意,必须先禁用通道才能更改关键字值。

以这种方式声明通道可使 WPP 提供程序(其控制 GUID 指定)和事件日志提供程序(在此通道下声明)访问调试通道,以便任一提供程序都可以写入此通道。 现在可以通过事件查看器在此通道下查看 WPP 事件或普通 ETW 事件。

WPP 事件未解码。 若要获取与这些事件关联的消息字符串,请将 TMF 文件放置在 %windir%\System32\winevt\TraceFormat 目录中。 可以使用实用工具(如 Tracepdb.exe)获取 TMF 文件,这会获取输入的 PDB 文件并返回 TMF 文件。