Life & Code

代码是咒语,我是魔法师

Win32服务控制类

/**
W32Server.h   
http://www.cppblog.com/lovelypig  橙子
*/
#ifndef  _CW32SERVER_H
#define  _CW32SERVER_H
#include <windows.h>
#include <stdio.h>

 

class CW32Server
{
 TCHAR  m_szServerName[MAX_PATH];
 SC_HANDLE   m_hService;
 SC_HANDLE   m_hScm;
 SERVICE_STATUS ServiceStatus;
 BYTE  m_cfgBuf[4096];
public:

 CW32Server(void);
 CW32Server(const TCHAR *strServerName); 
 BOOL    Open(const TCHAR *strServerName);  

 /**  返回状态:
  SERVICE_CONTINUE_PENDING The service continue is pending.
  SERVICE_PAUSE_PENDING The service pause is pending.
  SERVICE_PAUSED The service is paused.
  SERVICE_RUNNING The service is running.
  SERVICE_START_PENDING The service is starting.
  SERVICE_STOP_PENDING The service is stopping.
  SERVICE_STOPPED The service is not running.
 */
 DWORD GetState();     
 BOOL    SetState(DWORD state);
 BOOL    Start();
 BOOL    Stop();

 /**
  SERVICE_AUTO_START  A service started automatically by the service control manager during system startup.
  SERVICE_BOOT_START  A device driver started by the system loader. This value is valid only for driver services.
  SERVICE_DEMAND_START A service started by the service control manager when a process calls the StartService function.
  SERVICE_DISABLED  A service that cannot be started. Attempts to start the service result in the error code ERROR_SERVICE_DISABLED.
  SERVICE_SYSTEM_START
 */
 BOOL    GetConfig();   //如果返回真,配置状态填充在 m_config  中
 SC_HANDLE    GetHandle();  //需要禁用、启动服务,使用 ChangeServiceConfig(GetHandle(),...)   查看MSDN
 ~CW32Server(void);

 QUERY_SERVICE_CONFIG *m_config;
};


#endif


/**
W32Server.cpp
http://www.cppblog.com/lovelypig  橙子
*/
#include ".\w32server.h"
#include <assert.h>

CW32Server::CW32Server(void)
{
 memset((char*)&m_szServerName,0,sizeof(TCHAR)*MAX_PATH);
 memset((char*)&m_config,0,sizeof(m_config));
 m_hService = 0;
 m_hScm   = 0;
 m_config = (QUERY_SERVICE_CONFIG*)m_cfgBuf;
}

CW32Server::CW32Server(const TCHAR *strServerName)

 assert(strServerName);

 CW32Server();
 _tcscpy(m_szServerName,strServerName); 

 m_hScm=OpenSCManager(0,0,SC_MANAGER_CREATE_SERVICE);
 if(!m_hScm)
 {
  return ;
 }
 m_hService=OpenService(m_hScm,strServerName,SERVICE_ALL_ACCESS);
 if(!m_hService)
 {
  CloseServiceHandle(m_hScm);
  m_hScm = NULL;
    }
}
CW32Server::~CW32Server(void)
{
 if( m_hScm )
 {
  CloseServiceHandle(m_hScm);
  m_hScm = NULL;
 }
 if( m_hService )
 {
  CloseServiceHandle(m_hService);
  m_hService = NULL;
 }
}

BOOL   CW32Server:: Open(const TCHAR *strServerName)
{
 assert(strServerName);

 if( m_hScm )
 {
  CloseServiceHandle(m_hScm);
  m_hScm = NULL;
 }
 if( m_hService )
 {
  CloseServiceHandle(m_hService);
  m_hService = NULL;
 }

 _tcscpy(m_szServerName,strServerName); 
 m_hScm=OpenSCManager(0,0,SC_MANAGER_CREATE_SERVICE);
 if(!m_hScm)
 {
  return FALSE;
 }
 m_hService=OpenService(m_hScm,strServerName,SERVICE_ALL_ACCESS);
 if(!m_hService)
 {
  CloseServiceHandle(m_hScm);
  m_hScm = NULL;
  return FALSE;
 }
 return TRUE;
}

DWORD CW32Server::GetState()

 assert(m_hService);

    if(QueryServiceStatus(m_hService,&ServiceStatus))
 {
  return ServiceStatus.dwCurrentState;
 }
 else
 {
  return 0xffffffff;
 }
}

BOOL    CW32Server::SetState(DWORD state)
{
 assert(m_hService);

 return ControlService(m_hService,state,&ServiceStatus);
}

BOOL    CW32Server::Start()
{
 assert(m_hService);

 return StartService(m_hService,0,NULL);

}

BOOL    CW32Server::Stop()
{
 assert(m_hService);

 return ControlService(m_hService,SERVICE_CONTROL_STOP,&ServiceStatus);
}

BOOL    CW32Server::GetConfig()
{
 assert(m_hService);
 
 DWORD cbBufSize = 4096;
 DWORD pcbBytesNeeded = 4096;
 return QueryServiceConfig(m_hService,m_config,cbBufSize, &pcbBytesNeeded);
}

SC_HANDLE  CW32Server::GetHandle()
{
 assert(m_hService);
 return m_hService;
}

posted on 2006-04-01 09:55 橙子 阅读(481) 评论(1)  编辑 收藏 引用 所属分类: Win32

评论

# re: Win32服务控制类 2007-01-22 16:40 ss5309

谢谢.  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2006年4月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

导航

统计

常用链接

留言簿(10)

随笔分类

随笔档案

相册

收藏夹

搜索

最新评论

阅读排行榜