首页 > 学院 > 逻辑算法 > 正文

(看雪教程) 第5章 第4节注册表

2019-09-10 09:02:14
字体:
来源:转载
供稿:网友

【Windows 95/98注册表结构】 

--------------------------------------------------------------------------------

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中有如下三种键值类型:

DWORD值:只允许一个键值并且必须为1-8个16进制数据(即双字)。
字符串值:只允许一个键值并且作为要存储的字符串来解释。
二进制值:只允许一个值是16进制数字串每对作为一个字节值解释。


表1.1


六大根键的作用


  在注册表中,所有的数据都是通过一种树状结构以键和子键的方式组织起来,十分类似于目录结构。每个键都包含了一组特定的信息,每个键的键名都是和它所包含的信息相关的。如果这个键包含子键,则在注册表编辑器窗口中代表这个键的文件夹的左边将有“+”符号,以表示在这个文件夹中有更多的内容。如果这个文件夹被用户打开了,那么这个“+”就会变成“-”。

1、HKEY_USERS

  该根键保存了存放在本地计算机口令列表中的用户标识和密码列表。每个用户的预配置信息都存储在 HKEY_USERS 根键中。 HKEY_USERS 是远程计算机中访问的根键之一。

2、HKEY_CURRENT_USER   该根键包含本地工作站中存放的当前登录的用户信息 ,包括用户登录用户名和暂存的密码 ( 注:此密码在输入时是隐藏的 ) 。用户登录 Windows 98 时,其信息从 HKEY_USERS 中相应的项拷贝到 HKEY_CURRENT_USER 中。

3、HKEY_CURRENT_CONFIG   该根键存放着定义当前用户桌面配置 ( 如显示器等 ) 的数据 , 最后使用的文档列表( MRU )和其他有关当前用户的 Windows 98 中文版的安装的信息。

4、HKEY_CLASSES_ROOT   包含注册的所有ole信息和文档类型,是从 hkey_local_machine/software/classes复制的。根据在 Windows 98 中文版中安装的应用程序的扩展名 , 该根键指明其文件类型的名称 。   

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


6、KEY_DYN_DATA   该根键存放了系统在运行时动态数据,此数据在每次显示时都是变化的,因此,此根键下的信息没有放在注册表中


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

Reconnect

Reshare
没有子键入口

没有子键入口

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.da0

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.da0

用户平台配置注册表文件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.po0

同System.dat、User.dat有备份文件一样Config.pol也有一个备份文件Config.po0它是一个隐含、系统、只读文件。它存放在网络服务器中。

 

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。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选