Service Control Manager,服务控制管理器,人称SCM就是它!在Windows内核中,都可以看到她忙碌的身影,可以说是系统服务和驱动的管家婆了!
SCM管家婆起早贪黑,每次系统启动,她也随着而起。她凭借着自己的努力,终于在Windows的内核占据了一席之地,调配着手下许多服务和驱动。SCM她到底具有什么能力呢?她是一种远程过程调用服务,为普通程序操控计算机的服务提供了一扇方便的门,这里还包括远程计算机喔。服务配置和控制程序通过调用一系列服务函数接口使用SCM的功能!
说到底,SCM在内核中默默地发挥她的作用,才能受到众多服务的尊敬,那么她到底为Windows服务做了哪些好事呢?细细想来,SCM在内核中主要担任了五大任务:
- 维护已安装服务的数据库
- 在需要或系统启动的时候,打开服务或驱动服务
- 枚举已安装的服务或驱动服务
- 为已运行的服务或驱动服务维护状态信息
- 将控制码传递给运行中的服务
- 锁定/解锁服务数据库
我们现在来说说SCM的看家本领,即上面的五大任务!
1. 维护已安装服务的数据库
1.1 什么是数据库?
什么是服务的数据库?数据库?听起来那么耳熟,但其实又不是那么回事,初学者一定会和MySQL等主流的数据库混为一谈,其实不太一样。这个数据库只不过是系统注册表的一些和服务相关的数据集合而已。它的具体位置是HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services。
它很重要,因为它存储着已安装服务的一些信息。SCM可以在需要或系统启动的时候,负责启动已安装的服务。在启动的时候,SCM需要取得驱动的基本信息数据库为设备驱动提供了需要的入口。。同时数据库可以用于SCM或者程序来添加,删除,修改或配置服务。
那数据库到底包含了哪些重要的内容呢?
1.2 数据库内容
我们从最外窥探到里面吧。
1.2.1 子键名字——服务的名字
先说services下的众多子键吧,什么.NET CLR Data等等不知所云的名字其实就是服务的名字,每个服务安装后都会在这个数据库里挂个名,以防SCM在启动的时候找不到它。那这个名字是谁指定,总得说清楚吧!那还要追溯到服务出生的那个夜晚...还记得Creat