然后把页表基址载入CR3寄存器
引导文件
在UEFI安置完操纵系统后,Windows至少使用两个分区,一个叫做ESP分区(EFI SYSTEM PARTITION),用于存放启动文件,另一个则是BIOS下正常的系统分区,差此外是,BIOS下引导文件是winload.exe,UEFI下引导文件式winload.efi,两者都是pecoff格局的,但UEFI用的是各类固件接口,而BIOS使用的是中断。有时还会有一个MSR分区,不过这个分区并不重要,尝试可以删除。
安置完成后,Windows还会将本身的启动打点器的信息写入固件的优先启动项中,这样在BDS阶段,固件会默认引导Windows启动打点器。默认情况下,UEFI固件加载的启动文件式EFI\BOOT\bootx64.efi(bootia32.efi),而Windows强制写入的启动项则会加载EFI\MICROSOFT\BOOT\bootmgfw.efi,这两个文件其实是一模一样的文件。
注册表项
系统安置完成后,,安置措施会将引导信息生存在ESP中的BCD文件中,路径为EFI\microsoft\boot\BCD,BCD文件是一个注册表巢文件,反响到注册内外就是LOCAL_MACHINE下的BCD00000000,一般情况下hivelist是不导入这个文件的,我们可以在regedit中手工导入这个文件来检察。此刻可以通过BOOTICE和REGEDIT一起看来理解这个文件。在Object下面是所有的启动ENTRY,每个ENTRY用一个GUID值标识。
每个ENTRY下有一个Description和Elements,此中Description就是这个ENTRY的描述信息,而Elements则是一系列键值对,此中键用一个数字暗示,好比12000004就是引导名称,而1100001则是引导位置信息,这个键值对在BOOTICE中就表示位右边那一栏。
引导定位
此刻分析这个1100001,选择完要启动的操纵系统后,启动打点器就是从这个键值对来确定加载哪个分区的winload.efi。打开DiskGenius,点击系统分区,看它的分区GUID,可以看出0x20处的16字节是分区GUID,而0X38开始的16字节则是硬盘GUID。
在UEFI系统中,各类设备使用设备路径来标识,好比分区的路径可能就是pcicontroller()/pci(0,1)/sata(0,0,0)/hd(2,分区GUID,起始地点,结束地点)。
而对付Windows的loader来说,它只需要一个满足这样条件的设备路径就可以从阿谁设备启动:倒数第二个设备安置有EFI_BLOCK_IO_PROTOCOL,这样它就可以读取磁盘GUID来和0x38处的值进行对照,而倒数第一个设备是个分区设备(MSG_DP_TYPE),loader会通过这个设备的GUID和注册表中的进行对照来确定启动分区,这两个都匹配,那么Windows便会加载一个小型的NTFS文件系统,然后测验考试着从阿谁分区设备中加载12000002也就是BOOTICE中ApplicationPath指定的引导文件。
启动过程
启动打点器(bootxxx.efi)会首先加载BCD文件,从BCD中读取所有启动项,如果有多个启动项并且没有默认启动项就会有一个菜单来显示,当用户选中此中某个启动项后,启动打点器就会从对应的分区(通过分区GUID)中读取winload.efi,如果这时找不到winload.efi,或者winload.efi签名校验掉败,就会蓝屏0xc000000e,即找不到引导文件,加载完winload.efi后,控制权就正式交给winload.efi。
Winload.efi做的第一件事就是通过BootService的GetMemoryMap供给的物理内存信息来结构页表以及PFN数据库,然后将ntoskrnl,hal以及SYSTEM\Service下的所有Boot型驱动以及他们需要的导入库读取加载到内存中,因为此时还是掩护模式下,所以需要页表中成立这些文件的映射信息。(在IA32e下的UEFI开机后是会默认开启分页的,但是虚拟内存和物理内存是1:1映射的,所以进了Windows内核后不成能还用本来的地点)读取完成后,会对这些文件进行签名校验,如果校验掉败,那么会蓝屏INACCESSIBLE_BOOT_DEVICE,即启动设备无效。这一步完成后,Windows会进一步初始化GDT和IDT,然后在页表中分配内核仓库,初始化SystemPTE。最后挪用ExitBootService退出引导阶段,挪用SetVirtualAddress将EFI部分固件内存映射到虚拟内存,然后把页表基址载入CR3寄存器,开启分页并跳转到ntoskrnl的KiSytemStartup进入内核。
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/34404.html
- 上一篇:并拟定为7大块: 1 .NET基础知识
- 下一篇:可以添加时间、日期、文档标题