标签 注册表 下的文章

什么是注册表?


在windows的开始/运行菜单中输入"regedit"你就可以通过注册表编辑器看到注册表,注册表是什么呢?简单地说,它是用来对windows操作系统进行配置的一个工具.通过它,可以对操作系统及应用软件进行优化,可以自己设置windows的使用权限,可以解决硬件及网络设置不当带来的故障甚至可以改造自己的操作系统.

在windows 3.X时代,主要通过WIN.INI及SYSTEM.INI对windows进行配置,但WIN.INI及SYSTEM.INI文件存在着安全性不高,大小受限制等问题,为了解这一问题MICROSOFT公司在WINDOWS98以后的版本中引入了注册表这一便更好的对windows系统进行配置,这就是为什么我们要使用注册表的原因.

注册表的作用是保存程序所需要的信息,当程序需要这些信息时,就从注册表里读出.因此,注册表最基本的功能就是保存信息.
当了解了注册表的主要功能--保存信息后,再来了解其保存信息后,再来了解保存信息所发挥的作用!

1,记录安装信息;
2,设置硬件属性;
3,定制WINDOWS以及应用软件.

注册表逻辑结构中最基本的是主键,子键,键值项以及键值.它们是按照分组的方式来管理和组织的.首先是最底根键, 每个根键下有若干个子键,每个子键下又可以有若干(一个或多个)子键,子键下可以有一个或多个键值项和键值.

根键:注册表中最底层的键,类似于磁盘上的根目录.
子键:子键位于根键下又可以嵌套其他子键中,在注册表的六大根键中,有若干的子键,而每个子键中又可以嵌套成千上万的子键.
键值项与键值:在每个根键和子键下,可以有若干键值,这种结构类似于磁盘上根目录和子目录里的文件和文件内容.

windows 9x注册表逻辑结构中包含六个根键,每个根键包含着分类不同的信息!在windowsNT/2000/XP中,如果用windows自带的编辑器打开的时候,只能看到五个,还有一个隐藏的根键:HKEY_PERFOR_MANCE_DATA.

*HKEY_CLASS_ROOT
记录windows操作系统中所有数据文件的格式和关联信息,主要记录不同文件的文件名后缀和与之对应的应用程序其下子键可分为两类:一类是已经注册的各类文件的扩展名,这类子键前面都带有一个".";另一类是各类文件类型有关信息.

*HKEY_CURRENT_USER
此根根键包含当前登录用户的用户配置文件信息,这些信息保证不同的用户登录计算机时,使用自己的修改化设置,例如自己定义的墙纸,自己的收件箱,自己的安全访问权限.

*HKEY_LOCAL_MACHINE
此根键包含了当前计算机的配置灵气,包括所安装的硬件以软件设置.这些信息是为所有的用户登录系统服务的.这是事个注册表中最庞大也是最重要的根键!

*HKEY_USERS
HKEY_USERS根键包括默认用户的信息(DEFAULT子键)和所有以前登陆用户的信息.

*HKEY_CURRENT_CONFIG
此根键实际上是HKDY_LOCAL_MACHINE/CONFIG/0001分支下的数据完全一样.

*HKEY_DYN_DATA根键
这个键保存每次系统启动时,创建的系统配置和当前性能信息.这个根键只存在于windows 9X中

*HKEY_PERFORMANCE_DATA
在windowsNT/2000/XP注册表中虽然没有HKEY_DYN_DAT键,但是它却隐藏了一个名为"HKEY_PERFORMANCE_DATA的键.所有系统中的动态信息都是存放在此子键中,系统自带的注册表编辑器无法看到些键.介可以用专门的程序来查看此键,比如使用性能监视器.

什么是注册表一
Windows注册表是帮助Windows控制硬件、软件、用户环境和Windows界面的一套数据文件,注册表包含在Windows目录下两个文件system.dat和user.dat里,还有它们的备份system.da0和user.da0。通过Windows目录下的regedit.exe程序可以存取注册表数据库。在以前,在windows的更早版本(在Win95以前),这些功能是靠win.ini,system.ini和其他和应用程序有关联的.ini文件来实现的.

在windows操作系统家族中,system.ini和win.ini这两个文件包含了操作系统所有的控制功能和应用程序的信息,system.ini管理计算机硬件而win.ini管理桌面和应用程序。所有驱动、字体、设置和参数会保存在.ini文件中,任何新程序都会被记录在.ini文件中。这些记录会在程序代码中被引用。因为受win.ini和system.ini文件大小的限制,程序员添加辅助的.INI文件以用来控制更多的应用程序。举例来说,微软的Excel有一个excel.ini文件,它包含着选项、设置、缺省参数和其他关系到Excel运行正常的信息。在system.ini和win.ini中只需要指出excel.ini的路径和文件名即可。

