ShiJoa
Articles23
Tags15
Categories3
Windows服务

Windows服务

简单的介绍一下Windows服务。

Windows服务包括四大部分:

  1. 服务控制管理器(Service Control Manager)
  2. 服务控制程序(Service Control Program)
  3. 服务程序(Service Program)
  4. 服务配置程序(Service Configuration Program)

服务控制管理器 SCM

服务控制管理器在系统启动的早期由Winlogin进程启动,可执行文件名是“Admin$\System32\Services.exe”,它是系统中的RPC服务器,因此服务配置程序和服务控制程序可以在远程操纵服务。
它包括以下方面信息

  • 已安装服务数据库:服务控制管理器在注册表中拥有一个已安装服务的数据库,它在服务控制管理器和程序添加、删除和配置服务程序时使用,在注册表中数据库的位置:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
    它包括很多子键,每个子键的名字就代表一个对应的服务。数据库中包括服务类型(私有进程、共享进程)、启动类型(自动运行、有服务控制管理器启动、无效)、错误类型(忽略、常规错误、服务错误、关键错误)、执行文件路径、依赖信息项、可选用户名与密码。
  • 自动启动服务:系统启动时,服务控制管理器启动所有“自启”服务和相关依赖服务。服务的加载顺序列表在注册表中的位置:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\ServiceGroupOrder
    键值List中保存了表示服务组启动顺序信息。每一个服务组都是一个字符串,通过字符串在职中排列的先后顺序表示服务组被加载的先后顺序。
    各服务启动顺序的信息在注册表中位置:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GroupOrderList
    在系统成功引导后悔保留一份LKG(Last-Know-Good)的配置信息位于注册表的位置:HKEY_LOCAL_MACHINE\SYSTEM\ControlSetXXX\Services
  • 因要求而启动服务:可以使用“控制面板”中的“服务”来启动一项服务。服务控制程序也可以使用StartService来启动服务。服务控制管理器会进行下面的操纵:获取账户信息、登录服务项目、创建服务为悬挂状态、分配登录令牌给进程、允许进程执行
  • 服务记录列表:每项服务在数据库中都包含了一下的内容:服务名称、开始类型、服务状态(类型、当前状态、接受控制代码、退出代码、等待提示)、依赖服务列表指针。
  • 服务控制管理器句柄:服务控制管理器支持句柄类型访问:已安装服务数据库、服务程序、数据库的锁开状态。

服务控制程序 SCP

服务控制程序可以执行对服务程序的开启、控制和状态查询功能。
如果服务的开启类型为SERVICE_DEMAND_START,就可以用服务控制程序来开始一项服务。在开始服务的初始化阶段服务的当前状态为SERVICE_START_PENDING,而在初始化完成后的状态为SERVICE_RUNNING。
控制请求可以是系统默认的,也可以是用户自定义的。标准控制代码如下:停止服务(SERVICE_CONTROL_STOP)、暂停服务(SERVICE_CONTROL_PAUSE)、恢复已暂停服务(SERVICE_CONTROL_CONTINUE)、获得更新信息(SERVICE_CONTROL_INTERROGATE)。

服务程序

一个服务程序可能拥有一个或多个服务的执行代码。 我们可以创建类型为SERVICE_WIN32_OWN_PROCESS的只拥有一个服务的服务程序。而类型为SERVICE_WIN32_SHARE_PROCESS的服务程序却可以包含多个服务的执行代码。

服务配置程序

服务配置程序用以更改,查询已安装服务的信息。当然也可以通过注册表函数来访问相关资源,毕竟服务的相关信息就在注册表里。

Author:ShiJoa
Link:https://shijoa.github.io/2020/12/23/Windows%E6%9C%8D%E5%8A%A1/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可