基于WinCE的嵌入式系统注册表的研究
0 引言
嵌入式操作系统Windows CE和桌面操作系统一样使用注册表(Registry)来保存应用程序、驱动程序和用户的设定以及其他一些配置信息,通常还存储着操作系统调用程序的状态信息,所以注册表起着非常重要的作用,它是Windows CE操作系统的核心。在没有注册表的情况下,操作系统将不能获得必需的信息来运行和控制附属的设备和应用程序及正确响应用户的输入[1][2]。
1 Windows CE注册表简介
Windows CE的注册表结构和其他版本的Windows操作系统的注册表结构是类似的。注册表是一个包括主关键字子树的集合,它和文件目录树一样具有层次结构。每个子树又由更低层的子树、键以及键值组成。键相当于文件系统的目录,每个键包含若干键值项。而键值项相当于文件系统末端的文件,它由键值名、数据类型和键值组成。键值就是注册表存储的数据。
Windows CE对注册表的值有一些限制:键或者键值项的名字最多为255个字符,数据最大为4K,键嵌套层次最多为16层。所以在使用注册表编程时,要尽量使键和键值项占用最小的空间。另外,需要注意的是,在注册表中,键值项比键值占用更大的存储空间。
Windows CE注册表包括4个根键[2],如表1所示。
根键名 | 键值内容 |
HKEY_LOCAL_MACHINE | 硬件及驱动程序配置数据 |
HKEY_CURRENT_USER | 用户配置数据 |
HKEY_CLASSES_ROOT | OLE和文件类型匹配配置数据 |
HKEY_USERS | 适用于所有用户的存储数据 |
表1 Windows CE注册表根键
Table1 The root key of Windows CE register
2 Windows CE注册表类型
由于嵌入式系统的特点,一些嵌入式设备是没有外存的。因此Windows CE的注册表提供了两种实现方式:基于对象存储的注册表(RAM-Based Registry)和基于Hive的注册表(Hive-Based Registry)[3]。我们可以在Windows CE中使用任何一种注册表,注册表类型对于用户和应用程序来说都是透明的。基于RAM的注册表在经常热启动的设备上是非常高效的,而在经常冷启动的设备上,性能却很令人失望,最适合有电池后备的个人电子消费类产品。对于经常冷启动或者不怎么使用热启动方式的设备来说,基于hive的注册表是非常高效的,最适合永久性的存储器和多用户环境下使用。
2.1 基于RAM的注册表
顾名思义,基于RAM的注册表把整个注册表作为一个对象存储堆放在RAM中。这就意味着如果系统中断对RAM的电池供电,对注册表的所有改动都会丢失。也就是说,它们的有效性和RAM中数据的有效性是一致的。但是使用RAM注册表,对注册表的读写访问操作非常的快速高效。在旧版本的Windows CE中,大量应用了基于RAM的注册表。如果有外存且需要经常冷启动的设备采用基于RAM的注册表,则需要在系统断电的时候对注册表进行保存,等系统再次启动时对保存的注册表进行还原。
2.2 基于HIVE的注册表
HIVE系统包含了不属于任何用户信息的系统设置。HIVE系统由OEM层调用。通常hive文件为System.hv,但是它的存储位置可能随着平台而变化。这种存储方式使系统在断电前后无须备份和恢复注册表数据,这使得系统冷启动时速度更快。
基于HIVE结构的注册表被分为两部分存储:系统HIVE,存储所有的系统数据;用户HIVE,存储对特定用户的所有相关数据。一个多用户系统将包括几个用户HIVE。当一个用户登录时,相应的用户HIVE就会被激活,当用户退出时,相应的用户HIVE也会被撤销。所有的用户HIVE都用 USER.hv来命名,并且被放在不同的用户目录中,每个目录都是以它属于的用户的用户名来命名的。
注册表中的HKEY_LOCAL_MACHINE\init\BootVars下的键值项ProfileDir存储着所有用户目录的位置。 HKEY_LOCAL_MACHINE\init\BootVars下的键值项SystemHive存储着系统HIVE的文件路径和文件名。
BOOT HIVE存储只用于系统启动时的系统设置。BOOT HIVE从ROM中读出并用于启动驱动程序和相关的文件系统。这个文件系统用于启动系统HIVE文件。当系统HIVE启动后,BOOT HIVE将被终止。当系统HIVE有效时,启动过程中被修改的注册表数据将被存放于系统HIVE中。但是BOOT HIVE在ROM中的数据还保持不变。
3 HIVE注册表的实现
HIVE注册表是通过修改系统的平台文件来实现的,在工程目录下的PLATFORM.REG文件中包含了系统的启动信息,HIVE注册表的启动方式不同于普通注册表的启动方式,它需要在系统加载设备管理器前加载系统存储媒介的驱动程序,只有这样才能在加载设备管理器当中提取设备在注册表中的保存信息,达到HIVE存储的目的。下面介绍如何让系统支持HIVE
注册表中的HIVE | 文件 | 描述 |
BOOT HIVE | BOOT.hv存于ROM中 | 包括所有 HKEY_LOCAL_MACHINE HKEY_CLASSES_ROOT HKEY_USE |
Windows CE 注册表 HIVE 信息存储 相关文章:
- 在Windows下启动Linux(02-09)
- Windows CE下驱动程序开发基础(04-10)
- 基于WinCE的I2C驱动程序设计(04-24)
- Windows Embedded CE 6.0开发初体验(04-26)
- Linux和Windows系统线程间的区别(05-25)
- Linux下破解windows密码最终秘籍(02-27)