| 网站首页 | 科技前沿 | it产品项目 | 软件项目 | 硬件项目 | 发明专利 | 商业城 | 资源中心 | 博客 | 论坛 |  子站: it客栈 多奥网
会员中心
会员注册
繁體中文
推荐:索引 linux arm 手机 嵌入式 os wince dsp 音乐 游戏
 站内搜索:
项目资讯 资源中心
您现在的位置: 爱问科技网 >> 软件项目 >> WinCE >> 文章正文
WINCE 实现永久保存注册表数据           
WINCE 实现永久保存注册表数据
作者:佚名 文章来源:不详 更新时间:2006-12-6 21:48:09
注册表类型分为基于对象存储的注册表和基于HIVE的注册表,在定制内核的时候只能选择其中一种。从理论上讲这两种注册表都能够实现永久保存注册表数据,但是采用不同的类型会影响CE的启动顺序和启动速度,还会影响内存的使用量。我还是趋向于采用基于HIVE的注册表来实现永久保存注册表数据,这也是一个发展趋势。在讲解之前先简单描述如果CE采用基于HIVE的注册表,那么在启动时如何加载已经保存的注册表数据:

  1、nk.exe执行,启动filesys.exe。

  2、filesys.exe加载引导HIVE,此时引导HIVE位于nk.bin解压之后的文件中。

  3、filesys.exe启动device.exe,之后处于等待状态,等待device.exe将包含系统HIVE的文件系统和存储设备的驱动程序加载完毕。而这个文件系统和存储设备的驱动程序存在于引导HIVE中。

  4、device.exe加载上述所说的文件系统驱动程序和存储设备驱动程序,使之开始工作。之后device.exe处于等待状态。

  5、filesys.exe被唤醒,加载并且安装系统HIVE。之后filesys.exe处于等待状态。

  6、nk.exe按照系统HIVE的信息开始执行初始化工作。其中包括加载驱动程序和启动一些应用程序。其中加载驱动程序一般由device.exe执行,而启动应用程序由filesys.exe执行。这时device.exe和filesys.exe已经被唤醒。

  因为引导HIVE和系统HIVE肯定有重复的地方,所以可能出现重复加载了驱动程序或者重复启动了应用程序。为此,CE允许在描述驱动程序的注册表信息中加入防止重复的标志,而应用程序可以采用事件对象来防止重复启动,如device.exe。

  下面讲述如何设置基于HIVE的注册表(假如保存系统HIVE的是FAT文件系统):

  1、在PB中加入"Hive-based Registry",如果是Geode平台,再加入BSP_ENABLE_FSREGHIVE环境变量。

  2、打开platform.reg,找到如下信息:

; HIVE BOOT SECTION

[HKEY_LOCAL_MACHINEinitBootVars]

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

"PROFILEDIR"="Documents and Settings"

"Start DevMgr"=dword:0

IF BSP_ENABLE_FSREGHIVE

"Start DevMgr"=dword:1

ENDIF

; END HIVE BOOT SECTION
  "SYSTEMHIVE"的值为系统HIVE文件的路径。"Start DevMgr"是一个布尔值,指示是否开始就执行设备管理器device.exe,按照CE帮助文档的说法,只有想把系统HIVE存储在对象存储中才在此设置为0,所以一般都要设置为1。

  3、如果是多用户,可以在上述的注册表位置下输入"DefaultUser"="<username>",指定默认的用户名。如果是单用户系统,可以不设置。

  4、保证将包含系统HIVE的文件系统驱动程序的注册表信息和存储设备的驱动程序的注册表信息被包含在“; HIVE BOOT SECTION”和“; END HIVE BOOT SECTION”之间,在这两个语句之间的注册表数据全部属于引导HIVE。假如我们将系统HIVE文件system.hv存放在硬盘上,并采用FAT文件系统。那么就要将[HKEY_LOCAL_MACHINESystemStorageManagerFATFS]和[HKEY_LOCAL_MACHINESystemStorageManagerProfilesHDProfile]移动到“; HIVE BOOT SECTION”下。

  5、在“; HIVE BOOT SECTION”和“; END HIVE BOOT SECTION”之间的所有驱动程序的注册表信息中都加入下列一个标志:


"Flags"=dword:1000
  这个标志是一个位掩码,它可以和其它已经存在的"Flags"或运算。值1000表示此驱动程序只加载一次,这样device.exe就不会把当前驱动程序加载两次了。

  6、在包含系统HIVE的存储设备的驱动程序的注册表信息中,加入如下标志(假设是硬盘):


[HKEY_LOCAL_MACHINESystemStorageManagerProfilesHDProfile]

"MountFlags"=dword:2
  这个标志表示这个存储设备包含系统HIVE文件。

  按照如上所述设置后的内核就能实现永久存储注册表数据了。对于保存注册表数据的执行动作在此必须阐述清楚:

  正常情况下,CE能够保证重要的注册表数据能够从内存刷到(Flush)永久存储器上。但是这并不能完全保证所有数据都能完整地保存而不丢失,所以要保证万无一失,应该主动地调用RegFlushKey函数强制将内存中的数据刷到永久存储器上。这个函数的参数只有一个,就是注册表分支。CE还增加一个注册表项(如下所示),它的作用是每当函数RegCloseKey被调用时都自动调用RegFlushKey函数。


[HKEY_LOCAL_MACHINEinitBootVars]
"RegistryFlags"=dword:1
  如果CE在启动过程中发现系统HIVE出现错误,它会自动删除文件并创建一个默认的系统HIVE文件,如果出现下面的注册表项,说明发生了这种事情。


[HKEY_LOCAL_MACHINE]
"RegPersisted"=dword:1

文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    相关文章
    sql2k中新增加的Functio…
    关于在 win2000 下安装 …
    sql2k增加的Function的s…
    获取Windows / System /…
    print+Photoshop超简易上…
    ASP中使用Form和QuerySt…
    献给linux下的perl黑客们…
    Java中finalize()的另类…
    Merlin 的魔力:不确定的…
    Resin虚拟主机设置篇之I…
    更多内容
    专题栏目
    更多内容
    最新推荐 更多内容
    | 设为首页 | 加入收藏 | 关于我们 | 版权申明 | 友情链接 | 谷歌 雅虎 百度 | 管理登录 | 

    爱问科技网
    爱问科技网

    21aw@21aw.com
    粤icp备06099319