wince注册表结构
- 格式:doc
- 大小:642.50 KB
- 文档页数:45
WINDOWS注册表目录简介①、注册表:是一个树状分层的数据库。
从物理上讲,它是System.dat和User.dat两个文件;从逻辑上讲,它是用户在注册表编辑器中看到的配置数据。
②、HKEY :“根键”或“主键”,它的图标与资源管理器中文件夹的图标有点儿相像。
Windows98将注册表分为六个部分,并称之为HKEY_name,它意味着某一键的句柄。
(图2)③、key(键):它包含了附加的文件夹和一个或多个值。
④、subkey(子键):在某一个键(父键)下面出现的键(子键)。
⑤、branch(分支):代表一个特定的子键及其所包含的一切。
一个分支可以从每个注册表的顶端开始,但通常用以说明一个键和其所有内容。
⑥、value entry(值项):带有一个名称和一个值的有序值。
每个键都可包含任何数量的值项。
每个值项均由三部分组成:名称,数据类型,数据。
(如图3)★名称:不包括反斜杠的字符、数字、代表符、空格的任意组合。
同一键中不可有相同的名称。
★数据类型:包括字符串、二进制、双字三种。
字符串(REG_SZ):顾名思义,一串ASCII码字符。
如“Hello World”,是一串文字或词组。
在注册表中,字符串值一般用来表示文件的描述、硬件的标识等。
通常它由字母和数字组成。
注册表总是在引号内显示字符串。
二进制(REG_BINARY):如F03D990000BC ,是没有长度限制的二进制数值,在注册表编辑器中,二进制数据以十六进制的方式显示出来。
双字(REG_DWORD):从字面上理解应该是Double Word ,双字节值。
由1-8个十六进制数据组成,我们可用以十六进制或十进制的方式来编辑。
如D1234567 。
★数据:值项的具体值,它可以占用到64KB。
⑦、Default(缺省值):每一个键至少包括一个值项,称为缺省值(Default),它总是一个字串。
注册表的内部组织结构及相互关系计算机配置和缺省用户设置的注册表数据在Windows NT中被保存在下面这五个文件中:DEFAULT,SAM,SECURITY,SOFTWARE,SYSTEM,NTUSER.DAT。
注册表的组成和结构等基本知识在Windows 95及以后的版本中,采用了一种叫做“注册表”的数据库将各种信息资源集中起来并存储各种配置信息;注册表是Windows 的一个内部数据库,是一个巨大的树状分层的数据库。
它容纳了应用程序和计算机系统的全部配置信息、系统和应用程序的初始化信息、应用程序和文档文件的关联关系、硬件设备的说明、状态和属性以及各种状态信息和数据。
注册表中存放着各种参数,直接控制着Windows的启动、硬件驱动程序的装载以及一些Windows应用程序的运行,从而在整个Windows系统中起着核心作用。
1。
怎么进入注册表?答:运行regedit.exe或regedt32.exe启动注册表编辑器即可。
2。
注册表由那些文件的组成?答:在Windows 95 以上版本中,注册标由两个文件组成:System.dat,User.dat,保存在Windows 所在文件夹中。
前者包含硬件和软件的设置,而后者包含与用户有关的信息。
在windows 2k/NT/XP/2003系统中,用户配置文件保存在“Documents and Settings” 文件夹中,包括两个隐藏文件NTUSER.DAT和NTUSER.INT和NTUSER.DAT.LOG日志文件;系统配置文件保存在系统目录下(如:2K的系统目录为winnt,XP的系统目录为windows)“system32\config”中,包括DEFAULT、SOFTWARE、SYSTEMAPPEVENT.EVT、SECEVENT.EVT、SYSEVENT.EVT多个隐藏文件及与其相应的.log日志文件和.sav文件。
3.注册表的结构怎样?主键说明HKEY_CLASSES_ROOT 包含文件扩展名和文件类型,其中也包括了从Win.ini 文件中引入的扩展名的数据;还包括诸如我的电脑、回收站、控制面板等的类标识。
此主键的数据适用于所有用户。
HKEY_CURRENT_USER 保存有当前登录的用户的配置信息,如控制面板选项。
c盘注册表文件路径C盘是Windows操作系统中的一个重要磁盘分区,包含了系统的重要文件和注册表(Registry)文件。
注册表是Windows操作系统中的一个核心组成部分,它存储了系统的配置信息、用户设置以及安装的程序的相关信息。
注册表文件主要保存在C盘的Windows\System32\config目录下。
在Windows操作系统中,注册表被组织成一个具有树状结构的数据库。
这个数据库分为多个主要的子项,包括HKEY_CLASSES_ROOT、HKEY_CURRENT_USER、HKEY_LOCAL_MACHINE、HKEY_USERS和HKEY_CURRENT_CONFIG等。
以下是C盘注册表文件的路径,具体如下所示:1. C:\Windows\System32\config\DEFAULT:这个文件是系统的默认用户配置文件,保存了一个新创建用户的默认配置。
2. C:\Windows\System32\config\SAM:这个文件保存了系统的安全账户管理器(Security Account Manager)配置信息,包括用户和组的权限和访问控制列表(ACL)。
3. C:\Windows\System32\config\SECURITY:这个文件保存了系统的安全策略配置信息,包括用户权限、加密标识符(SIDs)等。
4. C:\Windows\System32\config\SOFTWARE:这个文件保存了系统安装的软件和程序的配置信息,包括安装路径、注册信息等。
5. C:\Windows\System32\config\SYSTEM:这个文件保存了系统的硬件和配置信息,包括设备驱动程序、系统服务等。
6. C:\Windows\System32\config\COMPONENTS:这个文件保存了系统组件和组件注册信息,用于组件的安装和卸载。
7. C:\Windows\System32\config\BCD-Template:这个文件保存了系统的启动配置信息,包括引导程序信息、启动选项等。
WinCE操作系统的基本体系结构操作系统的基本体系结构Windows CE 是由许多离散模块构成的,每一模块都提供特定的功能。
这些模块中的一部分被划分成组件。
组件使Windows CE 变得非常紧凑(只占不到200 KB 的RAM),因此只占用了运行设备所需的最小的ROM、RAM 以及其它硬件资源。
Windows CE 包含提供操作系统最关键功能的 4 个模块:内核模块;对象存储模块;图形、窗口和事件子系统(GWES) 模块以及通信模块。
Windows CE 还包含一些附加的可选择模块,这些模块可支持的任务有管理可安装设备驱动程序、支持COM 等。
内核内核是OS 的核心,通过Coredll 模块表示。
它提供在所有设备中都出现的基本操作系统功能。
内核负责内存管理、进程管理以及特定文件管理等功能。
它还管理虚拟内存、调度、多重任务处理以及例外处理等。
Windows CE的任何配置都需要用到Coredll 模块的大多数组件。
有一些内核组件是可选的,只有在涉及系统功能操作时,才需要这些组件,例如电话技术、多媒体技术以及图形设备接口(GDI) 技术等。
对象存储Filesys 模块支持Windows CE 对象存储API 函数。
对象存储所支持的永久性存储器的类型如下表所示。
存储器类型说明文件系统包含应用程序和数据文件系统注册表存储应用程序必须快速访问的系统配置信息以及其它任何信息Windows CE 数据库提供结构化存储对象存储可将用户数据和应用程序数据存入文件或注册器。
在操作系统构造进程(该进程中只包括那些必需选项)的过程中,对于这些不同的对象存储组件,可以选取,也可以忽略。
GWESGWES 是用户、应用程序和OS 之间的图形用户接口。
GWES 通过处理键盘、笔针动作来接受用户输入,并选择传送到应用程序和OS 的信息。
GWES 通过创建并管理在显示设备和打印机上显示的窗口、图形以及文本来处。
注册表的结构在中文Windows 系统中,注册表采用“关键字”及其“键值”来描述登录项及其数据。
所有的关键字都是以“HKEY”作为前缀开头。
实际上,“关键字”是一个句柄。
这种约定使得系统及应用程序开发人员可以在使用注册表API函数时把它用于应用程序的开发之中。
为此,中文Windows 提供了若干个Win32 API 函数,以便在开发中文Windows 应用程序时添加、修改、查询和删除注册表的登录项。
在注册表中,关键字可以分为两类:一类是由系统定义的,通常称为“预定义关键字”;另一类是由应用程序定义的,安装的应用软件不同,其登录项也就不同。
1. HKEY_CLASSES_ROOT该主关键字(或称为“根键”)包含了有关的OLE信息,以便在系统工作过程中实现对各种文件和文档信息的访问,如图1-4所示。
其具体的内容有已经注册的文件扩展名、文件类型、文件图标等。
2.HKEY_USERSPC用户都可以在这里设置自己的关键字和子关键字,根据当前登录的用户不同,这个关键字又可以指向不同的分支部分。
这个分支部分将映射到HKEY_CURRENT_USER主关键字中,用户根据个人爱好设置的诸如桌面、背景、开始菜单程序项、应用程序快捷键、显示字体、屏幕节电设置等信息均可以在这个关键字中找到。
该主关键字中的大部分设置都可以通过“控制面板”来修改,如果用户登录到系统中的信息没有预定义的登录项,则采用该关键字下面的“.Default”子关键字。
3.HKEY_CURRENT_USERHKEY_CURRENT_USER主关键字是一个指向HKEY_USERS结构中某个分支的指针,它包含当前用户的登录信息,实际上它就是HKEY_USERS\.Default下面的一部分内容。
如果在HKEY_USERS\.Default下面没有用户登录的其他内容,那么这两个主关键字包含的内容是完全相同的。
4.HKEY_LOCAL_MACHINE该主关键字包含了本地计算机(相对网络环境而言)的硬件和软件的全部信息,如图1-9所示。
注册表的逻辑结构这里谈的注册表的组织结构是指注册表在注册表编辑器中所展示的结构体系,这也是普通用户对注册表最直观的认识。
这种直观的结构体系也被称为注册表的逻辑结构。
图1注册表逻辑结构中最基本的是主键、子键、键值项以及键值(如图1)。
它们是按照分级的方式来管理和组织的。
首先是最底层的根键,每个根键下有若干子键,每个子键下又可以有若干(一个或多个)子键,子键下可以有一个或多个键值项和键值。
如图2显示的是注册表的逻辑组织结构:图2层次说明根键注册表中最底层的键,类似与磁盘上的根目录。
在Windows注册表逻辑结构中,有以下六个根键:HKEY_CLASSES_ROOTHKEY_CURRENT_USERHKEY_LOCAL_MACHINEHKEY_USERSHKEY_CURRENT_CONFIGHKEY_DYN_DATA(仅Windows 98)子键子键位于根键下,又可以嵌套于其他子键中。
它类似于磁盘上看到的目录(文件夹)。
在六个根键中,有若干个子键,而每个子键中又可以嵌套成千上万的子键。
键值项与键值在每个根键和子键下,可以有若干键值项和键值,这类似于磁盘上根目录和子目录里的文件和文件内容。
这里需要说明的是,在Windows 98系统的注册表编辑器中称子键为“主键”,实际上这都是相对来说的,这好比在磁盘上,一个目录A如果在另一目录B下,那么目录A就叫子目录,而目录B相对根目录来说,还是叫子目录。
而在注册表中也是这样的。
所以作为本书的约定之一,就是把所有的这些容易混淆的东西都叫一个名字——子键。
实际上,在注册表编辑器中,不同操作系统对注册表项目的名称称谓是不同的。
注册表编辑器中显示的分层次的逻辑结构类似于Windows文件管理器中所显示的分层次的文件夹结构。
每个根键以“HKEY_”开头,用来指明这个键是唯一的,称作句柄。
HKEY 包含一个或者多个子键,每个子键都可能包含其他子键和键值项、键值。
子键和键值项的名字可以包含可显示的字母,包括空格、下划线、字母以及符号,但是不能包含(\)。
注册表数据结构在计算机的世界里,注册表就像是一个神秘的“数据库”,它存储着各种重要的配置信息,控制着操作系统和应用程序的行为。
而要理解注册表的工作原理,首先就得搞清楚它的数据结构。
注册表的数据结构可以看作是一个层次分明的树形结构。
想象一下一棵大树,有主干、分支和树叶,注册表就有点类似。
它的最顶层被称为“根键”,就像是大树的主干。
根键主要有五个:HKEY_CLASSES_ROOT、HKEY_CURRENT_USER、HKEY_LOCAL_MACHINE、HKEY_USERS 和HKEY_CURRENT_CONFIG。
HKEY_CLASSES_ROOT 主要负责管理文件关联和 COM 组件的注册信息。
比如说,当你双击一个文件时,系统就是通过这里的信息来决定用哪个程序打开它。
HKEY_CURRENT_USER 则保存着当前登录用户的个性化设置,比如桌面背景、屏幕保护程序、浏览器收藏夹等等。
HKEY_LOCAL_MACHINE 涵盖了计算机的硬件、软件和系统的整体配置信息,这是个相当重要的部分,包括设备驱动程序、系统服务、网络设置等等。
HKEY_USERS 包含了所有用户的配置信息,不仅仅是当前登录的用户。
HKEY_CURRENT_CONFIG 存储的是当前硬件配置的信息。
在这些根键下面,还有着各种“子键”,就像大树的分支。
子键可以进一步细分,形成更具体的配置类别。
每个子键都可能包含着一些“值项”,这就好比树枝上的树叶。
值项是注册表中实际存储数据的地方。
值项有不同的数据类型,常见的有字符串值、二进制值、DWORD 值(32 位整数)等等。
字符串值通常用于存储文本信息,比如文件路径、用户名之类的。
二进制值则用于存储更复杂的数据结构,比如图标、图像的二进制数据。
DWORD 值常常用于表示开关状态(0 表示关闭,1 表示开启)或者一些整数型的设置。
注册表的数据结构还有一个重要的特点,那就是它的键和值都有访问权限的设置。
注册表详解注册表详解注册表的结构在Windows 95 以上版本中,注册标由两个文件组成:System.dat 和 User.dat,保存在 Windows 所在文件夹中。
前者包含硬件和软件的设置,而后者包含与用户有关的信息。
要对注册表进行编辑不能使用一般的文本处理软件,在 Windows 中提供了一个注册表编辑的程序 Regedit 来查看和维护注册表。
启动Regedit 后,您可以看到一个类似于资源管理器的界面。
在左边的窗格"我的电脑下"有六个分支 (称为主键)。
每一个主键保存着该计算机中软硬件设置的某一方面的信息或数据。
下表中列出了个主键的简要说明:主键说明HKEY_CLASSES_ROOT 包含文件扩展名和文件类型,其中也包括了从Win.ini 文件中引入的扩展名的数据;还包括诸如我的电脑、回收站、控制面板等的类标识。
此主键的数据适用于所有用户。
HKEY_CURRENT_USER 保存有当前登录的用户的配置信息,如控制面板选项。
HKEY_LOCAL_MACHINE 包含本机上所有软硬件的信息,此主键的数据适用于所有用户。
HKEY_USERS 保存着所有登录到此机上的用户的信息。
既包括通用设置(如应用程序事件) ,也包括特定用户的设置(如桌面)。
HKEY_CURRENT_CONFIG 包含所有连结到此机上的硬件的配置数据,如打印机和显示器的配置数据HKEY_DYN_DATA 指向 HKEY_LOCAL_MACHINE 的一个分支,它包括诸如系统性能和既插既用的动态信息注册表中主键的功能● HKEY_CLASSES_ROOT关键字该关键字由多个子关键字组成,具体可分为两种:一种是已经注册的各类文件的扩展名,一种是各种文件类型的有关信息。
图1左窗格中的子关键字就是各种已经注册的文件扩展名。
注册表内登录的文件扩展名中,一部分是系统约定的扩展名,另一部分是由应用程序自定义的扩展名。
Windows注册表的名词解释注册表(Registry)是Windows操作系统中的一个重要组成部分,用于存储系统及应用程序的配置信息、用户设置以及硬件驱动等数据。
它可以被视为一个数据库,存储着操作系统和应用程序中各种设置的键值对。
注册表中的数据被组织成多个层次结构的键(Key)和子键(Subkey)。
键类似于文件夹,用于组织和存储相关的配置信息。
而子键则是位于键下方的子节点,用于进一步组织和分类相关配置信息。
每个键和子键都可以包含多个值(Value),值是注册表中存储的具体数据。
值可以是字符串、二进制数据、整数等不同的数据类型。
每个键和子键可以有多个不同类型的值。
Windows注册表的根键(Root Key)是顶层键,包含了其他所有的键和子键。
Windows操作系统中的根键有五个,分别是HKEY_CLASSES_ROOT、HKEY_CURRENT_USER、HKEY_LOCAL_MACHINE、HKEY_USERS和HKEY_CURRENT_CONFIG。
1. HKEY_CLASSES_ROOT:存储文件类型与关联程序之间的映射关系,用于定义文件的打开方式及相关操作。
2. HKEY_CURRENT_USER:存储当前用户登录时的配置信息,包括桌面背景、字体设置、文件夹选项等。
3. HKEY_LOCAL_MACHINE:存储计算机的硬件和软件配置信息,包括安装的程序、设备驱动等。
4. HKEY_USERS:存储计算机上所有用户账户的配置信息,每个用户拥有一个对应的子键。
5. HKEY_CURRENT_CONFIG:存储当前计算机硬件配置的信息,包括显示器、键盘、鼠标等设备的设置。
在注册表中,键和子键的路径由反斜杠()分隔。
例如,HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExpl orer是一个具体的路径示例。
使用注册表编辑器(Registry Editor)可以对注册表进行编辑和管理。
★什么是注册表?从Windows 95开始,Microsoft在Windows中引入了注册表(英文为REGISTRY)的概念(实际上原来在Windows NT中已有此概念)。
注册表是Windows 95及Windows 98的核心数据库,表中存放着各种参数,直接控制着Windows的启动、硬件驱动程序的装载以及一些Windows应用程序运行的正常与否,如果该注册表由于鞭种原因受到了破坏,轻者使Windows的启动过程出现异常,重者可能会导致整个Windows系统的完全瘫痪。
因此正确地认识、修改、及时地备份以及有问题时恢复注册表,对Windows用户来说就显得非常重要了。
★如何打开注册表?(在修复注册表前请备份)点“开始”→运行→输入“regedit”→确定★一、注册表的结构划分及相互关系WINDOWS的注册表有六大根键,相当于一个硬盘被分成了六个分区。
在“运行”对话框中输入RegEdit,然后单击“确定”按钮,则可以运行注册表编辑器。
Windows 98中文版的注册表Registry(System.dat、User.dat、Config.pol)的数据组织结构。
注册表的根键共六个。
这些根键都是大写的,并以HKEY_为前缀;这种命令约定是以Win32 API的Registry函数的关键字的符号变量为基础的。
虽然在注册表中,六个根键看上去处于一种并列的地位,彼此毫无关系。
但事实上,HKEY_CLASSES_ROOT和HKEY_CURRENT_CONFIG中存放的信息都是HKEY_LOCAL_MACHINE中存放的信息的一部分,而HKEY_CURRENT_USER中存放的信息只是HKEY_USERS存放的信息的一部分。
HKEY_LOCAL_MACHINE包括HKEY_CLASSES_ROOT和HKEY_CURRENT_USER中所有的信息。
在每次系统启动后,系统就映射出HKEY_CURRENT_USER中的信息,使得用户可以查看和编辑其中的信息。
Windows注册表详解Windows注册表详解注册表,Windows中最强大的工具。
如果说Windows图形界面是井,应用程序的运行是水,那么注册表就是我们取水的桶,没有注册表这个“桶”,大多数程序就只能看不能用。
对它简单地改动都能让你单击某个程序却不能运行,让你的各种运行奇慢无比,在你的各种状态栏留下各种无聊的信息。
注册表听起来很高深,其实挺简单。
它就像是你的文件夹一样,有根目录有子目录,根目录表示主要的功能,子目录将这些主要功能再细化,最后落实到键值就相当于最后子目录中的运行程序。
每个键值就一个功能,而我们只需要知道某项功能可能在哪些主目录、哪些子目录,最后在其中找到可能的键值就可以了。
这样,你就能自己探索注册表的奥秘了。
注册表历史在DOS时代,我们所有的硬件设备都是通过启动盘下的Confis.sys和Autoexec.bat两个配置文件在系统启动时加载驱动程序并使其工作的(现在Windows中也部分保留这种配置方式),而到了后来的Windows 3.x,则通过Win.ini、System.ini、Control.ini、program.ini等INI文件来保存所有有关操作系统和应用程序的配置信息。
但出于安全的考虑(任何文本编辑工具都能修改ini文件,而且ini 文件可读性很强)以及越来越多的相关信息需要储存,使得微软从Windows 95开始将注册表概念引入到操作系统中来。
注册表就是一个统一集中地管理系统硬件设施、软件配置等信息的数据库,其中存放着各种参数,直接控制着windows的启动、硬件驱动程序的装载以及一些Windows应用程序的运行,并在其中记录了与机器有关的硬件和软件的配置信息,及联网计算机的整个系统的设置和各种许可,文件扩展名与应用程序的关联,硬件部件的描述、状态和属性,性能记录和其他底层的系统状态信息,以及其他数据等。
当然注册表这个数据库是不能用其他编辑软件打开的,他被存放在Windows文件夹下的system.dat和user.dat两个隐藏文件中,在Windows中你只有用“运行”命令行regedit才能进行编辑,当然你也可以用编辑软件创建.reg来修改。
注册表结构注册表主要由六大部分组成,即最初启动注册表编辑器窗口右边的六大主键,见图2,都是以HKEY开头,每个主键包含每一特殊种类的信息,下面介绍它们的详细内容。
1、HKEY_CLASSES_ROOT(种类_根键):包含了所有已装载的应用程序、OLE 或DDE信息,以及所有文件类型信息。
每一个用圆点开始的子键表示一种文件类型。
例 .avi,在右边列表框中显示 .avi 对象的“Content Type"为一视频文件。
注册表称之为“avifile”。
在文件扩展项目后是按字母顺序排列的列表,包括所有应用程序和实用工具的文件名。
在应用程序列表中,可以找到应用程序的描述、图标文件信息应用程序在OLE和DDE被激活时的缺省形式。
2、HKEY_USERS(当前_用户键):记录了有关登记进计算机网络的特定用户的设置和配置信息。
其子键有:AppEvent:与Windows中特定事件相关连的声音及声音文件的路径。
Control Panel:包含了一些存储在WIN.INI及SYSTEM.INI文件中的数据,并包含了控制面板中的项目。
Install_Location_MRU:记录了最近装载应用程序的驱动器。
Keyboard Layout:识别普遍有效的键盘配置。
Network:描述固定网与临时网的连接。
RemoteAccess:描述了用户拨号连接的详细信息。
Software:记录了系统程序和用户应用程序的设置。
3、HKEY_LOCAL_MACHINE(定位_机器键):该键存储了Windows开始运行的全部信息。
即插即用设备信息、设备驱动器信息等都通过应用程序存储在此键。
子键有:Config:记录了计算机的所有可能配置。
Driver:记录了辅助驱动器的信息。
Enum:记录了多种外设的硬件标识(ID)、生产厂家、驱动器字母等。
Hardware:列出了可用的串行口,描述了系统CPU、数字协处理器等信息。
Network:描述了当前用户使用的网络及登录用户名。
wince注册表结构 与桌面Windows一样,Windows CE也使用注册表(Registry)来保存应用程序、驱动程序和用户的设定以及其他一些配置信息。Windows CE注册表也采用树形结构来管理配置信息,由于Windows CE注册表的结构和功能与桌面Windows几乎一样,在这里就不详细介绍了,读者可以参考其它关于注册表的资料。 Windows CE支持四个根键,描述如下: 键名 描述 HKEY_LOCAL_MACHINE 硬件和驱动配置数据 HKEY_CURRENT_USER 用户配置数据 HKEY_CLASSES_ROOT OLE和文件类型匹配配置数据 HKEY_USERS 适用于所有用户的数据 由于嵌入式系统的特点,一些嵌入式设备是没有外存的。因此Windows CE的注册表提供了两种实现方式:基于RAM的注册表(RAM-Based Registry)和基于Hive的注册表(Hive-Based Registry)。我们可以选择在Windows CE中使用任何一种注册表,注册表类型对于用户和应用程序来说是透明的。 基于RAM的注册表 正如其名,基于RAM的注册表把整个注册表作为一个对象存储堆存放在系统的内存中。这意味着如果对系统进行冷启动或者系统断电,对注册表的所有改动都会丢失。 如果使用基于RAM的注册表,对注册表的读写访问操作会变得非常高效。因此基于RAM的注册表比较适用于没有外部存储,而且有电池保存内存数据(battery-backed RAM)的设备。如果有外存且经常冷启动的设备采用基于RAM的注册表,则需要在系统断电的时候对注册表进行保存,等系统再次启动时对保存的注册表进行还原。 Windows CE提供了两种方法用来断电保存基于RAM的注册表: 1. Windows CE提供了两个系统API用来保存和还原整个注册表,它们的原形如下: BOOL RegCopyFile( LPCWSTR lpszFile // 保存注册表信息的文件的名字 ); BOOL RegRestoreFile( LPCWSTR lpszFile // 保存注册表信息的文件的名字 ); 如果要保存和恢复注册表,我们只需要在系统断电的时候调用RegCopyFile函数将整个注册表保存为外存上的一个文件。当系统重新启动时,我们再调用RegRestoreFile函数将文件全部读出RAM中,然后再热启动系统,我们保存得注册表就可以生效了。值得注意的是这次热启动是必须的,因为只有在系统启动的时候才会去检测RegRestoreFile放在RAM里的注册表信息。这种方法的优点是完全可以使用应用程序来实现基于RAM的注册表的保存,而且这种方法相对简单。但是此方法的缺点是需要两次启动。因此效率相对比较低。 2. 第二种方法需要OEM的参与,OEM可以在BSP的OAL层中实现WriteRegistryToOEM和ReadRegistryFromOEM两个函数,它们的声明为: DWORD ReadRegistryFromOEM( DWORD dwFlags, // 参数, REG_READ_BYTES_START表示读新的注册表 LPBYTE lpData, // 指向注册表数据的缓冲区,由OS分配 DWORD cbData // 缓冲区的大小 ); BOOL WriteRegistryToOEM( DWORD dwFlags, // 参数,REG_WRITE_BYTES_START表示写新的注册表 LPBYTE lpData, // 指向注册表数据的缓冲区,由OS分配 DWORD cbData // 缓冲区的大小,0表示到达注册表尾部 ); Windows CE会在系统启动和关闭的时候调用这两个函数来保存和恢复注册表。此种方法虽然可以避免两次启动,但是困难的地方是ReadRegistryFromOEM函数的实现比较困难,因为在系统启动的时候,块设备驱动和文件系统的驱动都还没有加载,因此不能使用CreateFile,ReadFile这样的文件系统API来实现ReadRegistryFromOEM函数,只能使用一些更底层的操作来实现。 基于Hive的注册表 自从Windows CE 4.0之后,Windows CE提供了基于Hive的注册表。基于Hive的注册表把注册表数据存放在文件系统的文件上,这种文件被称作蜂箱Hive。这就意味着不再需要在系统断电和启动时进行保存恢复注册表操作。 Hive是注册表中的一组键,子键和值。Hive是文件系统上表现为单个文件。Windows CE中有三种Hive。 类型 文件 描述 Boot hive ROM中的Boot.hv HKEY_LOCAL_MACHINE, HKEY_CLASSES_ROOT, HKEY_USERS中的所有数据。只在启动时使用。 System hive 由OEM决定 (通常是System.hv) HKEY_LOCAL_MACHINE, HKEY_CLASSES_ROOT, HKEY_USERS中的所有数据。包含设备范围内不随着用户改变而改变的数据。 User hive User.hv HKEY_CURRENT_USER下的所有数据。 包含用户特有的设置,每个用户都有一个单独的User.hv。 基于Hive的注册表适用于对于有永久存储并且需要经常冷启动的设备。我们也可以看到,基于Hive的注册表把系统数据和用户数据分开存放,这就意味着基于Hive的注册表还提供多用户支持。对于每一个用户,可以提供不同的User.hv,当用户登录时加载相应的User.hv,从而达到多用户目的。
注册表类型分为基于对象存储的注册表和基于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"="",指定默认的用户名。如果是单用户系统,能不设置。 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