内核在加载完boot.hv后是不是加载system.hv的注册表项。
不是的,加载boot.hv后会根据boot.hv加载响应的一些驱动程序,主要是你存储system.hv的介质的驱动,和该介质的文件系统驱动
转 网上的一段解释,应该会对你很有帮助的:
Windows CE加载注册表的步骤:
Windows CE采用新的注册表保存技术,基于Hive的注册表是让人很兴奋的事情。在这之前基于Windows CE的设备,大多数采用给RAM供电方式来保存注册表数据,虽然也可以通过RegCopyFile函数永久保存,但毕竟启动时还要再热启动一次。有了基于Hive的技术,启动系统会自动加载数据,免去了热启动的麻烦。而且当内核更新升级时,不用再担心保存在永久存储器上的系统HIVE文件影响新的内核,因为系统会自动判断并删除过时的系统HIVE文件。
实际上,也可以认为只有拥有了这样的技术,基于Windows CE的产品才算是一个真正的电脑。现在以基于Hive的注册表为例,简述Windows CE在启动时是如何加载已保存的注册表数据:
(1)nk.exe执行,启动filesys.exe。filesys.exe首先加载Boot Hive,此时Boot Hive位于nk.bin解压之后的文档中。然后,filesys.exe启动device.exe后处于等待状态,等待device.exe将包含System Hive的文档系统和存储设备的驱动程序加载完毕,而这个文档系统和存储设备的驱动程序存在于Boot Hive中。
(2)device.exe加载上述所说的文档系统驱动和存储设备驱动,使之开始工作。之后device.exe处于等待状态。然后,filesys.exe再被唤醒,加载并且安装System Hive,然后filesys.exe再次处于等待状态。
(3)nk.exe按照System Hive的信息开始执行初始化工作,包括加载驱动和启动一些应用程序。其中加载驱动一般由device.exe执行,而启动应用程序由filesys.exe执行。这时device.exe和filesys.exe都被唤醒。
因为Boot Hive和System Hive可能有重复的地方,所以可能重复加载了驱动或重复启动了应用程序。为此,Windows CE允许在描述驱动程序的注册表信息中加入防止重复的标志(如:flags=dword:1000),而应用程序是采用事件对象来防止重复启动。