注册表(Registry)是Microsoft Windows中的一个重要的数据库,用于存储系统和应用程序的设置信息。早在Windows 3.0推出OLE技术的时候,注册表就已经出现。随后推出的Windows NT是第一个从系统级别广泛使用注册表的操作系统。但是,从Microsoft Windows 95操作系统开始,注册表才真正成为Windows用户经常接触的内容,并在其后的操作系统中继续沿用至今。
注册表的由来
在Windows 3.x操作系统中,注册表是一个极小文件,其文件名为Reg.dat,里面只存放了某些文件类型的
应用程序关联,大部分的设置是被放在win.ini、system.ini等多个初始化ini(inifile)文件中。由于这些初始化文件不便于管理和维护,时常出现一些因ini文件遭到破坏而导致系统无法启动的问题。为了使系统运行得更为稳定、健壮,Windows 95/98/me设计师们借用了Windows NT中的注册表的思想,将注册表概念引入到Windows 95/98/me操作系统中,而且将ini文件中的大部分设置也移植到注册表中,因此,注册表在Windows 95/98/me等操作系统的启动、运行过程中起着重要的作用。
作用
注册表是windows操作系统中的一个核心数据库,其中存放着各种参数,直接控制着windows的启动、硬件驱动程序的装载以及一些windows应用程序的运行,从而在整个系统中起着核心作用。这些作用包括了软、硬件的相关配置和状态信息,比如注册表中保存有应用程序和资源管理器外壳的初始条件、首选项和卸载数据等,联网计算机的整个系统的设置和各种许可,文件扩展名与应用程序的关联,硬件部件的描述、状态和属性,性能记录和其他底层的系统状态信息,以及其他数据等。
具体来说,在启动Windows时,Registry会对照已有硬件配置数据,检测新的硬件信息;系统内核从Registry中选取信息,包括要装入什么设备驱动程序,以及依什么次序装入,内核传送回它自身的信息,例如版权号等;同时设备驱动程序也向Registry传送数据,并从Registry接收装入和配置参数,一个好的设备驱动程序会告诉Registry它在使用什么系统资源,例如硬件中断或DMA通道等,另外,设备驱动程序还要报告所发现的配置数据;为应用程序或硬件的运行提供增加新的配置数据的服务。配合ini文件兼容16位Windows应用程序,当安装—个基于Windows 3.x的应用程序时,应用程序的安装程序Setup像在windows中—样创建它自己的INI文件或在win.ini和system.ini文件中创建入口;同时windows还提供了大量其他接口,允许用户修改系统配置数据,例如控制面板、设置程序等。
如果注册表受到了破坏,轻则使windows的启动过程出现异常,重则可能会导致整个windows系统的完全瘫痪。因此正确地认识、使用,特别是及时备份以及有问题恢复注册表对windows用户来说就显得非常重要。
注册表的数据结构
注册表由键(也叫主键或称“项”)、子键(子项)和值项构成。一个键就是分支中的一个文件夹,而子键就是这个文件夹当中的子文件夹,子键同样它也是一个键。一个值项则是一个键的当前定义,由名称、数据类型以及分配的值组成。一个键可以有一个或多个值,每个值的名称各不相同,如果一个值的名称为空,则该值为该键的默认值。
在注册表编辑器(regedit.exe)中,数据结构显示如下,其中,command键是open键的子键,(默认)表示该值是默认值,值名称为空,其数据类型为REG_SZ,数据值为%systemroot%/system32/notepad.exe"%1数据类型。
注册表的数据类型主要有以下四种:显示类型(在编辑器中)数据类型说明
REG_SZ:字符串:文本字符串(Registry String Zero)
REG_MULTI_SZ:多字符串值:含有多个文本值的字符串(Registry Multiple String Zero)
REG_BINARY:二进制数:二进制值,以十六进制显示,
REG_DWORD:双字值;一个32位的二进制值,显示为8位的十六进制值。
两个重要的分支:
1:用户个人数据[HKEY_CURRENT_USER](当前用户)
该分支中存放的是当前登录用户的个人个性化喜好设置、所用的软件的设置等个人数据。无论来宾、受限用户、高级用户还是管理员,都可以修改属于自己个人的注册表数据。用户个人的注册表数据就是“注册表编辑器”左侧窗格[HKEY_CURRENT_USER]主键下所包含的各子项和值项。
2:系统的核心数据[HKEY_LOCAL_MACHINE](本地计算机)
只有管理员权限的用户可以访问系统注册表数据,其中存放了系统中各项重要的核心设置数据。系统的注册表数据就是“注册表编辑器”左侧窗格显示的[HKEY_LOCAL_MACHINE]所包含的项、子项和值项。
相关术语
1:HKEY:“根键”或“主键”,它的图标与资源管理器中文件夹的图标有点儿相像。Windows 98将注册表分为六个部分,并称之为HKEY_name,它意味着某一键的句柄(Handle,先找的句柄才能继续往下找,先找到门把手才能打开门)。
2:key(键):它包含了附加的文件夹和一个或多个值。
3:subkey(子键):在某一个键(父键)下面出现的键(子键),
4:branch(分支):代表一个特定的子键及其所包含的一切。一个分支可以从每个注册表的顶端开始,但通常用以说明一个键和其所有内容。
5:value entry(值项):带有一个名称和一个值的有序值。每个键都可包含任何数量的值项。每个值项均由三部分组成:名称,数据类型,数据。
6:字符串(REG_SZ):顾名思义,一串ASCII码字符。如“Hello World”,是一串文字或词组。在注册表中,字符串值一般用来表示文件的描述、硬件的标识等。通常它由字母和数字组成。注册表总是在引号内显示字符串。
7:二级制(REG_BINARY):如F03D990000BC,是没有长度限制的二进制数值,在注册表编辑器中,二进制数据以十六进制的方式显示出来。
8:双字(REG_DWORD):从字面上理解应该是Double Word,双字节值。由1-8个十六进制数据组成,我们可用以十六进制或十进制的方式来编辑。如 D1234567。
9:Default(默认值或缺省值):每一个键至少包括一个值项,称为缺省值(Default;也被叫做默认值),它总是一个字串。