快速业务通道

WindowsNT下Service编程

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-30

typedefstruct_SERVICE_STATUS
{
   DWORD dwServiceType;    //服务类型
   DWORD dwCurrentState;    //当前状态
   DWORD dwControlsAccepted;  //服务可接受的控制码
   DWORD dwWin32ExitCode;    //Win32出错代码
   DWORD dwServiceSpecificExitCode;//服务出错代码
   DWORD dwCheckPoint;      //用于跟踪服务长时间操作
   DWORD dwWaitHint;       //服务某一操作的最大允许时间,以毫秒为单位
}SERVICE_STATUS,*LPSERVICE_STATUS;

----函数返回值:函数执行成功则返回True,失败则返回False。

4:BOOLStartService(SC_HANDLE schService,DWORD dwNumServiceArgs,LPCTSTR * lpszServiceArgs);

----StartService函数启动指定的服务。

----其中参数schService是指向某项服务的句柄,由OpenService函数返回,且必须有SERVICE_START的权限。

----dwNumServiceArgs为启动服务所需的参数的个数。

----lpszServiceArgs为启动服务所需的参数。函数返回值:函数执行成功则返回True,失败则返回False。

5:BOOL ControlService(SC_HANDLE hService,DWORD dwControl,LPSERVICE_STATUS lpServiceStatus);

----ControlService函数向Win32service发送控制码。

----其中参数hService是指向某项服务的句柄,由OpenService函数返回。

----参数dwControl为控制码,常用的有

SERVICE_CONTROL_STOP   //停止服务

SERVICE_CONTROL_PAUSE  //暂停服务

SERVICE_CONTROL_CONTINUE  //唤醒暂停的服务

SERVICE_CONTROL_INTERROGATE//刷新某服务的状态

----参数lpServiceStatus指向SERVICE_STATUS结构,用于存放该服务最新的状态信息。

----函数返回值:函数执行成功则返回True,失败则返回False。

6:BOOL EnumServicesStatus(SC_HANDLE hSCManager,DWORD dwServiceType,DWORD dwServiceState,LPENUM_SERVICE_STATUS lpServices,DWORD cbBufSize,LPDWORD pcbBytesNeeded,LPDWORD lpServicesReturned,LPDWORD lpResumeHandle);

----EnumServicesStatus函数用于枚举NT下存在的Service。

----其中参数hSCManager是指向service control manager database的句柄,由OpenSCManager函数返回,且必须有SC_MANAGER_ENUMERATE_SERVICE的权限。

----参数dwServiceType指定按服务的类型枚举。

----参数dwServiceState指定按服务的状态枚举。

----参数lpServices指向ENUM_SERVICE_STATUS结构,用于存放返回的服务的名字和状态信息。

----参数cbBufSize返回参数lpServices的长度,以字节为单位。

----参数pcbBytesNeeded返回获取剩余的Service所需字节的个数。

----参数lpServicesReturned返回服务的个数。

----参数lpResumeHandle,当第一次调用时该参数为0,当该函数再次被调用以获取另外的信息时,该参数表示下一个被读的Service。

----函数返回值:函数执行成功则返回True,失败则返回False。

----值得注意的是通常情况下该函数返回的结果为FALSE,我们可以调用GetLastError()来获取进一步信息。因为一台机器上有多种服务存在,所以GetLastError()应为ERROR_MORE_DATA,此时应再次调用EnumServicesStatus函数以获取正确的Service列表。

----下面有一个用Delphi编的一个程序例子,用其他开发工具如VC,VB也可实现。程序运行时,单击按钮Button1枚举NT中的Service并显示在列表框ListBox1中。在ListBox1选中某个Service,单击按钮Button2则启动该Service,单击按钮Button3则停止该Service。

首先在Unit1.hpp中添加

#include <winsvc.hpp>

然后在Class Form1的Private中添加

SC_HANDLE hscmanager,hService;

TServiceStatus returnstatus;

以下是Unit1.cpp的内容:

/******************************************************

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号