Windows的隐秘守护者:服务控制管理器如何在背后默默运作?

当您启动Windows系统时,许多服务在背后默默运行,它们是操作系统稳定的重要基石。这些服务的启动和管理大多是由服务控制管理器(Service Control Manager,简称SCM)负责的。 SCM是一个特殊的系统过程,位于Windows NT系列操作系统之下,负责启动、停止及与Windows服务过程互动。

SCM的主要功能始于其主函数SvcCtrlMain(),它启动所有配置为自动启动的服务。

SCM的可执行档services.exe位于%SystemRoot%\System32\下,随着系统启动早期由Wininit进程启动。当SCM开始工作时,它首先会初始化已安装服务的内部数据库,该过程中会读取特定的注册表键。

具体而言,它通过读取以下两个注册表键来初始化内部数据库:

  • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ServiceGroupOrder\List,该键包含服务组的名称及其顺序。
  • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services,该键包含实际的服务和装置驱动程序数据。

SCM根据每个服务的Group值和依赖关系来确定服务的加载顺序。在这个过程中,如果发现循环依赖,SCM会记录错误并跳过依赖于后期加载组的服务。

SCM的下个步骤是检查应在系统启动期间启动的设备驱动程序是否成功加载,并将失败的驱动程序保存在名为ScFailedDrivers的列表中。

SCM接着会呼叫ScAutoStartServices()函数,该函数回圈检查所有标记为自动启动的服务,并依此启动它们。对于每个服务,SCM调用ScStartService()函数,确保服务的进程在正确的帐户下运行。如果服务不是在系统帐户内运行,那么SCM会调用LSASS函数LogonUserEx()来获取“秘密”密码,这些密码在服务最初配置时被安全储存。

不仅如此,还有一类特殊的服务——延迟自动启动服务。这类服务在Windows Vista中被引入,目的是解决系统启动过慢的问题。 SCM会在处理完所有非延迟自动启动的服务后,才开始初始化延迟自动启动的服务。

虽然这类服务的启动会有延迟,但除启动顺序外,它们与其他服务并无太大区别。

值得注意的是,SCM还专门处理设备驱动服务。这些服务的Type注册值为SERVICE_KERNEL_DRIVER或SERVICE_FILE_SYSTEM_DRIVER。当SCM调用ScStartService()时,它会进一步调用ScLoadDeviceDriver()函数来加载相应的驱动程序。

透过NtLoadDriver系统调用,SCM能够确保驱动程序正确加载。在初始启动过程中,SCM甚至还负责通知其他应用程式,如Windows档案总管,当网络驱动器的连接状态发生变化时,藉由广播Windows消息WM_DEVICECHANGE。

这样的设计让用户能够更好地管理其系统资源和服务,确保操作系统的良好运行。

然而,尽管SCM在系统起步时扮演着如此关键的角色,许多用户却并不真正了解它的运作机制。 SCM的每一个运作背后,都隐藏着复杂而高效的技术,实际上,它让用户可以无障碍使用那些看似平常的应用程式和服务。

在未来的Windows版本中,SCM将如何进化以满足越来越多样化的用户需求呢?

Trending Knowledge

自动启动服务的奥秘:Windows系统是如何加速启动的?
在当今的数位时代,快速启动和高效率的系统运作对于使用者来说至为重要。 Windows系统能够在短时间内启动众多服务,这背后隐藏着一个名为服务控制管理器(Service Control Manager,简称SCM)的系统过程。 SCM的运作对于提升系统启动速度至关重要,让我们来深入探索这一过程是如何进行的。 <blockquote> SCM 是 Windows N
蓝屏之谜:终止services.exe会发生什么惊人变化?
在现代的Windows作业系统中,Service Control Manager (SCM) 或 services.exe则是系统运行的核心组件之一。此过程负责启动、停止及与各种Windows服务进行互动。透过这个过程,系统能够管理所有安装的服务并确保在开机时它们按预设顺序正确启动。 <blockquote> 若

Responses