如何编写服务程序

合集下载

服务方案如何编写

服务方案如何编写

服务方案如何编写服务方案编写,一般是指为了满足客户需求,向客户提供一种满意的服务的具体方案。

编写服务方案时,需要详细考虑客户需求、服务内容、服务流程、服务人员、服务时间、服务成本等相关因素。

下面将从这几个方面详细说明如何编写服务方案。

一、客户需求分析在编写服务方案之前,首先要对客户需求进行分析。

了解客户的具体需求,包括对服务的要求、服务的时间、服务的预算等。

可以通过与客户进行沟通、提供问卷调查等方式,获取客户需求的详细信息。

在分析客户需求时,要注意客户主要关注的是什么,重点解决客户的核心问题。

二、服务内容设计在确定客户需求之后,需要设计具体的服务内容。

根据客户需求,确定提供哪些具体的服务,包括服务的种类、服务的范围、服务的数量等。

服务的内容要尽量符合客户的需求,做到贴合客户的实际情况。

可以通过制定详细的服务规范,明确服务的具体内容。

三、服务流程制定服务方案中需要明确服务的流程,包括服务的前期准备、服务的实施、服务的跟踪等环节。

在制定服务流程时,要充分考虑客户的需求,确保服务流程的合理性和高效性。

服务流程的编写要清晰简洁,方便服务人员理解和操作。

四、服务人员的安排在编写服务方案时,需要明确服务人员的安排和要求。

根据服务的内容和客户需求,确定需要多少服务人员,以及服务人员的具体职责和要求。

服务人员的安排要根据其专业背景、经验、能力等要求进行合理的安排。

在编写服务方案时,要考虑服务人员的数量和质量,确保能够提供高质量的服务。

五、服务时间的规定在编写服务方案时,需要明确服务的时间安排。

根据客户的需求和服务的内容,确定服务时间的具体安排,包括服务的起止时间、服务的周期、服务的时长等。

在安排服务时间时,要尽量符合客户的需求,并保证服务的连续性和稳定性。

六、服务成本的评估在编写服务方案时,需要对服务的成本进行评估。

确定服务所需要的各类资源和成本,包括人力成本、物力成本、时间成本等。

在评估服务成本时,要综合考虑客户需求、服务内容、服务流程等因素,确保服务成本的合理性和可控性。

如何编写一份完整的技术服务

如何编写一份完整的技术服务

如何编写一份完整的技术服务技术服务是指为客户提供技术支持和解决方案的一种专业服务。

编写一份完整的技术服务需要考虑多个方面,包括服务范围、工作流程、问题处理和服务保障等。

本文将介绍如何编写一份完整的技术服务。

一、服务范围技术服务的服务范围应明确列出,以确保客户了解可以获得哪些服务。

服务范围应涵盖技术支持、故障处理、系统维护、软件安装与更新、网络管理等方面。

同时,应详细描述每一项服务的具体内容和限制,以避免误解和纠纷。

二、工作流程编写一份完整的技术服务需要包括清晰的工作流程,以指导技术人员进行服务。

工作流程包括从客户提出问题到问题解决的全过程。

例如,技术服务可以按以下步骤进行:客户提出问题→问题登记→问题优先级评估→技术分析→解决方案提供→问题解决→问题关闭。

每个步骤都需要说明具体操作、责任人和时限,确保服务高效进行。

三、问题处理提供技术服务时,经常需要处理各种问题,包括软件故障、硬件故障、网络故障等。

在编写技术服务时,应提供详细的问题处理方案,包括问题分类、问题解决方法和响应时限等。

例如,对于紧急问题,应提供24小时内响应和解决的保障;对于一般问题,响应和解决时限可以更灵活。

此外,还可以提供常见问题的解决办法,供客户自行尝试解决。

四、服务保障为了提供高质量的技术服务,需要明确服务保障条款。

服务保障条款可以包括服务时间、服务方式、服务人员水平等内容。

例如,可以规定服务时间为每周一至周五的工作时间,服务方式为电话、电子邮件或远程连接等。

同时,还应要求技术服务人员具备专业的技能和知识,确保能够有效解决客户的问题。

五、客户沟通技术服务的一个重要方面是与客户的沟通。

为了顺利进行服务,可以在技术服务中规定沟通方式和频率。

