2010年6月26日星期六

轉載: WIM格式RAMXP的启动流程介绍

帖子附件

WIM格式RAMXP的启动流程介绍:
可启动媒介的启动扇区=>Bootmgr=>BCD=>读取解压WIM文件到内存=> Bootmgr将控制权传给Winload.exe(至此Bootmgr的使命完成啦)=> Winload.exe加载相应核心(Ntoskrnl.exe) 和硬件抽象层 (HAL) =>Winload.exe继续加载系统注册表配置单元(system)文件=>读取相应的控制集(Control Sets)=>Winload.exe继续加载引导型(Boot)驱动,也就启动值为0的核心驱动。例如文件格式驱动、硬盘控制器驱动。=>将控制权传Ntoskrnl.exeNtoskrnl.exe核心继续加载system类型的驱动,也就是启动值为1的驱动。=>将控制权传递给会话管理器 (SMSS)=> =>会话管理器 (SMSS) 加载注册表的剩余部分,配置运行 Win32 子系统 (Win32k.sys) =>Win32k.sysXP从文本模式切换至图形模式。 =>启动 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
810815等主板Advanced Configuration and Power InterfaceHalacpi.dll
845主板出现的时候,电源模式又更新成ACPI Uniprocessor PCHalaacpi.dll
现在的家用主板的电源模式大多为ACPI Multiprocessor PChalmacpi.dll
具体的见:http://nufans.net/dvbbs/dispbbs.asp?boardID=1&ID=673
2. 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种类型的值都可以正常启动。

沒有留言:

發佈留言