欢迎登陆真网站,您的到来是我们的荣幸。 登陆 注册 忘记密码? ☆设为首页 △加入收藏
欢迎加入真幸福QQ群
电脑知识: 基础知识 网络技术 操作系统 办公软件 电脑维修 电脑安全 windows7 windows8 windows10 服务器教程 平板电脑 视频播放教程 网络应用 互联网 工具软件 浏览器教程 QQ技巧 输入法教程 影视制作 YY教程 wps教程 word教程 Excel教程 PowerPoint
云南西双版纳特产小花糯玉米真空包装


物理内存和虚拟内存是什么意思?
计算机如何删除输入法
硬件的性能好坏该怎么看?
Mac怎么更改Launchpad背景效果?
HTPC是什么意思
华硕笔记本怎么系统重装
怎么无损数据地转换FAT32到NTFS分区
怎么无损数据地转换NTFS到FAT32分区
更改WIN7硬盘模式的方法
无法定位程序输入点怎么办?
PE下使用桌面主题的技巧
【 来源:网络 】【 点击:1 】 【 发布时间:2017_03_03 08:59:59 】

   在正常windows下更换主题相信大家也会了,但在PE下使用桌面主题大家应该就没见过吧。下面一起来操作一下吧。

  先看看原理:Winlogon启动后先初始化一些全局变量,检测HKEY_LOCAL_MACHINESYSTEMSetup下的SystemSetupInProgress是否为零,如果是正常启动,如果为1,则在启动系统服务SamSs时告诉它不要管SAM数据库,启动一些必要的服务后,比如Services,lsass,然后就启动HKEY_LOCAL_MACHINESYSTEMSetup下由CMDline指定的程序,等待程序结束,重启或者关机。如果SystemSetupInProgress == 1,则初始化系统服务后调用MSgina.DLL登录XP。MSgina.Dll 在初始化时调用SHsvcs.Dll产生一个ThemesStartEvent系统级事件,代码如下:

  #define ThemeWatchForStart_Ordinal 1

  #define ThemeWaitForServiceReady_Ordinal 2

  typedef DWORD (_stdcall *PFN_ThemeWaitForServiceReady)(DWORD dwTimeout);

  typedef BOOL (_stdcall *PFN_ThemeWatchForStart)(void);

  HMODULE hShsvcs = LoadLibrary(_T("shsvcs.dll"));

  if( hShsvcs != NULL )

  {

  PFN_ThemeWaitForServiceReady pfThemeWait

  = (PFN_ThemeWaitForServiceReady)GetProcAddress( hShsvcs, (LPCSTR)ThemeWaitForServiceReady_Ordinal);

  PFN_ThemeWatchForStart pfThemeWatch

  = (PFN_ThemeWatchForStart)GetProcAddress( hShsvcs,(LPCSTR)ThemeWatchForStart_Ordinal);

  if( pfThemeWait != NULL &&

  pfThemeWatch != NULL )

  {

  pfThemeWait(1000);

  pfThemeWatch();

  }

  CloseHandle(hShsvcs);

  }

  那位同学说了:“把SystemSetupInProgress直接改成0不就得了!”

  Lsass告诉你:“此路不通!重启吧你”

  我告诉你:“我们可以改一改Winlogon,让它先启动Msgina或是直接调用Shsvcs就行了。”

  ThemesStartEvent事件是出来了,怎么?还不行!

  那是因为还有个家伙在捣乱:SXS.DLL。他会在系统要求它调用指定Dll时用FusionpAreWeInOSSetupMode函数进行判断SystemSetupInProgress是否为零,如果为1,它就会告诉系统:“我那个什么......先歇会儿再说。”

  然而系统要实现Themes,恰恰需要它去找到合适的ComCtl32.Dll。

  你可以修改它,但是合适的Dll在哪里?

  这种概念是从微软的.NET FrameWork的GAC引入的。每当应用程序要求合适的Dll时,系统会调用SXS.Dll在%SystemRoot%WinSxS

  文件夹中寻找,当有多个相同文件时,它就查看C:WindowsWinSxSManifests以C:WindowsWinSxSPolicies中的规则来调用相应的文件。

  ———————————————————————————————————————————————————

  动手了:

  1、启用Themes需要以下文件:修改版的Winlogon调用Msgina.Dll或直接修改MinLogon(XPE Feathure Pack 2007 中有此文件),Winlogon,Msgina.dll,Shsvcs.dll,Activeds.dll,,uxtheme.dll,themeui.dll,sxs.dllC:WindowsWinSxSManifests文件夹中的(对应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:WindowsWinSxSPoliciesx86_policy.6.0.Microsoft.Windows.Common-Controls_6595b64144ccf1df_x-ww_5ddad775

  文件夹下的

  6.0.2600.5512.cat

  6.0.2600.5512.Policy

  C:WindowsWinSxSx86_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的注册表,在SYSTEMSetup下比照着SystemSetupInProgress新建一个REG_DWORD值SystemSetupInProgrest,设为0。特别注意要修改services.exe中的SystemSetupInProgress为SystemSetupInProgrest。

  同时测试了基于bartpe的xpe硬盘版,因为xpe使用自己的pegina.dll重新进入sas序列,所以无法启用主题。

  ———————————————————————————————————————————————————

  上传一个修改过的Minlogon,切记修改注册表。对了,最重要的是别忘了加上你自己的主题文件,它们一般在WindowsResources文件夹下。传了一个压缩的,是用我心如水的PE做的(hhh333的也不错,不过他的是SP2的,测试不方便),我重新上传一个精简过文件的IS_文件,可直接替换我心如水里面的winpe.is_

  1、修改的注册表,添加了一些键值,比如对DX8游戏的支持;

  2、修改为支持双核,理论上能在P4以上单核上启动;

  3、自动检测硬件,安装驱动。(必须有相应的INF和驱动文件)

  今天上传了一个自己用的Img格式的内核,根据站长的研究使主题自动开启。其中添加了VC2005的运行库,内置NV显示驱动,配合外置的DX9可以玩现在的新游戏了。

  有一个小问题,墙纸不能自动加载是因为Windows只认bmp格式的图片,jpg格式的要转换成bmp。把你需要的墙纸转换成bmp,然后再修改HKEY_CURRENT_USERControl PanelDesktop下的WallPaper路径指向你自己的图片。

本网站由川南居提供技术支持,fkzxf版权所有 浙ICP备12031891号
淳安分站 淳安分站