简介
几乎在每种操作系统都提供一种在系统启动时刻启动进程的机制,这种进程不依赖于任何交互式用户服务。在windows中这样的进程称为windows服务(windows service)。
服务有两种类型:
- 服务应用程序:服务应用程序必须满足SCM(Service Control Manager)服务控制管理器的接口规范,由SCM进行管理,因此需要与SCM进行通信,通知SCM当前服务的状态。
- 驱动服务程序:驱动服务程序必须满足设备驱动接口协议,不与SCM进行交互,但也由SCM管理。
可以通过在运行下services.msc来启动服务控制面板,也可以通过右键点击计算机->管理->服务与应用程序查看当前系统有哪些服务应用程序:
选中其中的某个服务,右键点击属性,可以查看选中服务的基本信息,登录用户,启动失败时的设置以及依赖于哪些其他服务,例如:
windows服务由三部分构成:服务应用(service application)、服务控制程序(service control program)、服务控制管理器(service control mannager)。
服务控制管理器SCM
SCM由系统启动时加载,对应%SystemRoot%\System32\Services.exe程序,是一个RPC(remote procedure call)服务,因此也可以通过它远程控制服务程序。SCM维护着一个系统已经安装的服务的数据库,SCM通过此数据库管理服务程序的添加、修改、和配置,该数据库存储在注册表的如下键值中:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
该节点下的每个键都是一个服务,每个键下都存储了当前服务的一些基本信息,例如:
各个键值对应关系如下:
- Start:服务的启动类型,0表示由Winload预先加载驱动程序,1表示在Winload预先加载的驱动程序之后再加载该驱动程序,2表示自动启动,3表示按照要求启动,4表示禁止启动。
- ErrorControl:服务错误控制, 0表示服务返回的任何错误都被忽略,1表示如果服务报告了一个错误则写入一个事件日志消息
- Type:服务类型,1表示设备驱动程序,2内核模式的文件驱动程序,16表示该服务为一个独占的应用程序,32表示该服务与其他程序共享一个应用程序。
- Group:组的名称
- ImagePath:服务程序的可执行文件路径
- DependOnGroup:指定组中的服务已加载,该服务才能启动
- DependOnService:指定服务所依赖的其他服务
- ObjectName:指定服务在哪个账户下运行
- DisplayName:服务的显示名称
- Description:服务的说明
- FailureActions:当服务进程非正常退出时,应该采取的动作说明
服务除了通过服务控制面板来查看设置之外,还能够通过SC命令来设置:
sc [ServerName] Command ServiceName
ServerName - 可选,指定服务所在的服务器名称,不设置表示为本地
Command - 命令,查询或操作服务的参数
ServiceName - 要操作的服务的名称
可以通过输入sc来参考sc支持的命令有哪些:
还可以通过输入 sc command ?来查看具体命令的详细信息:
使用psexec.exe 使普通程序以system权限运行,例如:
psexec -i 0 -s notepad.exe -d