NoName Team 電腦資訊討論區

 找回密碼
 我要註冊
搜索
查看: 89514|回復: 77

[推薦新手優先觀看] NoName XPE 原理介紹及分析說明

  [複製鏈接]
發表於 2012-3-9 11:55:06 | 顯示全部樓層 |閱讀模式
轉載來源 : 電腦王46期 玩軟體篇 ,PCADV實驗室
文:NoName、電腦王編輯部

========================================================================================================
編按:
所 謂WinPE,簡單的說是修改過的特製Windows作業系統,可以從光碟開機執行,而WinPE系統又可以粗略分成微軟官方提供的陽春版,以及各種網友 自製的特異功能版(以下簡稱XPE),其中NoName XPE就是正體中文語系下一套少見的強大工具,而軟體作者「NoName」也很熱心的提供給我們各種製作原理及心得,希望和電腦王讀者們分享、推廣XPE 系統。為什麼需要WinPE光碟?這是因為硬體的發展日新月異,傳統DOS環境下的系統維護軟體,已 經跟不上硬體更新的速度了,這讓網管們維修系統的時候很不方便。以Ghost備份還原為例,這是目前大家最常用的備份工具,用在Intel 965晶片組的主機板,搭配ICH8R南橋,傳統DOS工具片就會出問題了。你會發現光碟機、硬碟都不能用。
這是因為ICH8南橋以後都不再支援傳統IDE介面,所以各家主力廠商在主機板上會多加一個硬碟控制器的晶片,例如華碩和技嘉主機板會用JMicron橋 接晶片組擴充出2組SATA以及一組傳統IDE,讓使用者保留原來的IDE光碟機,因此讓DOS原本的IDE光碟驅動程式抓不到硬體,即使開機光碟可以啟 動系統,但無法將路徑切換至光碟底下。這是由於JMicron橋接晶片對ICH8來說是SATA的晶片,並非IDE介面,所以ICH8會把這些IDE裝置 當成SATA裝置,才找不到光碟機。雖然也有廠商推出第三方橋接晶片的DOS驅動,但是因為各家的橋接晶片用料不一,也很難做出簡化又方便的DOS工具片。

以內建JMicron橋接晶片的例子來說,它的驅動是「gcdrom.sys」,而傳統IDE介面的驅動則是「oakcdrom.sys」,這麼一來開機光碟就得設計以下的選單:

1) Boot from Hard Drive........選擇要由硬碟開機(預設值)
2) Boot from CD or FDD.........由光碟機或軟碟機開機選擇2會以DOS開機片接手,再進入第二層選單:
1)IDE CD-ROM .................(傳統支援IDE主機板上的IDE光碟機)
2)JMicron SATA CD-ROM........(透過JMicron SATA晶片擴充的IDE光碟機)DOS只支援到USB 1.1

DOS對USB大量儲存裝置的支援性不佳,而且DOS的USB傳輸速度只有USB 1.1,雖然有幾個DOS版的USB 2.0驅動,但是和主機板的相容性不高,並不是每台電腦都能用。
因為USB是目前最普及又方便的外接儲存硬體介面,要是救援系統直接支援USB 2.0的速度,更可以達成快速又方便的維修目的。

USB規格速度列表
USB 1.0/1.1 Low Speed 1.5Mbps 192KBytes/s
USB 1.0/1.1 Full Speed 12Mbps 1.5MBytes/s
USB 2.0 High Speed 480Mbps 60MBytes/s

USB 2.0還原速度的差異

而在WinPE的環境下,可以支援到USB 2.0的速度,筆者將映像檔放進外接硬碟,依序測試:
1. 可否正常開機進入系統
2. 可否正常抓到硬碟
3. 執行GHOST32的還原速度
可通過測試的主機板與測得速度如下:
no_02.jpg

除了965晶片組,南橋晶片為ICH8跟ICH8R的主機板還原速度可達2100-2200 MB/Min外,其餘主機板都是在11XX-12XX MB/Min之間。而比照DOS外接硬碟還原到本機硬碟的速度是10MB/Min左右。
當 然WinPE環境執行Ghost不單單只有備份還原速度快這個特色,另外就是不容易發生「GHOSTERR」(因讀取錯誤中斷)的情況,用DOS版 Ghost光碟還原系統,讀取速度是每分鐘300MB左右,而且容易發生GHOSTERR的情況,這是因為光碟容易發生讀取不穩定的現象。如果是以 WinPE執行Ghost,除非遇到硬碟有壞軌的情況,不然不會發生GHOSTERR。

