Windows服务程序(一)_blue_nature_百度空间

有那么一类应用程序,是能够为各 种用户(包括本地用户和远程用户)所用的,

拥有用户授权级进行管理的能力,并且不论用户是否物理的与正在运行该应用程

序的计算机相连都能正常执行,这就是所谓的服务了。

(一)服务的基础知识

Question 1. 什么是服务?它的特征是什么?

  在NT/2000中,服务是一类受到操作系统优待的程序。一个服务首先是一个

Win32可执行程序,如果要写一个功能完备且强大的服务,需要熟悉动态连接库

(Dlls)、结构异常处理、内存映射文件、虚拟内存、设备I/O、线程及其同步、

Unicode以及其他的由WinAPI函数提供的应用接口。当然本文讨论的只是建立一

个可以安装、运行、启动、停止的没有任何其他功能的服务,所以无需上述知识

仍可以继续看下去,我会在过程中将理解本文所需要的知识逐一讲解。

  第二要知道的是一个服务决不需要用户界面。大多数的服务将运行在那些被

锁在某些黑暗的,冬暖夏凉的小屋子里的强大的服务器上面,即使有用户界面一

般也没有人可以看到。如果服务提供任何用户界面如消息框,那么用户错过这些

消息的可能性就极高了,所以服务程序通常以控制台程序的形式被编写,进入点

函数是main()而不是WinMain()。

  也许有人有疑问:没有用户界面的话,要怎样设置、管理一个服务?怎样开

始、停止它?服务如何发出警告或错误信息、如何报告关于它的执行情况的统计

数据?这些问题的答案就是服务能够被远程管理,Windows NT/2000提供了大量

的管理工具,这些工具允许通过网络上的其它计算机对某台机器上面的服务进行

管理。比如Windows 2000里面的“控制台”程序(mmc.exe),用它添加“管理单

元”就可以管理本机或其他机器上的服务。

 

Question 2. 服务的安全性…

  想要写一个服务,就必须熟悉Win NT/2000的安全机制,在上述操作系统之

中,所有安全都是基于用户的。换句话说——进程、线程、文件、注册表键、信

号、事件等等等等都属于一个用户。当一个进程被产生的时候,它都是执行在一

个用户的上下文(context),这个用户帐号可能在本机,也可能在网络中的其他

机器上,或者是在一个特殊的账号:System Account——即系统帐号的上下文

  如果一个进程正在一个用户帐号下执行,那么这个进程就同时拥有这个用户

所能拥有的一切访问权限,不论是在本机还是网络。系统帐号则是一个特殊的账

号,它用来标识系统本身,而且运行在这个帐号下的任何进程都拥有系统上的所

有访问权限,但是系统帐号不能在域上使用,无法访问网络资源…

  服务也是Win32可执行程序,它也需要执行在一个context,通常服务都是在

系统账号下运行,但是也可以根据情况选择让它运行在一个用户账号下,也就会

因此获得相应的访问资源的权限。

 

Question 3. 服务的三个组成部分

  一个服务由三部分组成,{dy}部分是Service Control Manager(SCM)。每个

Windows NT/2000系统都有一个SCM,SCM存在于Service.exe中,在Windows启动

的时候会自动运行,伴随着操作系统的启动和关闭而产生和终止。这个进程以系

统特权运行,并且提供一个统一的、安全的手段去控制服务。它其实是一个RPC

Server,因此我们可以远程安装和管理服务,不过这不在本文讨论的范围之内。

SCM包含一个储存着已安装的服务和驱动程序的信息的数据库,通过SCM可以统一

的、安全的管理这些信息,因此一个服务程序的安装过程就是将自身的信息写入

这个数据库。

  第二部分就是服务本身。一个服务拥有能从SCM收到信号和命令所必需的的

特殊代码,并且能够在处理后将它的状态回传给SCM。

  第三部分也就是{zh1}一部分,是一个Service Control Dispatcher(SCP)。

它是一个拥有用户界面,允许用户开始、停止、暂停、继续,并且控制一个或多

个安装在计算机上服务的Win32应用程序。SCP的作用是与SCM通讯,Windows

2000管理工具中的“服务”就是一个典型的SCP。

 

  在这三个组成部分中,用户最可能去写服务本身,同时也可能不得不写一个

与其伴随的客户端程序作为一个SCP去和SCM通讯,本文只讨论去设计和实现一个

服务,关于如何去实现一个SCP则在以后的其它文章中介绍。



郑重声明:资讯 【Windows服务程序(一)_blue_nature_百度空间】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——