论坛: 菜鸟乐园 标题: 注册表的结构分析 复制本贴地址    
作者: nightcolor [nightcolor]    版主   登录
1.注册表Reigstry的层次结构

 注册表Reigstry的层次结构类似于硬盘中的目录树,我们可参见图1.2。

┌──────┐
│ 注册表    │ 
│ Registry  │ 
└──┬───┘
      │ 
      │  ┌────┐
      ├─┤ 根键�� │
      │  └─┬──┘
              │    ┌────┐
              ├──┤ 子键   │
              │    └─┬──┘
                        │    ┌────┐
                        ├──┤ 子键   │
                        │    └─┬──┘
                                  │  ┌───┐ 
                                  ├─┤键值项│
                                  │  └───┘ 
图1.2

?
���� 表1.1是对图1.2中的Registry层次结构的解释。
���� 表1.1 图1.2中的Registry层次结构的解释

层次 说 明
根键 根键类似于硬盘上的根目录。 Registry有四个预定义的根键:1. HKEY_LOCAL_MACHINE 2. HKEY_USERS 3.HKEY_CURRENT_USER 4.HKEY_CLASSES_ROOT
键与子键 键和子键类似于文件管理器中看到的目录结构,在键下面是子键,就象目录可以包含子目录一样
键值项 键值项类似硬盘上树型目录的末端文件,键和子键可以包括一个或多个键值项。键值项由键值名、数据类型和键值三部分组成,其格式为:“键值名:数据类型:键值”。
键值类型 Registry中有如下三种键值类型: 1. DWORD值:只允许一个键值,并且必须为1-8个16进制数据(即双字)。 2. 字符串值:只允许一个键值,并且作为要存储的字符串来解释。 二进制值:只允许一个值,是16进制数字串,每对作为一个字节值解释。
�� 2.Registry与INI文件之间的关系
���� Registry与Windows 98中的INI文件有许多相似之处。键或子键类似于INI文件中的小节,一个键值项对应于INI文件中小节里的一条设置项。然而,Registry可以包括子键,而INI文件不支持小节的嵌套。
��?Registry中的键值项还可以包含可执行代码,而在INI文件中设置项只是简单的字串。
��?在同一台计算机上有多个用户,Registry可以存储每个用户的特性,而INI文件中却不可能。
如果您在Windows 3.x上升级为Windows 98,则安装程序会从System.ini和Win.ini文件文件中选择一些延续信息放入到注册表中。不过,为了与以前的Windows版本上的老式16位应用程序保持兼容,INI文件中的有些设置项不能迁移到Windows 98的注册表中。有关Win.ini、System.ini文件的结构与设置项信息详见附录A。

1.注册表中Win.ini信息
表1.2列出了Windows 98在升级安装过程中,从Win.ini文件中移出的部分设置项,以及在注册表中的位置。所有的子键都处于注册表的HKEY_CURRENT_USER根键中。
表1.2 注册表中Win.ini信息

小节 设置项 HKEY_CURRENT_USER中的子键分支
[desktop] GridGranularity Control Panel\desktop
Pattern Control Panel\desktop
TileWallPaper Control Panel\desktop
[windows] ScreenSaveActive Control Panel\desktop
ScreenSaveTimeOut Control Panel\desktop
[Sounds] Sound Event Name AppEvents\Schemes\Apps\.Default\Sound Event Name\.current
[Hearts] Name Software\Microsoft\Windows\CurrentVersion\Applets\Hearts
�� 2.注册表中的System.ini信息
表1.3列出了Windows 98在升级安装过程中从System.ini文件中移出的设置项,以及在注册表中的位置,这些子键都处于注册表的HKEY_LOCAL_MACHINE根键中。根据机器的网络配置,有些系统可能不会出现某些子键。
表1.3 注册表中的System.ini信息

小节 设置项 HKEY_LOCAL_MACHINE内的子键分支
     [Network] Comment System\CurrentControlSet\Services\VxD\VNETUP
ComputerName System\CurrentControlSet\Control\ComputerName\ComputerName
EnableSharing 没有子键入口
LMAnnounce System\CurrentControlSet\Services\VxD\VNETUP
LogonDomain 没有子键入口
Logon Validated 没有子键入口
MaintainServerList System\CurrentControlSet\Control\ComputerName\ComputerName
ReconnectReshare 没有子键入口
没有子键入口
Username Network\Logon
Workgroup System\CurrentControlSet\Control\ComputerName\ComputerName
[386Enh] Network 没有子键入口
Transport Software\Microsoft\Windows\CurrentVersion\Network\Real Mode Net
 
 
1.2 注册表Registry的组成
 
