|
实现 WinXPPE 默认主题的详细方法----为 PE 添彩(2011-06-20)
本人喜欢多功能的 PE,尤其认为仿系统的PE。比如老九、天意、如水、玄天等大师级作品,每款必试用、修改、并收藏。久之,对无主题的界面不喜欢了。在看到玄天的PE3(新版)已经自动加载了主题,并论坛中相关的XPE主题的帖子,均是极其心弦的。
但问题是:根据帖子中说到的XPE加载主题的方法,可以实现启动后的XP标准主题的切换,但总是不能自启动。---理论上自启动完全可行(需要添加的 M 不多),但需要的DLL文件、注册表的修改等,目前论坛中说的都不是很清楚(大师们一带而过,概而言之)。所以,本人总结了一下,可以实现自动加载的默认主题,以和大家分享。
高手略过了。
下面我详细介绍实现 XP 默认主题的过程:
一、先说原理。
参照 yamingw 大师的帖子(http://bbs.wuyou.net/forum.php?mod=viewthread&tid=138825&highlight=themes),也就是下面的
内容:
Winlogon启动后先初始化一些全局变量,检测HKEY_LOCAL_MACHINE\SYSTEM\Setup下的SystemSetupInProgress是否为零,
如果是正常启动,如果为一,则在启动系统服务SamSs时告诉它不要管SAM数据库,启动一些必要的服务后,比如Services,
lsass,然后就启动HKEY_LOCAL_MACHINE\SYSTEM\Setup下由CMDline指定的程序,等待程序结束,重启或者关机。
如果 SystemSetupInProgress == 1,则初始化系统服务后调用MSgina.DLL登录XP。
.....
我告诉你:“我们可以改一改Winlogon,让它先启动Msgina或是直接调用Shsvcs就行了。”
ThemesStartEvent事件是出来了,怎么?还不行!
那是因为还有个家伙在捣乱:SXS.DLL。他会在系统要求它调用指定Dll时用FusionpAreWeInOSSetupMode函数进行判
断SystemSetupInProgress是否为零,如果为1,它就会告诉系统:“我那个什么......先歇会儿再说。”
然而系统要实现Themes,恰恰需要它去找到合适的ComCtl32.Dll。
你可以修改它,但是合适的Dll在哪里?
这种概念是从微软的.NET FrameWork的GAC引入的。每当应用程序要求合适的Dll时,系统会调用SXS.Dll在
%SystemRoot%\WinSxS 文件夹中寻找,当有多个相同文件时,它就查看C:\Windows\WinSxS\Manifests以
C:\Windows\WinSxS\Policies中的规则来调用相应的文件。
—————————————————————————————————————————————————————————————
动手了:
1. 启用 Themes 需要以下文件:
修改版的 Winlogon 调用 Msgina.Dll 或直接修改 MinLogon(XPE Feathure Pack 2007 中有此
文件),Winlogon,Msgina.dll,Shsvcs.dll,Activeds.dll,,uxtheme.dll,themeui.dll,sxs.dllC:\Windows\WinSxS\Manifests文
件夹中的(对应SP3)
x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.5512_x-ww_35d4ce83.cat
x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.5512_x-ww_35d4ce83.Manifest
C:\Windows\WinSxS\Policies\x86_policy.6.0.Microsoft.Windows.Common-Controls_6595b64144ccf1df_x-ww_5ddad775
文件夹下的
6.0.2600.5512.cat
6.0.2600.5512.Policy
C:\Windows\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.5512_x-ww_35d4ce83
文件夹下的
comctl32.dll
还有一些Windows文件夹System32下的文件,自己研究吧。(用 Depends 工具找一找文件的依赖关系)
2.修改文件。(均以 SP3 的文件为例)
使用 UltraEdit 打开 Winlogon.exe 查找AF46FFFF85C07512,将最后的12改为27,
查找 56E8151D000056 FF7614E8FC,修改为56E8151D000056 E8BC91FFFF(看清了,只修改最后五位);打开 SXS.Dll 查找
530079007300740065006d005300650074007500700049006e00500072006f00670072006500 可以看到 S.e.t.u.p.I.n.p.r.o.g.r.e.s.s 的字样,把最后的 s 改成 t,即 73 改成 74。
修改PE的注册表,在SYSTEM\Setup 下比照着 SystemSetupInProgress 新建一个 REG_DWORD 值 SystemSetupInProgrest,设为 0。为什么这样,请参照 http://bbs.wuyou.net/forum.php?mod=viewthread&tid=125169&highlight=
-----特别注意要修改 services.exe 中的 SystemSetupInProgress 为 SystemSetupInProgrest。
这样有点....
yamingw 大师进一步总结如下:
启用 Themes 需要以下文件:修改版的 Winlogon 调用 Msgina.Dll 或直接修改 MinLogon(XPE Feathure Pack 2007 中有此文件),
Shsvcs.dll,Activeds.dll,icaapi.dll,mstlsapi.dll,ntlsapi.dll,termsrv.dll,uxtheme.dll,themeui.dll,sxs.dll
WinSxS文件夹下其实只需要
C:\Windows\WinSxS\Manifests文件夹中的(对应SP3)
x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.5512_x-ww_35d4ce83.cat
x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.5512_x-ww_35d4ce83.Manifest
C:\Windows\WinSxS\Policies\x86_policy.6.0.Microsoft.Windows.Common-Controls_6595b64144ccf1df_x-ww_5ddad775
文件夹下的
6.0.2600.5512.cat
6.0.2600.5512.Policy
C:\Windows\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.5512_x-ww_35d4ce83
文件夹下的
comctl32.dll
GDIplus我的是5581,你可根据你机器上的提取相应Manifest和Dll文件
x86_Microsoft.Windows.GdiPlus_6595b64144ccf1df_1.0.2600.5581_x-ww_dfbc4fc4
yamingw 大师的上述方法确实可以实现主题服务的开启,甚至可以手动加载 默认主题---不信你试一试....
可是要实现开机自动加载,还不行。
我仔细分析了 Windows NT5.x 的启动过程,发现:Winlogon 检测 SystemSetupInProgress == 1、初始化系统服务后并不是直接调用 MSgina.DLL,而要检查 System 相关设置(桌面"特征"),然后再登录 XP。
不知为什么,许多 PE 都设置了 System 项内容,也不知有什么实际作用。
简单了---屏蔽 System 设置,或者干脆不要 System 设置。恰恰这个细节就可以实现自动加载主题。
二、 具体设置
1. 添加上述需要的文件和修改。
2. 将 XP Windows 目录中的 “Resources”和“Web”文件夹添加到 PE的“WXPE”中。 文件夹结构如下:
Resources\themes\luna
\Windows Classic.theme
\Luna.theme
Web\Wallpaper\Bliss.bmp
3. 删除注册表 Default\Software\Microsoft\Windows\CurrentVersion\Policies 下的“System”项。
4. 将 SETUPREG.HIV\ControlSet001\Services\Themes 下“Start”DWORD值 改为“2”。
至此,应该可以了,不信你试一试。
三、 Windows 7 PE 的主体实现更简单一些,调用 yamingw 大师的 “UI.EXE” 即可,当然你要添加相关的文件和设置
--玄天老师是专家。
四、 Win 2003 PE,由于正常系统本身就不是自动加载主题,即便是按照上述 yamingw 大师的的方法,也不成功。你可以试试。
以上都是在坛中学到的,并非本人之功,要感谢各位大师们,尤其要感谢 yamingw 大师。
[ 本帖最后由 2010jingan 于 2011-7-5 21:33 编辑 ] |
|