Event Tracing For Windows(ETW)

网友投稿 545 2022-10-05


Event Tracing For Windows(ETW)

Etw算是古老的技术,最早是在2000中引入,因为Windows 2000 之前靠DbgPrint/DeDubgPrint输出,Etw更适合监控系统负载和性能。

Etw是高效的内核级跟踪工具,具备内核态数据/高效/兼容好/稳定等优点,Win态势/数据分析也是较好的方案选择,看过很多精彩的Etw文章,学习分享使用过程。

引用

See Msdn:

// Etw DocsEtw Add Kernel EventMs_Code(kernel):

// demoMouse KeyboardMIT 事件提供者,我们编写的应用层程序就是该模块。向系统注册一个Event Trace,被Controll启动后,就可以拿数据了。

Controller: 控制器,管理Provider和创建Session,Provider就知道哪里的事件,将Session也记录到ConSumer。

Consumer: 实时的从Session或日志订阅事件,提供Callback,命中处理。 ![](14988131311961.png) See Msdn:

WMIAPI StartTraceA( [out] PTRACEHANDLE TraceHandle, // 句柄 [in] LPCSTR InstanceName, // Name [in, out] PEVENT_TRACE_PROPERTIES Properties // 行为事件跟踪会话的信息)

PEVENT_TRACE_PROPERTIES结构:

typedef struct _EVENT_TRACE_PROPERTIES { WNODE_HEADER Wnode; ULONG BufferSize; ULONG MinimumBuffers; ULONG MaximumBuffers; ULONG MaximumFileSize; ULONG LogFileMode; ULONG FlushTimer; ULONG EnableFlags; union { LONG AgeLimit; LONG FlushThreshold; } DUMMYUNIONNAME; ULONG NumberOfBuffers; ULONG FreeBuffers; ULONG EventsLost; ULONG BuffersWritten; ULONG LogBuffersLost; ULONG RealTimeBuffersLost; HANDLE LoggerThreadId; ULONG LogFileNameOffset; ULONG LoggerNameOffset;} EVENT_TRACE_PROPERTIES, *PEVENT_TRACE_PROPERTIES

See Msdn:

ETW 跟踪处理句柄

TRACEHANDLE WMIAPI OpenTraceA( [in, out] PEVENT_TRACE_LOGFILEA Logfile)

EVENT_TRACE_LOGFILEW结构体,有几个关键点如下:

typedef struct _EVENT_TRACE_LOGFILEA { LPSTR LogFileName; // StartTraceA时候的Name LPSTR LoggerName; LONGLONG CurrentTime; ULONG BuffersRead; // 模式 union { ULONG LogFileMode; ULONG ProcessTraceMode; } DUMMYUNIONNAME; EVENT_TRACE CurrentEvent; TRACE_LOGFILE_HEADER LogfileHeader; PEVENT_TRACE_BUFFER_CALLBACKA BufferCallback; ULONG BufferSize; ULONG Filled; ULONG EventsLost; // 回调 union { PEVENT_CALLBACK EventCallback; PEVENT_RECORD_CALLBACK EventRecordCallback; } DUMMYUNIONNAME2; ULONG IsKernelTrace; PVOID Context;} EVENT_TRACE_LOGFILEA, *PEVENT_TRACE_LOGFILEA

See Msdn:

ULONG WMIAPI ProcessTrace( [in] PTRACEHANDLE HandleArray, [in] ULONG HandleCount, [in] LPFILETIME StartTime, [in] LPFILETIME EndTime)

关闭Controller:

ULONG WMIAPI ControlTraceA( [in] TRACEHANDLE TraceHandle, [in] LPCSTR InstanceName, [in, out] PEVENT_TRACE_PROPERTIES Properties, [in] ULONG ControlCode)

See Msdn:

EVENT_TRACE_FLAG_PROCESS_COUNTERS 0x00000008 // process perf counters#define EVENT_TRACE_FLAG_CSWITCH 0x00000010 // context switches#define EVENT_TRACE_FLAG_DPC 0x00000020 // deferred procedure calls#define EVENT_TRACE_FLAG_INTERRUPT 0x00000040 // interrupts#define EVENT_TRACE_FLAG_SYSTEMCALL 0x00000080 // system calls

文件监控:

EVENT_TRACE_FLAG_FILE_IOEVENT_TRACE_FLAG_FILE_IO_INIT

注册表监控:

#define EVENT_TRACE_FLAG_REGISTRY 0x00020000 // registry calls

进程/线程监控:

#define EVENT_TRACE_FLAG_PROCESS 0x00000001 // process start & end#define EVENT_TRACE_FLAG_THREAD 0x00000002 // thread start & end#define EVENT_TRACE_FLAG_IMAGE_LOAD 0x00000004 // image load

网络信息监控:

EVENT_TRACE_FLAG_NETWORK_TCPIP

evntrace.h包含了很多功能事件,详细跟入查看或者Msdn查看.

贴提供一份可用的代码,个人开源项目中集成功能,通过应用层监控系统进程、线程、网络等数据:

Code: uetw.h uetw.cpp


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Springboot 如何获取上下文对象
下一篇:#yyds干货盘点# web安全day21:学习使用最基本的批处理程序
相关文章

 发表评论

暂时没有评论,来抢沙发吧~