论坛: 电脑门诊 标题: WindowsNT注册表基础 复制本贴地址    
作者: windyway [windyway]    版主   登录
WindowsNT注册表基础

  用过Windows9x和NT的人都知道注册表的重要性,可是好多人往往搞不清何谓注册表。看着那些计算机高手,在你面前轻松地摆弄着那有点烦的注册表。你是不是又羡慕又嫉妒。呵呵!别急!看完我这篇文章后,相信您也会成为一个注册表高手。
  1、注册表的角色
  注册表代表一系列数据文件,主要用于帮助Windows NT对硬件、软件、用户坏境以及Windows的“外观与感觉”进行控制。在此之前,这类功能通常由WIN.lNI、SYSTEM.INl以及与不同应用程序关联在一起的.INI文件完成。
  对应用程序和操作系统的控制方法经历了三个不同层次的演变:
  (l)SYSTEM.INI和WIN.INl――若干年来,这两个文件一直都是操作系统各项控制功能的总管。从本质上讲,WlN.INI控制的是桌面和应用程序,而SYSTEM.INI控制的是软件。
  (2)由于WIN.INI和SYSTEM.INI文件的太小有所限制,因而,程序设计人员需要新增INI文件来对应用程序进行控制,以便获得更多的控制权,比如,在微软Excel的EXCEL.INI文件里,就包念了选项、设置、默认值等保证Excel正常运行的重要信息。
  (3)最初,注册表是应用程序和数据文件的关联索引文件,后来,发展为囊括了所有32位操作系统和应用程序的功能。尽管有些32位应用程序中仍包含有INI文件,但现已极为少见。对注册表来说,没有确切的大小限制,因为“控制面板”的“系统”这部分的设置可对其最大值进行调整。其值大到足以允许用户使用非常复杂的操纵系统和安装更多的应用程序。
  2、注册表的功能
  在上面我简单地介绍了注册表的由来,那么注册表到底能干什么事呢?
  概括的说大致分为两大功能:
  (1)注册表是连接OS和硬件、驱动程序的数据库。看这儿有人要有疑问了,注册表和数据库怎么搭上关系了?这是因为在NT中,注册表是作为保存驱动程序所有设置及位置的数据库来使用的。这个数据库的内容包括了很多东西,像驱动程序的位置、存放地址、版本号等信息。有了这些针对各种设备的信息,就可以通过驱动程序使用相应的设备了。呵呵,没有它OS就没法管理硬件。
  (2)注册表也是OS于应用程序关联的数据库。这就比较好解释了,当我们启动一个应用程序(工具软件、游戏)注册表就会象OS提供与这个应用有关的资料,以便找出这个应用程序,设置准确的数据文件位置以及启动其它必要设置。实际上,还不仅仅只有这些。注册表报存的信息还包括默认数据、附属文件位置、菜单、工具栏、窗口状态以及其它选项。另外,还有软件的安装日期、用户、版本号,有时还包括一个序列号。
  尽管注册表这样的复杂,涉及的又是计算机系统中很低级的部分,看起来一般的用户就改不了似的。但实际上只要稍微有点注册表知识的人,就可轻松地修改它(另外通过“控制面板”页也可以修改注册表的好多东西)。
  3、注册表的结构
  按照注册表的功能,我首先将注册表进行了如下的划分:
  (1)注册表控制的用户型功能部分
  其中又包括了“控制面板”、“桌面外观和图标”、“网络首选项”、“资源管理器的功能及特性”。
  (2)以电脑为基础的一些控制项目
  包括“访问控制”、“登录的身份验证”、“文件的打开和共享”、“网卡设置和网络协议”、“系统性能和虚拟内存的设置”。
  有了这些简单的了解,我们就可以学习了。
  前面说过,注册表是一种复杂的信息数据库。为了方便阅读、修改和管理NT的设计人员将它构思为一种层叠式结构。对于用过注册表编辑器的人来说,这种类似于资源管理器树状目录的结构,是显而易见的。一般这些数据信息是存储在\winnt\system32\config\下的注册文件中的。如果\winnt是默认安装目录的话,各用户的注册表信息则保存在\winnt\profiles\用户名\ntuser.dat。
  只有Administrators(管理员)或者Power user(超级用户)组内的成员才有权访问注册表文件。下面的这些文件通常叫“配置单元”(Hives):DEFAULT、SAM、SECURITY、SOFTWARE、SYSTEM、USERDIFF、USERDIFR、NTUSER.DAT。
  *CONFIG目录下的其它文件是注册表的附属文件。大多数附属文件都使用与配置单元文件名对应的文件名,只是扩展名不同。带有LOG和EVT扩展名的是事件查看(Event Viewer)器文件,可用事件查看器对它们进行检查。带有SAV扩展名的是作为Last Known Good(上次的正确系统配置)时引导进程的一部分保留下来的文件。
  4、控制项
  所有的信息都保存在配置单元里,但在注册表编辑器里,注册表条目需要在“控制项”(Handle Key)里显示出来,以便进行查看和编辑。控制项代表一些不同条目的组合,可使信息的查找与编辑变得更加方便。考虑到这个原因,所以注册表按照不同的控制项进行了划分。共有五个控制项:
  HKEY_LOCAL_MACHINE保存了使硬件、软件以及NT正常运行所需的设置。
  HKEY_CLASSES_ROOT包含了启动应用程序所需的全部信息。
  HKEY_CURRENT_CONFI针对当前硬件的配置。
  HKEY_USER只包含默认用户和登录用户的设置信息 。
  HKEY_CURRENT_USE只包含与当前登录用户有关的映射配置信息。
  控制项使注册表的编辑更加容易。尽管显示和编辑他们时,都把它们当做独立控制项对待,但实际上HKEY _CLASSES_ROOT和HKEY_ CURRENT_ CONFIG是HKEY_ LOCAL_MACHINE的一部分。HKEY_CURRENT_USER则只是HKEY_USERS的一部分。
  HKEY_LOCAL_MACHINE 包含所有的 HKEY_ CLASSES_ROOT 和 HKEY_CURRENT_CONFIG。每次引导计算机时,都会映射HKEY_CLASSES_ROOT 和 HKEY_CURRENT_CONFIG信息,使其便于观看和编辑。
  事实上,HKEY_CLASSES_ROOT就是HKEY_ LOCAL_MACHINE\SOFTWARE\CLASSES,但在HKEY_ CLASSES_ROOT窗口中对它进行编辑要容易得多,且不易混淆。HKEY_CURRRNT_CONFIG\SYSTEM\CURRENT CCONTROL SET则是从Hkey\local_MACHlNE\SYSTEM\CURRENT CCONTROL SET映射过来的信息。
  HKEY_USERS同时包含了默认用户信息以及当前登录用户的信息。启动域成员电脑并有一名用户登录进入的时候,HKEY_CURRENT_USER信息就会从域控制器自动取回,并将HKEY_CURRENT_USER的信息映射到成员的系统内存。同时,与其他未登录用户有关的信息不会发送到系统,而是仍然保存在域控制器。(在工作组或者一台未连网的单机中,由于没有域控制器,所以信息要取自本地配置单元。)
  5 、项和子项
   数据可以进一步划分为项和子项。之所以要把它设计成分级结构,是为了便于查看和编辑。每个项都组合了特定的信息,并根据其中的数据类型命名。如果一个项下方包含有子项,则它的文件夹图标内会出现一个加号(+),就像资源管理器一样,表示它下面还有更多的内容。如选择将其展开,文件夹图标的加号就会变成减号(-),并显示下一级子项。
  6 、 值和字串值
   注册表中,事实的设置时放在“值”里面的。这些值和结果数据是真正的控制项目,是注册表中最基本的组成部分。注册表内的数据有六种不同的类型,其中三种是建立在文本的基础上的。
   字串值:
   注册表中,“字串”代表的是文本或文字信息。它既可以是对文件类型进行说明的文字,也可以是硬件设备上的一个标签,甚至可以是登录时显示的一段文字。它可以是字母或数字信息,每个文本字串的最大长度通常是255个字符。
  (1)REG_SZ
   REG_SZ代表一个简单的文本字串。它是注册表中最常见的一种值类型,如图2.9所示,许多类型的信息都可输人“字串编辑器”(String Editor)对话框内。例如,可在其中输入说明文学、名称、标题、路径、指令
