资源描述:
《教你如何建立wow服务程序.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、windowsNT与Windows9x有一个非常重要的区别,即WindowsNT提供了很多功能强大的Service(服务)。这些Service可以随着NT的启动而自启动,也可以让用户通过控制面板启动,还可以被Win32应用程序起停。甚至在没有用户登录系统的情况下,这些Service也能执行。许多FTP、WWW服务器和数据库就是以Service的形式存在于NT上,从而实现了无人值守。就连最新版的“黑客”程序BackOrifice2000也是以Service形式在NT上藏身的。由于Service的编程较复杂,许多开发者想开发自己的Service
2、但往往都望而却步。鉴于此,下面我们就从头到尾来构造一个全新的Service,读者只要在程序中注明的地方加上自己的代码,那么就可以轻松拥有一个自己的Service。在编写Service之前,先介绍一下几个重要的函数:----1.SC_HANDLEOpenSCManager(LPCTSTRlpMachineName,LPCTSTRlpDatabaseName,DWORDdwDesiredAccess)----OpenSCManager函数打开指定计算机上的servicecontrolmanagerdatabase。其中参数lpMachineNa
3、me指定计算机名,若为空则指定为本机。LpDatabaseName为指定要打开的servicecontrolmanagerdatabase名,默认为空。dwDesiredAccess指定操作的权限,可以为下面取值之一:----SC_MANAGER_ALL_ACCESS//所有权限----SC_MANAGER_CONNECT//允许连接到servicecontrolmanagerdatabase----SC_MANAGER_CREATE_SERVICE//允许创建服务对象并把它加入database----SC_MANAGER_ENUMERAT
4、E_SERVICE//允许枚举database中的Service----SC_MANAGER_LOCK//允许锁住database----SC_MANAGER_QUERY_LOCK_STATUS//允许查询database的封锁信息----函数执行成功则返回一个指向servicecontrolmanagerdatabase的句柄,失败则返回NULL。注意:WINNT通过一个名为servicecontrolmanagerdatabase的数据库来管理所有的Service,因此对Service的任何操作都应打开此数据库。----2.SC_HAN
5、DLECreateService(SC_HANDLEhSCManager,LPCTSTRlpServiceName,LPCTSTRlpDisplayName,DWORDdwDesiredAccess,DWORDdwServiceType,DWORDdwStartType,DWORDdwErrorControl,LPCTSTRlpBinaryPathName,LPCTSTRlpLoadOrderGroup,LPDWORDlpdwTagId,LPCTSTRlpDependencies,LPCTSTRlpServiceStartName,LPCT
6、STRlpPassword)----CreatService函数产生一个新的SERVICE。其中参数hSCManager为指向servicecontrolmanagerdatabase的句柄,由OpenSCManager返回。LpServiceName为SERVICE的名字,lpDisplayName为Service显示用名,dwDesiredAccess是访问权限,本程序中用SERVICE_ALL_ACCESS。wServiceType,指明SERVICE类型,本程序中用SERVICE_WIN32_OWN_PROCESS
7、SERVICE_
8、INTERACTIVE_PROCESS。dwStartType为Service启动方式,本程序采用自启动,即dwStartType等于SERVICE_AUTO_START。dwErrorControl说明当Service在启动中出错时采取什么动作,本程序采用SERVICE_ERROR_IGNORE即忽约错误,读者可以改为其他的。LpBinaryPathName指明Service本体程序的路径名。剩下的五个参数一般可设为NULL。如函数调用成功则返回这个新Service的句柄,失败则返回NULL。与此函数对应的是DeleteService(h
9、Service),它删除指定的Service。----3.SC_HANDLEOpenService(SC_HANDLEhSCManager,LPCTSTRlpServiceNam