HKEY_CLASSES_ROOT其实就是HKEY_LOCAL_MACHINE/SOFTWARE/Classes,但是在HKEY_CLASSES_ROOT下编辑相对来说显得更容易和有条理。
HKEY_CLASSES_ROOT包含了所有应用程序运行时必需的信息:
--在文件和应用程序之间所有的扩展名和关联;
--所有的驱动程序名称;
--类的ID数字(所要存取项的名字用数字来代替);
--DDE和OLE的信息; (DDE 是Dynamic Data Exchange 即动态数据交换。OLE是Object Linking and Embedding的缩写,直译为对象连接与嵌入,学过VB的朋友可能知道VB中有一种控件就叫OLE对象,通过这个控件就可以调用其他格式的数据。其实,OLE技术在办公中的应用就是满足用户在一个文档中加入不同格式数据的需要(如文本、图像、声音等),即解决建立复合文档问题)
--用于应用程序和文件的图标;
注册表HKEY_CLASSES_ROOT键是系统中控制所有数据文件的项。这个在Win95和Winnt中是相通的。HKEY_CLASSES_ROOT控制键包括了所有文件扩展和所有执行文件相关的文件。它同样也决定了当一个文件被双击时起反应的相关应用程序。
在Windows用户图形界面下,每件事----每个文件,每个目录,每个小程序,每个连接,每个驱动---都被看做一个对象;每个对象都有确定的属性和它联系。HKCR包含着对象类型和它们属性的列表。HKCR主要的功能被设置为:
一个对象类型和一个文件扩展名关联
一个对象类型和一种图标关联
一个对象类型和一个命令行动作的关联
定义对象类型相关菜单选项和定义每一个对象类型属性选项
在Win95中,相关菜单就是当你鼠标右击一个对象时所弹出的菜单;属性就是当你选择属性项后一个展开的对话框。用简单术语来说就是在改变HKCR中的设置可以改变一个给定文件扩展名缺省的关联。改变一个文件类型的缺省图标,和添加或者删除给定对象类型的弹出菜单内容(或者所有的对象类型)
1.文件关联的破坏
现在网上病毒n多,其中有一类就是对文件的关联进行破坏,造成系统不能正常使用。
试看一例子:
症状:任何程序无法运行,出现错误提示。.bat或.com类文件无法运行,连注册表文件。reg
也无法导入。
其实上面就是.exe,bat.com.reg四种文件关联被破坏了。我们先来他们是 如何实现的。
一共有三种方法,但实质是一样的。
{注册表修改}
注册表[hkey_classes_root]是专门负责文件及文件夹关联的,其下有二种类型的子键:
(看图比较容易理解)
a类:如.bat,.ico之类的前面有个“."的扩展名,保存已注册文件的信息,他一般默认值 就是用来打开他的软件。如.rar的植就是winrar.而.exe,.bat.com.reg值分别为exefile, comfile,batfile,regfiel.
b类:以软件名为键值,部分后面还加fiel四个字母,其实这里储存的就是打开a类扩展名文件的 软件的信息。一般下面有两个项:
1。defaulticon键-------程序图标
2。sh#ll/open/command---就是软件如何运行,一般的值就是软 件的安装路径,后面加上("%1")
如winrar/sh#ll/open/command的值就是“d:/winrar/winrar" "%1"("%1"表示用软件本身打开)
exefile,batfile,comfile的值都是("%1" %*),regfile的值是regedit.exe "%1",这几个 默认值必须要记住,用来修复用的。
还有一些子键下面有”clsid“这个键,它的值是{00024512-0000-0000-c000-000000000046}这样格式的。 这些子键都是系统自带,捆绑的一些软件。注册表把这些软件的键值集中在[hkey_classes_
root/clsid] 键下,clsid键下都是{00024512-0000-0000-c000-000000000046}的子键,看的出来,这样的每个键就是每个系统软件信息存放的地方。只不过中间转了一下而以。
分析完[hkey_classes_root]两类键,就很容易更改了。只要把a类中.bat.exe.reg.com的默认值,或b类exefile,batfile,comfile的sh#ll/open/command的值更改,就会用指定的软件打开。如果值改为一些没意义的字母,比如我改为sfdsfdsfds,系统中没有这个软件,自然无法运行这些程序。如果把值改为一些cmd命令那么危险就增加了,可以制作一些简单的病毒。修复的方法当然
是把这些键值改为默认值就可以了。
{用cmd命令制成批处理命令}
例子: ftype exefile="%1" %*
看上面,ftype命令专门用来该文件关联的,exefile就是指定改的是哪一类型的文件,=后面的值就是用什么软件打开,("%1" %*)就是恢复他的默认值,自身可执行。
{用记事本修改注册表键值,保存为.reg文件,并把它导入就可以了。原理一样,只是语句上要注意}
.bat,.exe,.com的内容一样,看下面
regedit4 ----必须大写,不然 无法更改
[hkey_classes_root/comfile/sh#ll/open/command]--.com文件的打开程序
@="/"%1/" %*" ---@表示注册表中的默认值,用("")代替也行,不过两引号之间
不能有空格。"/"%1/" %*" 与注册表中的"%1" %*是一样的。
注:1.如果无法成功,一是regedit4没有大写。二可能这三行不要连在一起,中间隔一两个空行。
2.reg文件被更改,当然无法用这招。呵呵,能导入吗??
hkey_classes_root根键--文件夹右键菜单关联
hkey_classes_root/directory/ 和 hkey_classes_root/folder 都具有以下两项,
sh#ll---
sh#llex/contextmenuhandlers
1。举例:在右键添加快速重启菜单:必须在任一个sh#ll项下新建。
新建主键“快速重启”,在子键command的默认值为
c:/windows/rundll.exe user.exe,exitwindowsexec
2.shsh#llex 与 sh#ll不同之处在于两点:1,sh#ll下可以让我们新建。在directory/sh#ll下新建的,在驱动器右键
中不会出现,在folder/sh#ll下新建却可以在任何文件夹右键中出现。
2.sh#llex下的值都是象{750fdf0e-2a26-11d1-a3ea-080036587f03}这样的键。
文件关联的修复
1.常见的是exe文件关联被改,导致任何程序无法运行。
解决方法:1.最简单,平时用记事本编一个修复exe文件关联的.reg文件(方法参
考上面),导入注册表就可以了。
2.进入/windows/把regedit.exe 改名成regedit.com或regedit.bat,
然后进入regedit把.exe关联恢复成默认值("%1" %*)j即可。
3。把/windows/system32下的cmd.exe改名为cmd.com或cmd.bat,就
能进入cmd窗口用"ftype exefile="%1" %*修复。
4.用软件修复,如魔法兔子等。把软件改名。bat.com就可以运行了。
2。.exe,.bat.com关联都被更改,.reg也无法导入。
解决方法:(前提,能进入我的电脑或能进入任何一文件夹)
就是更改“文件打开类型”。
进入“我的电脑”,在窗口上方的“工具栏”菜单中选“文件夹选项”--文件类型窗口 中 ---已注册的文件类型 中找到.reg,更改他的打开方式,找到/windows下的regedit.exe,这样.reg 文件就有办法导入了,导入修复即可。
3.所有文件,文件夹关联都被改,连我的电脑,文件夹都进不去。可以用以下方法----文件关联终极修复
1.进入系统桌面。随便右键点击一文件,在右键菜单中选择“打开方式 “从列 表中选择程序”--确定--在“打开方式”窗口中选浏览,找到/windows/system32 下选择cmd.exe.(直接不能运行cmd.exe)
2。这样能打开cmd窗口,可以用ftype exefile="%1" %*命令恢复了。
3 。进入注册表,自己恢复.bat.com.reg的关联。或直接用软件修复,如魔法
兔 子,里面有个修复所有文件及文件夹特棒。
注:当然打开方式也可以不选cmd,直接选/windows下的regedit.exe,打开注册表就可以随便修改。