什么是注册表?
注册表是一个庞大的数据库,用来存储计算机软硬件的各种配置数据。它是针对32位硬件、驱动程序和应用设计的,考虑到与16位应用的兼容性,在32位系统中仍提供*.ini文件配置方式,一般情况下,32位应用最好不使用*.ini文件。
注册表中记录了用户安装在计算机上的软件和每个程序的相关信息,用户可以通过注册表调整软件的运行性能,检测和恢复系统错误,定制桌面等。用户修改配置,只需要通过注册表编辑器,单击鼠标,即可轻松完成。系统管理员还可以通过注册表来完成系统远程管理。因而用户掌握了注册表,即掌握了对计算机配置的控制权,用户只需要通过注册表即可将自己计算机的工作状态调整到最佳。
Windows注册表也是帮助Windows操作系统控制硬件、软件、用户环境和操作系统界面的数据信息文件,注册表文件被包含在Windows操作系统目录下的两个文件:system.dat和user.dat。通过Windows操作系统目录下的regedit.exe程序能够存取注册表数据库。在Windows 95以前的更早版本中,这些功能是靠win.ini,system.ini和其他的应用程序有关联的.ini文件实现的。
在windows操作系统序列里,system.ini和win.ini这两个文件包含了操作系统的所有控制功能和应用程序的信息,system.ini管理计算机硬件,win.ini管理桌面和应用程序。所有驱动、字体、设置和参数会保存在.ini文件中,任何新程序都会被记录在.ini文件里。这些记录会在程序代码中被引用。因为受win.ini和system.ini文件大小的限制,程序员添加辅助的.INI文件以用来控制更多的应用程序。举例来说,微软的Word有一个word.ini文件,它包含着选项、设置、缺省参数和其他关系到Word运行正常的信息。在system.ini和win.ini中只需要指出word.ini的路径和文件名即可。
在还是使用Dos和Win3.x操作系统的时代里,大部分的应用程序都采用了ini文件(初始化文件)来保存一些配置信息,如设置路径,环境变量等。system.ini和win.ini控制着所有windows和应用程序的特征和存取方法,它在少数的用户和少数应用程序的环境中工作的很好。随着应用程序的数目的不断增加和复杂性的日益增强,则需要在.ini文件中添加更多的参数项。这样下来,在一个变化的环境中,在应用程序安装到系统中后,每个人都会更改.ini文件。然而,几乎没有一个人在删除应用程序后删除.ini文件中的相关设置,所以system.ini和win.ini这个两个文件会变的越来越大。每次增加的内容会导致系统性能越来越慢,在每次应用程序的升级都出现类似的难题:升级后会增加更多的参数项但是从来不去掉旧的参数设置。而且还有一个明显的问题,一个.ini文件的最大尺寸是64KB。为了能够解决这个问题,软件商自己开始支持自己的.ini文件,然后指向特定的ini文件,这样下来多个.ini文件影响了系统正常的存取级别设置。
注册表最初被设计为一个应用程序的数据文件相关参考文件,最后扩展成对32位操作系统和应用程序包括了所有功能下的东西。注册表是一套控制操作系统外表和如何响应外来事件工作的文件。这些“事件”的范围从直接存取一个硬件设备到接口,如何响应特定用户到应用程序如何运行等。注册表因它的目的和性质变的很复杂,它被设计为专门的针对32位应用程序工作,文件的大小被限制在大约40MB。利用一个功能强大的注册表数据库来统一集中地管理系统硬件设施,软件配置等信息,从而方便了管理,增强了系统的稳定性。
综合以上可知,注册表(Registry)是Windows9x/Me/NT/2000操作系统、硬件设备以及客户应用程序得以正常运行和保存设置的核心“数据库”;也可以说是一个非常巨大的树状分层结构的数据库系统。它记录了用户安装在机器上的软件和每个程序的相互关联信息;它包含了计算机的硬件配置,包括自动配置的即插即用的设备和已有的各种设备说明、状态属性以及各种状态信息和数据。
注册表产生的背景
在上个世纪90年代,计算机技术得到了飞速的发展,网络及操作系统的处理能力得到了不断的增强,新的可用计算机处理的信息也是接连不断,但是为了能更好地满足用户的需求,软件和硬件的开放性愈来愈强,大家能够按照自己的意志随意定制自己的系统。
操作系统的一个特点就是允许用户按照自己的要求对计算机系统的硬件和软件进行各种各样的配置。早期的图形操作系统,如Win3.x中,对软硬件工作环境的配置是通过对扩展名为.ini的文件进行修改来完成的,但INI文件管理起来很不方便,因为每种设备或应用程序都得有自己的INI文件,并且在网络上难以实现远程访问。
为了克服上述这些问题,在Windows 95及其后继版本中,采用了一种叫做“注册表”的数据库来统一进行管理,将各种信息资源集中起来并存储各种配置信息。按照这一原则,Windows各版本中都采用了将应用程序和计算机系统全部配置信息容纳在一起的注册表,用来管理应用程序和文件的关联、硬件设备说明、状态属性以及各种状态信息和数据等。
注册表具有如下的一些特点:
1.注册表能够对硬件、系统的配置参数、各应用程序和各设备的驱动程序进行跟踪配置,使得修改某些设置后不再重新启动成为可能。
2.在注册表中登录的硬件某些数据可以支持高版本Windows即插即用的特性。每当Windows检测到机器上有新的设备时,它就把有关数据存储到注册表中,另外,还可以避免新设备与原有设备间的资源冲突。
3.系统管理员和普通用户可以通过注册表编辑器在网络上检查系统的设置,使得远程管理能够实现。
在现在流行的WINDOWS操作系统便是能够让广大用户对自己的操作系统进行灵活配置并满足各种特定的需求。在以前很早的WINDOWS 3.x操作系统中,操作系统的配置信息都保存在.ini的文件中,例如SYSTEM.INI和WIN.INI,在系统初始化过程中打开这些文件,可对系统的软硬件进行各种各样的设置。在这几年来,在同一台计算机上配置的硬件及所要运行的应用程序越来越多,可安装的应用程序也在不断增加,而在系统配置文件中需存储的配置信息自然也会随着增加。这在某种程度上说是对系统配置文件的大小是个挑战,同时也在增加系统配置文件的管理难度。对于这种情况,各应用厂家或硬件提供商开始提供自己的*.ini文件,每个应用程序或硬件设置都带有自己的配置文件。随之带来的问题也就不用细说了,用户需要管理各种各样的*.ini文件,这对用户来说是非常的困难,况且这些文件都是存储在本机上,要实现远程管理是不可能的。为了能够解决这些问题,在后续的WINDOWS 95、98、NT和2000操作系统中,提供了一种管理配置信息的方法,也就是注册表的功能。
Windows的注册表实际上是一个数据库,它包含了五个方面的信息,即PC的全部硬件、软件设置、当前配置、动态状态及用户特定设置等内容,主要储存在C:windows下的system.dat和user.dat两个文件中。由此可见注册表是Windows系统的重中之重,稍有闪失,后果将是十分的严重。
在注册表中记录着用户安装在计算机上的软件和每一个程序的各种信息,用户能够通过注册表调整软件的运行性能。用户也能够修改配置,只需要通过注册表编辑器就可以完成。系统管理员还可以通过注册表来完成系统的远程管理。因而用户掌握了注册表,就可以掌握对计算机配置的控制权,只需通过注册表即可将自己计算机的工作效率调整至最佳状态。
注册表的基本结构介绍
不论是WINDOWS 95/98操作系统,还是WINDOWS NT/2000操作系统,其注册表的结构大体上是基本相同的,都是一种层叠式结构的复杂数据库,由键、子键、分支、值项和缺省值几部分组成。
注册表包括以下的5个主要键项:
1.HKDY_CLASSES_ROOT:包含启动应用程序所需的全部信息,包括扩展名、应用程序与文档之间的关系、驱动程序名、DDE和OLE信息,类ID编号和应用程序与文档的图标等。
2.HKEY_CURRENT_USER:包含当前登录用户的配置信息,包括环境变量、个人程序、桌面设置等。
3.HKEY_LOCAL_MACHINE:包含本地计算机的系统信息,包括硬件和操作系统信息,如设备驱动程序,安全数据和计算机专用的各类软件设置信息。
4.HKEY_USERS:包含计算机的所有用户使用的配置数据,这些数据只有在用户登录在系统上时方能访问。这些信息告诉系统当前用户使用的图标、激活的程序组、开始菜单的内容以及颜色、字体等。
5.HKEY_CURRENT_CONFIG:存放当前硬件的配置信息,其中的信息是从HKEY_LOCAL_MACHINE中映射出来的。
具体的说明请见如下的介绍:
一、HKEY_CLASSES_ROOT根键
HKEY_CLASSES_ROOT根键中记录的是Windows操作系统中所有数据文件的信息内容,主要记录了不同的文件的文件名后缀和与之对应的应用程序。当用户双击一个文档时,系统可以通过这些信息启动相应的应用程序。
HKEY_CLASSES_ROOT根键是由多个子键组成的,可分为两种:一种是已经注册的各类文件的扩展名,另一种是各种文件类型的有关信息。由于该根键包含的子键数目最多,下面就用Avifile子键简要介绍它下面的子键的含义:
1.CLSID子键
Avifile子键下的第一个子键是“CLSID”,即“分类标识”,在选中它时可以看到其默认的键值。Windows系统可用这个类标识号来识别相同类型的文件。在HKEY_CLASSES_ROOT主键下也有一个子键“CLSID”,其中包含了所有注册文件的类标识。
2.Compressors 子键
这个分支下面的两个子键auds和vids分别给出了音频和视频数据压缩程序的类标识,通过这些类标识可找出相应的处理程序,
(1) auds 子键
该子键位于HKEY_CLASSES_ROOT\avifile\Compressors\auds分支中,用于设置音频数据压缩程序的类标识。
(2) vids子键
该子键位于HKEY_CLASSES_ROOT\avifile\Compressors\vids分支上,用于设置视频数据压缩程序的类标识。
3.DefaultIcon 子键
该子键用于设置avifile的缺省图标。
4.RIFFHandlers子键
该子键用于设置RIFF文件的句柄。在该子键下包含了AVI和WAVE两个文件的类标识。
(1) AVI子键
这个子键位于HKEY_CLASSES_ROOT\avifile\RIFFHandlers\AVI分支上,用于设置AVI文件的类标识。
(2) WAVE子键
该子键位于HKEY_CLASSES_ROOT\avifile\RIFFHandlers\WAVE分支上,用于设置WAVE文件的类标识。
5.protocol子键
该分支下的子键中包含了执行程序和编辑程序的路径和文件名,
(1) StdExecute子键
该子键具有如下子键结构:
HKEY_CLASSES_ROOT\avifile\protocol\StdExecute\Server,它用于指定avifile的标准执行程序。
(2) StdFileEditing子键
该子键位于HKEY_CLASSES_ROOT\avifile\protocol\StdFileEditing分支上,用于设置标准文件编辑程序。
在这个子键下面有三个子键:
①Server子键
该子键位于HKEY_CLASSES_ROOT\avifile\protocol\StdFileEditing\Server分支上,用于指定编辑程序。
②PackageObjects子键
该子键位于HKEY_CLASSES_ROOT\avifile\protocol\StdFileEditing\
PackageObjects分支上,用于指定打开avifile的包对象编辑程序。
③verb子键
该子键位于HKEY_CLASSES_ROOT\avifile\protocol\StdFileEditing\verb分支上,用于设置打开标准avi文件编辑程序时的工作状态。
另外,还有“Handler”和“Handlers”两个子键。
6.Shell 子键
该子键位于HKEY_CLASSES_ROOT\avifile\Shell分支上,用于设置视频文件的外壳。
(1) Open子键
该子键具有如下子键结构:
HKEY_CLASSES_ROOT\avifile\Shell\Open\Command
它用于设置“打开”avi文件的程序。
(2) Play子键
该子键具有如下子键结构:
HKEY_CLASSES_ROOT\avifile\Shell\Play\Command,该键指定用于“播放”命令的程序。
7.shellex子键
该子键位于HKEY_CLASSES_ROOT\avifile\shellex分支上。该分支的子键中包含了视频文件的外壳扩展,在该子键下面有一个PropertySheetHandlers子键,用于设置“视频文件属性页”(Avi Page)的文件句柄。在PropertySheetHandlers 子键下面还有一个AviPage 子键,用于设置AviPage的类标识。
二、HKEY_CURRENT_USER根键
HKEY_CURRENT_USER根键中保存的信息(当前用户的子键信息)与HKEY_USERS\.Default分支中所保存的信息是一样的。任何对HKEY_CURRENT_USER根键中的信息的修改都会导致对HKEY_USERS\.Default中子键信息的修改。
三、KEY_LOCAL_MACHINE
HKEY_LOCAL_MACHINE根键中存放的是用来控制系统和软件的设置。由于这些设置是针对那些使用Windows系统的用户而设置的,是一个公共配置信息,所以它与具体用户没有多大关系。这个根键下面包含了五个子键:
1.HARDWARE子键
该子键包含了系统使用的浮点处理器、串口等有关信息。在它下面存放一些有关超文本终端、数字协处理器和串口等信息。HARDWARE子键又包括三个子键:
DESCRIPTION:用于存放有关系统信息;
DEVICEMAP:用于存放设备映像;
RESOURCEMAP;
2.SAM子键
该子键已经被系统保护起来,不可能看到里面的内容。
3.SECURITY子键
这个子键位于HKEY_LOCAL_MACHINE\Security分支上,该分支只是为将来的高级功能而预留的。
4.SOFTWARE子键
这个子键中保留的是所有已安装的32位应用程序的信息。各个程序的控制信息分别安装在相应的子键中。由于不同的机器安装的应用程序互不相同,因此这个子键下面的子键信息会有很大的差异。
5.SYSTEM子键
该子键存放的是启动时所使用的信息和修复系统时所需的信息,其中包括各个驱动程序的描述信息和配置信息等。System子键下面有一个CurrentControlSet子键,系统在这个子键下保存了当前的驱动程序控制集的所有信息。
四、HKEY_USERS根键
HKEY_USERS根键中保存的是默认用户(.DEFAULT)、当前登录用户与软件(Software)的信息。它的下面有三个子键:.DEFAULT子键、S-1-5-21-1229272821-436374067-1060284298-1000和S-1-5-21-1229272821-436374069-1060284298-1000_Classes三个子键,其中最重要的是.DEFAULT子键。
.DEFAULT子键的配置是针对未来将会被创建的新用户的。新用户根据默认用户的配置信息来生成自己的配置文件,该配置文件包括环境、屏幕、声音等多种信息。
.DEFAULT下有九个子键,介绍其中的几个:
1.AppEvents子键
它包含了各种应用事件(包括事件名称、描述以及各种系统功能的声音)的列表。其下面又包含两个子键EventLabels(按字母顺序列表)和Schemes(按事件分类列表)。
2.Control Panel子键
它所包含的内容与桌面、光标、键盘和鼠标等设置有关。改变它们的键值就将改变对应的工作环境或参数。
3.keyboard layout子键
该子键位于HKEY_USERS\.DEFAULT\keyboard layout分支上,用于设置键盘的布局,如键盘语言的加载顺序等。该子键下面提供有如下三个子键:
preload子键
(1)该子键位于HKEY_USERS\.DEFAULT\keyboard layout\preload分支上,用于设置键盘语言的加载次序。Preload子键下面的子键个数与系统中所安装的键盘语言有关。
(2)Substitutes子键
该子键位于HKEY_USERS\.DEFAULT\keyboard layout\substitutes分支,用于设置可替换的键盘语言布局。在通常情况下,此子键的设置是空的。
(3)Toggle子键
该子键位于HKEY_USERS\.DEFAULT\keyboard layout\toggle分支上,用于选择键盘语言。
五、HKEY_CURRENT_CONFIG根键
如果你在Windows中设置了两套或者两套以上的硬件配置文件(Hardware Configuration file),则在系统启动时将会让用户选择使用哪套配置文件。而HKEY_CURRENT_CONFIG根键中存放的正是当前配置文件的信息。
参考资料:http://www.uu93.com/