帖子附件
WIM格式RAMXP的启动流程介绍:可启动媒介的启动扇区=>Bootmgr=>BCD=>读取解压WIM文件到内存=> Bootmgr将控制权传给Winload.exe(至此Bootmgr的使命完成啦)=> Winload.exe加载相应核心(Ntoskrnl.exe) 和硬件抽象层 (HAL) =>Winload.exe继续加载系统注册表配置单元(system)文件=>读取相应的控制集(Control Sets)=>Winload.exe继续加载引导型(Boot)驱动,也就启动值为0的核心驱动。例如文件格式驱动、硬盘控制器驱动。=>将控制权传Ntoskrnl.exe,Ntoskrnl.exe核心继续加载system类型的驱动,也就是启动值为1的驱动。=>将控制权传递给会话管理器 (SMSS)=> =>会话管理器 (SMSS) 加载注册表的剩余部分,配置运行 Win32 子系统 (Win32k.sys) =>Win32k.sys将XP从文本模式切换至图形模式。 =>启动 Windows 子系统用户模式部分 (Csrss.exe)。=>加载用于创建用户会话Winlogon进程会话管理器=>(SMSS)继续加载剩余的非必要设备驱动程序=>Winlogon.exe 启动服务子系统 (Services.exe), 也称为服务控制管理器 (SCM)。=>Winlogon.exe启动安全子系统(Lsass.exe)。=>Winlogon.exe根据注册表中具体的值来启动外壳程序。1. 硬件抽象层的自动选择:在BCD写入/detecthal这个参数。构造dtecthal.inf和复制相应的文件到系统目录下。具体的见:http://bbs.wuyou.com/archiver/?tid-32614.html俗地理解不同的电源管理模式对应着不丗的硬件管理层。2000年以前的主板使用电源管理模式大多为 standard PC==Hal.dll常见810、815等主板为Advanced Configuration and Power Interface=Halacpi.dll845主板出现的时候,电源模式又更新成ACPI Uniprocessor PC=Halaacpi.dll现在的家用主板的电源模式大多为ACPI Multiprocessor PC=halmacpi.dll具体的见:http://nufans.net/dvbbs/dispbbs.asp?boardID=1&ID=6732. Winload.exe如何选择相应的控制集(Control Sets)?HKEY_LOCAL_MACHINE\SYSTEM\ControlSetN有可能存在好几份,那系统启动时如何确定选择那一份呢?答案是由HKEY_LOCAL_MACHINE\SYSTEM\Select下的值来决定的。Current值指向此次用于启动系统的控制集。上图的值为1=ControlSet001。Default值决定系统指定用户下次登陆所使用的控制集编号。Failed值默认为0,在第一次调用“最近一次的正确配置”选项后,系统会在此记录失败启动产生的数据的控件组编号。LastKnownGood值指向上次会话所使用的控制集编号,也就是“最近一次的正确配置”。当用户登录的时候,LastKnownGood所指向的控制集会被上一次用户会话使用的控制集所替代。正常启动时系统将加载Default键值所标示的控制集。3. 驱动的启动顺序是如何决定的?驱动的启动阶段首先是由各自的启动值所决定的。也就是由HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\<服务名>子键中 Start 值所决定的。Start 值为0时是Boot 类型的驱动,如文件系统驱动。该类型的驱动由Winload加载,如果没有错误发生,核心层将启用该驱动程序。Start 值为1时是System类型的驱动,如网络协议。该类型的驱动由核心层加载。以HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\IntelIde为例,介绍一下其余键值的作用。ErrorControl值指定错误的处理方式。控制一个驱动程序错误是需要系统使用 LastKnownGood 控制集还是提示一个错误停止信息。如果值为 0 (忽略,没有错误报告), 不会显示警告信息,继续执行启动。如果值为 1 (普通,报告错误), 错误记录到系统日志并提示警告信息,但继续启动过程。如果值为 2 (严重), 将事件记录到系统日志,使用 LastKnownGood 设置,重新启动系统,执行启动过程。如果值为 3 (关键), 将事件记录到系统日志,使用 LastKnownGood 设置,重新启动系统。如果当前启动已经使用 LastKnownGood 设定,则显示错误停止信息。Group 值指定驱动程序隶属的组别。所指定的组别还需要在注册到HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\GroupOrderList之下。如果此处没有该组别的记录,则该组别的驱动可能会启动不了。不同组别的加载次序由HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\ServiceGroupOrder下的List 子项的值所决定的。Tag 值指定一个驱动程序在驱动程序组中的启动顺序。同组别中Tag值的数字越小越早被加载。ImagePath值用于指定驱动文件的路径。该值的类型,可以是REG_EXPAND_SZ(可扩充字符串)或者REG_SZ(字符串值)。2种类型的值都可以正常启动。
沒有留言:
發佈留言