如何使用 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 来获取其同步类型的实时进程、线程、模块、文件和注册表事件.您有两个选择:
- 使用 ETW - 这不是 ProcMon 所做的 - 并按照 ETW 向您提供的方式获取事件。
- 做 ProcMon 所做的事情——不消耗 ETW 事件——并同步获取事件,就像 ProcMon 获取它们一样。
在 Windows 的事件跟踪中,StartTrace
接受一个 EVENT_TRACE_PROPERTIES
结构,该结构允许 FlushTimer
指定应刷新未满缓冲区的频率。
问题是,FlushTimer
是一个 ULONG
,代表 秒 ,但我希望它非常小,以便它几乎是瞬时的(在毫秒级)。
我不知道 Process Monitor 如何设法实时获取 ETW 事件,但确实如此,所以肯定有办法做到这一点。
所以问题是:我怎样才能实时接收实时事件?
ETW 不支持实时通知。即使是所谓的 EVENT_TRACE_REAL_TIME_MODE
也不是真正实时的,正如文档中明确指出的那样。
你的问题的前提是错误的:Sysinternals Process Monitor 不使用 ETW 来获取其同步类型的实时进程、线程、模块、文件和注册表事件.您有两个选择:
- 使用 ETW - 这不是 ProcMon 所做的 - 并按照 ETW 向您提供的方式获取事件。
- 做 ProcMon 所做的事情——不消耗 ETW 事件——并同步获取事件,就像 ProcMon 获取它们一样。