早在Dos和Win3.x的时代,大部分的应用程序都是采用了 ini 文件(初始化文件)来保存一些配置信息,如设置路径,环境变量等。system.ini和win.ini控制着所有windows和应用程序的特征和存取方法,它在少数的用户和少数应用程序的环境中工作的很好。随着应用程序的数量和复杂性越来越大,则需要在.ini文件中添加更多的参数项。这样下来,在一个变化的环境中,在应用程序安装到系统中后,每个人都会更改.ini文件。然而,没有一个人在删除应用程序后删除.ini文件中的相关设置,所以system.ini和win.ini这个两个文件会变的越来越大。每增加的内容会导致系统性能越来越慢。而且每次应用程序的升级都出现这样的难题:升级会增加更多的参数项但是从来不去掉旧的设置。而且还有一个明显的问题,一个.ini文件的最大尺寸是64KB。为了解决这个问题,软件商自己开始支持自己的.ini文件,然后指向特定的ini文件如win.ini和system.ini文件。这样下来多个.ini文件影响了系统正常的存取级别设置。如果一个应用程序的.ini文件和WIN.INI文件设置起冲突,究竟是谁的优先级更高呢?

注册表最初被设计为一个应用程序的数据文件相关参考文件,最后扩展成对于32位操作系统和应用程序包括了所有功能下的东东。注册表是一套控制操作系统外表和如何响应外来事件工作的文件。这些“事件”的范围从直接存取一个硬件设备到接口如何响应特定用户到应用程序如何运行等等。注册表因为它的目的和性质变的很复杂,它被设计为专门为32位应用程序工作,文件的大小被限制在大约40MB。利用一个功能强大的注册表数据库来统一集中地管理系统硬件设施,软件配置等信息,从而方便了管理,增强了系统的稳定性。最直观的一个实例就是,为什么windows下的不同用户可以拥有各自的个性化设置,如不同的墙纸,不同的桌面。这就是通过注册表来实现的。

由此可见,注册表(Registry)是Windows9x/Me/NT/2000操作系统、硬件设备以及客户应用程序得以正常运行和保存设置的核心“数据库”;是一个巨大的树状分层的数据库。它记录了用户安装在机器上的软件和每个程序的相互关联关系;它包含了计算机的硬件配置,包括自动配置的即插即用的设备和已有的各种设备说明、状态属性以及各种状态信息和数据等。 ↑

二、注册表都做些什么?

注册表是为Windows NT和Windows95中所有32位硬件/驱动和32位应用程序设计的数据文件。16位驱动在Windows NT下无法工作,所以所有设备都通过注册表来控制,一般这些是通过BIOS来控制的。在Win9x下,16位驱动会继续以实模式方式设备工作,它们使用system.ini来控制。16位应用程序会工作在NT或者Win9x 下,它们的程序仍然会参考win.ini和system.ini文件获得信息和控制。

在没有注册表的情况下,操作系统不会获得必须的信息来运行和控制附属的设备和应用程序及正确响应用户的输入。

在系统中注册表是一个记录32位驱动的设置和位置的数据库。当操作系统需要存取硬件设备,它使用驱动程序,甚至设备是一个BIOS支持的设备。无BIOS支持的设备安装时必须需要驱动,这个驱动是独立于操作系统的,但是操作系统需要知道从哪里找到它们,文件名、版本号、其他设置和信息,没有注册表对设备的记录,它们就不能被使用。

注册表控制用户模式的例子有:

★控制面板功能;

★桌面外观和图标;

★网络参数;

★浏览器功能性和特征。 ↑

这些功能中的某些是和用户无关的,有些是针对用户的。

Windows的注册表(Registry)实质上是一个庞大的数据库,它存储这下面这些内容:
软、硬件的有关配置和状态信息,应用程序和资源管理器外壳的初始条件、首选项和卸载数据;
计算机的整个系统的设置和各种许可,文件扩展名与应用程序的关联, 硬件的描述、状态和属性;
计算机性能纪录和底层的系统状态信息,以及各类其他数据。

注册表的结构

在Windows中,注册表由两个文件组成:System.dat和User.dat,保存在windows所在的文件夹中。它们是由二进制数据组成。System.dat包含系统硬件和软件的设置,User.dat保存着与用户有关的信息,例如资源管理器的设置,颜色方案以及网络口令等等。
Windows为我们提供了一个注册表编辑器(Regedit.exe)的工具,它可以用来查看和维护注册表。