REG_SZ的条目也可以一个数字。可在REG_SZ中使用数学的一个例子是RGB颜色色码。根据RGB配色方案,白色用“255 255 255”表示;其中的三个数字分别代表红、绿、蓝三种原色的“浓度”,白色是全浓度;红色表示成“255 0 0”(红色采用全浓度,而且不配其他颜色);绿色是“0 255 0”;而蓝色是“0 0 255”其他所有颜色都是由这三种颜色组合而成。例如,浅绿色是“92 220 192”,而海军蓝则是“0 0 128”,在字串条目里面,数据、版本号以及许多其它类型的信息都要用数字信息表示。
  (2)REG_MULTI_SZ
   REG_MULTL_SZ条目允许将一系列项目作为单独的一个值使用。对于多种网络传输协议、多个项目、设备列表以及其他类似的列表条目来说,都可以使用REG_MULTL_SZ条目表示。
   通常要以列表形式表示的任何项目都应该采用REG_MULTI_SZ。REG_MULTI_SZ值内的项目拥有多个条目。如同时使用多个条目,则每个都单独占据一行。例如,可为单独一块网卡设置多个IP地址。
   (3)REG_EXPAND_SZ
   REG_EXPAND_SZ代表一个可扩展的字串。其编辑器和标准REG_SZ字串编辑器看起来相差无几,只是在变量用法上有所差异。在REG_EXPAND_SZ编辑器中输入变量时,系统会把它当作变量看待。激活它的时候,会用适当的文本替换这个变量。
   一个典型的例子是经常都要用到的%SYSTEMROOT%变量。激活它之后,会返回Windows NT文件所在具体目录。%USERNAME%也当作变量使用,已登录用户的名字就是它的具体数值。在注册表激活了%PROCESSORFAMILY%变量之后,它会返回Intel、Alpha、MIPS或PowerPC。
   注意:在要求使用变量条目(REG_EXPAND_SZ)的时候,如使用的是一个REG_SZ字串,那么注册表不会用正确的信息替换该变量,它只是将实际的变量简单地作为文本返回。
   (4)其他数据类型。
   其他三个条目都是数值条目。REG_DWORD,REG_BlNARY和REG_ RESOURCE_MAP 都允许用数值信息对硬件和软件项目的设置迸行定义。实际的数值数据可采用二进制、十六进制或十进制格式输入。针对同一个值,可通过三种不同的方式来观看它;具体采用哪种方式取决于数据的类型。而且要注意,每种方式都有自己的优缺点;特定的数据用某种形式观看也许会方便得多。比如,1OOMHz的处理器的时钟频率可分别表示为:二进制形式的1100011、十六进制形式的63以及十进制的99。显然,在这种情况下,用十进制要方便得多。而另一方面,选择关闭My Computer窗口内所有驱动器的显示时,十进制设置是67108863,而二进制方式是11111111111111111111111111(26个1),每个1都代表要关闭的一个驱动器号。在这种情况下,采用二进制方式进行编辑显然更为直观。
   [1]REG_DWORD
   REG_DWORD数据是32位信息,常显示成四个字节。在出错控制功能上用处极大,利用注册表的双字节(DWORD)编辑器可对它进行查看和编辑。此时采用二进制、十进制和十六进制格式均可。但是,在REGEDT32.EXE或REGEDIT.EXE主窗口里,常用十六进制的格式进行显示。
   双字节编辑器亦可用干配置应用程序和操作系统软件的32位组件,配置IRQ以及其他设置,并可配置日期。
   [2]REG_BINARY
   REG_BlNARY与REG_DWORD的区别在于,REG_BINARY可以是任意长度,而REG_DWORD必须在32个字节以内。大多数硬件组件信息都以二进制格式保存(即0和1),而且可以是任意字节长(每个字节都用一个二位数号码表示)。该数据既可显示成标准的二进制格式,又可以是十六进制,或者是像Windows NT Diagnostics的应用程序一样的易读型数据。
   对REG_BINARY信息进行编辑的方法是使用二进制编辑器。输人数据时一定要小心。一个错误的0或1都会导致整个条目出错,从而导致不可估量的损失。
   REG_BINARY条目不太常用。采用二进制格式的大多数条目都限制在32个字节以内,然后当作REG_DWORD条目使用。如果在输人REG_DWORD条目时,错把它输成REG_BINARY条目,它仍会无故障运行。REG_BINARY条目唯一的优势就是可以更长一些。
   [3]特制系统条目
  注册表内的REG_FULL_ RESOURCE_DESCRIPTOR值条目允许对硬件设备正在使用的实际设置进行查看和编辑。从各个不同位置上取出的数据会集中在一起,以便进行查看。这类条目通常位于HEKY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System项及其它封闲的值内。
  如某一特定设备(比如内存和网卡)不止一套完整资源描述符时,就要使用注册表内的资源列表(Resource Lists)值条目。此时,如图2.15所示,会出现一个小对话框,它允许选择想查看的资源列表类型。随后,会显示出相应的资源描述符对话框,允许对其中的条目进行查看与编辑。
   总结
   注册表的结构是建立在层叠或分级式信息数据库基础上的,操作系统利用其中的信息对自身进行配置,启用软硬件,以及为用户提供一个适当的操作界面。
  



地主 发表时间: 11/23 20:17

论坛: 电脑门诊

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号