什麼是WinPE?
WinPE 其實就是Live CD的一種,而Live CD簡單說就是一張可以執行作業系統的光碟。WinPE是「Windows Preinstallation Environment」的縮寫,原本是微軟提供給OEM廠商進行重灌、救援系統的工作軟體。因為WinPE是一張開機光碟,可以拿到任何一部具有基本配 備上的電腦開機。因此,PE系統就像是Windows XP的最小核心版本。我們可以在上面執行應用程式,也能緊急、修復NTFS檔案系統、還能讀取網路分享內容。

下圖為微軟官方的Windows PE
圖一.jpg

BartPE

PE Builder乃是一種用來製作Windows XP Live CD的工具軟體。而Bart則是一位荷蘭籍程式設計師Bart Lagerweij的名字。下載PE Builder完全免費,製作PE系統的原始檔可支援Windows XP與Windows 2003。BartPE就是使用PE Builder製作的WinPE,可以透過外掛功能把一些程式、元件整合到系統,PE Builder無法直接支援正體中文,只能用外掛的方式補足。

XPE
XPE 其實是一套PE Builder的外掛,可以把XP的開始功能表、桌面、檔案總管、IE、Windows Media player、DirectX等等都整合到PE系統。使用PE Builder + 繁體中文外掛 + XPE plugin大概有300MB左右,在台灣很少有人自製和討論,過去最有名的正體中文版本就是2004年香港網友semson所做出來的 「Semson’s WinPE 3.0 繁體中文版」,再來就是「Hiko’s Windows PE」,不過後來這兩位作者都沒有繼續更新,加上硬體的演變,導致支援度也降低,漸漸被遺忘了。

下圖為2004年左右網路上所流傳的Semson’s WinPE桌面圖片
圖二.JPG


NoName XPE的誕生過程
當 初本人是因為工作的需求,當時工作內容一天平均大概有10台電腦要進行組裝,並且安裝OEM版本的Windows。而用正常方式安裝Windows少說也 要花個30-40分鐘,相當費時費力。(客戶以DIY組裝電腦為主,各式各樣的主機板都有,所以不可能也沒時間把每一款的電腦都事先做好Ghost備 份。)所以剛開始是在研究萬用Ghost XP映像檔,以簡化縮短工作的上所碰到的難題。
萬用Ghost XP就是一個可以Ghost還原到市面的任合一種主機板,然後可以正常運作的映像檔,大大縮短安裝Windows的時間,不過這邊就不再說明萬用Ghost XP映像檔,因為今天主要是要介紹XPE這個工具。
回到今天的主題,當時雖然說已經成功製作出萬用Ghost XP映像檔這個工具,但是又遇到一個難題,要如何把這映像檔快速,方便的還原到電腦上呢?這就是一開始所說的傳統DOS工具片的難題。

PE進化版
當我開始尋找有沒有更適合又方便的工具軟體。時間在2006年10月左右,無意中在大陸網站上面,找到了一種叫做XPE的工具讓我震驚不已,這個XPE跟我之前所碰到的Semson’s WinPE 3.0或是Hiko’s Windows PE 完全不一樣。

這類型的PE不僅僅是體積小,開機快速,也支援各類型主機板的SATA RAID晶片組。當然最重要的是,在XPE的環境下,可以讓各種外接裝置跑USB 2.0的速度,當時想得知更多關於XPE的資訊,儘管我用盡心力翻遍國內各大正體論壇的文章,不過很遺憾的是,我在網路上、各大論壇裡,一點都沒有關於正 體XPE的相關資訊,因為當時XPE對於從事資訊行業的我,是個相當好的一種 「工具」(至於是哪種工具,那要看你如何去應用他嚕。)所以內心充滿了無比的衝動和熱血,決定自行製作正體中文的版本。歷經7個月時間的挑戰,在網路上眾 多網友的協助和測試下,在2007年5月4號,第一個繁體中文版本的XPE就誕生了,命名為NoName XPE。而目前網路最新穩定版本為08/03/17的版本,這就是繁體中文NoName XPE的由來。

NoName XPE開機演示

