Windows 引导过程 Windows 内核中的各个组件和各种机制在起作用以前,必须首先被初始化。此初始化工作是在系统引导时完成的。当用户打开计算机的电源开关时,计算机便开始运行,但操作系统并不立即获得控制权,而是BIOS 代码首先获得控制,它执行必要的硬件检测工作,并允许用户通过一些功能键来配置当前系统中的硬件设置,甚至诊断硬件问题,然后才将控制权交给操作系统。 1.1 内核加载 在 Intel x86 系统上,Windows 操作系统获得控制首先从硬盘的主引导记录(MBR, Master Boot Record)开始,Windows Setup 程序在安装 Windows 时填充MBR(其他的磁盘管理程序也可能填充MBR)。MBR 包含代码和数据,其代码称为引导代码,在系统引导时首先获得控制;MBR 中的数据是一张分区表,指定了每个分区在磁盘上的位置和大小,以及分区的类型。当MBR 中的引导代码被执行时,它检查分区表中的每一个分区,若找到一个已被标记为可引导的分区(称为引导分区),则将该分区的第一个扇区(称为引导扇区)读到内存中。由于分区表包含了每一个分区的磁盘位置,所以,引导扇区的位置很容易被确定。然后MBR 的代码将控制权交给引导扇区中的代码。 ;此处代码摘自 NT4 代码的\priv ate\ntos\boot\bootcode\x 86mboot.asm relocated_org equ 0600h buildtime_org equ 0100h org_delta equ (relocated_org - buildtime_org) _data segment public assume cs:_data,ds:_data org buildtime_org ; 这段代码读出位于主引导记录末尾的分区表,找到标志为可引导的分区,把它的引导扇区拷贝到内存中并执行 start: cli ;开始的时候并没有中断 xor ax,ax mov ss,ax mov sp,7c00h ;位于地址 0:7c00 处的新堆栈 mov si,sp ; 0:7c00 为标准引导地址 push ax pop es push ax sti ;允许中断 cld mov di,relocated_org mov cx,100h rep movsw ;重定位到地址 0000:0600,跳到这里从分区表中读取可引导分区的入口,把引导分区拷贝到内存的标准引导地址(0000:7C00) ; jmp entry2 + org_delta db 0eah dw $+4+org_delta,0 entry2: mov si,(offset tab) + org_delta ;表示分区表 mov bl,4 ;分区表项的个数 next: cmp byte ptr[si],80h ;判断是否是可以引导的入口 je boot ;yes cmp byte ptr[si],0 ;再次判断是否为 0 jne bad ;不是,只有 x"00" 或者 x"80" 是...