我们知道,在Windows 3.x中,提供了一个注册数据库Reg.dat,它是一个一般二进制文件,它可用Regedit.exe程序来维护。Reg.dat是一个十分软弱的数据文件,在Windows 3.x中增加或删除O LE应用程序时,经常受到不同程度的破坏。
Windows 98改变了Windows 3.x的做法,采用了一种强大的注册表Registry,它要比Reg.dat更为可靠。
 
?3.注册表的文件组成
 注册表Registry由五个文件组成的。介绍如下。

1.系统配置注册表文件System.dat
在Windows 98的系统目录中有一个隐含、系统、只读文件System.dat,它是Windows 98注册表的一部分,该文件具有如下作用:
● 描述单一的PC配置。
● 描述安装在一单独的PC上的消息。
● 安装即插即用类型的设备硬件配置,如设备的I/O地址、IRQ级和DM A通道等。
该文件的作用有点类似Windows 3.x中的System.ini文件。
该文件在Windows 98的网络运行状态时,保存在本地的工作站或本地PC机中。
在Windows 98安装期间,Setup将检查您的计算机上已安装的硬件,然后在System.dat中建立适当的配置项。若从现有的Windows 3.x中安装Windows 98,则Setup将把现有的System.ini、Reg.dat文件中的部分设置项拷贝到System.dat中,详见1.1.3节。

在您使用“控制面板”的“系统”图标查看硬件配置时,其窗口中所显示的选项都是从System.dat中读取的,如图1.3所示。

图1.3


2.系统配置注册表备份文件System.dat
Windows 98的注册表的一个主要特点就是可靠性强,不易损坏。这个特点靠的就是注册表有备份文件。
系统配置注册表System.dat的备份文件为System.da0,该文件在System.dat文件遭到意外破坏时,将由系统自动拷贝为System.dat。
3.用户平台配置注册表文件User.dat
在Windows 98的系统目录中有一个隐含、系统、只读文件User.dat,它也是Windows 98的注册表的一部分,该文件具有如下作用:
● 它定义用户优先权,如用户平台配置等。
● 特定于某一个用户的应用程序的安装信息。

该文件的作为类似于Windows 3.xWin.ini文件。
当您在Windows 98中使用网络时,User.dat必须放在网络服务器上。
在您第一次输入用户标识和密码时,安装程序将把这些信息存储在User.dat中。您的Windows 98的系列号也存储在USER.DAT中。
如果用户在“控制面板”的“密码”图标中选择了“用户可自定义首选项及桌面设置登录时,Windows自动启用个人设置”这个选项后(参见图1.4所示),系统就会为每个用户创建他自己的User.Dat,并且把它保存为C:\Windows\Profiles\用户名\
User.dat。用户每次登录后,他自给的User.dat会被调入到系统中。

图1.4


4.用户平台配置注册表备份文件User.dat
用户平台配置注册表文件User.dat也有一个备份文件User.da0。当User.dat遭到意外破坏时,将由系统将User.da0拷贝为User.dat,从而使User.dat得到了恢复。
5.网络管理注册表文件Config.pol
若您在Windows 98安装了“系统策略编辑器”后,则用户可以使用Config.pol文件中的限制来决定系统如修改注册表,也就是说,系统根据Config.pol中的设置对网络用户的操作作一些限制,这种限制在Windows 98被称为“策略”。Config.pol文件也是一个隐含、系统、只读文件,它主要用于Windows 98的网络用户的管理方面的策略。

6.网络管理注册表备份文件Config.pol
同System.dat、User.dat有备份文件一样,Config.pol也有一个备份文件Config.pol,它是一个隐含、系统、只读文件。它存放在网络服务器中。
 
1.2.2 注册表中的根键
使用注册表编辑器可以观察注册表中的根键,如图1.5所示。

图1.5 


注意:在“运行”对话框中输入RegEdit,然后单击“确定”按钮,则可以运行注册表编辑器,详见第2章介绍。
图1.5显示了Windows 98中文版的注册表Registry?(System.dat、User.dat、Config.pol)的数据组织结构。
图1.5左窗格显示的是注册表的根键,这样的根键共六个。?这些根键都是大写的,并以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中的信息,使得用户可以查看和编辑其中的信息。
实际上,HKEY_LOCAL_MACHINE\SOFTWARE\Classes就是HKEY_CLASSES_ROOT,为了用户便于查看和编辑,系统专门把它作为一个根键。同理,HKEY_CURRENT_CONFIG\SYSTEM\Current Control就是HKEY_LOCAL_MACHINE\SYSTEM\Current Control。
HKEY_USERS中保存了默认用户和当前登录用户的用户信息。HKEY_CURRENT_USER中保存了当前登录用户的用户信息。