例如,可以规定每周组织例会,与客户沟通服务进展;对于复杂问题,可以设置定期沟通,以确保双方对问题的理解一致。

六、服务评估为了持续改进技术服务质量,可以进行服务评估。

通过定期收集客户的反馈意见和评价,了解客户对技术服务的满意程度,并根据反馈结果进行改进。

服务工作程序范文

服务工作程序范文

服务工作程序范文
一、接待客户
1.客户进入服务场所,服务人员主动上前,微笑并问候客户。

2.询问客户需求,了解客户所需服务的具体内容和要求。

2.根据客户的具体情况和需求,给予专业建议。

三、确认服务内容和约定
2.将服务内容和约定与客户达成一致,确保双方对服务内容和约定的准确性和完整性。

四、提供服务
1.按照约定时间和地点,提供相关的服务。

2.在服务过程中,及时沟通和反馈服务进展情况,根据客户的反馈和需求进行相应的调整。

五、服务后跟踪
1.服务完成后,向客户了解服务效果和满意度。

2.对客户的反馈和建议进行总结和分析,以便不断改进服务质量。

六、客户关系维护
2.根据客户的情况和需求,及时提供相应的服务和支持,保持良好的客户关系。

七、服务反馈和问题解决
1.经常性地向客户征求对服务的反馈和意见,并及时解决客户提出的
问题。

2.在遇到客户投诉或纠纷时,积极沟通和解决,保护公司的声誉和形象。

八、服务质量评估与改进
1.根据客户的反馈和评价,对服务质量进行评估和分析。

2.建立一套科学的服务质量管理机制,针对问题进行改进和优化。

上述服务工作程序是一个通用的模板,实际的服务工作程序可能因不
同服务领域和服务对象的需求而有所差异。

因此,在具体的服务工作过程中,需要根据实际情况进行相应的调整和优化,以确保提供高质量的服务,满足客户的需求。

C#编写windows服务程序步骤(精)

C#编写windows服务程序步骤(精)

C#编写windows服务程序步骤 1. 新建一个项目,或者从选择当前解决方案--右键-添加--新建项目 2. 选择(项目类型Visual C#项目,(模板Windows 服务,填写要创建的服务名称(修改默认的WindowService1成为你自己的服务名称,然后按确定按钮.3. 资源管理器中默认创建一个WindowsService1的项目,项目下包括一个Service1.cs 文件4. 左侧选择"工具箱"--"组件",拖动一个Timer对象到Service1.cs [设计]这个页面窗体上.点击窗体上的Timers1足见,设置其属性:Interval属性数字N(例如200毫秒==1秒进行5次操作) 5.双击这个Timer1组件填加自己所需要的功能函数private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e { //本机电脑硬件配置文件 string strFileName=@"c:\ComputerInfo.txt"; string strTest="硬盘信息+显卡信息+主板信息+声卡信息+网卡信息+打印机信息"; //判断传送文件是否存在.如果不存在则写入一行测试信息 if (!File.Exists(strFileName{ File.CreateText(strFileName; } byte[] content=Encoding.UTF8.GetBytes(strTest; //创建文本文件对象 FileStream fs=newFileStream(strFileName,FileMode.OpenOrCreate,FileAccess.ReadWrite; //文件中写入测试数据 fs.Write(content,0,content.Length; //关闭文件对象 fs.Close(; } 6.添加完相应的函数代码后,从代码视图切换到设计视图,点鼠标右键选择“添加安装程序” 7. 然后在当前项目资源管理器中会发现多了一个ProjectInstaller.cs文件,点击该文件打开ProjectInstaller.cs [设计]窗体.会发现里面自动有两个组件"serviceProcessInstaller1"和"serviceInstaller1" 8. 设置serviceInstaller1组件的属性:ServiceName = MyService(名字自己随意修改的和 StartType = Automatic (开机自动运行方式 9. 设置serviceProcessInstaller1组件的属性:Account = LocalSystem 10. 选择当前解决方案,设置方案属性中的"启动项目"为刚才所添加的项目名称.按F5运行编译当前项目,会弹出一个对话框"无法从命令行或者调试器启动服务,必须首先安装Windows服务(使用installutil.exe,然后用Server Explorer、Windows服务管理工具或NET START命令启动它"。

Win服务程序编写以及安装一般步骤

Win服务程序编写以及安装一般步骤

