在正常windows下更换主题相信大家也会了但在PE下使用桌面主题大家应该就没见过吧下面一起来操作一下吧 先看看原理Winlogon启动后先初始化一些全局变量检测HKEY_LOCAL_MACHINESYSTEMSetup下的SystemSetupInProgress是否为零如果是正常启动如果为则在启动系统服务SamSs时告诉它不要管SAM数据库启动一些必要的服务后比如Serviceslsass然后就启动HKEY_LOCAL_MACHINESYSTEMSetup下由CMDline指定的程序等待程序结束重启或者关机如果SystemSetupInProgress == 则初始化系统服务后调用MSginaDLL登录XPMSginaDll 在初始化时调用SHsvcsDll产生一个ThemesStartEvent系统级事件代码如下 #define ThemeWatchForStart_Ordinal #define ThemeWaitForServiceReady_Ordinal typedef DWORD (_stdcall *PFN_ThemeWaitForServiceReady)(DWORD dwTimeout); typedef BOOL (_stdcall *PFN_ThemeWatchForStart)(void); HMODULE hShsvcs = LoadLibrary(_T("shsvcsdll")); 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(); pfThemeWatch(); } CloseHandle(hShsvcs); } 那位同学说了“把SystemSetupInProgress直接改成不就得了!” Lsass告诉你“此路不通!重启吧你” 我告诉你“我们可以改一改Winlogon让它先启动Msgina或是直接调用Shsvcs就行了” ThemesStartEvent事件是出来了怎么?还不行! 那是因为还有个家伙在捣乱:SXSDLL他会在系统要求它调用指定Dll时用FusionpAreWeInOSSetupMode函数进行判断SystemSetupInProgress是否为零如果为它就会告诉系统“我那个什么先歇会儿再说” 然而系统要实现Themes恰恰需要它去找到合适的ComCtlDll 你可以修改它但是合适的Dll在哪里? 这种概念是从微软的NET FrameWork的GAC引入的每当应用程序要求合适的Dll时系统会调用SXSDll在%SystemRoot%WinSxS 文件夹中寻找当有多个相同文件时它就查看C:WindowsWinSxSManifests以C:WindowsWinSxSPolicies中的规则来调用相应的文件 ——————————————————————————————————————————————————— 动手了 启用Themes需要以下文件修改版的Winlogon调用MsginaDll或直接修改MinLogon(XPE Feathure Pack 中有此文件)WinlogonMsginadllShsvcsdllActivedsdlluxthemedllthemeuidllsxsdllC:WindowsWinSxSManifests文件夹中的(对应SP) x_MicrosoftWindowsCommonControls_bccfdf__xww_dcecat x_MicrosoftWindowsCommonControls_bccfdf__xww_dceManifest C:WindowsWinSxSPoliciesx_policyMicrosoftWindowsCommonControls_bccfdf_xww_ddad 文件夹下的 cat Policy C:WindowsWinSxSx_MicrosoftWindowsCommonControls_bccfdf__xww_dce 文件夹下的 comctldll 还有一些Windows文件夹System下的文件自己研究吧(用Depends工具找一找文件的依赖关系) 修改文件(均已SP的文件为例)使用UltraEdit打开文件Winlogonexe 查找AFFFFFC将最后的改为查找 ED FFEFC修改为ED EBCFFFF(看清了只修改最后五位);打开SXSDll查找def可以看到SetupInprogress的字样把最后的s改成t即改成 修改PE的注册表在SYSTEMSetup下比照着SystemSetupInProgress新建一个REG_DWORD值SystemSetupInProgrest设为特别注意要修改servicesexe中的SystemSetupInProgress为SystemSetupInProgrest 同时测试了基于bartpe的xpe硬盘版因为xpe使用自己的peginadll重新进入sas序列所以无法启用主题 ——————————————————————————————————————————————————— 上传一个修改过的Minlogon切记修改注册表对了最重要的是别忘了加上你自己的主题文件它们一般在WindowsResources文件夹下传了一个压缩的是用我心如水的PE做的(hhh的也不错不过他的是SP的测试不方便)我重新上传一个精简过文件的IS_文件可直接替换我心如水里面的winpeis_ 修改的注册表添加了一些键值比如对DX游戏的支持; 修改为支持双核理论上能在P以上单核上启动; 自动检测硬件安装驱动(必须有相应的INF和驱动文件) 今天上传了一个自己用的Img格式的内核根据站长的研究使主题自动开启其中添加了VC的运行库内置NV显示驱动配合外置的DX可以玩现在的新游戏了 有一个小问题墙纸不能自动加载是因为Windows只认bmp格式的图片jpg格式的要转换成bmp把你需要的墙纸转换成bmp然后再修改HKEY_CURRENT_USERControl PanelDesktop下的WallPaper路径指向你自己的图片 |