有那么一类应用程序,是能够为各种用户(包括本地用户和远程用户)所用的,拥有用户授权
级进行管理的能力,并且不论用户是否物理的与正在运行该应用程序的计算机相连都能正常执
行,这就是所谓的服务了。
(一)服务的基础知识
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.服务的三个组成部分
一个服务由三部分组成,第一部分是 Service Control Manager(SCM)。每个 Windows
NT/2000 系统都有一个 SCM,SCM 存在于 Service.exe 中,在 Windows 启动的时候会自动
评论1