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