快速业务通道

WindowsNT下Service编程

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

----此例中原程序使用Delphi编制,老妖将之改成CB版。:D

----WindowsNTServer提供多种功能强大的服务(Service),例如FTP,WWW或远程登录服务,另外常用的数据库服务器也是以Service的形式存在于NTServer上的,如Sybase SQLServer For NT。Service一般在NT启动时自动启动,在NT关机时停止。但是有时用户可能想手工启动、暂停、停止某项Service,这就需要在控制面板中进行配置,对于不太熟悉NT的用户来说比较困难;对于软件开发人员,有时需要在软件中访问和操作某项Service,甚至可能需要开发新Service的提供给用户使用。上面两种情况都可以通过对Service的编程来解决。对Service的编程涉及到NT的内核,比较复杂且相关资料较少,给软件开发人员带来很多困难,笔者通过对WindowsNT的API的分析找到了相应的编程方法,再此介绍给大家。

----在WindowsNT下,各种Service都存在service control manager database中,因此我们可以通过对service control manager database进行操作来实现对Service的编程。下面介绍常用的函数:

1:SC_HANDLE OpenSCManager(LPCTSTR lpszMachineName,LPCTSTR lpszDatabaseName,DWORD fdwDesiredAccess);

----Open SCManager 函数打开指定计算机上的service control manager database。其中参数lpszMachineName指定计算机名,若为空则指定为本机。参数lpszDatabaseName指定要打开的service control manager database,默认为空。

----参数fdwDesiredAccess指定操作的权限,可以为下面取值之一

SC_MANAGER_ALL_ACCESS    //所有权限

SC_MANAGER_CONNECT      //允许连接service control manager

SC_MANAGER_CREATE_SERVICE  //允许创建服务对象并把它加入service control manager database

SC_MANAGER_ENUMERATE_SERVICE //允许枚举service control manager database中的服务

SC_MANAGER_LOCK       //允许锁住service control manager database

SC_MANAGER_QUERY_LOCK_STATUS //允许获取servicecontrolmanagerdatabase的封锁信息

----函数返回值:函数执行成功则返回一个指向service control manager database的句柄,失败则返回NULL。

2:SC_HANDLE OpenService(SC_HANDLE schSCManager,LPCTSTR lpszServiceName,DWORD fdwDesiredAccess);

----OpenService函数打开指定的Service。

----其中参数schSCManager是指向service control manager database的句柄,由OpenSCManager函数返回。

----参数lpszServiceName要打开的服务的名字,注意大小写。

----参数fdwDesiredAccess指定操作的权限,可以为下面取值之一

SERVICE_ALL_ACCESS      //所有权限

SERVICE_CHANGE_CONFIG     //允许更改服务的配置

SERVICE_ENUMERATE_DEPENDENTS //允许获取依赖于该服务的其他服务

SERVICE_INTERROGATE      //允许立即获取服务状态

SERVICE_PAUSE_CONTINUE    //允许暂停和唤醒服务

SERVICE_QUERY_CONFIG      //允许获取服务配置

SERVICE_QUERY_STATU      //允许通过访问service control manager获取服务状态

SERVICE_START         //允许启动服务

SERVICE_STOP          //允许停止服务

SERVICE_USER_DEFINE_CONTROL  //允许用户指定特殊的服务控制码

----函数返回值:函数执行成功则返回指向某项服务的句柄,失败则返回NULL。

3:BOOL QueryServiceStatus(SC_HANDLE schService,LPSERVICE_STATUS lpssServiceStatus);

----QueryServiceStatus函数返回指定服务的当前状态。

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

----参数lpssServiceStatus中存放返回的服务状态信息,结构如

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号