如何使用 ETW(StartTrace 等)实时获取事件?

How to get events in real-time using ETW (StartTrace etc.)?

在 Windows 的事件跟踪中,StartTrace 接受一个 EVENT_TRACE_PROPERTIES 结构,该结构允许 FlushTimer 指定应刷新未满缓冲区的频率。

问题是,FlushTimer 是一个 ULONG,代表 ,但我希望它非常小,以便它几乎是瞬时的(在毫秒级)。

我不知道 Process Monitor 如何设法实时获取 ETW 事件,但确实如此,所以肯定有办法做到这一点。

所以问题是:我怎样才能实时接收实时事件?

ETW 不支持实时通知。即使是所谓的 EVENT_TRACE_REAL_TIME_MODE 也不是真正实时的,正如文档中明确指出的那样。

你的问题的前提是错误的:Sysinternals Process Monitor 使用 ETW 来获取其同步类型的实时进程、线程、模块、文件和注册表事件.您有两个选择:

  1. 使用 ETW - 这不是 ProcMon 所做的 - 并按照 ETW 向您提供的方式获取事件。
  2. 做 ProcMon 所做的事情——不消耗 ETW 事件——并同步获取事件,就像 ProcMon 获取它们一样。