NoName XPE從光碟開機後,會把系統核心檔案載入RAMDisk內。
圖三.JPG

系統檔案載入RAMDisk後,在這個畫面可以選擇是否載入額外的第三方驅動。
圖四.JPG

之後就會出現微軟的國旗。
圖五.JPG

NoName XPE的logo,此階段會進行系統設定跟解壓縮XPE需要的檔案。
圖六.JPG

登入系統進入桌面的畫面。
圖七.JPG

PE光碟的開機奧祕
我想大家一定會對NoName XPE為什麼會比傳統的WinPE或是PE Builder做出來的PE體積小,而開機速度又快速的原因有興趣,我們就來介紹XPE的架構跟開機的原理,並且對照各類PE系統之間的差異。

WinPE的開機流程
2004-2005 年流傳在網路上的繁體中文PE,是利用PE Builder + XPE plugin + 正體中文plugin做出來的PE,開機初始化桌面的過程利用XPELOGON.EXE 和 XPEinit.EXE這2個小程式,以便載入EXPLORER.EXE作為Shell。但是也只能依照載入的plugin來定義PE能執行的工作或是軟 體,自由度也有一定的限制,再來是修改plugin也有一定難度就是了。如Semson’s WinPE 3.0、Hiko’s Windows PE等等都是這樣類型的PE。

關鍵字:Shell
簡單來說,我們可以把shell當做你看的到桌面、工具列、開始功能表、程式集等等的使用介面,底下我們會以「殼層」做為它的中文翻譯。

新版XPE的開機流程
NoName XPE也是PE Builder + XPE plugin + 繁體中文plugin,只是它的核心檔案有加以精簡,只留下開機必備的檔案,並做成光碟映像檔或是硬碟映像檔。NoName XPE啟動後會先把你的核心光碟映像檔或是硬碟映像檔載入記憶體內再啟動。開機初始化桌面的過程中是利用PECMD.EXE和PELOGON.EXE這2 個小程式,以達成加載EXPLORER.EXE作為shell。而利用PECMD.EXE和PELOGON.EXE初始化桌面的過程比利用 XPELOGON.EXE和XPEinit.EXE的速度更快。你也可以利用PECMD.EXE的指令,簡單又自由的定義出想做的任務。

為什麼會變快?

這 邊所謂核心的精簡,是說NoName XPE核心檔案只包含開機必備的檔案,把其他跟開機流程不相關的網路、音效、MMC等組件挪出系統核心,用不到的檔案則精簡刪除,以達到縮小核心體積的目 的。開機進桌面環境後,再看你的需求把其它組件解壓回系統內。核心組件經過精簡再配合RAMDisk方式啟動,就是NoName XPE能達到快速開機的原因。
而傳統WinPE或是PE Builder做出來的救援系統,包含接近完整XP的系統檔案,而且利用普通啟動的模式,速度也受限於光碟的傳輸速度而顯得緩慢,再來是因為進入PE的環境後,只要做任何動作都會讀取光碟機,讓程式執行速度降低。
由 於光碟的傳輸速率偏低,因此我們把PE的所有檔案製作成一個映像檔,然後將映像檔直接載入記憶體啟動,可想而知它的運行速度會有多快。一般來說是做成 ISO或IMG格式的映像檔,最後再執行CAB壓縮,映像檔的容量就可以控制得很好了。這也是NoName XPE為什麼這麼小的原因之一,因為它經過壓縮。但載入記憶體時會自動解壓縮,因此這種方式啟動對記憶體的容量的要求就會變大,要正常使用NoName XPE建議至少要有256MB的記憶體。

深入傳統WinPE開機流程
接下來我們會先介紹NoName XPE開機後直到PECMD接手前的開機流程,再講解PECMD接手開機工作後直到進入桌面後的過程。首先為了讓大家更深入了解PE系統的啟動,所以先以微軟官方PE跟NoName XPE的啟動差異來說明。

