一 注册表的由来
在微软公司的Windows刚刚出现的时候,系统的配置文件主要采用.INI文件的方式,如system.ini,win.ini,配置文件主要用于帮助Windows 对硬件、软件、用户坏境以及Windows的外观进行控制。 .INI文件中用方括号来括住条目,是文本文件,可以直接用文本编辑器进行编辑和修改.INI文件的一个缺点就是不支持条目的嵌套,以及包含非纯文本信息。由于WIN.INI和SYSTEM.INI文件的太小有所限制,因而,每个程序的配置信息单独写在独 立的.INI文件中来对应用程序进行控制,以便获得更多的控制权。随着应用程序的增多,系统目录的.INI文件的数目也急剧增加,为了方便集中管理,就出现了注册表。最初注册表仅仅是应用程序和数据文件的关联索引文件,到了windows 2000,xp的时代,系统的配置信息完全转移到了注册表中,基本囊括了所有32位操作系统和应用程序的功能,基本上放弃了.INI文件(当然为了兼容,还可以支持.INI文件)。
注册表是Windows中使用的中央分层数据库,用于存储为一个或多个用户、应用程序和硬件设备配置系统所必需的信息。注册表包含 Windows 在运行期间不断引用的信息,例如,每个用户的配置文件、计算机上安装的应用程序以及每个应用程序可以创建的文档类型、文件夹和应用程序图标的属性表设置、系统上存在哪些硬件以及正在使用哪些端口。
注册表取代了 Windows 3.x 和 MS-DOS 配置文件(例如,Autoexec.bat 和 Config.sys)中使用的绝大多数基于文本的 .ini 文件。虽然几个 Windows 平台都有注册表,但这些平台的注册表有一些区别。 注册表数据存储在二进制文件中。
二 注册表逻辑结构和文件组成
注册表提供了一个安全,统一的数据库,用来以一个层次结构来保存配置信息。注册表中的每一个主键和一个.INI文件中的用方括号括住的条目一样。 注册表储存了5个根键,根键不能增加或者删除:
HKEY_CURRENT_USER 储存当前登陆用户相关的信息
HKEY_USER 储存机器上所有帐号的信息
HKEY_CLASSES_ROOT 储存与文件相关的信息和COM对象注册信息
HKEY_LOCAL_MACHINE 储存系统相关信息
HKEY_CURRENT_CONFIG 储存关于当前硬件配置的一些信息
在Windows 2000 和 Windows NT 有两个版本的注册表编辑器,Regedt32.exe 和Regedit.exe,可以用来修改注册表。从Windows xp开始统一使用Regedit.exe,这2个程序没有任何区别。 以后我也仅仅提到Regedit.exe,如果在Windows 2000的环境中,有时需要用Regedt32.exe来代替我提到的Regedit.exe。 运行Regedit.exe,可以看到系统提供的一个总的呈现一个树状的结构的注册表的视图,但是实际上注册表分别存放在多个注册表文件中。在磁盘上,注册表不是简单的一个大文件,而是一个集合,由称为“注册表配置单元(hive)”的分散的文件组成。每 个注册表文件包含一个注册表树,有一个键作为树的根或者说是起点,子键及其键值都在根下。一个注册表文件称为一个注册表配置单元Hive,也就是说一系列的Hive文件构成了整个注册表。那么整个注册表到底有哪些文件组成呢?打开Regedit.exe, 进入HKLM\SYSTEM\CurrentControlSet\Control\hivelist\,这个键列举了除了其他用户配置外的所有的注册表文件。所有注册表文件的路径名都被写入到配置管理器。当配置管理器装载注册表文件(包括系统配置文件) 时,将每个注册表文件的路径记录在子键HKLM\SYSTEM\CurrentControlSet\Control\hivelist下,当注册表文件卸载时,路径被删除。配置管理器创建根键,并将这些注册表文件链接一起,构造出注册表编辑器所显示的注册表结构。
注册表主要由下列文件组成:Windows目录中的system32\config目录里面的SECURITY,software,system,default,SAM,以及系统盘下面的\Documents and Settings\%USERNAME%\NTUSER.DAT文件和\Documents and Settings\%USERNAME%\Local
Settings\Application Data\Microsoft\Windows\Usrclass.dat文件。
其中HKEY_LOCAL_MACHINE\SAM 这个键对应着文件Sam,这个文件保存了本地帐号和组信息,如用户密码、组定义和与域(域,是指在一台或多台相关联的主机控制下的网络资源。)相关的信息。Windows 2000服务器系统作为域控制器,在Active Directory 中储存了帐号和组,Active Directory 是一个储存域范围的设置和信息的数据库。另外,SAM键包含的安全描述信息在缺省时,被配置成甚至管理者帐号都不能访问,但可以修改成管理者可读。sam文件是windows 的用户帐户数据库,所有NT用户的登录名及口令等相关信息都会保存在这个文件中。sam文件可以认为类似于unix系统中的passwd文件,不过没有这么直观明了。 HKEY_LOCAL_MACHINE\SECURITY 这个键对应着文件Security,这个文件储存了系统范围的安全策略和用户权限分配。 HKLM\SAM 链接到 SECURITY 的子键 HKLM\SECURITY\SAM 。缺省时,不可以察看 HKLM\SECURITY 或者 HKLM\SAM\SAM的内容,因为那些键的安全性设置成只允许系统帐号访问。 HKEY_LOCAL_MACHINE\SOFTWARE 这个键对应着文件Software,这个文件记录了系统中Windows本身的配置信息和第三方应用程序储存他们的系统范围的设置,如应用程序的文件和目录的路径,授权和有效期信息。 HKEY_LOCAL_MACHINE\SYSTEM 这个键对应着文件System,这个文件主要记录了引导系统时需要的系统范围的配置信息和Windows的硬件的安装信息,如装载哪些设备驱动程序和启动哪些服务。这些信息是启动系统的关键。 HKEY_USERS\.DEFAULT 这个键对应着文件Default,这个文件记录了当你新创建一个用户时,关于这个用户的缺省设置。 HKEY_CURRENT_USER 这个键对应着硬盘文件\Documents and Settings\username\Ntuser.dat,包含与当前登陆用户的性能和软件配置相关的数据。
HKEY_CLASSES_ROOT包含了两个类型的信息:文件扩展名相关信息和COM类登记信息,数据有两个来源:
A. 每一个用户类登记信息在HKCU\SOFTWARE\Classes,对应硬盘文件\Documents and Settings\username\Local Settings\ApplicationData\Microsoft\Windows\Usrclass.dat。
B. 登记信息系统范围的类在HKLM\SOFTWARE\Classes。 增加每个用户类登记信息是Windows 2000的一个新特点,将用户的登记信息与系统范围分开,因此分开的配置文件可以包含用户定制信息。它同时还关闭了一个安全漏洞:微软Windows NT 4,没有权限的用户可以修改或删除HKEY_CLASSES_ROOT下的键,因此影响系统上应用程序的操作。Windows 2000,没有权限的用户和应用程序可以读系统范围的数据,但只可以修改它们私有的数据。
HKEY_CURRENT_CONFIG只是链接到储存当前硬件配置的HKLM\SYSTEM\CurrentControlSet\Hardware Profiles\Current。硬件配置允许管理者为各种基本系统驱动程序配置设置,尽管一次引导,潜在的配置有可能改变,但应用程序总可以通过这个键引用当前活动的配置。
对应于每个注册表文件,还有一个相应的LOG文件,这个文件是为了防止正在更改注册表文件的时候系统突然出错而使用的日志文件,日志文件可以保证注册表文件修改的一致性。
三 注册表文件的备份和恢复
由于注册表文件对于操作系统是如此的重要,丢失或者毁坏注册表文件会导致系统无法启动。简单说一下注册表文件的手工备份。在Windows 2000,XP正在使用注册表时,这时候注册表文件是完全锁定的,是不能把当前注册表复制回去的,因此要使用copy或xcopy来修复注册表,就必须关闭Windows 2000,XP并启动另外一个诸如DOS,Windows 98/Me类的操作系统,或者第二个Windows XP,然后用xcopy复制%SystemRoot%\System32\Config目录下的当前所有的注册表文件。
windows 2000,xp在最初安装过程中创建并保存了一份系统注册表的备份,在windows目录的repair目录,system,software,sam,security,default,ntuser.dat,这份注册表不包括安装之后发生的任何更改和 设置。 对于由于注册表损坏而不能启动的Windows 2000,xp系统,即使以前没有系统备份的话(如果有自动系统故障恢复 (ASR) 备份,则该备份是进行还原的首选方法)还是可以把系统恢复起来。步骤如下:
1 启动系统。如果安装了故障恢复控制台,可以从故障恢复控制台启动,或者用Windows 9x的启动盘,或者使用WinPE制作的光盘,最后实在不行还可以拆下硬盘,安装到别的Windows中。
2 备份注册表配置单元。假设有故障的Windows系统的目录在X盘的windows目录,使用如下的批处理命令:
X:
cd \windows
md tmp
copy x:\windows\system32\config\system x:\windows\tmp\system.bak
copy x:\windows\system32\config\software x:\windows\tmp\software.bak
copy x:\windows\system32\config\sam x:\windows\tmp\sam.bak
copy x:\windows\system32\config\security x:\windows\tmp\security.bak
copy x:\windows\system32\config\default x:\windows\tmp\default.bak
3 恢复到最初安装的注册表配置单元。看情况,可能只需要替换一两个配置单元,也可能必须替换所有5个注册表配置单元(这是因为软件和硬件可能在注册表中多个位置具有设置,如果您只替换一两个配置单元,则可能导致潜在问题)。如果不确定的话,可以一个一个的逐
渐替换,直到系统可以运行。下面的批处理文件替换了所有5个注册表配置单元:
delete x:\windows\system32\config\system
delete x:\windows\system32\config\software
delete x:\windows\system32\config\sam
delete x:\windows\system32\config\security
delete x:\windows\system32\config\default
copy x:\windows\repair\system x:\windows\system32\config\system
copy x:\windows\repair\software x:\windows\system32\config\software
copy x:\windows\repair\sam x:\windows\system32\config\sam
copy x:\windows\repair\security x:\windows\system32\config\security
copy x:\windows\repair\default x:\windows\system32\config\default
4 重新启动计算机,看看Windows能否正常运行。
5 运行Regedit.exe,加载刚刚备份的旧的注册表配置单元文件,修正可能的错误。
这个步骤比较困难,需要对注册表非常熟悉,才能办到。用鼠标选中HKEY_LCOAL_MACHINE或者HKEY_USERS两个根键之一,然后打开文件菜单,执行其中的Load Hive命令,选择在第2步中备份的需要修改的注册表配置单元文件,修正里面的错误或者导出需要的内容。
四 自动备份
1 使用xp 的系统还原 ,2k没有这个功能
2 使用erunt , xp 2k 都可以 http://home.t-online.de/home/lars.hederer/erunt
五 通过注册表文件Sam获取管理员权限
下面特别说一下关于SAM(用户帐户数据库)的问题,在Windows 2000中,如果忘记了系统管理员的口令,可以先用其他的方式启动系统,如WinPE的光盘,或者Win9x的dos启动盘等等,然后把system32\config\sam文件改名,然后正常启动,这时候系统管理员的Administrator的口令 自动为空(当然其他用户的帐号都不可用)。 从windows xp开始,这种方法不再适用,删除sam文件会导致windows xp 和windows 2003不能启动,可以通过复制repair\sam文件来使得管理员口令被恢复到最初安装的时候,如果当时没有输入口令,那么就是空口令了。可以使用linux下的工具修改sam中的口令,适用于2k,xp,2k3。
ps:我看了这个贴子后,使我对注册表又有了一些了解,以前一直以为注册就在WINDOWS系统目录下面,但他又只有100多k大小,不知道是怎么回事!对于上面的命令:
QUOTE:
copy x:\windows\repair\system x:\windows\system32\config\system
copy x:\windows\repair\software x:\windows\system32\config\software
copy x:\windows\repair\sam x:\windows\system32\config\sam
copy x:\windows\repair\security x:\windows\system32\config\security
copy x:\windows\repair\default x:\windows\system32\config\default
其实我们可以用他来进行系统恢复,他可以把系统恢复到初始状态,因为在系统安装时这个repair文件夹是系统自动生成的,保存了当前系统的各种配置信息,如software文件保存的是软件配置信息!这种方法最初是在电脑爱好者上面看到的,我也用过几次,我是通过故障恢复控制台进行使用的,系统是一步一步安装的那种!给同学恢复了后说不能打游戏,但另一个不打游戏的用得好好的!根据不同的系统效果不同的!各位可以试试看!
其实现在我觉得注册表并不是很神秘的,我第一次修改注册表,在一次使用优化大师的时候,使用其注册表清理功能,我就按照里面的位置一步一步地进入了注册表进行查看,他清理注册表还是就是几个经常存储垃圾注册表信息的地方,如machine\software\microsoft\windows\current version子键下的run.runonce分支等!