什么是ETW?
ETW,全称 Event Trace For Windows,是微软在Windows中提供的一种高效事件记录机制。简单来讲,可以把它看成一个大型日志系统,能够从程序、内核、驱动收集各种运行信息。
- ETW的特性:
- 轻量化:ETW在运行时对系统性能的影响微乎其微,因此可以安全地用于生产环境。
- 实时性:你可以实时捕获和分析事件,而不需要重启系统或应用。
- 灵活性:支持自定义事件,开发者可以根据需要定义自己的事件并收集数据。
- ETW的主要用途:
- 性能分析: ETW可以捕获系统和应用程序的性能指标,从而做到优化程序的运行效率。
- 故障排除: 借助ETW,可以通过程序的UI Delay时间、StackWalk等信息来捕获崩溃信息。
- 安全检查: ETW 还能记录一些与安全相关的事件,例如登录尝试、系统资源访问等。
- ETW 的核心组件(三部分)
- Provider(事件提供者):
Provider 是 ETW 的数据生产者。它负责定义并生成事件数据。Provider 可以是 Windows 系统(如内核、驱动程序等),也可以是开发者自定义的应用程序。在实际使用中,每个 Provider 都有一个唯一的标识符(GUID)和一组定义的事件。 - Controller(控制器):
Controller 主要负责控制 ETW 会话的行为。它的职责包括启动或停止会话、定义跟踪参数,如记录的事件类型、日志大小等。 - Consumer(事件消费者):
日志数据的消费者,根据情况,接收日志信息的对象。
ETW 能采集的典型进程行为包括:
| 行为类型 | 对应的 ETW Provider | 说明 |
|---|---|---|
| 进程创建/退出 | Microsoft-Windows-Kernel-Process | 捕获 Process Create(Event ID 1)、Process Terminate(Event ID 2)等 |
| 线程创建/退出 | Microsoft-Windows-Kernel-Thread | 线程级行为跟踪 |
| 映像加载(DLL/EXE) | Microsoft-Windows-Kernel-Image | 记录进程加载了哪些模块(如 DLL 注入) |
| 文件 I/O 操作 | Microsoft-Windows-Kernel-FileIO | 进程读写文件的行为 |
| 网络活动 | Microsoft-Windows-Kernel-Network 或 Microsoft-Windows-TCPIP | TCP/UDP 连接、收发包等 |
| 注册表访问 | Microsoft-Windows-Kernel-Registry | 进程对注册表的读写操作 |
| 上下文切换 / CPU 调度 | Microsoft-Windows-Kernel-Processor | 可用于分析进程 CPU 使用情况 |
| 安全相关行为(如令牌变化) | Microsoft-Windows-Security-Auditing | 需配合审核策略启用 |
上述大部分属于 内核提供者(Kernel Providers),由 Windows 内核直接发出事件,覆盖全系统所有进程。
示例:捕获所有进程的启动与退出
使用 Windows Performance Recorder (WPR) 或命令行工具:
# 使用 logman 启动一个会话,监听进程和映像事件
logman start ProcTrace -p "Microsoft-Windows-Kernel-Process" 0x10 0xff -p "Microsoft-Windows-Kernel-Image" 0x10 0xff -o proc_trace.etl -ets0x10是进程创建/退出的关键字(Keyword)0xff是日志级别(Level),表示记录所有级别(Verbose)
运行一段时间后停止:
logman stop ProcTrace -ets然后用 Windows Performance Analyzer (WPA) 或 PerfView 打开 proc_trace.etl,即可看到:
- 每个新进程的 PID、PPID、命令行(如果启用了命令行捕获)
- 进程退出时间
- 加载了哪些 DLL
- 启动该进程的父进程是谁
注意:默认情况下,
Process Create事件 不包含命令行参数。若需命令行,需启用额外的审计策略或使用Microsoft-Windows-Sysmon(第三方但广泛使用)。
限制与注意事项
命令行参数默认不可见
Windows 内核的Process Create事件在较新版本(Win10 1809+)中可通过特定配置记录命令行,但需:- 启用 “Audit Process Creation” 安全策略(本地安全策略 → 审核策略)
- 或使用 Sysmon(System Monitor,微软 Sysinternals 工具)
- 权限要求
捕获内核级 ETW 事件通常需要 管理员权限 或 SYSTEM 权限。 - 性能影响
虽然 ETW 开销低,但如果同时启用大量高频率事件(如 FileIO + Registry + Network),仍可能影响系统性能。 - 隐私与安全策略
在企业环境或受限制的 Windows 版本中,某些 ETW 提供者可能被组策略禁用。
替代方案:Sysmon
如果你需要更详细、更易用的进程行为监控(如完整命令行、哈希、父子进程链、远程线程创建等),推荐结合使用 Sysmon:
- Sysmon 本身基于 ETW 和驱动实现
- 输出结构化日志到 Windows Event Log
- 支持高度可配置的过滤规则


Comments | NOTHING