微軟的Windows PE的開機流程與一般的Windows很接近(摘要自微軟網站):
1. 電腦的BIOS載入特定媒體的開機磁區,並將控制權交給Setupldr(一般的 Windows是交給ntldr)。
2. Setupldr載入並執行Ntdetect.com,後者會擷取基本的系統設定資訊,並將這些資訊儲存在HKLM\HARDWARE\DESCRIPTION。若以唯讀媒體開機,Windows PE 會將登錄資料庫的hive檔存到記憶體,以便應用程式寫入。
3. 接著 Setupldr 會以 Winpeoem.sif 載入適當的硬體抽象層(HAL)、系統登錄檔以及必要的開機驅動程式。載入完成後即準備環境執行核心,也就是 Ntoskrnl.exe。
4. 執行 Ntoskrnl.exe 並完成環境安裝之後,再將控制權交給「工作階段管理員」(Session Manager Subsystem,SMSS)。
5. SMSS 會載入其餘的登錄資料庫,並設定Win32子系統(Win32k.sys)執行環境及其各個處理程序。SMSS再載入Winlogon處理程序以建立使用 者工作階段,然後啟動服務和其他不重要裝置的驅動程式及 LSASS(Local Security Authority Subsystem Service)。
6. 接著 Windows PE 會執行 Winpeshl.exe,這個程式會執行「命令提示字元」(Cmd.exe)和 Startnet.cmd(可以當成是Windows PE的Autoexec.bat)。預設會以factory -winpe作為Startnet.cmd的參數,而這會根據以下順序執行 Winbom.ini裡的區段:
[WinPE.Net]
[DiskConfig]
[OEMRunOnce]
[OEMRun]
[WinPE](除了 Restart 之外)
[UpdateSystem]
位於 [WinPE] 的 Restart

7. 執行完 Startnet.cmd 之後,系統會停在命令提示字元,Windows PE的開機程序完成。
Startnet.cmd的預設參數為「factory -winpe」,我們也可以新增其他參數來自訂Windows PE開機程序。如果要結束Windows PE,只要在命令提示字元執行 「exit」即可。
微 軟官方的Windows PE是以「命令提示字元」(CMD.exe)為使用介面的。而最原始不加上XPE外掛所做出來的BartPE也是以「命令提示字元」(CMD.exe)為 使用介面,要是加上XPE外掛後,在開機流程的第6步驟,就會以XPELOGON.EXE和XPEinit.EXE接手,並用EXPLORER.EXE作 為shell,得到像XP一樣的桌面環境,這裡就不詳細描述BartPE的開機流程了。

========================================================================================================
詳解NoName XPE開機流程
看 完傳統PE的一些基本概念,在此以燒成光碟為例,詳細解說NoName XPE的開機流程,你就會發現跟兩者的差異在哪了。當NoName XPE光碟啟動時,開機程式會自動尋找光碟底下「\RXPE」資料夾的 「SETUPLDR.BIN」檔案,載入並且將控制權轉交給它。「SETUPLDR.BIN」則會在根目錄底下讀取「RXPE.SIF」檔的內容,確定是 載入光碟映像檔還是硬碟映像檔。

NoName XPE的RXPE.SIF檔內容
[SetupData]
BootDevice="ramdisk(0)"
BootPath="\RXPE\SYSTEM32\"
OsLoadOptions="/minint /fastdetect /rdpath=RXPE.IM_"


核心映像檔的讀取解壓
RXPE.SIF 的設定值會告訴SETUPLDR.BIN透過RAMDisk的方式加載硬碟映像檔,啟動後的系統路徑為「\RXPE」,對應的SYSTEM32目錄為 「\RXPE\SYSTEM32」,也就是相當於平常的「WINDOWS\SYSTEM32」,啟動的硬碟映像檔在「RXPE.IM_」裡面。 「RXPE.IM_」其實是CAB格式的壓縮檔,裡面是RXPE.IMG硬碟映像檔,由於SETUPLDR.BIN支援讀取CAB格式的檔案,所以能夠將 找到的映像檔從RXPE.IM_中解壓出來載入記憶體。

SETUPLDR.BIN的版本限制
這 裡的SETUPLDR.BIN必須是Windows Server 2003 SP1中的版本才行,因為從微軟Windows PE 2005/1.6(基於Windows Server 2003 SP1)才開始支援RAMDisk及USB隨身碟開機。要注意的是,雖然Windows XP Professional SP2和Windows Server 2003 SP1都能製作出Windows PE 1.6,但只有Windows Server 2003 SP1才能做出支援RAMDisk及USB隨身碟開機的Windows PE。而且SETUPLDR.BIN有自我校驗,還必須經過破解後才能夠使用。破解方法很簡單,用UltraEdit打開來編輯,找到十六進制地址 2060h的地方,將2060h~2061h 的74 03,修改成EB 1A,再儲存就好。