HKEY_DYN_DATA保存了系统运行时的动态数据,它反映出系统的当前状态,在每次运行时都是不一样的,即便是在同一台机器上。
根据上面的分析,注册表中的信息可以分为HKEY_LOCAL_MACHINE和HKEY_USERS两大类,这两大类的详细介绍参见第3章。
 
1.2.3 注册表中的键与子键
在注册表中(参见图1.5所示),所有的数据都是通过一种树状结构以键和子键的方式组织起来,十分类似于目录结构。每个键都包含了一组特定的信息,每个键的键名都是 和它所的信息相关的。如果这个键包含子键,则在注册表编辑器窗口中代表这个键的文件夹的左边将有“+”符号,以表示在这个文件夹中有更多的内容。如果这个文件夹被用户打开了,那么这个“+”就会变成“-”,如图1.6所示。

图1.6


1.HKEY_USERS
该根键保存了存放在本地计算机口令列表中的用户标识和密码列表。?每个用户的预配置信息都存储在HKEY_USERS根键中。?HKEY_USERS是远程计算机中访问的根键之一。图1.7为HKEY_USER子关键字连接情况。

图1.7


2.HKEY_CURRENT_USER
该根键包含本地工作站中存放的当前登录的用户信息,包括用户登录用户名和暂存的密码(注:此密码在输入时是隐藏的)。用户登录Windows 98时,其信息从HKEY_USERS中相应的项拷贝到HKEY_CURRENT_USER中。图1.8为HKEY_CURRENT_USER根键下各个键之间连接的情况。

图1.8




3.HKEY_CURRENT_CONFIG
该根键存放着定义当前用户桌面配置(如显示器等)的数据,以及最后使用的文档列表(MRU),和其他有关当前用户的Windows 98中文版的安装的信息.
图1.9为HKEY_CURRENT_CONFIG子关键字之间的连接情况。

图1.9



4.HKEY_CLASSES_ROOT
根据在Windows 98中文版中安装的应用程序的扩展名,该根键指明其文件类型的名称。
在第一次安装Windows 98中文版时,RTF(Rich Text Format)文件与写字板(WordPad)?联系起来,但在以后安装了中文Word 6.0后,?双击一个RTF文件时,将自动激活Word。存放在SYSTEM.DAT中的HKEY_CLASSES_ROOT,???将替代WIN.INI文件中的[Extensions]?小节中的设置项,它把应用程序与文件扩展名联系起来,它也替代了Windows 3.x中的Reg.dat文件中的相似的设置项。?图1.10显示了HKEY_CLASSES_ROOT根键中包括的文件扩展名的情况。

图1.10



5.HKEY_LOCAL_MACHINE
该根键存放本地计算机硬件数据,此根键下的子关键字包括在SYSTEM.DAT中,用来提供HKEY_LOCAL_MACHINE所需的信息,或者在远程计算机中可访问的一组键中。
该根键中的许多子键与System.ini文件中设置项类似。

图1.11显示了HKEY_LOCAL_MACHINE根键下的各个子键之间的情况。

图1.11




6.HKEY_DYN_DATA
该根键存放了系统在运行时动态数据,此数据在每次显示时都是变化的,因此,此根键下的信息没有放在注册表中。图1.12显示了HKEY_DYN_DATA根键下的各个子键的情况。

图1.12




 
1.2.4 注册表中的键值项数据
注册表通过键和子键来管理各种信息。但是,注册表中的所有信息是以各种形式的键值项数据保存下来。在注册表编辑器右窗格中,保存的都是键值项数据。这些键值项数据可分为如下三种类型:
1.字符串值
在注册表中,字符串值一般用来表示文件的描述、硬件的标识等。通常它由字母和数字组成,最大长度不能超过255个字符。在图1.13所示中,“D:\pwin98\trident”即为键值名“a”的键值,它是一种字符串值类型的。同样地,“ba”也为键值名“MRUList”的键值。通过键值名、键值就可以组成一种键值项数据,这就相当于Win.ini、Ssytem.ini文件中小节下的设置行。其实,使用注册表编辑器将这些键值项数据导出后,其形式与INI文件中的设置行完全相同了。详见第3章。

