服务控制管理器

计算机领域名词

服务控制管理器(Service Control Manager,简称SCM)是Windows NT操作系统中的特殊系统进程,其控制Windows服务进程的启动、停止和交互。[1]它的可执行文件位于 %SystemRoot%\System32\services.exe。服务进程与SCM的交互通过已定义的API完成,同一API也被交互式Windows服务管理工具使用,例如MMC扩展Services.msc命令行的服务控制实用工具sc.exe

实现

延迟的自动启动服务

延迟的自动启动服务在Windows Vista中被添加,目的是解决系统启动耗时过长的问题,以及提高关键服务的启动速度。[2]在设计之初,自动启动的服务初始化方法是为其他应用程序和服务依赖的基本系统服务所涉及。SCM仅在处理所有非延迟的自动启动服务后初始化延迟服务(调用 ScInitDelayStart() 函数)。此函数用工作线程延迟并排队工作项(默认120秒)。除在延迟之后初始化,延迟与非延迟的自动启动服务没有其他区别。

设备驱动程序

注册表值Type(类型)为SERVICE_KERNEL_DRIVERSERVICE_FILE_SYSTEM_DRIVER的服务会被特殊处理:这代表其为设备驱动程序,ScStartService() 会调用 ScLoadDeviceDriver() 函数来加载相应的驱动程序(通常是扩展名为 .sys 的文件,大多位于 %SystemRoot%\System32\Drivers\ 目录)。为了此目的,NtLoadDriver系统调用已被引用,SeLoadDriverPrivilege也已添加到SCM进程。

网络驱动器

SCM还提供了一个与Windows服务无关的额外功能:它会在一个网络驱动器连接被创建或删除时通知图形用户界面应用程序(例如Windows Explorer),通过广播窗口消息 WM_DEVICECHANGE

参见

注释

参考资料