使用 ETW 改善调试和性能优化
2008-11-17 17:39:25 来源:WEB开发网最后,使用者指的是用于读取日志文件或侦听会话以获取实时事件并对其进行处理的一类应用程序。事件的使用基于回调,使用者注册一个事件回调,以供 ETW 每次使用一个事件进行调用。事件是按照时间顺序传送给 ETW 使用者的。可以使用通用事件使用者工具将事件转储为各种格式。图 2 显示了“Process”事件的 XML 转储。该事件在由 Windows Vista 中的 tracerpt.exe 工具生成时,由内核提供程序记录。此事件用于表示记事本进程的启动。由于事件包含了提供程序记录的自定义用户内容,因此需要使用某些类型的元数据对其进行正确解码。使用新 API 的提供程序应该会提供一份事件清单(一个 XML 文件),其中定义了提供程序写入的所有事件和它们的布局信息。通用使用者应用程序使用 Trace Data Helper (TDH) API 来检索事件的元数据,对事件进行解码并加以显示。
Figure2进程启动事件的 XML 转储
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
<System>
<Provider Guid="{9e814aad-3204-11d2-9a82-006008a86939}" />
<EventID>0</EventID>
<Version>2</Version>
<Level>0</Level>
<Task>0</Task>
<Opcode>1</Opcode>
<Keywords>0x0</Keywords>
<TimeCreated SystemTime="2006-12-18T12:26:27.887309500Z" />
<Correlation
ActivityID="{00000000-0000-0000-0000-000000000000}" />
<Execution ProcessID="3396" ThreadID="3260" ProcessorID="0"
KernelTime="390" UserTime="195" />
<Channel />
<Computer />
</System>
<EventData>
<Data Name="UniqueProcessKey">0xFFFFFA800143FA80</Data>
<Data Name="ProcessId">0x10EC</Data>
<Data Name="ParentId">0xD44</Data>
<Data Name="SessionId">1</Data>
<Data Name="ExitStatus">0</Data>
<Data Name="UserSID">guest</Data>
<Data Name="ImageFileName">notepad.exe</Data>
<Data Name="CommandLine">notepad</Data>
</EventData>
<RenderingInfo Culture="en-US">
<Opcode>Start</Opcode>
<Provider>MSNT_SystemTrace</Provider>
<EventName xmlns=
"http://schemas.microsoft.com/win/2004/08/events/trace">
Process</EventName>
</RenderingInfo>
<ExtendedTracingInfo xmlns="
http://schemas.microsoft.com/win/2004/08/events/trace">
<EventGuid>{3d6fa8d0-fe05-11d0-9dda-00c04fd7ba7c}</EventGuid>
</ExtendedTracingInfo>
</Event>
更多精彩
赞助商链接