公告:本站正在遭受网络攻击,访问速度可能严重下降甚至无法访问。

注册表

来自BetaWorld 百科
跳转到导航 跳转到搜索

注册表(英语:Registry)是Microsoft Windows操作系统和其应用程序中的一个重要的层次型数据库,用于存储系统和应用程序的设置信息。

早在Windows 3.0推出OLE技术的时候,注册表就已经出现。但是,从Windows 95开始,注册表才真正成为Windows用户经常接触的内容,并在其后的操作系统中继续沿用至今。随后推出的Windows NT是第一个从系统级别广泛使用注册表的操作系统。

历史

前身

最初,Windows系统及应用程序的信息被存储在后缀名为ini的文本文件中,这就是注册表的前身。但是这么做有着致命弱点:因为每一个程序都会新安装一个或多个ini文件,来存储程序信息,导致信息的分布极为零乱;而且在16位系统下,ini文件的大小必须在64KB之内。所以ini文件被认为不便于使用和管理。

发布与发展

在最早出现于Windows 3.0的OLE技术出现后,微软为了存放系统中大量的软件组件信息,组织了一个reg.dat的数据库来存放这些信息。当时的注册表编辑器为16位版本的regedit.exe,功能较弱。

后来开发的Windows NT 3.1则更进一步使用相同的文件格式来存放系统的配置信息,以取代原有的ini文件。该系统为每一个用户在用户目录下创建了一个自身的注册表空间,而系统的设置被存放在系统文件夹中。由于Windows NT 3.1是一个32位操作系统,regedit.exe被升级为regedt32.exe,并增加了对权限的设置功能。

Windows 95中,注册表首次得到广泛应用,逐渐淘汰了原有的ini文件。程序在安装时,不再将数据写入ini文件,而直接写入注册表。为了最大限度兼容旧程序,部分原来用于读写ini文件的专门API函数仍然可用,但现在是访问注册表(写入或读取)。Windows 95为了保持和Windows 3.x系列的兼容性,注册表的架构与Windows NT不同,为此专门开发了另一个32位版本的regedit.exe,它没有设置权限的功能。

Windows 2000中,由于Windows 95家族已经深入人心,regedit.exe也得到广泛应用,相反regedt32.exe的界面相对比较丑陋,因此微软将windows 95系列的regedit.exe拿过来用。但由于移植过来的regedit.exe仍没有权限设置的功能,regedt32.exe仍然保留在系统中用作权限设置。

Windows XPWindows Server 2003中,regedit.exe已经增加了权限的功能,regedt32.exe由于失去作用而被剔除。同时,这个版本的注册表是64位的,这导致了一些兼容性问题,少数可以运行在旧版本Windows的程序在Windows XP中无法运行。

64位Windows的注册表

64位Windows中的注册表总体结构大致与32位版本相同,但32位程序的信息被放在HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node中。

数据结构

注册表由项(key)、子项(subkey)和值(value)构成。一个项就是树状数据结构中的一个节点,而项就是这个节点的子节点,子项熟语项。一个值项则是一个项的一条属性,由名称、数据类型和数据组成。一个项可以有一个或多个值,每个值的名称各不相同,如果一个值的名称为空,则该值为该项的默认值。

数据类型

注册表的数据类型主要有以下五种:

显示类型(在编辑器中) 数据类型 说明
REG_SZ 字符串 文本字符串
REG_BINARY 二进制数 不定长度的二进制值,以十六进制显示
REG_DWORD 双字 一个 32 位的二进制值,显示为 8 位的十六进制值
REG_MULTI_SZ 多字符串 含有多个文本值的字符串,此名来源于字符串间用 nul 分隔、结尾两个 nul
REG_EXPAND_SZ 可扩展字符串 含有环境变量的字符串

此外,注册表还有其他的数据类型,但是均不常用:

  • REG_DWORD_BIG_ENDIAN - DWORD 的大头版本,下面同理
  • REG_DWORD_LITTLE_ENDIAN
  • REG_FULL_RESOURCE_DESCRIPTOR
  • REG_QWORD - DWORD 的四字(64 位)版本
  • REG_FILE_NAME

注册表的分支结构

注册表有五个主分支,下面是这五个分支的名称及作用:

名称 作用
HKEY_CLASSES_ROOT 存储Windows可识别的文件类型的详细列表,以及相关联的程序。
HKEY_CURRENT_USER 存储当前用户设置的信息。
HKEY_LOCAL_MACHINE 包括安装在计算机上的硬件和软件的信息。
HKEY_USERS 包含使用计算机的用户的信息。
HKEY_CURRENT_CONFIG 这个分支包含计算机当前的硬件配置信息。

注册表的存储方式

Windows NT系列操作系统和Windows 9x系列的存储方式有很大区别。注册表被分成多个文件存储,称为Registry Hives,每一个文件被称为一个配置单元。

在早期的Windows 3.x系列中,注册表仅包含一个reg.dat文件,所存放的内容后来演变为HKEY_CLASSES_ROOT分支。

Windows NT家族的配置单元文件:

(未完待续)

参考

参见