Windows ETW:深入理解和实践
背景简介
在现代Windows操作系统中,性能监控和故障排除是一个复杂的任务,需要深入了解和使用各种工具。事件追踪(Event Tracing for Windows,简称ETW)是一种强大的系统级诊断工具,广泛应用于性能分析和事件追踪。在本篇博客中,我们将探讨如何使用ETW工具来监控和分析Windows系统。
枚举ETW会话
使用Windows性能监视器(通过输入perfmon在Cortana搜索框打开),可以轻松地查看ETW会话。展开“数据收集器集”中的“事件跟踪会话”,可以看到与XPERF相同的会话列表。通过右键点击会话名称选择“属性”,可以浏览会话的配置。特别是,“安全”属性表可以解码ETW会话的安全描述符。
除了性能监视器,还可以通过命令行工具Logman(位于%SystemRoot%\System32\logman.exe)使用
-ets
命令行参数来枚举活动的ETW会话。
ETW提供者
提供者是ETW中产生事件的组件,根据其编码事件的方式,ETW支持不同类型的提供者。一个提供者必须先在ETW中注册才能生成事件。控制器应用程序需要启用提供者并将其与ETW会话关联,以便接收事件。如果会话未启用提供者,提供者将不会生成事件。
提供者注册是通过调用特定的API完成的,这取决于提供者的类型。例如,基于清单的提供者依赖于EventRegister API进行用户模式注册,以及EtwRegister进行内核模式注册。所有提供者类型最终都会调用EtwpRegisterProvider函数来执行实际的注册过程。
提供者启用
提供者启用是指将提供者与ETW会话关联的过程。这可以通过EnableTraceEx API在控制器应用程序中完成,允许指定事件类别和高级过滤器。提供者启用由ETW内核模式中的EtwpEnableGuid函数管理。启用提供者后,事件就可以被生成并记录在ETW会话中。
实验:使用ETW列出进程活动
通过实验,我们将使用ETW来监控Windows系统的进程活动。Windows 10有多个提供者可以监控这些信息,我们将使用Microsoft-Windows-Kernel-Process提供者。通过命令行工具Xperf,我们可以启动一个ETW会话来捕获进程活动,并将事件保存到ETL文件中。
ETW日志记录器线程
日志记录器线程是ETW中非常重要的组件,负责将事件刷新到日志文件或传递给实时消费者。它会跟踪已传递和丢失的事件数量。对于实时会话,日志记录器线程还会创建临时ETL日志文件来保存事件,直到它们被传递给实时消费者。
消费和解码ETL文件中的事件
ETW事件几乎完全在用户模式下通过消费者应用程序处理。消费者使用ProcessTrace API来打开ETL日志文件,并通过事件回调函数来消费事件。事件解码是通过Event Trace Decode Helper Library(TDH.dll)实现的,它提供了解码事件的服务。为了在另一个系统上正确解码事件,可以使用Windows Event Log API将ETL文件中的事件及其解码信息保存到EVTX文件中。
总结与启发
ETW是Windows系统中一个强大的诊断工具,允许开发者和系统管理员深入了解系统运行情况。通过本篇博客,我们了解了如何使用ETW进行系统性能监控和事件追踪,包括如何枚举ETW会话、注册和启用提供者、监控进程活动、以及如何消费和解码ETL文件中的事件。掌握这些技能对于进行深入的系统分析至关重要,尤其是在需要解决复杂性能问题或进行故障排除时。
进一步阅读推荐
如果您希望进一步深入学习ETW,以下资源可能会对您有所帮助: - Microsoft官方文档:https://docs.microsoft.com/en-us/windows/win32/etw/about-event-tracing - Windows系统编程(第2版):https://www.amazon.com/Windows-System-Programming-2nd-Win32/dp/0596009898 - Windows Internals, Part 1: System Architecture, Processes, Threads, Memory Management, and More (7th Edition):https://www.amazon.com/Windows-Internals-Part-architecture-memory-management/dp/0135462403
通过实践和学习这些资源,您将能够更加熟练地使用ETW工具来提升您的系统分析和故障排除能力。