当前位置:文档之家› 注册表的基本结构

注册表的基本结构

注册表的结构在中文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所示。

当系统的配置和设置发生变化时,本关键字下面的登录项也将随之改变。

5.HKEY_CURRENT_CONFIG这个主关键字实际上也是指向HKEY_LOCAL _MACHINE\Config结构中的某个分支的指针,如图1-10所示。

HKEY_CURRENT_CONFIG下面的子关键字及内容与HKEY_LOCAL _MACHINE\Config\0001分支下面的子关键字及内容是完全相同的。

该主关键字包含的主要内容是计算机的当前配置情况,如显示器、打印机等可选外部设备及其设置信息等,而且这个配置信息均将根据当前连接的网络类型、硬件配置以及应用软件的安装不同而有所变化。

6. HKEY_DYN_DATA顾名思义,该主关键字包含了系统运行中的动态数据,即已发生的事件的有关信息,如图1-11所示。

因此,这个主关键字的内容不仅包含系统硬件的当前状态,也包含了那些需要更新和检索的数据。

这些数据都是动态变化的,它们总是最新的信息。

中文Windows 98每次启动时都将重新建立这个主关键字。

为了提高工作速度,HKEY_DYN_DA TA实际上是存放在内存(RAM)中的,因此,如果发生了对于注册表内容的修改,则不必立即写入磁盘,这对于提高系统的速度是十分必要的。

在注册表中经常出现双重入口(分支),例如,有一些在HKEY_CLASSES_ROOT中的键同样会在HKEY_LOCAL_MACHINE中出现,如果这些相同的分支出现在两个不同的根键中,那么哪个根键有效呢?注册表的子键都有严格的组织。

如果相同的信息出现在超过一个的子键中,假如你只修改了一个子键,那么该修改是否作用于系统依赖于该子键的等级呢?一般来说,系统信息优先于用户等级。

例如,一个设置项同时出现在HKEY_LOCAL_MACHINE和HKEY_USER子键中,通常由HKEY_LOCAL_MACHINE中的数据起作用。

要注意的是,这种情况只发生在你直接编辑注册表时。

如果你从“控制面板”中更改系统配置,则所有出现该设置项的地方均会发生相应的改变。

例如,你可以通过注册表设置文件关联,即将一个带有特殊后缀的文件连接到一个应用程序上。

在注册表中,有4个子键都保存了文件管理的数据,它们分别是HKEY_CLASSES_ROOT,HKEY_CURRENT_USER,HKEY_LOCAL_MACHINE和HKEY_USER。

在缺省情况下,所有后缀为1ST 的文件都被连接到记事本程序(Notepad)上。

如果你在Windows资源管理器双击该后缀的文件,系统将激活记事本,同时将此文件调入编辑。

但是你也可将此文件关联从Notepad改为Lotus Ami Pro(这也是一个字处理程序),则你在双击后缀为1ST的文件时将激活Lotus Ami Pro程序,同时编辑此文件。

但是,如果你在直接编辑注册表时只修改一个子键,则会出现如下4种情况:(1) 如果只修改HKEY_CLASSES_ROOT中的1ST项,则在双击1ST后缀的文件时将激活Lotus Ami Pro。

(2) 如果只修改HKEY_CURRENT_USER中的1ST项,则在双击1ST后缀的文件时将激活Notepad。

(3) 如果只修改HKEY_LOCAL_MACHINE中的1ST项,则在双击1ST后缀的文件时将激活Lotus Ami Pro。

(4) 如果只修改HKEY_USER中的1ST项,则在双击1ST后缀的文件时将激活Notepad。

在上面的例子中,HKEY_CLASSES_ROOT子键和HKEY_LOCAL_MACHINE子键看起来在控制文件关联上相互独立,这似乎有些自相矛盾,但是,要知道HKEY_ CLASSES_ROOT 根键就是HKEY_LOCAL_MACHINE\Software\Classes,因此,改变HKEY_CLASSES_ROOT根键就是改变HKEY_LOCAL_MACHINE。

注册表通过主键(最上层的为“根键”)和子键来管理各种信息。

但是,注册表中的所有信息是以各种形式的“键值项数据”保存下来,如图在注册表的左窗格中,所有的数据都是通过一种树状结构以键和子键的方式组织起来的,十分类似于目录结构。

每个键都包含了一组特定的信息,每个键的键名都是和它所包含的信息相关的。

