Windows系统服务原理

原创 2016年07月30日 17:39:32

简单地说,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函数原型定义如表一所示。

这里写图片描述

版权声明:本文为博主原创文章,未经博主允许不得转载。

Windows系统服务大全

Windows系统服务大全 ...
  • coolcat982
  • coolcat982
  • 2006年01月26日 00:06
  • 3394

windows service程序的入门范例(一)

Windows Service 程序编写方法 1.最简单的创建一个windows service程序 (1)新建一个win32控制台程序 (2)开始->运行->cmd,必须右键—>以管理员身份运行,...
  • shine_journey
  • shine_journey
  • 2016年09月09日 12:29
  • 1425

windows服务程序开发详解

2014.06.11 前两天被要求将看门狗做成服务
  • rongxiaojun
  • rongxiaojun
  • 2014年06月11日 15:42
  • 2371

c# Windows 服务程序编写与调试

Windows服务:Microsoft Windows 服务,使您能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序。这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不...
  • xgf415
  • xgf415
  • 2016年12月21日 16:47
  • 4230

编写 Window 服务程序

编写 Window 服务程序  一、直观认识Windows服务。       打开Windows“控制面板/管理工具/服务”,系统显示Windows服务列表。               双击服务,可...
  • zhangyuk
  • zhangyuk
  • 2005年04月06日 14:17
  • 4765

用C/C++创建windows服务程序

用C/C++创建windows服务程序 转载请标明是引用于 http://blog.csdn.net/chenyujing1234  一、演示过程 下...
  • pi9nc
  • pi9nc
  • 2012年11月12日 21:43
  • 7935

Windows服务程序的调试

Windows服务程序的调试   http://www.cnblogs.com/dongzhiquan/archive/2010/07/30/1994584.html 摘自:MSDN ...
  • thanklife
  • thanklife
  • 2016年12月20日 15:56
  • 935

Windows服务编程之服务程序

Windows服务程序
  • Fei_Liu
  • Fei_Liu
  • 2017年06月17日 23:12
  • 692

使用VS开发Windows服务程序

Redis(REmote DIctionary Service, 远程字典服务) 是一个开源的,遵循BSD License,可基于内存亦可持久化的日志型、Key-Value 数据库。       R...
  • kangkanglou
  • kangkanglou
  • 2014年05月10日 17:58
  • 8661

用C语言编写Windows服务程序的五个步骤

    ...
  • todototry
  • todototry
  • 2007年04月16日 13:06
  • 2203
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Windows系统服务原理
举报原因:
原因补充:

(最多只允许输入30个字)