java中的接口是类吗
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~