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


发布评论