Win服务程序编写以及安装⼀般步骤Win服务程序编写以及安装⼀般步骤 Windows服务的优点有:1. 能够⾃动运⾏。

2. 不要求⽤户交互。

3. 在后台运⾏。

本⽂将介绍常见服务程序编写的⼀般步骤以及注意事项。

设计服务程序实例:1. 创建服务程序,主要功能:隔段时间⾃动写⼊字符串到⽂本⽂档中。

使⽤语⾔:,开发⼯具:Visual Studio 2010新建服务项⽬ 如图1所⽰:图1添加组件操作如图2,得到如图3结果图2图3 System.windows.forms中的time组件在服务程序中部适⽤,所以此处要选择system.timers.timer。

继续图3操作后设置timer以及service1的属性.如图4/5。

图4图5程序编写图6 代码如下:1Protected Overrides Sub OnStart(ByVal args() As String)23' 请在此处添加代码以启动您的服务。

此⽅法应完成设置⼯作,45' 以使您的服务开始⼯作。

67 Timer1.Start()89End Sub10111213Protected Overrides Sub OnStop()1415' 在此处添加代码以执⾏任何必要的拆解操作,从⽽停⽌您的服务。

1617 Timer1.Stop()1819End Sub20212223Private Sub Timer1_Elapsed(ByVal sender As System.Object, ByVal e As System.Timers.ElapsedEventArgs) Handles Timer1.Elapsed 2425Dim witer As StreamWriter = New StreamWriter("C:\string.txt", True)2627 witer.WriteLine("YourText")2829 witer.Close()3031End Sub 或者基于filestream写⼊,代码如下:1Private Sub Timer1_Elapsed(ByVal sender As System.Object, ByVal e As System.Timers.ElapsedEventArgs) Handles Timer1.Elapsed 23Static i As Integer = 145Dim fstream As New FileStream("G:\string.txt", FileMode.OpenOrCreate, FileAccess.Write)67Dim write As New StreamWriter(fstream)89 fstream.Seek(1, SeekOrigin.End)1011write.Write("MyTestService" & i.ToString)1213write.Close()1415 fstream.Close()1617 i += 11819End Sub服务程序安装图7 图7操作后出现如图8界⾯,设置安装控件属性如图9和图10图8图9图10 .net编写服务程序集成了许多的功能,此处创建服务安装,并不需要编写程序,只需添加控件,修改属性即可,⼗分⽅便。

快速编写简单windows服务程序

快速编写简单windows服务程序

前不久,为完成项目中某个功能,需要写个windows服务程序, 定时来调用另外的一个exe程序, 完成过程遇到颇多问题,作为初学者,分享一下我的整个过程. 参考了多位大神的文章.资料来自网上, 最后给出链接.表示感谢以下是一些基本知识, 不得不耐下心去理解,这对程序理解和编写非常用帮助.首先Microsoft Windows 服务(即,以前的 NT 服务)使您能够创建在它们自己的Windows 会话中可长时间运行的可执行应用程序。

这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面。

这使服务非常适合在服务器上使用,或任何时候,为了不影响在同一台计算机上工作的其他用户,需要长时间运行功能时使用。

还可以在不同于登录用户的特定用户帐户或默认计算机帐户的安全上下文中运行服务。

服务是有状态的,当我们使用windows自带的服务管理程序sc.exe 查看服务状态时可以显示服务的当前状态,这个状态是由我们在程序代码中进行控制的。

你最好在服务初始化的时候将服务设置为SERVICE_START_PENDING,当初始化完毕时设为SERVICE_RUNNING,这些状态是系统自定义的状态,可通过msdn查看其他状态。

这个状态信息你会在sc.exe中看到。

在编写windows服务程序过程中你需要关注的函数有:1.首先是main函数,由于windows服务不需要界面,所以大部分程序为win32控制台应用程序,所以程序主函数为main 而不是WinMain()。

在主函数要做的主要工作就是初始化一个SERVICE_TABLE_ENTRY 分派表结构体,然后调用StartServiceCtrlDispatcher();这将把调用进程的主线程转换为控制分派器。

该分派器启动一个新线程,该线程运行分派表中对应于你的服务的ServiceMain()函数。

ServiceMain()函数将在下面提到。

