理解Windows事件跟踪_ETW

  • 理解Windows事件跟踪_ETW

理解 ETW

筛除了一些不必要的信息, 完整文档参阅: https://docs.microsoft.com/en-us/windows/win32/etw/event-tracing-portal

理解基础

https://learn.microsoft.com/en-us/windows/win32/etw/about-event-tracing

架构

Session

存在四种 session

session 种类 使用 限制 特点
Event Tracing Session(Standard ETW) 1. EVENT_TRACE_PROPERTIES2. StartTrace, 创建 session3. EnableTrace 1. EnableTrace for classic provider 2. EnableTraceEx for manifest-based provider4. ControlTrace  停止 session - 一个 manifest-based provider 仅支持提供事件到至多 8 个 session- 一个 classic provider, 仅能服务一个 session.- session 抢占 provider 行为是后来居上. 标准 ETW.
SystemTraceProvider Session 1. EVENT_TRACE_PROPERTIES->EnableFlags2. StartTrace3. ControlTrace  停止 session - **SystemTraceProvider **是一个内核事件 provider, 提供一套预定义的内核事件.- NT Kernel Logger session是系统预置 session, 记录一系列系统预定义的内核事件- Win7/WinServer2008R2仅 NT Kernel Logger session 可使用 SystemTraceProvider - Win8/WinServer2012的 SystemTraceProvider 可以提供事件给8 个 logger session, 其中两个固定为 NT Kernel Logger 和 Circular Kernel Context Logger.- Win10 20348之后, 各 Systerm provider 可以被单独控制. 获取系统内核预定义事件.
AutoLogger session 1. 修改注册表 2. EnableTraceEx3. ControlTrace  停止 session - **Global Logger Session**是特殊独立的 session, 记录系统启动时事件.- 普通 AutoLogger 需要自行使能 provider, GlobleLogger 不需要.- AutoLogger 不支持 NT Kernel Logger 事件, 仅 GlobalLogger 支持.- 影响启动时间, 节制使用 记录操作系统启动期间事件
Private Logger Session - - User-mode ETW- 仅进程内使用- 不计入 64 session 并行限制. 进程私有

工具

  • logman
  • wevtutil
    • xpath 查询实例: wevtutil qe Security /c:2 /q:"*[System[EventID=5157]]" /f:text
  • tracelog
    • 使用 viusal studio 的tracelog工具, 可以在运行时动态的添加和删除 ETW Provider, 以及动态的添加和删除 ETW Session
  • mc
  • etw-providers-docs