首页>
技术资讯>
详情

WINCE基于hive注册表的实现

2016-05-12 来源:佚名 阅读量: 0
关键词: WINCE

    1.WINCE注册表概述

    WINCE注册表保存着应用程序、驱动、用户参数配置和其他配置设定的数据,WINCE提供自由选择基于RAM还是基于hive的注册表,其中基于RAM注册表本质是堆栈文件,保存在RAM中,如果RAM的供电掉电了,除非OEM实现了注册表备份的功能,否则基于RAM的注册表数据会丢失,而基于hive的注册表是作为文件保存在掉电不丢失的保存介质中。注册表也可以用于系统初始化,并且可以在一个永久性存储设备中被加载和可以被保存到另另一个永久性存储设备。

    2.WINCE支持的注册表类型

    我们知道了WINCE支持hive-based注册表和RAM-based注册表,但对于WINCE5.0,系统默认使用基于RAM的注册表;而对于WINCE6.0,系统默认使用基于hived的注册表。

    2.1基于RAM的注册表

    基于RAM注册表把所有的注册表数据保存在对象存储中,也就是保存在RAM中。就速度和大小方面来说基于RAM的注册表用在有电池备份RAM的设备上面是非常有效的,在系统掉电后,只要备用电池对RAM还有供电,基于RAM注册表的注册表数据就不会丢失。但如果对系统进行冷启动或者系统断电,对注册表的所有改动都会丢失。

    如果使用基于RAM的注册表,对注册表的读写访问操作会变得非常高效。因此基于RAM的注册表比较适用于没有外部存储,而且有电池保存内存数据(battery-backed RAM)的设备。如果有外存且经常冷启动的设备采用基于RAM的注册表,则需要在系统断电的时候对注册表进行保存,等系统再次启动时对保存的注册表进行还原。这些特点就决定了基于RAM的注册表多用于经常热启动(Warm Boot)的设备上面,而很少用在冷启动(Cold Boot)设备上面。

    2.2基于hive的注册表

    基于hive的注册表把所有的注册表数据保存在文件系统的文件上面,这样就让OEM可以轻易在冷启动的情况下保存注册表的设置。也就不再需要想基于RAM注册表一样在系统断电和启动的时候进行保存恢复注册表的操作了。

    基于hive的注册表用在经常需要冷启动的设备上非常高效,而很少或者从不用在热启动的设备上,最适合用在有永久保存介质或者多用户的设备上。也提供不同的用户hive,所以可以为每一个用户定义不同的注册表配置信息,这样,一个多用户的系统会办含多个用户的hive(user.hv),一个用户的hive在登陆时被加载,注销的时候被卸载。

    基于hive的注册表包含三部分:引导hive,系统hive和用户hive,分别对应于boot.hv,system.hv和user.hv。Boot.hv主要用于系统引导时候所需的注册表设置,这部分设置不会被保存在flash或者磁盘上面,也就是说,在系统掉电以后就会丢失。实际上,这部分应该说是属于RAM-Based注册表,由于这部分数据不需要改动,所以也就无所谓了。System.hv存放关于系统的注册表设置,user.hv存放和用户相关的注册表设置。

    在PB编译WinCE系统的时候,Platform Builder会根据common.reg和platform.reg文件中的注释标签来判断哪些注册表设置放入boot.hv中,凡是在注释标签”;HIVE BOOT SECTON”和”;END HIVE BOOT SECTION”之间的设置都会被放入boot.hv中,其他的都会放到default.hv和user.hv中。

    在WinCE第一次(更新系统)引导的时候,所有的。hv都会被放到RAM中,WinCE系统会首先读取boot.hv进行相关引导时候的设置,然后把default.hv和user.hv放到磁盘的指定路径下面,这个路径也是在注册表中设置的,然后default.hv会被重命名为system.hv。依据common.reg或者是platform.reg中的内容,比如我的系统下面的common.reg内容如下:

    ; HIVE BOOT SECTION

    [HKEY_LOCAL_MACHINE\init\BootVars]

    "SystemHive"="Documents and Settings\\system.hv"

    "ProfileDir"="Documents and Settings"

    "Flags"=dword:1

    ; END HIVE BOOT SECTION

    ; @CESYSGEN ENDIF FILESYS_FSREGHIVE; END HIVE BOOT SECTION当系统第二次启动的时候,检查内核default.hv/user.hv是否同磁盘的system.hv/user.hv一致,如果一致,则直接运行RAM中的注册表配置,否则根据磁盘上system.hv/user.hv的内容更新RAM中的注册表配置,这样我们可以看出,实际上HIVE注册表在运行的时候也是放在RAM中的,这样速度比较快。启动的时候会从磁盘上读出,在用户更改注册表以后,会被保存在磁盘上,保存的时机也是可以设置的,可以选择在用户更改后立刻保存到磁盘上,也可以选择在reboot的时候保存。

    3.基于hive注册表的实现

    3.1实现基于hive注册表

    ⑴在系统工程中加入基于hive注册表的组件,见图1

    图1

    ⑵核实OS的common.reg中是否有下面的注册表信息

    [HKEY_LOCAL_MACHINE\init\BootVars]

    "SystemHive"="<your system hive location>"

    "Flags"=dword:<your value>

    我的系统下的common.reg相关注册表信息如下

    [HKEY_LOCAL_MACHINE\init\BootVars]

    "SystemHive"="Documents and Settings\\system.hv"

    "ProfileDir"="Documents and Settings"

    "Flags"=dword:1

    SystemHive:系统HIVE文件的保存路径与文件名。

    ProfileDir: 用户配置文件保存路径。

    这样的设置在系统起来之后我们看到的相关注册表信息如下:

    图2

&n

热门推荐 查看更多