ETW初接触

似乎我已经陷入了无限的阅读循环,为了解决这一问题,希望通过这样的方式来解决问题:每天读过的资料,尝试过的操作,无论深浅,用自己的语言讲出,这是记忆过程,更是理解的过程,而这一复述整理过程会帮助我解决另外一个比工作更重要的事情,就是以后在所有的讨论中有话可讲,而不是默认所有人都该懂每一项技术.而自己却只会用C语言交流,只知道怎么做,却不知道如何解释原因.

原来,不是这个社会无意义,舍本逐末,只是我一直没有融入而已.工作重要,而与人谈话一样是个技术活.希望能够在不久的日子里拥有高超的语言组织能力.

因为有缺勤而又不希望被扣工资,所以尽管昨天周末还是来公司加班,当然,缺半天就补半天.

首先是了解了一下NMAKE,程序实用维护工具.或许今天晚上能够补上关于MAKEFILE的比较详细的说明,毕竟不要占用太多上班时间.

其次就是重读ETW机制,期间还了解了工具mofcomp和wbemtest.

 

mofcomp工具,用来编译.mof文件,如果编译成功,会将类定义加入CIM库中,用WBEMTEST可以查看,但是我的虽然编译成功,但是却并没有如期加入。

MOF文件:Managed Object Format

是使用文本形式来描述CIM(common information model )模型的程序语言 ,是WBEM(web-based entraprise managed)的一部分。WMI(windows management instrumentation)也是WBEM的一部分,也用mof文件。

MOF文件主要是对类名,属性,方法和实例声明的描述。

如下例:

[Dynamic,  //下面的类是动态的
 Description("Sample String Data") : amended,//类的描述
 EventType{1, 2},//事件类型编号数组,多个用{},单个用()
 EventTypeName{"Start", "End"} : amended,//事件类型名称数组
 locale("MS//0x409")//语言
]
class TraceDPData_Ulong:TraceDPData
{
    [WmiDataId(1),//WMI数据ID
     Description("SampleULONG") : amended,//名称
     read]//只读
     uint32  Data;
};

[。。。]是描述块,用来修饰其后出现的变量;如[Dynamic,。。。]修饰TraceDPData,[WmiDataId(1),。。。]修饰Data;

 

提到MOF文件,因为ETW以二进制传输存储信息,ETL(Event trace log )文件也已二进制存储,ETW用三种方式来描述格式信息。在用户态XP中,用MOF文件,在内核态用WPP, 在VISTA用manifest,以后介绍。

 

关于事件追踪,大致有如下几种:

Printf 适用于控制台

OutDebugPrint ,效率较低,不适合频繁的数据访问

DbpPrint,利用INT 3 ,效率低。 

ETW Event trace for windows,事件追踪机制

目的:将软件运行的动态轨迹以可以观察的方式显示出来,作用太多。

特点:

支持动态启动,停止追踪信息输出

ETW追踪消息以二进制信息传输存储,所有格式信息存在在私有消息文件中,可以防止软件本身的保密技术泄露

ETW将追踪消息先输出到系统管理和维护的缓冲区中,然后异步写入到追踪文件或观察器。如果系统崩溃,将未写入的数据存入DUMP。

机制: 采用Provider/Consumer/Controller模式,我理解成Design Pattern中的Mediator Pattern。

Provider,用来输出追踪信息,并介绍Controller的命令处理

Consumer, 用来接收和观察追踪信息,包括观察工具和存储文件

Controller,负责控制追踪会话。

用来支持传输追踪信息的通信连接称为 ETW Session。系统为每个Session维护一定数量的缓冲区用来存放发送到该会话的ETW消息,定期(每秒一次)将BUffer输入Consumer,而ETW控制器可以订制Buffer 大小,也可以显示要求转储。当BUFFER满时,系统会提前转储。WINDOWS2000支持32个Session, XP及以后支持64个,但都有两个预留,一个是GLS,一个是NTKernel Log Session.

待整理。。。

 

你可能感兴趣的:(ETW初接触)