如果这个键包含子键,则在注册表编辑器窗口中代表这个键的文件夹的左边将有“+”符号,以表示在这个文件夹中有更多的内容。

如果这个文件夹被用户打开了,那么这个“+”就会变成“-”.在注册表编辑器右窗格中保存的都是“键值项数据”。

在注册表中,“键值项数据”包含“键值名”(即“名称”栏下面的部分)与“键值”(即“数据”栏下面的部分),如图在注册表中,“键值项数据”可分为如下三种类型(在右窗格内右击鼠标,则在弹出的快捷菜单中将可以看到这三种类型,如图(1)字符串值在注册表中,字符串值一般用来表示文件的描述、硬件的标识等。

通常它由字母和数字组成,最大长度不能超过255个字符。

在图1-20中,“D:\pwin98\trident”即为键值名“a”的键值,它是一种字符串值类型的。

同样地,“ba”也为键值名“MRUList”的键值。

通过键值名、键值就可以组成一种键值项数据,这就相当于Win.ini,System.ini文件中小节下的设置行。

其实,使用注册表编辑器将这些键值项数据导出后,其形式与.INI文件中的设置行完全相同了。

(2)二进制值在注册表中,二进制值是没有长度限制的,可以是任意个字节长。

在注册表编辑器中,二进制以十六进制的方式显示出来.在图中,键值名“wizard”的键值“80 00 00 00”就是一个二进制值数据。

双击键值,在“编辑二进制值”对话框中,在编辑框的左边输入十六进制数时,其右边将会显示相应的ASCII 码。

(3)DWORD值DWORD值是一个32位(4个字节,即双字)长度的数值。

在注册表编辑器中,你将发现系统会以十六进制的方式显示DWORD值,在编辑DWORD数值时,可以选择用十进制还是16进制的方式进行输入..注册表以类似磁盘上的目录和文件那样的层次结构进行组织,如图2-3所示。

表2-1详细地解释了图2-3中的各个层次项的含义。

表2-1 上图中的各个层次项的含义层次说明子树 子树(又称为“子树关键字”,而在Windows 95/98下称为“根键”)类似于磁盘上的根目录。

注册表有如下4个预定义的子树:●HKEY_LOCAL_MACHINE●HKEY_USERS●HKEY_CURRENT_USER●HKEY_CLASSES_ROOT配置元 一个配置元是关键字、子关键字和键值项的分离体。

每个配置元具有一个相应的文件和.LOG文件。

.LOG文件用于保证自动发生关键字值的改变。

这些文件放在目录\winnt\SYSTEM32\CONFIG中关键字和子关键字 关键字和子关键字类似于Windows 3.x中“文件管理器”(File Manager)或Windows 95/98中“Windows资源管理器”中看到的目录结构,每个配置元都可以包括关键字和子关键字,这就像目录可以包含子目录一样键值项 键值项类似层次末端的文件,关键字和子关键字可以包括一个或者多个键值项。

键值项主要由键值名、数据类型和值三部分组成,其格式为:键值名:数据类型:值续表 层次说明值数据类型 Windows2000中的值数据类型包含如下5种:●REG_DWORD:只允许一个值,并且为1~8个16进制数据串●REG_SZ:只允许一个值,并且作为存储的串来解释●REG_EXPAND_SZ:类似REG_SZ,只是文本可包含替换的变量●REG_BINARY:只允许一个值,是16进制数字串,每对作为一个字节值来解释●REG_MULTI_SZ:允许多个值,每个值作为MULTI_SZ的一个成分图2-3注册表与Windows 3.x中的.INI文件有许多相似之处。

关键字类似于.INI文件的小节,一个键值项对应于一个.INI文件中小节里一条设置项。

然而,注册表可以包含子关键字,而.INI文件不支持小节的嵌套。

注册表中的键值项还可以包含可执行代码,而在.INI文件中设置项只是简单的串。

另外,在同一台计算机上有多个用户,注册表可以存储每个用户的特性,而.INI文件中却不可能。

1 HKEY_LOCAL_MACHINE该子树存放包括有关本地机器的所有配置信息及硬件、操作系统的数据等,如系统内存、驱动程序、安全数据库、系统配置等信息,这个子树不管哪个用户登录以及使用什么软件而保留机器的信息。

在这个子树中的信息由应用程序、设备驱动程序和Windows 2000操作系统使用,以确定本地机器的配置数据。

相关主题