使用注册表编辑器查看注册表的 HKEY LOCAL MACHINE\SYSTEM
键下,会看到两三个常客,ControlSet001
和 ControlSet002
,当然了,还有一个,则是 CurrentControlSet
。在很多需要对注册表进行操作的场景下,都是操作 CurrentControlSet
而不是前两者。
在默认情况下,ControlSet001
中是系统真实的配置信息,CurrentControlSet
中则是运行时配置。Windows 启动时会从 ControlSet001
复制一份副 本,作为操作系统当前的配置信息。我们对于计算机配置所作的修改都是直接写入到 CurrentControlSet
,在重启过程中,Windows 会用 CurrentControlSet
的内容覆盖掉 ControlSet001
,以保证这两个配置数据集的一致。而 ControlSet002
中是“最近一次成功启动的配置信息”。当操作系统每成功启动一次(指成功登录),它都将 CurrentControlSet
和 ControlSet001
中的数据复制到 ControlSet002
中。
不过,这个顺序和数目不是一成不变的,改变就发生在使用过“最近一次的正确配置”之后。这个时候,系统会把 002 当作系统真实的配置信息,而 001 这个存在问题的控件组会被备份封存起来。HKEY_LOCAL_MACHINE\SYSTEM\Select
下记录着下次将要使用的配置。
Current
数据项表示 Windows 在这次启动过程中使用的控件组;Default
数据项表示 Windows 在下次启动时将使用的控件组,它与这次启动使用的控件组相同;LastKnownGood
数据项表示在启动过程中选择“最近一次的正确配置”时 Windows 将使用的控件组;Failed
数据项表示 Windows 在其中保存失败启动产生的数据的控件组。此控件组在用户第一次调用“最近一次的正确配置”选项之前并不实际存在。
在笔者的 Windows 10 上,打开注册表编辑器的话,会发现
ControlSet002` 也不存在,不知道是不是被 Windows 开发者给优化掉了。