此过程示例代码如下:SERVICE_TABLE_ENTRY entrytable[2];entrytable[0].lpServiceName="testservice";entrytable[0].lpServiceProc=(LPSERVICE_MAIN_FUNCTION)ServiceMain;entrytable[1].lpServiceName=NULL;entrytable[1].lpServiceProc=NULL;StartServiceCtrlDispatcher(entrytable);在这之后系统将自动创建一个线程去执行ServiceMain函数的内容,你应该将你要执行的任务在ServiceMain中循环,这样服务就开始运行了。

如何用Java编写简单的网络服务器

如何用Java编写简单的网络服务器网络服务器是指在网络上提供服务的计算机软件。

Java提供了丰富的网络编程库,可以很方便地编写网络服务器。

本文将介绍如何使用Java编写一个简单的网络服务器。

1.确定服务器的功能在编写网络服务器之前,首先需要明确服务器的功能是什么。

常见的服务器功能有Web服务器、FTP服务器、文件服务器等。

本文以一个简单的Echo服务器为例,实现将客户端发送的消息原样返回给客户端。

2.创建服务器使用Java编写的网络服务器通常使用Socket和ServerSocket类来实现。

Socket类用于实现与客户端的通信,而ServerSocket类用于监听服务器端口,等待客户端连接。

首先,创建一个ServerSocket对象来监听指定的服务器端口。

例如,可以使用以下代码创建一个监听在8080端口的服务器:```ServerSocket serverSocket = new ServerSocket(8080);```3.监听客户端连接使用ServerSocket的accept()方法可以监听客户端连接,当有客户端连接到服务器时,accept()方法将返回一个新的Socket对象,该对象用于与该客户端进行通信。

```Socket clientSocket = serverSocket.accept();```4.与客户端通信一旦有客户端连接到服务器,就可以通过Socket对象进行通信。

可以使用InputStream和OutputStream对象来读取和写入数据。

例如,读取客户端发送的消息可以使用以下代码:```InputStream inputStream = clientSocket.getInputStream();BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));String message = reader.readLine();```而将消息返回给客户端可以使用以下代码:```OutputStream outputStream =clientSocket.getOutputStream();PrintWriter writer = new PrintWriter(outputStream);writer.println(message);writer.flush();```5.处理多个客户端连接通常服务器需要同时处理多个客户端连接。

C#编写Windows服务程序详细步骤详解(图文)

C#编写Windows服务程序详细步骤详解(图⽂)⼀、创建⼀个Windows Service1)创建Windows Service项⽬2)对Service重命名将Service1重命名为你服务名称,这⾥我们命名为ServiceTest。

⼆、创建服务安装程序1)添加安装程序之后我们可以看到上图,⾃动为我们创建了ProjectInstaller.cs以及2个安装的组件。

2)修改安装服务名右键serviceInsraller1,选择属性,将ServiceName的值改为ServiceTest。

3)修改安装权限右键serviceProcessInsraller1,选择属性,将Account的值改为LocalSystem。

三、写⼊服务代码1)打开ServiceTest代码右键ServiceTest,选择查看代码。

2)写⼊Service逻辑添加如下代码:using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Diagnostics;using System.Linq;using System.ServiceProcess;using System.Text;namespace WindowsServiceTest{public partial class ServiceTest : ServiceBase{public ServiceTest(){InitializeComponent();}protected override void OnStart(string[] args){using (System.IO.StreamWriter sw = new System.IO.StreamWriter("C:\\log.txt", true)){sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ") + "Start.");}}protected override void OnStop(){using (System.IO.StreamWriter sw = new System.IO.StreamWriter("C:\\log.txt", true)){sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ") + "Stop.");}}}}这⾥我们的逻辑很简单,启动服务的时候写个⽇志,关闭的时候再写个⽇志。

快速编写简单windows服务程序概要

