引言: 隨著企業服務器的維護工作量日益增多,盡管使用最新內核的各種WinPE系統能將大多數服務器的磁盤陣列卡驅動都包含其中,也不排除有極個別的服務器,由于WinPE系統中缺少服務器特殊的陣列卡所需的驅動程序而無法使用。我們可以按照本文介紹的方法,將維護服務器所需的各類驅動程序添加進WinPE中。
大多數系統維護員對于WinPE系統應該都不會陌生的,WinPE系統即是Windows預安裝環境(Windows Preinstallation Environment,簡稱 WinPE)在Windows內核上構建的具有有限服務的最小Win32子系統,它用于向準備安裝Windows操作系統的計算機提供安裝環境,啟動Windows安裝程序,復制文件或者制作磁盤映像,是計算機技術保障人員日常工作中的有效工具。
目前,隨著單位服務器的維護工作量日益增多,盡管使用最新內核的各種WinPE系統能將大多數服務器的磁盤陣列卡驅動都包含其中,也不排除有個別的服務器,由于WinPE系統中缺少服務器特殊陣列卡所需的驅動程序,從而無法使用。實際上,我們按照下面的方法,可以將維護服務器所需的各類驅動程序添加進WinPE中,制作出針對某種型號服務器的WinPE系統來幫助我們做好維護工作。下面,筆者以添加服務器的磁盤陣列卡驅動為例和大家一同探討。
在制作專用WinPE系統之前,首先要對WinPE調用磁盤陣列卡驅動程序的過程有一些簡單的了解。計算機啟動之后,WinPE系統首先會讀取磁盤陣列卡里面的硬件標識,完成對磁盤陣列卡的識別工作。接下來,WinPE系統會根據系統安裝信息文件的信息,通過磁盤陣列卡的標識找到對應驅動程序的名稱,然后WinPE系統進入驅動程序所在的子目錄,將驅動程序拷貝到指定的安裝目錄下面。完成驅動程序的拷貝操作之后,WinPE系統會在運行中調用驅動程序對磁盤陣列卡進行驅動。
對WinPE調用磁盤陣列卡驅動程序流程有一定的了解后,我們就可以逆向把磁盤陣列卡驅動程序添加到WinPE中了。首先,用專用軟件將WinPE系統的核心文件從壓縮的鏡像文件中提取出來,然后把磁盤陣列卡驅動程序添加到這個提取出來的文件中,再修改系統安裝信息文件,確保WinPE系統能夠正確調用新添加的驅動程序。最后,將修改后的文件封裝壓縮,替換原先的文件,完成WinPE系統的制作。具體步驟如下。
首先使用ULTRAISO或其他光盤映像文件制作編輯軟件,將WinPE系統鏡像文件中擴展名為“IS_”的文件提取出來,將這個擴展名改為“cab”,然后用WinRAR或其他解壓縮軟件將其解壓縮,得到相應的ISO鏡像文件。
在獲得ISO鏡像之后,接下來的工作是將磁盤陣列卡驅動程序添加到ISO鏡像的相應位置。首先查出磁盤陣列卡的型號以及WinPE系統的內核版本,然后找出與磁盤陣列卡以及WinPE系統相匹配的驅動程序。在文件夾中,服務器陣列卡的驅動程序擴展名為“SYS”,用WinCAB軟件將其打包,生成對應的CAB文件,然后,將該文件的擴展名改為“SY_”。最后,將該文件通過ULTRAISO添加到ISO鏡像文件中存放驅動程序的位置中,通常位于文件夾“SYSTEM32DRIVERS”中,不同的WinPE系統可能會有差異。
將服務器磁盤陣列卡驅動程序添加到ISO鏡像文件之后,還需要修改系統相應的安裝信息文件,使得WinPE系統能夠正確讀取并安裝該驅動程序。因此,我們需要對系統的“txtsetup.sif”文件進行配置,“txtsetup.sif”是 WinPE系統在安裝時加載驅動程序的信息文件,且該文件不在系統保護文件的范疇內,這意味著我們可以對這個文件任意修改而不用擔心遭到操作系統的阻止。
(1)獲取“txtsetup.sif”文件。在ISO鏡像文件里面可以直接找到“txtsetup.sif”文件或者“txtsetup.SY_”文件。對于“txtsetup.SY_”文件,將其提取出來,后綴名修改為“CAB”,然后解壓縮生成“txtsetup.sif”文件,可以通過ULTRAEDIT或者記事本程序進行編輯。
(2)設置系統的預安裝顯示參數。為了便于敘述,假設磁盤陣列卡驅動程序的文件名為“XXXX.SYS”,在“txtsetup.sif”文件中的“[SCSI]”段增加:XXXX="YYYY"。這項的作用是告訴WinPE系統,有一個名為XXXX的硬盤控制器是被操作系統所支持的,“YYYY”是對控制器進行注釋的內容。
(3)設置硬件標識。在“txtsetup.sif”文件中的“[HardwareIdsDatabase]”段增加:硬件標識="XXXX"。硬件標識是用來描述被硬盤控制器的硬件標識,是硬件出廠時被寫入的,不會改變。硬件標識可以通過以下兩個方法獲取:一是在驅動程序文件夾中的擴展名為“INF”的文件中查找;二是進入操作系統的設備管理器,查看存儲控制器的驅動器詳細信息,可以查到硬件標識的信息。
(4)設置系統掛載驅動參 數。 在“txtsetup.sif”文件中的“[SCSI.Load]”段增加 :XXXX=XXXX.SYS,4。這行代碼表示WinPE系統將使用程序“XXXX.SYS”對服務器陣列卡進行驅動,最后的數字4定義了驅動程序存放的目錄,可以在“winntDirectories”段中查看。
(5)設置驅動程序拷貝的具體細節。在“txtsetup.sif”文件中的“[SourceDisksFiles]”段增加: XXXX.SYS=1,,,,,,4_,4,1,,,1,4,設定了驅動程序拷貝的具體細節。第一個數字“1”代表的是驅動程序拷貝的目標文件夾。
完成前面的幾項工作后,就可以把TXTSETUP.SIF用ULTRAISO添加到ISO文件里面用以取代之前的文件。或者用WinCAB壓縮成CAB格式,改成SI_擴展名,然后用ULTRAISO添加到ISO文件里面取代以前的那個SI_文件。再用WinCAB軟件將修改后的WINPEO3.ISO文件進行壓縮,然后將其改名為 WINPEWH.IS_,并通過ULTRAISO覆蓋原先光盤ISO鏡像中的對應文件。
寫到這里,對于普通映像的WinPE系統加載SCSI驅動程序就可以實現,如果是WIM映像格式的WinPE系統的話,可以按照以下步驟進行驅動的加載。
隨著Windows操作系統的發展,微軟開始使用WIM映像格式來進行操作系統的安裝,與之相適應的WinPE系統也對此做了針對性的改動。早期,主要使用ImageX工具來處理WIM映像文件,我們需要安裝Windows AIK來獲取ImageX,也可以從網絡上下載到ImageX。到了Windows 8時代,最新版的DISM工具經過改進已經具備了ImageX原有的功能,并且已經包含在了Windows 8/8.1以 及Windows 8/8.1 PE中。為了把驅動添加進WinPE系統,我們可以使用驅動程序服務命令DISM來完成這一任務。它可以在脫機映像中用于添加和刪除基于INF文件的驅動程序,而且可以在處于運行狀態的應用程序(聯機)上枚舉驅動程序,其操作流程如下。
通過使用DISM工具將基本映像裝載到本地的Windows PE目錄,假設默認路徑在D盤。其命令如下:

通過Add-driver將驅動添加進WinPE包。在這里要注意兩點,一是對于包含很多目錄的Drivers,可以附加/recurse來做遞歸添加;二是對于Windows或者早期的驅動,都是沒有簽名機制的,ForceUnsigned是必不可少的參數。驅動程序所在路徑為:
添加完驅動程序后,需要將變更提交,并卸載此映像。命令如下:

這里要注意的是,使用DISM工具有兩個限制:一是驅動程序服務命令僅支持 *.inf文 件,Windows Installer或其他驅動程序包類型(如*.exe文件)不受支持;二是如果要添加多個驅動程序,它們將按照在命令行中列出的順序進行安裝。
通過反向的方法將服務器的陣列卡驅動程序集成在WinPE系統中,同樣我們也可以將服務器網卡、主板等驅動程序添加到WinPE系統,雖然步驟稍稍有點麻煩,但對于后期的維護還是值得的。