由图1我们可以看到,注册表编辑器与资源管理器的界面相似。左边窗格中,由"我的电脑"开始,以下是六个分支,每个分之名都以HKEY开头,称为主键(KEY),展开后可以看到主键还包含次级主键(SubKEY)。当单击某一主键或次主键时,右边窗格中显示的是所选主键内包含的一个或多个键值(Value)。键值由键值名称(Value Name)和数据(Value Data)组成。主键中可以包含多级的次级主键,注册表中的信息就是按照多级的层次结构组织的。每个分支中保存计算机软件或应建设之中某一方面的信息与数据。
注册表中格分支的功能如下:
HKEY-CLASSES-ROOT  文件扩展名与应用的关联及OLE信息
HKEY-CURRENT-USER  当前登录用户控制面板选项和桌面等的设置,以及映射的网络驱动器
HKEY-LOCAL-MACHINE 计算机硬件与应用程序信息
HKEY-USERS      所有登录用户的信息
HKEY-CURRENT-CONFIG 计算机硬件配置信息
HKEY-DYN-DATA    即插即用和系统性能的动态信息

注册表中的键值项数据

注册表通过键和子键来管理各种信息。但是注册表中的所有信息都是以各种形式的键值项数据保存的。在注册表编辑器右窗格中显示的都是键值项数据。这些键值项数据可以分为三种类型:
1.字符串值
在注册表中,字符串值一般用来表示文件的描述和硬件的标识。通常由字母和数字组成,也可以是汉字,最大长度不能超过255个字符。在本站中以"a"="***"表示。
2.二进制值
在注册表中二进制值是没有长度限制的,可以是任意字节长。在注册表编辑器中,二进制以十六进制的方式表示。在本站中以"a"=hex:01,00,00,00方式表示。
3.DWORD值
DWORD值是一个32位(4个字节)的数值。在注册表编辑器中也是以十六进制的方式表示。在本站中以"a"=dword:00000001表示。

注册表的备份与恢复

如果注册表遭到破坏,Windows将不能正常运行,为了确保Windows系统安全, 我们必须经常的备份注册表。
Windows每次正常启动时,都会对注册表进行备份,System.dat备份为System.da0, User.dat备份为User.da0。它们存放在Windows所在的文件夹中,属性为系统和隐藏。
以下为2种备份注册表的方法:
1,利用Windows中的注册表编辑器(Regedit.exe)进行备份
运行Regedit.exe,单击“文件“-->“导出注册表文件“命令,选择保存的路径,保存的文件为*.reg, 可以用任何文本编辑器进行编辑。
2,利用Win95光盘上Other\Misc\ERU\ERU.EXE紧急事故恢复工具(Emergency Recovery Utility)。利用这个工具不但可以备份和恢复注册表,还可以备份硬盘中的任何文件。
恢复:
当注册表损坏时,启动时Windows会自动用System.dat和User.dat的备份System.da0和User.da0进行恢复工作,如果不能自动恢复,可以运行Regedit.exe(它可以运行在在Windows下或DOS下),导入.reg备份文件。也可以运行ERU.EXE进行恢复。
如果您没有进行备份或者注册表损坏的非常严重,那么您可以试试最后一着:在c:\下有一个System.1st文件,属性为隐藏和只读,它记录着安装Windows时的计算机硬件软件信息,用这个文件覆盖System.dat。但是这样的话您安装的应用软件可能会无法运行,必须重新安装。

注册表修改方法

通过修改注册表我们可以实现一些特殊的功能,但是注册表又是十分脆弱的,一个不小心就会出现错误。那么我们怎么样来修改注册表呢?我总结为以下几种方法:
1.软件修改(安全)
通过一些专门的修改工具来修改注册表,比如:MagicSet、TweakUI、WinHacker等等。其实控制面板就是一个这样的工具,只不过功能简单一些。
2.间接修改(比较安全)
将要修改的写入一个.reg文件中,然后导入注册表中。.reg文件的基本格式为:
REGEDIT4

[HKEY_LOCAL_MACHINE\Software\Super Rabbit\MagicSet]
"@"="Super Rabbit Magic Set For Windows 98 V2.92"
"a"=dword:00000001
"b"=hex:02,05,00,00
……
[HKEY_LOCAL_MACHINE\Software\SCC\QuickViewer]
……
第一行为“REGEDIT4”,必须大写。
第二行为空行。
第三行使用[]括起子键分支,其中HKEY_LOCAL_MACHINE\Software\Super Rabbit\MagicSet就是一个子键分支。
第四、五、六行是该子键下的设置数据。其中@表示注册表编辑器右窗格中的"默认"键。
以下类似。
这样做的好处是可以避免错误的写入或删除等操作,但是要求用户了解注册表的内部结构和.reg文件的格式。
3.直接修改(最不安全,但最直接有效)

就是通过注册表编辑器直接的来修改注册表的键值数据项,这样做会避免在注册表中留下垃圾(虽然都很小,但越来越多会拖慢系统速度),但是要求用户有一定的注册表知识,熟悉注册表内部结构而且一定要小心谨慎。