http://bbs.wuyou.com/forum.php?mod=viewthread&tid=167092

 ux.rar

因為在win7pe中啟用主題要比xp中簡單的多,所以就和其他的東西合併到一塊發帖。
第一個條件:註冊表中相應的鍵值要正確,系統文件不能缺少。比如,win7pe中主題服務不再是shsvcs.dll,而是themeservice.dll;主題的初始化統一由文件uxinit.dll來管理。
第二個條件:修改winlogon.exe在其中查找unicode字符串minint,修改其中任一字母,只要和原先不一樣即可,比如,改成minins。
第三個條件:啟動主題服務。可以用pecmd的serv命令,也可以修改HKEY_LOCAL_MACHINE\SYSTEM\Setup\AllowStart,在下面建立子鍵Themes即可。在啟動explorer前運行ux.exe,注意運行附件中的文件必須是以修改過的winlogon為前提條件。
原理分析:
當winlogon進行到階段9的時候會檢測pe模式

g_WinlogonStage = 9;
g_fWinPEMode = IsMiniNTMode();

在階段18後先啟動主題,然後運行HKEY_LOCAL_MACHINE\SYSTEM\Setup下的指定的應用程序。
g_WinlogonStage = 18;
if ( !g_fWinPEMode )
  {
    CSession__SwitchDesktop(2, 0, 0);
    ThemesOnWinlogonSetup();
  }
  v56 = WinLogonSetup(&hKey, (enum _SHUTDOWN_ACTION *)&v59);

附件中的文件主要源碼如下:

int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR lpCmdLine,
                     int nCmdShow)
{
        UNREFERENCED_PARAMETER(hPrevInstance);
        UNREFERENCED_PARAMETER(lpCmdLine);
        WCHAR WinlogonName[] = L"Winlogon.exe";
        UXINIT ThemesOnCreateSessionWithPID;
        HMODULE hUxLib;
        DWORD WinLogonPID = 0;

        
        hUxLib = (HMODULE)LoadLibraryW(L"UxInit.Dll");
        if(hUxLib)
        {
                ThemesOnCreateSessionWithPID = (UXINIT)GetProcAddress(hUxLib,(LPCSTR)0x0D);
                if(ThemesOnCreateSessionWithPID!=NULL){
                        WinLogonPID = GetProcessIDByName(WinlogonName);
                        if(WinLogonPID != 0)
                                ThemesOnCreateSessionWithPID(WinLogonPID);
                }
                FreeLibrary(hUxLib);
        }
}
system用戶下只能啟用basic主題,沒有aero特效。
(2) netframework外置需要幾個條件,
比如vc2005的運行庫,系統文件mscoree.dll。最重要是兩個註冊表鍵值
;這個指示framework的文件在哪裡。
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework]
"InstallRoot"="k:\\wim9\\Microsoft.NET\\Framework\\"
;這個指示assembly的文件在哪裡。注意路徑是assembly的上一級文件夾。
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion]
"CacheLocation"="k:\\wim9\\"

(3) minint鍵值是由ntoskrnl或ntkrnlpa根據winlodload傳遞過來的參數自動生成的,如果修改ntoskrnl,pe的系統盤就會變成c,原c盤不見了

現在論壇上的win7pe很多都是從winbuilder構建而來,其組件大多為vista設計,所以造成某些功能不正常,比如msi的clsid註冊表鍵值Microsoft Windows Installer Message RPC下的dllversion版本號不正確,就造成msi工作不正常。
圖片查看器需要win7pe\Windows\System32\spool\drivers\color下的配色文件才能在非全屏模式下查看圖片。
(4) win7pe中大部分組件都轉變成了以com接口的方式提供服務,這就造成了一部分軟件必須在有用戶登錄的情況下才能運行。比如係統自帶的抓圖軟件。 Win7自帶的winmaill被微軟故意設計成不能使用,可笑的是微軟竟然還不斷給它提供升級補丁。如果想使用,將vista中相應的msoe.dll拷過來覆蓋win7的相應文件就可以了。
(5)
想起來再說

图片查看器.rar

文章標籤
創作者介紹

Martin Chang的部落格

m1016c 發表在 痞客邦 留言(0) 人氣()