自动启动服务

在系统引导期间,SCM 会启动所有自动启动服务及其依赖的服务。 例如,如果自动启动服务依赖于需求启动服务,那么需求启动服务也会自动启动。

加载顺序由以下内容决定:

  1. 加载顺序组列表中组的顺序。 此信息会存储在以下注册表项的 List 值中:

    HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\ServiceGroupOrder

    若要指定服务的加载顺序组,请使用 CreateServiceChangeServiceConfig 函数的 lpLoadOrderGroup 参数。

  2. 标记顺序向量中指定的组内服务的顺序。 此信息会存储在以下注册表项中:

    HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\GroupOrderList

  3. 针对每个服务列出的依赖项。

引导完成后,系统会执行由以下注册表项的 ImagePath 值指定的引导验证程序:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\BootVerificationProgram

默认情况下,不设置此值。 系统只是在第一个用户登录后报告引导成功。 可以提供引导验证程序来检查系统是否有问题,并使用 NotifyBootConfigStatus 函数向 SCM 报告引导状态。

成功引导后,系统会将数据库克隆保存在上次已知正常 (LKG) 配置中。 如果对活动数据库的更改导致系统重新启动失败,那么系统可以还原数据库的此副本。 以下是此数据库的注册表项:

HKEY_LOCAL_MACHINE\SYSTEM\ControlSetXXX\Services

其中,XXX 是保存在以下注册表值中的值:HKEY_LOCAL_MACHINE\System\Select\LastKnownGood

如果具有 SERVICE_ERROR_CRITICAL 错误控制级别的自动启动服务无法启动,则 SCM 将使用 LKG 配置重新启动计算机。 如果 LKG 配置已在使用,则引导会失败。

可以通过使用 SERVICE_CONFIG_DELAYED_AUTO_START_INFO 调用 ChangeServiceConfig2 函数,将自动启动服务配置为延迟的自动启动服务。 此更改将在下一次系统引导后生效。 有关详细信息,请参阅 SERVICE_DELAYED_AUTO_START_INFO