图1.13
2.二进制值
在注册表中,二进制值是没有长度限制的,可以是任意个字节长。在注册表编辑器中,二进制以十六进制的方式显示出来,如图1.14所示。 

图1.14

在图1.14中,键值名Wizard的键值“80 00 00 00”就是一个二进制
注意:在如图1.15所示的“编辑二进制值”对话框时,在编辑框的左边输入十六进制数时,其右边将会显示相应的ASCII码。

图1.15

3.DWORD值

DWORD值是一个32位(4个字节,即双字)长度的数值。在注册表编辑器中,您将
图1.16 

发现系统会以十六进制的方式显示DWORD值,如图1.16所示。
注意:在编辑DWORD数值时,可以选择用十进制还是16进制的方式进行输入,如图1.17所示。

图1.17

1.3 注册表的双重入口
 
在注册表中经常出现双重入口(分支),例如,有一些在HKEY_CLASSES_ROOT中的键同样会在HKEY_LOCAL_MACHINE中出现,如图1.18所示。

图1.18

如果这些相同的分支出现在两个不同的根键中,那么,哪个根键有效呢?
注册表的子键都有严格的组织。如果相同的信息出现在超过一个的子键中,如果您只修改了一个子键,那么该修改是否作用于系统依赖于该子键的等级。一般来说,系统信息优先于用户等级。例如,一个设置项同时出现在HKEY_LOCAL_MACHINE和HKEY_USER子键中,通常由HKEY_LOCAL_MACHINE中的数据起作用。要注意的是,这种情况只发生在您直接编辑注册表时。如果您从“控制面板”中更改系统配置,则所有出现该设置项的地方均会发生相应的改变。
例如,您可以通过注册表设置文件关联,即将一个带有特殊后缀的文件连接到一个应用程序上。在注册表中,有四个子键都保存了文件管理的数据,它们分别是:HKEY_CLASSES_ROOT、HKEY_CURRENT_USER、HKEY_LOCAL_MACHINE、HKEY_USER。在缺省情况下,所有后缀为1ST的文件都被连接到记事本程序(Notepad)上。如果您在Windows资源管理器双击该后缀的文件,则系统将激活记事本,同时将此文件调入编辑。但是您也可此文件关联从Notepad改为Lotus Ami Pro(这也是一个字处理程序),则您在双击后缀为1ST的文件时,将激活Lotus Ami Pro程序,同时编辑此文件。但是,如果您在直接编辑注册表时只修改一个子键,则会出现如下四种情况:

● 如果只修改HKEY_CLASSES_ROOT中的1ST项,则在双击1ST后缀的文件时将激活Lotus Ami Pro。
● 如果只修改HKEY_CURRENT_USER中的1ST项,则在双击1ST后缀的文件时将激活Notepad。
● 如果只修改HKEY_LOCAL_MACHINE中的1ST项,则在双击1ST后缀的文件时将激活Lotus Ami Pro。
● 如果只修改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。




[此贴被 夜色撩人(nightcolor) 在 5月4日20时58分 编辑过]

地主 发表时间: 5/4 20:8

回复: nightcolor [nightcolor]   版主   登录
还有些图片稍后传上来


[此贴被 夜色撩人(nightcolor) 在 5月4日20时29分 编辑过]

B1层 发表时间: 5/4 20:19

回复: fuit [fuit]   论坛用户   登录
好啊,期待图片中

B2层 发表时间: 05/07 10:41

回复: fubin [fubin]   论坛用户   登录
是呀


B3层 发表时间: 05/07 14:48

回复: nightcolor [nightcolor]   版主   登录
已经被我全删了。。。嘿,,FTP太慢了

B4层 发表时间: 05/07 14:55

回复: ghlhappy [ghlhappy]   论坛用户   登录
不会吧,我还想看看呢!快点啊!谢谢! 

B5层 发表时间: 05/10 18:25

回复: top [top]   论坛用户   登录
看得我累啊!还是有图好啊!

B6层 发表时间: 05/10 19:55

回复: top [top]   论坛用户   登录
这只是个大概吧?

B7层 发表时间: 05/10 19:59

回复: xiaohu0122 [xiaohu0122]   论坛用户   登录
怎么在里面加图片呢??

B8层 发表时间: 05/10 22:15

论坛: 菜鸟乐园

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号