閱讀677 返回首頁    go 電腦幫助


PE下桌麵主題使用技巧

在正常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路徑指向你自己的圖片。 

最後更新:2017-04-08 11:48:17

  上一篇:go PE啟動更快速的小技巧
  下一篇:go U盤量產必需知道的常識