Windows系统服务原理

简单地说,Windows服务是一类Win32可执行程序,通常无界面,由控制台形式的程序实现。这类程序常驻内存,受到操作系统优待。Windows服务(NT服务)分为服务应用程序和内核驱动服务程序,本文利用服务应用程序对检测系统进行健壮性守护,故不对内核驱动服务类程序进行深入探讨。实现Windows服务需要动态链接库、线程及同步、结构异常处理、虚拟内存、内存映射文件、设备I/O及WinAPI 函数应用接口等多种技术的支持。

服务由Service Control Manager(SCM)、服务本身、Service Control Dispatcher(SCP)组成。

SCM位于Service.exe中,是Windows NT/2000系统的基础构件,伴随着操作系统的生命周期启动和终止。SCM包含一个存储着已安装服务和驱动程序信息的数据库,并统一管理这些信息,当有服务程序安装时,将其自身信息写入数据库。服务本身通常由用户自己实现,负责从SCM接收信号并执行服务本身想要执行的功能代码,执行结束后向SCM返回状态信息。

SCP负责与SCM通讯,通过提供用户界面控制计算机服务上的Win32应用程序。在实际开发的过程中,用户有时需要自定义客户端作为SCP与SCM进行通讯,Windows管理工具中的“服务”是Windows操作系统中最典型的SCP。

Windows服务的开发原理如图所示。

这里写图片描述

服务多为控制台程序,故以Main函数作为程序入口函数。

主函数中,初始化SERVICE_TABLE_ENTRY结构数组,该结构数组列出服务程序中包含的服务名称及进入点函数地址,结尾以NULL标识数组结束。

结构数组初始化完毕后,通过调用StartServiceCtrlDispatcher函数与SCM通信,为数组中每一个非空元素创建一个服务控制分派线程去执行其ServiceMain函数。

ServiceMain函数通过调用RegisterServiceCtrlHandler函数来回调控制请求处理函数CtrlHandler,利用SetServiceStatus函数与SCM通信,告之初始化服务状态信息。

CtrlHandle负责响应来自SCP的控制命令并告之SCM服务状态信息。

值得一提的是,ServiceMain函数和CtrlHandle函数都是需要用户自己定义的函数,其函数名并不固定,但必须保持一致的函数原型,ServiceMain函数和CtrlHandler函数原型定义如表一所示。

这里写图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值