前不久 , 为完成项目中某个功能 , 需要写个 windows 服务程序 , 定时来调用另外的一个 exe 程序 , 完成过程遇到颇多问题 , 作为初学者 , 分享一下我的整个过程 . 参考了多位大神的文章 . 资料来自网上 , 最后给出链接 . 表示感谢以下是一些基本知识 , 不得不耐下心去理解 , 这对程序理解和编写非常用帮助 .首先 Microsoft Windows 服务(即,以前的 NT 服务使您能够创建在它们自己的Windows 会话中可长时间运行的可执行应用程序。

这些服务可以在计算机启动时自动启动, 可以暂停和重新启动而且不显示任何用户界面。

这使服务非常适合在服务器上使用, 或任何时候, 为了不影响在同一台计算机上工作的其他用户, 需要长时间运行功能时使用。

还可以在不同于登录用户的特定用户帐户或默认计算机帐户的安全上下文中运行服务。

服务是有状态的, 当我们使用 windows 自带的服务管理程序 sc.exe 查看服务状态时可以显示服务的当前状态, 这个状态是由我们在程序代码中进行控制的。

你最好在服务初始化的时候将服务设置为 SERVICE_START_PENDING,当初始化完毕时设为SERVICE_RUNNING,这些状态是系统自定义的状态, 可通过 msdn 查看其他状态。

这个状态信息你会在sc.exe 中看到。

在编写 windows 服务程序过程中你需要关注的函数有:1. 首先是 main 函数, 由于 windows 服务不需要界面, 所以大部分程序为 win32控制台应用程序,所以程序主函数为 main 而不是 WinMain(。

在主函数要做的主要工作就是初始化一个 SERVICE_TABLE_ENTRY 分派表结构体, 然后调用StartServiceCtrlDispatcher(;这将把调用进程的主线程转换为控制分派器。

该分派器启动一个新线程, 该线程运行分派表中对应于你的服务的 ServiceMain (函数。

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

用C语言编写Windows服务程序的五个步骤用C语言编写Windows服务程序的五个步骤用C语言编写Windows服务程序应该怎么做?下面就来和店铺一起看看用C语言编写Windows服务程序的五个步骤吧。

Windows 服务被设计用于需要在后台运行的应用程序以及实现没有用户交互的任务。

为了学习这种控制台应用程序的基础知识,C(不是C++)是最佳选择。

本文将建立并实现一个简单的服务程序,其功能是查询系统中可用物理内存数量,然后将结果写入一个文本文件。

最后,你可以用所学知识编写自己的 Windows 服务。

当初我写第一个 NT 服务时,我到 MSDN 上找例子。

在那里我找到了一篇 Nigel Thompson 写的文章:“Creating a Simple Win32 Service in C++”,这篇文章附带一个 C++ 例子。

虽然这篇文章很好地解释了服务的开发过程,但是,我仍然感觉缺少我需要的重要信息。

我想理解通过什么框架,调用什么函数,以及何时调用,但 C++ 在这方面没有让我轻松多少。

面向对象的方法固然方便,但由于用类对底层 Win32 函数调用进行了封装,它不利于学习服务程序的基本知识。

这就是为什么我觉得C 更加适合于编写初级服务程序或者实现简单后台任务的服务。

在你对服务程序有了充分透彻的理解之后,用 C++ 编写才能游刃有余。

当我离开原来的工作岗位,不得不向另一个人转移我的知识的时候,利用我用 C 所写的例子就非常容易解释 NT 服务之所以然。

服务是一个运行在后台并实现勿需用户交互的任务的控制台程序。

Windows NT/2000/XP 操作系统提供为服务程序提供专门的支持。

人们可以用服务控制面板来配置安装好的服务程序,也就是Windows 2000/XP 控制面板|管理工具中的“服务”(或在“开始”|“运行”对话框中输入 services.msc /s——译者注)。

可以将服务配置成操作系统启动时自动启动,这样你就不必每次再重启系统后还要手动启动服务。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

WINDOWS服务程序简介一> 序言Windows下的服务程序都遵循服务控制管理器(SCM)的接口标准,它们会在登录系统时自动运行,甚至在没有用户登录系统的情况下也会正常执行,类似与UNIX系统中的守护进程(daemon)。

它们大多是控制台程序,不过也有少数的GUI 程序。

本文所涉及到的服务程序仅限于Windows2000/XP系统中的一般服务程序,不包含Windows9X。

本文相关服务级后门程序和代码可以到我们的主页FZ5FZ 下载。

二> Windows服务简介服务控制管理器拥有一个在注册表中记录的数据库,包含了所有已安装的服务程序和设备驱动服务程序的相关信息。

它允许系统管理员为每个服务自定义安全要求和控制访问权限。

Windows服务包括四大部分:服务控制管理器(Service Control Manager),服务控制程序(Service Control Program),服务程序(Service Program)和服务配置程序(Service Configuration Program)。

1.服务控制管理器(SCM)服务控制管理器在系统启动的早期由Winlogon进程启动,可执行文件名是“Admin$\System32\Services.exe”,它是系统中的一个RPC服务器,因此服务配置程序和服务控制程序可以在远程操纵服务。

它包括以下几方面的信息:已安装服务数据库:服务控制管理器在注册表中拥有一个已安装服务的数据库,它在服务控制管理器和程序添加,删除,配置服务程序时使用,在注册表中数据库的位置为:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services。

它包括很多子键,每个子键的名字就代表一个对应的服务。

数据库中包括:服务类型(私有进程,共享进程),启动类型(自动运行,由服务控制管理器启动,无效),错误类型(忽略,常规错误,服务错误,关键错误),执行文件路径,依赖信息选项,可选用户名与密码。

自动启动服务:系统启动时,服务控制管理器启动所有“自启”服务和相关依赖服务。

服务的加载顺序:顺序装载组列表:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\ServiceGroupOrder ;指定组列表:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\GroupOrderList;每个服务所依赖的服务程序。

在系统成功引导后会保留一份LKG(Last-Know-Good)的配置信息位于:HKEY_LOCAL_MACHINE\SYSTEM\ControlSetXXX\Services。

因要求而启动服务:用户可以使用服务控制面板程序来启动一项服务。

服务控制程序也可以使用StartService来启动服务。

服务控制管理器会进行下面的操作:获取帐户信息,登录服务项目,创建服务为悬挂状态,分配登录令牌给进程,允许进程执行。

服务记录列表:每项服务在数据库中都包含了下面的内容:服务名称,开始类型,服务状态(类型,当前状态,接受控制代码,退出代码,等待提示),依赖服务列表指针。

服务控制管理器句柄:服务控制管理器支持句柄类型访问以下对象:已安装服务数据库,服务程序,数据库的锁开状态。

2.服务控制程序(SCP)服务控制程序可以执行对服务程序的开启,控制和状态查询功能:开启服务:如果服务的开启类型为SERVICE_DEMAND_START,就可以用服务控制程序来开始一项服务。

在开始服务的初始化阶段服务的当前状态为:SERVICE_START_PENDING,而在初始化完成后的状态就是:SERVICE_RUNNING。

向正在运行的服务发送控制请求:控制请求可以是系统默认的,也可以是用户自定义的。

标准控制代码如下:停止服务(SERVICE_CONTROL_STOP),暂停服务(SERVICE_CONTROL_PAUSE),恢复已暂停服务(SERVICE_CONTROL_CONTINUE),获得更新信息(SERVICE_CONTROL_INTERROGATE)。

3.服务程序一个服务程序可能拥有一个或多个服务的执行代码。

我们可以创建类型为SERVICE_WIN32_OWN_PROCESS的只拥有一个服务的服务程序。

而类型为SERVICE_WIN32_SHARE_PROCESS的服务程序却可以包含多个服务的执行代码。

详情参见后面的Windows服务与编程。

4.服务配置程序编程人员和系统管理员可以使用服务配置程序来更改,查询已安装服务的信息。

当然也可以通过注册表函数来访问相关资源。

服务的安装,删除和列举:我们可以使用相关的系统函数来创建,删除服务和查询所有服务的当前状态。

服务配置:系统管理员通过服务配置程序来控制服务的启动类型,显示名称和相关描述信息。

三> Windows服务与编程Windows服务编程包括几方面的内容,下面我们将从服务控制程序,服务程序和服务配置程序的角度介绍服务编程相关的内容。

1.服务控制程序执行服务控制程序的相关函数前,我们需要获得一个服务对象的句柄,方式有两种:由OpenSCManager来获得一台特定主机的服务控制管理器数据库的句柄;使用OpenService或CreateService函数来获得某个服务对象的句柄。

启动服务:要启动一个服务,服务控制程序可以使用StartService来实现。

如果服务控制管理器数据库被锁定,那需要等待一定的时间然后再次测试StartService函数。

当然也可以使用QueryServiceLockStatus函数来确认数据库的当前状态。

在启动成功完成时,那么dwCurrentState参数将会返回SERVICE_RUNNING值。

服务控制请求:服务控制程序使用ControlService函数来发送控制请求到正在运行的服务程序。

它会向控制句柄函数发送一个特定的控制命令,可以是系统默认的,也可以是用户自定义的。

而且每个服务都会确定自己将会接收的控制命令列表。

使用QueryServiceStatus函数时,在返回的dwControlsAccepted参数中表明服务程序将会接收的控制命令。

所有的服务都会接受SERVICE_CONTROL_INTERROGATE命令。

2.服务程序一个服务程序内可以包含一个服务或多个服务的执行代码,但是它们都拥有固定的三个部分:服务main函数,服务ServiceMain函数和服务Control Handler 函数。

服务main函数:服务程序通常是以控制台的方式存在的,所以它们的入口点都是main函数。

在服务控制管理器开始一个服务程序时,会等待StartServiceCtrlDispatcher函数的执行。

如果服务类型是SERVICE_WIN32_OWN_PROCESS就会立即调用StartServiceCtrlDispatcher函数的执行;如果服务类型是SERVICE_WIN32_SHARE_PROCESS,通常在初始化所有服务之后再调用它。

StartServiceCtrlDispatcher函数的参数就是一个SERVICE_TABLE_ENTRY结构,它包含了进程内所有服务的名称和服务入口点。

服务ServiceMain函数:函数ServiceMain是服务的入口点。

在服务控制程序请求一个新的服务启动时,服务控制管理器启动一个服务,并发送一个开始请求到控制调度程序,而后控制调度程序创建一个新线程来执行ServiceMain函数。

ServiceMain须执行以下的任务:调用RegisterServiceCtrlHandler函数注册一个HandlerEx函数来向服务发送控制请求信息,返回值是服务状态句柄用来向服务控制管理器传送服务状态。

初始化后调用SetServiceStatus函数设置服务状态为SERVICE_RUNNING。

最后,就是执行服务所要完成的任务。

服务Control Handler函数:每个服务都有一个控制句柄HandlerEx函数。

它会在服务进程从服务控制程序接收到一个控制请求时被控制调度程序所调用。

无论何时在HandlerEx函数被调用时,都要调用SetServiceStatus函数向服务控制管理器报告它当前的状态。

在用户关闭系统时,所有的控制句柄都会调用带有SERVICE_ACCEPT_SHUTDOW控制代码的SetServiceStatus函数来接收NSERVICE_CONTROL_SHUTDOWN控制代码。

3.服务配置程序服务配置程序可以更改或查询服务的当前配置信息。

在调用服务配置函数之前,必须获得一个服务对象的句柄,当然我们可以通过调用OpenSCManager,OpenService或CreateService函数来获得。

创建,删除服务:服务配置程序使用CreateService函数在服务控制管理器的数据库中安装一个新服务,它会提供服务的名称和相关的配置信息并存储在数据库中。

服务配置程序则使用DeleteService函数从数据库中删除一个已经安装的服务。

四> 服务级后门技术在你进入某个系统后,往往会为自己留下一个或多个后门,以便今后的访问。

在上传一个后门程序到远程系统上后系统重启之时,总是希望后门仍然存在。

那么,将后门程序创建成服务程序应该是个不错的想法,这就是利用了服务程序自动运行的机制,当然在Windows2000的任务管理器里也很难结束一个服务程序的进程。

创建一个后门,它常常会在一个端口监听,以方便我们使用TCP/UDP协议与远程主机建立连接,所以我们首先需要在后门程序里创建一个监听的端口,为了数据传输的稳定与安全,我们可以使用TCP协议。

那么,我们如何才能模拟一个Telnet服务似的后门呢?我想大家都清楚,如果在远程主机上有一个Cmd是我们可以控制的,也就是我们可以在这个Cmd里执行命令,那么就可以实现对远程主机的控制了,至少可以执行各种常规的系统命令。

启动一个Cmd程序的方法很多,有WinExec,ShellExecute,CreateProcess等,但只能使用CreateProcess,因为WinExec和ShellExecute它们实在太简单了。

在使用CreateProcess时,要用到它的重定向标准输入/输出的选项功能,把在本地主机的输入重定向输入到远程主机的Cmd进程,并且把远程主机Cmd进程的标准输出重定向到本地主机的标准输出。

这就需要在后门程序里使用CreatePipe创建两个管道来实现进程间的数据通信(Inter-Process Communication,IPC)。

相关文档
最新文档