用UltraEdit開啟SETUPLDR.BIN的編輯畫面,將圖中的內容修改成「EB 1A」。
SETUPLDR破解法.JPG
NoName XPE的SETUPLDR.BIN改過很多地方,所以它的資料夾和檔名結構,和傳統PE不太一樣:
傳統WinPE NoName XPE
Winnt.sif RXPE.SIF
系統資料夾:i386 系統資料夾:\RXPE
NTDETECT.COM RXPE.COM


交給PECMD接手開機流程
當 系統映像檔被解壓縮出來,並載入記憶體之後,緊接者會執行「Ntoskrnl.exe」繼續完成環境安裝,再來是將控制權交給「工作階段管理 員」(Session Manager Subsystem,SMSS)。SMSS會載入其餘的登錄資料庫,並設定Win32子系統(Win32k.sys)執行環境及其各個程序。SMSS再載 入PECMD.EXE跟 PELOGON.EXE程序以建立使用者工作階段,然後啟動服務和其他裝置的驅動程式及LSASS(Local Security Authority Subsystem Service)。
最後啟用登錄檔 「HKEY_LOCAL_MACHINE\SYSTEM\Setup」中的「CmdLine」;在NoName XPE的CmdLine項目是「PELOGON.EXE PECMD.EXE LOAD %SystemRoot%\SYSTEM32\PECMD.INI」,這可以讓使用者透過自訂的配置(PECMD.INI)來控制整個開機流程。

PECMD
下載位置 :
PECMD 的前身叫XCMD,是由大陸網友Yonsm所撰寫的,源碼有公開。而PECMD是大陸網友lxl1638以XCMD 2.0原有的17條命令為基礎,繼續修改完善的程式。XCMD跟PECMD的出現,是因為微軟的PE是用Winlogon;而BartPE加XPE外掛的 系統則是以XPELOGON進行登入。

XPELOGON講求嚴謹、安全和相容性,可以在登入和關機步驟表現出來,使用者只能按照指定的步驟做、或修改其中很小的部分,也可以說中規中矩。所以BartPE加XPE外掛程式的WinPE系統比較慢,但成功率較大,最多是啟動後的使用界面要再調整而已。
而PECMD講求自由和速度,可以透過自訂的配置文件來控制登入過程,並且自由配置系統跟速度。

PECMD接手後的開機流程
執行上一段「CmdLine」登錄值之後,PECMD會繼續執行PECMD.INI裡面的內容,我們會概略說明,執行過程中每一個「_SUB」到「_END」的工作在做什麼。另外底下我們將提到幾個指令的用途及內容,由於篇幅的限制,PECMD的詳細指令用法請參考其中「 附件三PECMD指令說明.txt (69.28 KB, 下載次數: 925)
發表於 2012-3-16 10:25:18 | 顯示全部樓層
終於復站了,等了好久丫
發表於 2012-3-23 14:40:03 | 顯示全部樓層
YA  終於有機會學習了  真的等很久了
發表於 2012-3-23 18:07:48 | 顯示全部樓層
等了好久了,終於有機會再度學習。
發表於 2012-3-23 22:03:53 | 顯示全部樓層
太好ㄌ  有學習的機會ㄌ
發表於 2012-3-24 00:41:02 | 顯示全部樓層
辛苦的過程,我想送花!!
發表於 2012-3-24 01:17:17 | 顯示全部樓層
超精彩的教學過程,值得珍藏,終生受用!
發表於 2012-3-25 01:21:23 | 顯示全部樓層
u32227 發表於 2012-3-24 01:17
超精彩的教學過程,值得珍藏,終生受用!

說得太貼切了,心有戚戚焉!
發表於 2012-3-25 10:11:03 | 顯示全部樓層
看了這篇文章  又增加好多知識
真是太感謝了
發表於 2012-3-25 21:24:29 | 顯示全部樓層
恭喜恭喜
終於復站了
之前在舊站學習到不少新知識
您需要登錄後才可以回帖 登錄 | 我要註冊

本版積分規則

小黑屋|手機版|NoName Team 電腦資訊討論區 |網站地圖

GMT+8, 2024-5-6 20:36 , Processed in 0.270068 second(s), 25 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回復 返回頂部 返回列表