感受微软外包项目(三)

2009年1月7日星期三

感受微软外包项目(三)

关于DirectUI

一旦完成API Hook,那么一个实质性的工作就是Office Communicator的资源文件结构分析。OC的UI结构是基于DirectUI技术实现的,因此与标准的Win32软件差异极大,微软内部在很早以前就开始开发DirectUI框架了,至于为什么要实现这样一个框架,原因很复杂,其中一个基本的原因也许是传统的技术每个UI元素大体要匹配一个“窗口”句柄,表面上看,句柄仅仅就是一个32位整数,其实不然,其背后应该是一个很复杂的数据结构,一个进程能够管理的窗口句柄个数应该是有限的,同时窗口句柄过多无疑要给系统增加额外的开销,因此Microsoft的开发者需要简化“窗口句柄”背后的东西,使得其能够响应部分关键的“消息”,因此,他们需要一种窗口对象的替代物,能够正常处理(诸如键盘、鼠标、绘制等)消息,但同时又不是传统的“窗口”,这一点应该是一个很重要的因素,也解释了传统的Spy++实用程序为什么无法直接观察DirectUI内部因素;开发DirectUI的另外一个原因也许是需要基于XML技术描述UI结构,用XML技术描述UI的好处是显而易见的,Windows7的Shell体系很大程度都依赖于DirectUI的实现。

既然DirectUI的关键点之一是“XML”UI描述,那么这些“XML”保存在哪里?如果我们用Visual Studio 2008的Shell直接打开Communicator.exe这个文件,我们会发现其资源结构如下:


这里,msgsres.dll是MSN的资源文件对应的动态链接库,在OC资源的结构树中我们发现了节点“UIFILE”,打开这个节点对应的子元素,我们即可发现我们感兴趣的东西,例如“940”这个节点:





















0 评论:

发表评论