在EFI(可擴展固件接口者疤,也稱為UEFI,即統(tǒng)一可擴展固件接口)方式啟動Windows系統(tǒng)時叠赦,文件的調(diào)用關系相對復雜但有序驹马。以下是EFI方式啟動Windows系統(tǒng)時的文件調(diào)用關系詳解:
一、啟動階段
固件加載
當計算機開機后除秀,EFI固件首先被加載糯累。固件負責初始化硬件并準備啟動環(huán)境。
查找ESP分區(qū)
EFI固件會查找GPT(GUID分區(qū)表)硬盤上的FAT格式分區(qū)册踩,即EFI系統(tǒng)分區(qū)(ESP)泳姐。這個分區(qū)通常包含引導Windows所需的文件。
加載啟動管理器
固件會加載ESP分區(qū)中的啟動管理器暂吉。在Windows中胖秒,這通常是EFI\BOOT\bootx64.efi(對于64位系統(tǒng))或EFI\BOOT\bootia32.efi(對于32位系統(tǒng))缎患。然而,Windows安裝過程中會將一個特定的啟動管理器EFI\MICROSOFT\BOOT\bootmgfw.efi寫入ESP阎肝,并設置為默認啟動項挤渔。這個啟動管理器與bootx64.efi(或bootia32.efi)實際上是相同的文件,但名稱和路徑不同风题。
二判导、啟動管理器階段
加載BCD文件
啟動管理器加載后,會首先查找并加載ESP分區(qū)中的BCD(啟動配置數(shù)據(jù))文件沛硅。BCD文件是一個注冊表格式的文件骡楼,包含所有可用的啟動項及其配置信息。這個文件位于EFI\MICROSOFT\BOOT\BCD路徑下稽鞭。
顯示啟動菜單
如果BCD文件中包含多個啟動項鸟整,并且沒有設置默認啟動項,啟動管理器會顯示一個啟動菜單朦蕴,讓用戶選擇要啟動的操作系統(tǒng)篮条。
選擇啟動項
用戶從啟動菜單中選擇一個啟動項后,啟動管理器會根據(jù)BCD文件中的信息吩抓,確定要加載的winload.efi文件的位置涉茧。
三、加載操作系統(tǒng)階段
加載winload.efi
啟動管理器加載用戶選擇的啟動項對應的winload.efi文件疹娶。這個文件位于系統(tǒng)分區(qū)的\Windows\system32\目錄下伴栓。在EFI環(huán)境下,這個文件是PECOFF格式的雨饺,并使用EFI固件接口钳垮。
初始化系統(tǒng)
winload.efi加載后,會開始初始化Windows系統(tǒng)额港。這包括加載內(nèi)核(ntoskrnl.exe)饺窿、硬件抽象層(hal.dll)以及系統(tǒng)服務下的所有啟動型驅(qū)動。
進入內(nèi)核
初始化完成后移斩,Windows系統(tǒng)會進一步初始化全局描述符表(GDT)和中斷描述符表(IDT)肚医,分配內(nèi)核堆棧,并調(diào)用ExitBootService函數(shù)退出引導階段向瓷。然后肠套,系統(tǒng)將EFI部分固件內(nèi)存映射到虛擬內(nèi)存,并把頁表基址載入CR3寄存器猖任,最終跳轉(zhuǎn)到ntoskrnl的KiSystemStartup函數(shù)進入Windows內(nèi)核你稚。
綜上所述,EFI方式啟動Windows系統(tǒng)時的文件調(diào)用關系是一個復雜但有序的過程,涉及固件入宦、ESP分區(qū)哺徊、啟動管理器、BCD文件和winload.efi等多個文件和組件的協(xié)同工作乾闰。