Sysprep 封裝映像部署的最大痛點:來源電腦與目標電腦必須擁有相同 HAL 類型 (ACPI Uniprocessor / ACPI Multiprocessor / MPS Uniprocessor / MPS Multiprocessor / Standard PC 等)。傳統解法 (ACPI 封包、電源模式腳本) 相容性不足 100%、需額外檔案、耗時重開機。本文揭露微軟 Longhorn (Vista 前身) 內部技術,實現 開機瞬間自動偵測並載入正確 HAL,零干預、零重開、100% 相容。
/detecthal 介面/detecthal 參數,與 NTLDR 聯動\INF\dtecthal.inf:定義各 HAL 類型偵測參數與對應檔案映射從對應 Service Pack CAB 檔解壓 (XP SP2 → SP2.CAB,2000 SP4 → SP4.CAB,2003 SP1 → SP1.CAB):
halacpi.dll ; ACPI Uniprocessor
halapic.dll ; MPS Uniprocessor
halmps.dll ; MPS Multiprocessor
halaacpi.dll ; ACPI Multiprocessor (APIC)
halmacpi.dll ; ACPI Multiprocessor
hal.dll → 重命名 halstnd.dll ; Standard PC
ntkrnlmp.exe ; 多處理器核心
ntkrnlpa.exe ; PAE 核心
ntkrpamp.exe ; PAE 多處理器核心
ntoskrnl.exe → 重命名 ntkrnlup.exe ; 單處理器核心
複製上述 10 個檔案至 %SystemRoot%\System32\ (2000 為 %SystemRoot%\System32\,同路徑)
儲存為 %SystemRoot%\Inf\dtecthal.inf (2000 同路徑,Inf 資料夾隱藏需先設定顯示):
[Version]
signature="$Windows NT$"
DriverVer=07/01/2001,5.1.2600.2180
[hal]
acpipic_up = halacpi.dll
e_isa_up = halstnd.dll
mps_up = halapic.dll
mps_mp = halmps.dll
acpiapic_up = halaacpi.dll
acpiapic_mp = halmacpi.dll
[ACPIOptions]
ACPIEnable = 2
ACPIBiosDate = 01,01,1999
關鍵參數:ACPIEnable=2 依據 GoodACPIBios 清單、NWACL 及 BIOS 日期判斷;ACPIBiosDate=01,01,1999 設定基準日期,1999/01/01 後 BIOS 視為良好 ACPI BIOS。
[boot loader]
timeout=3
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect /detecthal
將 Longhorn 版本 NTLDR 複製至 C:\ 覆蓋原檔。這是整個方案的核心觸發器,舊版 NTLDR 不支援 /detecthal。
DEPLOY.CAB (光碟 \SUPPORT\TOOLS)、Ghost 8.0/8.2、免啟用版安裝光碟、DllCacheManagerformat c: /s 保留 DOS 開機區$NtUninstall*、SoftwareDistribution\Download、Installer\$PatchCache$執行前述步驟 1-5 (複製 HAL/核心檔、dtecthal.inf、修改 BOOT.INI、換 NTLDR)
@echo off
cd c:\
del ntldr
ren ntldr3 ntldr
attrib ntldr +h +s +r
attrib boot.ini -h -s -r
del boot.ini
ren boot1.ini boot.ini
attrib boot.ini +h +s +r
del ZProgBar.ocx
del c:\windows\run.bat
exit
儲存為 C:\WINDOWS\RUN.BAT,Sysprep 「執行一次」區段指向此檔。作用:封裝後首次開機自動換回原版 NTLDR、BOOT.INI,清理暫存檔。
sysprep.inf 自動應答檔,「執行一次」含 run.batsysprep.exe:勾選「不重設啟動寬限期」、「使用最小化安裝」、「不重新產生 SID」,關機模式選「結束」DllCacheManager.exe 備份 DllCache,勾選「還原時自動刪除自己」,節省 ~300MBHKLM\System\CurrentControlSet\Control\Class\{...}\HAL 相關機碼 (需先取得權限)DOS 開機 → ghost -z9 高壓縮備份映像檔。
| 傳統方案缺點 | 本方案優勢 |
|---|---|
| 相容性 < 100% | 微軟核心層支援,100% 相容 |
| 需額外檢測程式/腳本 | 零額外檔案 (僅標準 INF + NTLDR) |
| 需 1-2 次重開機完成切換 | 開機過程中無感偵測,零重開 |
| 維護複雜,易失效 | 標準機制,升級/修補不受影響 |
NTLDR (需自行取得)halmacpi.dll/ntkrnlmp.exe 等檔案版本與來源 OS Service Pack 完全一致