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服务编写原理及探讨

有那么一类应用程序,是能够为各种用户(包括本地用户和远程用户)所用的,拥有用户授权级进行管理的能力,并且不论用户是否物理的与正在运行该应用程序的计算机相连都能正常执行,这就是所谓的服务了。 (一)服...

Windows7系统服务详解

1、了解 Windows 7 服务的基础知识   与Windows XP和Windows 2003才七十多个服务相比,到Windows 7时代,系统已经增加到一百五十多个服务(Vista系统有1...
  • dpsying
  • dpsying
  • 2015年02月26日 14:41
  • 1811

Windows服务程序的原理及实现

今天给大家讲下怎样做一个服务程序...本来是想详细讲的,不过写着写着累得要命..很多  地方就没详细...不过代码我加了点注...如果还有一些不明白的自己查下MSDN......便宜  环境,,VC+...

windows系统的启动工作原理

下面就是windows系统的工作原理      一、Windows系统的启动过程  预了解Windows系统的工作原理,我们先从Windows的启动过程来讲解。同样,我们还是以windows XP为...
  • bjtbjt
  • bjtbjt
  • 2013年11月29日 22:26
  • 4077

WINDOWS程序内部运行原理

API(Application programming interface) 应用程序编程的接口 MSG(message)  消息结构体    操作系统将每一个事件包装成一个称为消息MSG的结构体...

C/C++ 创建windows系统服务程序

Windows上面的程序可以分为前台运行和后台运行,像windows的系统服务都是属于后台程序。 那如何将一个程序变成后台运行呢? 可以在 cmd里面用sc命令来操作:Windows 服务的安装和卸载...

SQL语句删除表格

删除记录 SQL语言使用delete语句删除数据库表格中的行或记录。Delete语句的格式为: delete from tablename where columnname OPERATOR valu...
  • Augusdi
  • Augusdi
  • 2010年06月25日 20:09
  • 4844

windows系统服务管理工具

  • 2017年05月04日 11:59
  • 23KB
  • 下载

windows系统服务框架程序

  • 2016年01月15日 14:38
  • 12KB
  • 下载

JBOSS注册Windows系统服务

JBOSS注册Windows系统服务 1. 到 ObjectWeb 下载 JavaService.exe   主页:http://javaservice.objectweb.org/  下载:h...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Windows系统服务原理
举报原因:
原因补充:

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