扫一扫
关注微信公众号

从零讲起 彻底走出注册表应用的迷雾(2)
2006-06-12   天极

  三个疑问让你认清注册表的真面目

  1.为什么一定要使用注册表

  或许你会问,注册表既复杂,修改不当又容易引发系统故障,而DOS或早期的Windows没有注册表却也能正常工作,那么现在的Windows一定需要注册表呢?

  DOS是一个纯命令操作平台,没有图形界面,一切输入均通过命令的方式来解决。要打开文本文件1.txt需要输入“edit 1.txt”命令才行,也就是说“要打开什么文件”,“用什么程序打开此文件”这些问题都必须由你来告诉计算机。而现在的Windows系统中,要打开1.txt的属性只需在“资源管理器”双击此文件即可,你只要指定要打开的文件,计算机就会根据你要打开的文件类型自动选择合适的应用程序进行操作,这种智能的打开方法就是由注册表中保存的“文件关联”数据(出了“文件关联”外,注册表还存放了其他很多重要的设置数据)。这种发展是由计算机的复杂性决定,在DOS时代可能无需这种机制,但如果现在Windows没有“文件关联”,那成千上万种文件类型一定会让你看眼花。

  2.注册表的“妈妈”是谁

  Windows设计之初,并没有采用注册表这种方式来存放软硬件配置信息,而是使用了两个扩展名为INI的文件(system.ini和win.ini)。对于INI文件大家应该很熟悉了,很多“绿色软件”都声称其不在注册表中写入任何数据,但大多会在其安装目录下留下一个或几个INI文件。既然当初使用的是INI,为什么后来又改成注册表了呢?这是因为INI文件有一个致命的弱点就是大小不能超过64KB,随着软硬件功能的日益进步,其所需的配置数据体积也在不断膨胀,INI文件早已无法满足这种数据量的要求了。另外INI其实是依据某种定义规范的文本文件,编辑过程极易出错并由此导致系统故障,为了克服这些问题,在Windows 95及其后的版本中,Window系统都无一例外的采用了注册表机制,并将原来由多个INI组成的软硬件配置信息统一到了一起,形成一个数据库,那就是注册表。

  3.注册表的家在哪里

  既然注册表是一个数据库,那么这个数据库文件在那里呢?其实,难怪不少刚接触电脑的朋友误以为regedit.exe就是注册表,这是由于对注册表数据库的组成不清楚而造成的。Windows 98注册表的数据文件主要由System.dat和User.dat这两个文件组成,并保存在C:Windows目录下,其中System.dat存储的是系统和硬件相关的配置,而User.dat则保存软件配置和用户配置,Windows 2000/XP注册表的数据文件主要存储在%Windir%System32config目录中的Default,Sam,Security,System,software和Userdiff等6个文件中,除此之外,还有部分数据保存在用户的配置文件目录中,比如Window 2000/XP中的Administrator的部分注册表数据就保存在C:Documents and SettingsAdministrator目录的Ntuser.dat文件中,所以只需要Administrator登陆系统后其目录下的NTUSER.DAT就不能被删除,因为它已经被加载到注册表中了。

  两个知识点理清错综复杂的注册表脉络

  1.查查注册表元素的身份证

  运行regedit.exe打开“注册表编辑器”,就能在其左侧看到注册表的分支结构,其中以文件夹方式表示的称为“键”,而在选中一个键后在窗口右侧显示的则称为“项”。在网上搜索到的修改教程中经常会提到“根键”,“主键”,“子键”,“键值项”,是什么意思呢?

  ①根键(Root Key)是指在注册表编辑器左侧以“HKEY”作为名称前缀的位置,因其位于注册表最项层被称为根键,如Windows XP的注册表中包括五大根键,分别为HKEY_CLASSES_ROOT,HKEY_CURRENT_USER,HKEY_LOCAL_MACHINE,HKEY_USERS和HKEY_CURRENT_CONFIG。这些根键都可所写的,譬如HKEY_CLASSES_ROOT就可以简写为HKCR,其它的则以此类推。

  ②主键(Main Key)是指根键下面于根键最近的键,主键通常包括一个或多个子键或键值,如图中HKEY_LOCAL_MACHINE包括5个主键。

  ③子键(Sub Key)的位置是相对的,并不固定。某个键下面包含的另一个键则称它为前者的子键。但主键则不能称为根键的子键,这种以相对位置关系来命名的方式不能用于根键和主键。

  ④键值项(Value entry)是指显示在“注册表编辑器”右侧的项目,每个键值项包括名称,类型和数据三部分。键值项的名称可以由任意字符,数字,代表符和空格组成,但不能使用反斜杠。不同键值,主键和子键的键值项可以同名,但同一键中的键值项不能同名。键值项所定义的内容即为该键值项的值(即“键值”),其中最多能存放64KB的数据。值的数据类型可以是字符串,二进制值,DWORD(双字节)值等。

  小提示:上面的描述方法较为规范,平时我们还习惯将“子键”称为“分支”,而将“键值项”简称为“项”,这些称谓没有本质区别,只是叫法习惯不同罢了。

  2.真正的根键只有两个

  Windows 98的注册表有6个键值,而Windows 2000/XP/2003系统的根键数则是5个,但这些根键中只有HKEY_LOCAL_MACHINE和HKEY_USERS是真正的注册表键,其它几个键值都是从这两个根键的某个分支映射出来的,相对于这两个根键深层分支的一个快捷方式或者别名,主要是为了方便用户操作。

  ⑴HKEY_LOCAL_MACHINE

  这个根键存储的是安装在当前计算机上的硬件和软件配置信息,比如硬件设备的驱动程序,特定软件设置和Windows系统安装配置等数据。这些信息对当前系统中的所有用户均保持一致。这个根键下面还有5个重要的主键,其中Software和System最为关键,平时对系统进行相关调整大多集中在这两个键上。

  ①Software子键:保存于这台电脑中安装的应用程序和相关的设置,许多应用程序都使用该键值保存特定设置。关于Windows的许多设置都存在于HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersion中。

  ②System子键:在这里精确的确定了Windows所装载的设备驱动程序和服务,以及当Windows启动时所使用的各种参数(如在网络上的计算机名称和当前硬件配置恩见)。

  ⑵HKEY_USERS

  HKEY_USERS包含有电脑特定用户的配置数据,Windows在此根键下的一个子键中为登陆该电脑的每个用户存储配置数据。如果电脑只有一个用户使用,那么所看到的就是单独一个子键,称为“.DEFAULT”

  而HKEY_USERSS-1-5-21-1078081533-1202660629-1343024091-500(不同的电脑不一样)则是当前登陆用户的配置数据,其中S-1-5-21-1078081533-1202660629-1343024091-500就是这个目前登陆用户的SID,每一个网络上的用户都被域用户管理器分配了一个SID,每个SID是唯一的,所以它依赖于登陆用户,其分支数据是从用户配置文件的Ntuser.dat文件调出的

热词搜索:

上一篇:从零讲起 彻底走出注册表应用的迷雾(1)
下一篇:从零讲起 彻底走出注册表应用的迷雾(3)

分享到: 收藏