当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:55:00  来源:本站整理

<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++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .