当前位置:首页 > Windows程序 > 正文

【原创】Windows服务管家婆之Service Control Manager

2021-03-27 Windows程序

    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在启动的时候找不到它。那这个名字是谁指定,总得说清楚吧!那还要追溯到服务出生的那个夜晚...还记得CreateService这个函数吧,里面有个lpServiceName形参便是服务的名字!

 

1.2.2 子键的内容

 

    上面是一个服务的最基本的内容,当然还有其他的。

Type服务类型)。对普通服务来说,它表明服务运行环境:自己进程内或与其他服务共享的进程;对于驱动服务来说,它是一个内核服务还是文件系统服务。下面是它的数字含义:0x1:驱动服务,0x2:文件系统服务;0x10:运行在自己进程的服务;0x20:与其他服务共享进程的服务

Start(启动类型)。它表明这是一个自启动服务呢还是一个需求启动服务,自启动又有系统引导启动或SCM启动;需求启动服务有服务配置程序手动启动。同时它也能够指示此服务是否有用,在这种情况下,服务是无法启动的。0x00:系统引导程序自动运行服务;0x01:一个由 IoInitSystem函数启动的服务;0x02:在系统启动的时候,由SCM自动运行服务;0x03:需求启动,当一个程序调用StartService函数时,SCM启动服务;0x04:一个不能启动的服务

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/68572.html