如何通过 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 事件,请将关键字 (keyword) 值指定为 0XFFFFFFFF。 在内部,控制位映射到关键字;如果知道哪个位映射到特定关键字 (keyword) ,则可以选择该关键字 (keyword) 以获取一组特定的事件。 在示例清单中,关键字 (keyword) 值0xFFFF,因为所需的 WPP 控制位少于 16 位。 若要在安装后获取一组特定的事件,可以使用 wevtutil.exe 命令行实用工具更改关键字。 命令为:

wevtutilsl<通道名称>/k:<关键字 (keyword) 对应于控制位>的值

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

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

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