在正常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路徑指向你自己的圖片
From:http://tw.wingwit.com/Article/Common/201311/6937.html