大家都知道,在Nlite中那个OE组件(Outlook邮件),为什么会被 Nlite标红?因为关联着MHT功能支持,说实话,偶从来都不用OE的,但是为了使用MHT功能,不得不保留Outlook组件,小苹果的研究中指出 MHT功能和inetcomm.dll和mshtmled.dll两个文件有关,其实当我们移除OE时保留这两个控件,进入系统后,运行Regsvr32 inetcomm.dll,马上你就会得到一个错误的对话框,说是找不到指定的模块,无法注册这个控件,再试试用IE或是其它浏览器打开MHT网页文件 呢?呵呵,一片乱码,根本就不支持MHT功能。由于这个问题,迫使偶进行去OE保留MHT功能研究。
   这次用时两天功夫,终于找到了MHT支持的另外几个文件,分析方法很简单,因为在用骨头版的时候,偶注意到这么一个现象,当没有用骨头的恢复OE功能时, 系统无法查看MHT文件,恢复后就可以了,那么可以说MHT功能就在这个OE.INF文件当中,而这个INF据说还是从IE6安装文件中抠出来,对比一下 和XP的那个INF的确还有点不同,于是偶着手进行分析,从下面的小节中得知下面几个目录.

[DestinationDirs]
file.copy.sys     = 11
file.copy.sys.roll = 11
file.copy.help     = 18
file.copy.exe     = 16422,"Outlook Express"
file.copy.permanent = 16422,"Outlook Express"
file.copy.common   = 16427,"System"
file.copy.sources   = 16427,"Services"

这几个目录就是OE相关的文件拷到哪个目录下了,11是系统System32目录,16422是Program files目录,16427是Program files\Common Files目录,当然就从这些文件目录开始测试喽。

[SourceDisksFiles]
acctres.dll = 1
cdonts.dll   = 1
cdosys.dll   = 1
directdb.dll = 1
msoe50.inf   = 1
msoe.dll   = 1
msoeres.dll = 1
csapi3t1.dll = 1
inetcomm.dll = 1
inetres.adm = 1
inetres.dll = 1
msimn.exe   = 1
msoe.chm   = 1
msoe.hlp   = 1
msoe.txt   = 1
msoeacct.dll = 1
msoeacct.hlp = 1
msoert2.dll = 1
oe_msgr.chm = 1
oeaccess.inf = 1
oeimport.dll = 1
oemig50.exe = 1
oemiglib.dll = 1
setup50.exe = 1
wab.chm     = 1
wab.exe     = 1
wab.hlp     = 1
wab32.dll   = 1
wab32res.dll = 1
wab50.inf   = 1
wabfind.dll = 1
wabimp.dll   = 1
wabmig.exe   = 1



这个小节中可以看出OE的所有源文件,当然不用说Wab*.*这几个开头的就是我们的通讯簿相关的文件,早就分析过了,在浓缩修正版就被去掉了的DD,重点其实就是下面几个小节中的文件

[file.copy.permanent]
setup50.exe,,,5
oemig50.exe,,,4
oemiglib.dll,,,4

[file.copy.sys]
msoeacct.dll,,,5
acctres.dll,,,5
msoert2.dll,,,5

[file.copy.sys.roll]
inetcomm.dll,,,5
inetres.dll,,,5

[file.copy.exe]
csapi3t1.dll,,,4
msoeres.dll,,,5
msoe.dll,,,5
oeimport.dll,,,4
msoe.txt
msimn.exe,,,5
;
wabimp.dll,,,4
wabfind.dll,,,5
wabmig.exe,,,4
wab.exe,,,5

[file.copy.common]
directdb.dll,,,5
;
wab32res.dll,,,5
wab32.dll,,,5

呵呵,偶在浓缩版里把Program files\Outlook express目录移到其它的目录下,试着打开MHT文件,嘿嘿,还在。那么就排除了 [file.copy.permanent]、[file.copy.exe]、[file.copy.common]三个小节,因为相关的文件就在刚才 移除的目录中,这样还剩下两个小节了,很明显,两个小节的文件是拷到了System32目录下的,一共五个文件,一个一个来排除,把 msoeacct.dll剪到其它目录下,测试MHT还在,acctres.dll移到其它地方,测试MHT还在,msoert2.dll移动,这下 MHT不行了,得保留这个文件,还原该文件,再测试inetcomm.dll,inetres.dll,同样,都是需要保留的文件,少任何一个MHT显示 都不正常。控件如何注册的呢?分析INF中还有这样一句

[RunOnce.Reg]
HKLM,"Software\Microsoft\Windows\CurrentVersion\RunOnceEx\OEWAB OS Setup","OE5_2",0,"%11%\inetcomm.dll|DllRegisterServer"

很明显,三个关键文件只有Inetcomm.dll被注册,另两个文件肯定是 依附于这个DLL文件的。于是安装骨头版,把这三文件拷到骨头系统中,用运行Regsvr32 inetcomm.dll,系统弹出inetcomm.dll注册成功,呵呵,添加一个骨头IE组件,打开MHT网页文件,嘿嘿,正常显示,至此,MHT 功能完整的从OE系统中剥离出来了。于是编写INF安装文件,哈哈,这个补丁就这么制作出来了。

第二步,如何集成这个补丁在去OE的系统 中呢?偶一惯喜欢手动集成,于是在Nlite中保留三个关键文件,控件如何在安装中自动注册呢?还记得偶原来提到过的那个Syssetup.inf文件 么?让我们解压Syssetup.in_文件,打开Syssetup.inf,定位到[OleControlDlls]小节,查看了一下注册控件的顺序, 偶发现前面有IE的控件在注册,为了不让Inetcomm.dll控件注册失败,偶决定不在IE控件注册前添加它,偶在 11,,sendmail.dll,1后面添加了一行


11,,inetcomm.dll,1

呵呵,安装这个去OE的精简版,打开MHT网页文件,嘿嘿,是不是正常显示呢?注册控件就这么简单,你也不用写什么集成包了,手工两步就搞定的东西,至此,没有OE的世界真的是很清爽呀,哈哈~~~~~~~

-by bulewind-