Windows 注册表里的 ControlSet

使用注册表编辑器查看注册表的 HKEY LOCAL MACHINE\SYSTEM 键下,会看到两三个常客,ControlSet001ControlSet002,当然了,还有一个,则是 CurrentControlSet。在很多需要对注册表进行操作的场景下,都是操作 CurrentControlSet 而不是前两者。

在默认情况下,ControlSet001 中是系统真实的配置信息,CurrentControlSet 中则是运行时配置。Windows 启动时会从 ControlSet001 复制一份副 本,作为操作系统当前的配置信息。我们对于计算机配置所作的修改都是直接写入到 CurrentControlSet,在重启过程中,Windows 会用 CurrentControlSet 的内容覆盖掉 ControlSet001,以保证这两个配置数据集的一致。而 ControlSet002 中是“最近一次成功启动的配置信息”。当操作系统每成功启动一次(指成功登录),它都将 CurrentControlSetControlSet001 中的数据复制到 ControlSet002 中。

不过,这个顺序和数目不是一成不变的,改变就发生在使用过“最近一次的正确配置”之后。这个时候,系统会把 002 当作系统真实的配置信息,而 001 这个存在问题的控件组会被备份封存起来。HKEY_LOCAL_MACHINE\SYSTEM\Select 下记录着下次将要使用的配置。

  • Current 数据项表示 Windows 在这次启动过程中使用的控件组;
  • Default 数据项表示 Windows 在下次启动时将使用的控件组,它与这次启动使用的控件组相同;
  • LastKnownGood 数据项表示在启动过程中选择“最近一次的正确配置”时 Windows 将使用的控件组;
  • Failed 数据项表示 Windows 在其中保存失败启动产生的数据的控件组。此控件组在用户第一次调用“最近一次的正确配置”选项之前并不实际存在。

在笔者的 Windows 10 上,打开注册表编辑器的话,会发现 ControlSet002` 也不存在,不知道是不是被 Windows 开发者给优化掉了。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注