本文首先讲述了 Windows CE注册表的重要性,它对整个嵌入式系统的正常运行起着关键性作用。然后又介绍了两种注册表存储方式,并着重讲述了基于 HIVE的注册表。详细阐述了基于 HIVE的注册表的保存数据方式及实现 HIVE注册表的方法。最后给出了系统成功修改注册表的实现方法。本文的研究对其它操作系统的注册表修改也具有着借鉴意义。
0 引言
嵌入式操作系统 Windows CE和桌面操作系统一样使用注册表(Registry)来保存应用程序、驱动程序和用户的设定以及其他一些配置信息,通常还存储着操作系统调用程序的状态信息,所以注册表起着非常重要的作用,它是 Windows CE操作系统的核心。在没有注册表的情况下,操作系统将不能获得必需的信息来运行和控制附属的设备和应用程序及正确响应用户的输入[1][2]。
1 Windows CE注册表简介
Windows CE的注册表结构和其他版本的 Windows操作系统的注册表结构是类似的。注册表是一个包括主关键字子树的集合,它和文件目录树一样具有层次结构。每个子树又由更低层的子树、键以及键值组成。键相当于文件系统的目录,每个键包含若干键值项。而键值项相当于文件系统末端的文件,它由键值名、数据类型和键值组成。键值就是注册表存储的数据。
Windows CE对注册表的值有一些限制:键或者键值项的名字最多为 255个字符,数据最大为4K,键嵌套层次最多为 16层。所以在使用注册表编程时,要尽量使键和键值项占用最小的空间。另外,需要注意的是,在注册表中,键值项比键值占用更大的存储空间。
Windows CE注册表包括4个根键 [2],如表1所示。
表 1 Windows CE注册表根键
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的注册表,则需要在系统断电的时候对注册表进行保存,等系统再次启动时对保存的注册表进行还原。
注册表是 Windows CE操作系统的核心,起着至关重要的作用,车载多媒体系统的所有驱动程序和应用程序的配置信息都被保存在注册表中,如果修改或加载不当,都将使得整个系统的一些功能不能正常使用,甚至将会导致 Windows CE操作系统无法启动。本文的创新点在于提出了一种实现 HIVE注册表的方法和修改注册表的思路,经大量试验证明此种思路很有效,可以用来修改更多其它需要的配置。