<b>用C++ Builder在WINNT下编制一个Service</b>[VC/C++编程]
本文“<b>用C++ Builder在WINNT下编制一个Service</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
Windows NT与Windows 9x有一个非常重要的辨别,即Windows NT供应了很多功效强盛的Service(服务).这些Service可以随着NT的启动而自启动,也可以让用户通过掌握面板启动,还可以被Win32利用程序起停.乃至在没有效户登录系统的情形下,这些Service也能履行.很多FTP、WWW服务器和数据库就是以Service的情势存在于NT上,从而实现了无人值守.就连最新版的“黑客”程序Back Orifice 2000也是以Service情势在NT上藏身的.由于Service的编程较复杂,很多开辟者想开辟自己的Service但常常都望而却步.鉴于此,下面我们就重新到尾来构造一个全新的Service,读者只要在程序中注明的地方加上自己的代码,那么便可以轻松拥有一个自己的Service.在编写Service之前,先介绍一下几个重要的函数:
1. SC_HANDLE OpenSCManager( LPCTSTR lpMachineName, LPCTSTR lpDatabaseName, DWORD dwDesiredAccess)
OpenSCManager 函数翻开指定计算机上的service control manager database.此中参数lpMachineName指定计算机名,若为空则指定为本机.LpDatabaseName为指定要翻开的service control manager database名, 默许为空.dwDesiredAccess指定操作的权限, 可认为下面取值之一:
SC_MANAGER_ALL_ACCESS //全部权限
SC_MANAGER_CONNECT //答应衔接到service control manager database
SC_MANAGER_CREATE_SERVICE //答应成立服务对象并把它加入database
SC_MANAGER_ENUMERATE_SERVICE //答应列举database 中的Service
SC_MANAGER_LOCK //答应锁住database
SC_MANAGER_QUERY_LOCK_STATUS //答应查询database的封闭信息
函数履行成功则返回一个指向service control manager database的句柄,失利则返回NULL.注意:WINNT通过一个名为service control manager database的数据库来管理全部的Service,因此对Service的任何操作都应翻开此数据库.
2. SC_HANDLE CreateService(SC_HANDLE hSCManager,
LPCTSTR lpServiceName,
LPCTSTR lpDisplayName,
DWORD dwDesiredAccess,
DWORD dwServiceType,
DWORD dwStartType,
DWORD dwErrorControl,
LPCTSTR lpBinaryPathName,
LPCTSTR lpLoadOrderGroup,
LPDWORD lpdwTagId,
LPCTSTR lpDependencies,
LPCTSTR lpServiceStartName,
LPCTSTR lpPassword)
CreatService函数产生一个新的SERVICE.此中参数hSCManager为指向service control manager database 的句柄,由OpenSCManager返回.LpServiceName为SERVICE的名字,lpDisplayName为Service显示用名,dwDesiredAccess是拜候权限,本程序顶用SERVICE_ALL_ACCESS.wServiceType,指明SERVICE范例,本程序顶用SERVICE_WIN32_OWN_PROCESS| SERVICE_INTERACTIVE_PROCESS.dwStartType为Service启动方法,本程序采取自启动,即dwStartType等于SERVICE_AUTO_START. dwErrorControl阐明当Service在启动中出错时采纳什么行动,本程序采取SERVICE_ERROR_IGNORE即忽约错误,读者可以改成其他的.LpBinaryPathName指明Service本体程序的途径名.剩下的五个参数普通可设为NULL.如函数调用成功则返回这个新Service的句柄,失利则返回NULL.与此函数对应的是DeleteService( hService),它删除指定的Service.
3. SC_HANDLE OpenService(SC_HANDLE hSCManager,LPCTSTR lpServiceName, DWORD dwDesiredAccess )
OpenService函数翻开指定的Service.此中参数hSCManager为指向service control manager database 的句柄,由OpenSCManager返回.LpServiceName为Service的名字,dwDesiredAccess是拜候权限,其可选值对比多,读者可以参看SDK Help. 函数调用成功则返回翻开的Service句柄,失利则返回NULL.
4. BOOL StartService( SC_HANDLE hService, DWORD dwNumServiceArgs,LPCTSTR *lpServiceArgVectors )
StartService函数启动指定的Service.此中参数hService 为指向Service的句柄,由OpenService返回.dwNumServiceAr为启动服务所需的参数的个数.lpszServiceArgs 为 启 动 服务所需的参数.函数履行成功则返回True, 失利则返回False.
5. BOOL ControlService(SC_HANDLE hService DWORD dwControl,LPSERVICE_STATUS lpServiceStatus )
Service程序没有专门的终止函数,而是用ControlService函数来掌握Service的暂停、持续、终止等操作.参数dwControl指定发出的掌握号令,可认为以下几个值:
SERVICE_CONTROL_STOP //终止Service
SERVICE_CONTROL_PAUSE //暂停Service
SERVICE_CONTROL_CONTINUE //持续Service
SERVICE_CONTROL_INTERROGATE //查询Service的状况
SERVICE_CONTROL_SHUTDOWN //让ControlService调用失效
参数lpServiceStatus是一个指向SERVICE_STATUS的指针.SERVICE_STATUS是一个对比重要的构造,它包含了Service的各种信息,如当前状况、可承受何种掌握号令等等.
以上是“<b>用C++ Builder在WINNT下编制一个Service</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |