出处:IT专家网 作者:dragon 责任编辑:永恒 2007-09-28
通过注册表控制WFP和SFC
在这之前,我解释说注册表控制WFP的一般行为。你可以修改几个不同的注册表键值以控制WFP的行为。你可以在每次运行SFC直接操作这些键的一部分,其他一些有更低级别的功能。比如指定文件缓存或者安装文件的位置。
修改注册表可能是危险的。如果你做了一个错误的修改,可能会导致Windows的崩溃或者破坏你的应用程序,所以我强烈建议在尝试这一节中描述的任何技术之前,先对注册表做一个完整的备份。
为了访问SFC的注册表键,在Run命令中键入REFEDIT命令。这将打开注册表编辑器,现在浏览注册表树找到下面这个键:
HKEY_LOCAL_MACHINE \SOFTWARE \Microsoft \Windows NT \CurrentVersion \WinLogon
通常地,注册表中WinLogon键一般用来控制各种不同的启动选项。虽然许多SFC的选项都可控制SFC是否在启动的的时候运行,但微软已经将SFC相关的注册表键放在这个部分。
SFCDisabled
这个注册表键控制SFC是激活的还是无效的。实际上你只需通过改变DWORD的值,就可以得到四个不同的选项。缺省的DWORD值是0。这个设置激活SFC。通常你不需要改变这个值。然而,你可以在0到4之间修改这个值使得激活SFC但不让它弹出。
如果将内核调试器挂起,你最好关闭SFC。如果正在使用一个内核调试器,你可以将注册表键的DWORD值修改为1,这会关闭SFC并且会在以后的每次启动时都提示你是否再次激活SFC。
你也可以通过将DWORD值设为2来关闭SFC。这个选项只是在下次启动时关闭SFC。没有再激活SFC的选项,因为SFC将在这之后启动时自动激活。
SFCScan
在这之前,我解释了SFC的SCANONCE, SCANBOOT,和REVERT选项。只要你使用这些选项,实际上SFC是在修改SFCScan注册表键。你可以通过改变它的DWORD赋值来修改这个键。
默认的值是0。这个值的意思是不需要在启动时扫描受保护文件。这个设置相当于运行SFC /REVERT命令。
改变DWORD值为1,意思是在每次启动时都扫描受保护文件。设置SFCScan的值为1相当于运行SFC /SCANBOOT命令。
最后,设DWORD值为2就是告诉SFC在下次启动时扫描受保护文件,但并非以后的所有启动。这相当于运行SFC /SCANONCE命令。
SFCQuota
SFCQuota注册表键用来控制SFC文件缓存的大小。或许你会记得,之前在我谈到SFC /CACHESIZE=x 命令时,我提到关于文件缓存的默认大小,存在许多不一致的信息。然而在我的系统上,注册表键SFCQuota的DWORD值默认为0xffffffff。根据微软知识库,这个值对应文件缓存的大小为300 MB。同一篇知识库的文章指出通过修改这个值为FFFFFFFF,你可以缓冲存储所有受保护的系统文件。
SFCDllCacheDir
在这之前,我解释说Windows将DLLCACHE文件夹作为存储系统文件备份的地方。通常的,这个文件夹位于\WINDOWS\SYSTEM32目录下。不过通过修改SFCDllCacheDir注册表键,你可以修改文件缓存的位置。
文件缓存文件夹一般位于DLLCACHE目录下,但通过修改这个注册表键,你可以修改这个文件夹的位置。唯一需要注意的一点是你必须指定一个已经存在于本地硬盘驱动器上的地址。在Windows 2000里,你可以指定一个网络共享作为DLLCACHE的路径,但在Windows XP中没有这个选项。
SFCShowProgress
另一个与SFC相关的注册表键是SFCShowProgress键。这个注册表键允许你设置它的DWORD值为0,或1。缺省值是0,它将禁止显示SFC的进程情况。设值为1就可以让SFC显示进展情况。
源文件地址
在这之前,我解释了WFP和SFC是如何工作的,我指出在某些条件下你可能必须提供Windows安装CD或者有效源文件的拷贝。然而通过修改注册表,向Windows指明一个源文件目录是完全可能的,而无需Windows再向你询问这些文件。
这个注册表键在注册表的另一部分。你必须找到下面这个键:
HKEY_LOCAL_MACHINE \Software \Microsoft \Windows \CurrentVersion \Setup
一旦你找到了这个位置,通过使用一个驱动器符号或者路径或者一个UNC,你可以指定Windows系统文件的位置。
使用这个命令的前提是你必须将文件放在名为I386的目录中。例如,如果你的Windows系统文件位于一个名为C:\I386的目录中,那么你只需在注册表中指定路径为C:\,因为Windows假定I386这个目录是存在的。同样的,如果你打算使用一个UNC共享,I386文件夹必须存在于共享目录下。例如,如果你打算共享的目录名为FILES,你需要将I386文件夹放在FILES目录下。然后你可以告诉Windows在\\server_name\FILES目录下寻找共享文件。Windows将在\\server_name\FILES\I386目录中寻找系统文件。
出处:IT专家网 作者:dragon 责任编辑:永恒 2007-09-28