【问题标题】:How to get events in real-time using ETW (StartTrace etc.)?如何使用 ETW(StartTrace 等)实时获取事件?
【发布时间】:2017-11-28 10:50:59
【问题描述】:
在 Windows 事件跟踪中,StartTrace 接受 EVENT_TRACE_PROPERTIES 结构,该结构允许 FlushTimer 指定刷新未满缓冲区的频率。
问题是,FlushTimer 是一个代表 秒 的ULONG,但我希望它非常小,以便它几乎是瞬时的(毫秒级)。
我不知道 Process Monitor 如何实时获取 ETW 事件,但确实如此,所以肯定有办法做到这一点。
所以问题是:我如何才能实时接收实时事件?
【问题讨论】:
标签:
c
winapi
real-time
etw
【解决方案1】:
ETW 不支持实时通知。即使是所谓的EVENT_TRACE_REAL_TIME_MODE 也不是真正实时的,正如文档中明确指出的那样。
您问题的前提是错误的:Sysinternals Process Monitor 不使用 ETW 来获取其同步类型的实时进程、线程、模块、文件和注册表事件。你有两个选择:
- 使用 ETW - 这不是 ProcMon 所做的 - 并以 ETW 为您提供的方式获取事件。
- 做 ProcMon 所做的事情 - 不消耗 ETW 事件 - 并同步获取事件,就像 ProcMon 获取它们一样。