ETW概述
ETW主要包括3个component:Controller, Provider, and Consumer.
Controller的主要任务有两个:
一是,用StartTrace在内存中创建一个event trace session。刚创建时,这个session是没有跟任何provider关联的,也就不会任何数据被写到这个session的buffer中,,当然这一步也是可以完成关联的,那就是把StartTrace的参数Wnode.Guid member of Properties设置为provider id.问题:(Wnode.Guid什么时候应该设置,应该设置为什么值??)
二是,启动(API: EnableTrace)和停止(API: ControlTrace)Provider(它是使用Provider的GUID来区分不同的provider的)。Controller的第二个任务就是为了避免额外的开销,Provider不会一直都在工作,只有当被Enable的时候,才开始工作(注:其实这么说是不正确的,Provider其实是不必受Controller控制的,它可以随时随地发送trace,只要它知道那个event trace session的句柄,这完全取决于Provider具体是怎么写的。但在实际操作上,Provider都是根据Controller的Enable/Disable信号来启动和停止tracing的。)
第二个是Consumer,Consumer主要做这几件事:
1. 用OpenTrace打开和event trace session之间的通道。
2. 设计event trace callback,你可以设计一个generic的callback用来handle所有的event trace,不管是不是你感兴趣的。你也可以为特定的event trace设计callback,专门处理你关心的trace。Generic的callback实在OpenTrace的时候在参数中指定的,而特定的callback可以用SetTraceCallback来注册。
3. 调用ProcessTrace,开始处理Trace。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步