mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
145 lines
4.8 KiB
145 lines
4.8 KiB
//+------------------------------------------------------------------
|
|
//
|
|
// File: SETUPSVC.HXX
|
|
//
|
|
// Contents: CService class which allows services to be configured,
|
|
// setup, or removed.
|
|
//
|
|
// Synoposis: CService is a smart wrapper class arounf Win32 Service
|
|
// configuration APIs which allows the class to contain
|
|
// the resources such as lock on Service Controller
|
|
// database such that the destructor automatically
|
|
// releases them
|
|
//
|
|
// Classes: CService
|
|
//
|
|
// Functions: ConfigDfs
|
|
// StartDfs
|
|
// ConfigDfsService
|
|
//
|
|
// History: May 19, 1993 AlokS Created
|
|
//
|
|
//-------------------------------------------------------------------
|
|
|
|
#ifndef _SETUPSVC_HXX_
|
|
#define _SETUPSVC_HXX_
|
|
|
|
//+------------------------------------------------------------------
|
|
//
|
|
// Class: CService (cdsSC)
|
|
//
|
|
// Purpose: Helper class for dealing with Service Controller
|
|
//
|
|
// Interface: CService::CService() = Constructor
|
|
// CService::~CService() = Destructor
|
|
// CService::Init() = Initializes the class
|
|
// CService::_CreateService() = Install a Win32 Service
|
|
// CService::_OpenService() = Open an existing service
|
|
// CService::_CloseService() = Close all resources associated with
|
|
// the service
|
|
// CService::_DeleteService() = Remove a Win32 Service
|
|
// CService::_DisableService() = Disables a Win32 Service
|
|
// CService::_StartService() = Start an existing service
|
|
// CService::_StopService() = Stop an existing service
|
|
// CService::_ConfigService() = Combo operation. Create if
|
|
// not present else reconfigure it
|
|
//
|
|
// History: May 20, 1993 AlokS Created
|
|
//
|
|
// Notes: This is a smart wrapper class for Service APIs but it is not
|
|
// multi-thread safe.
|
|
//
|
|
//-------------------------------------------------------------------
|
|
|
|
#define DSSCDebugOut(x)
|
|
|
|
// Cairo Services should all belong to this group
|
|
|
|
class CService
|
|
{
|
|
public:
|
|
// Constructor
|
|
CService();
|
|
// Destructor
|
|
~CService();
|
|
|
|
// Initialize
|
|
DWORD Init();
|
|
|
|
// Get at service database Manager
|
|
SC_HANDLE QueryScManager() { return _schSCManager; };
|
|
|
|
// Get at service handle created or modified
|
|
SC_HANDLE QueryService() { return _scHandle;};
|
|
|
|
// Create a service
|
|
DWORD _CreateService( const LPWSTR lpwszServiceName,
|
|
const LPWSTR lpwszDisplayName,
|
|
DWORD fdwDesiredAccess,
|
|
DWORD fdwServiceType,
|
|
DWORD fdwStartType,
|
|
DWORD fdwErrorControl,
|
|
const LPWSTR lpwszBinaryPathName,
|
|
const LPWSTR lpszLoadOrderGroup,
|
|
const LPDWORD lpdwTagID,
|
|
const LPWSTR lpwszDependencies,
|
|
const LPWSTR lpwszServiceStartName,
|
|
const LPWSTR lpwszPassword);
|
|
|
|
|
|
// Open Service
|
|
DWORD _OpenService( const LPWSTR lpwszServiceName,
|
|
DWORD fdwDesiredAccess
|
|
);
|
|
// query status
|
|
DWORD _QueryServiceStatus(LPSERVICE_STATUS ss);
|
|
// Close Service
|
|
void _CloseService( );
|
|
|
|
// Start Service
|
|
DWORD _StartService( const LPWSTR lpwszServiceName
|
|
);
|
|
|
|
// Stop Service
|
|
DWORD _StopService( const LPWSTR lpwszServiceName
|
|
);
|
|
|
|
// Delete Service
|
|
DWORD _DeleteService(const LPWSTR lpwszServiceName);
|
|
|
|
// Disable Service
|
|
DWORD _DisableService(const LPWSTR lpwszServiceName);
|
|
|
|
// Config Service
|
|
DWORD _ConfigService( DWORD fdwServiceType,
|
|
DWORD fdwStartType,
|
|
DWORD fdwErrorControl,
|
|
const LPWSTR lpwszBinaryPathName,
|
|
const LPWSTR lpwszLoadOrderGroup,
|
|
const LPWSTR lpwszDependencies,
|
|
const LPWSTR lpwszServiceStartName,
|
|
const LPWSTR lpwszPassword,
|
|
const LPWSTR lpwszDisplayName,
|
|
const LPWSTR lpwszServiceName
|
|
);
|
|
|
|
private:
|
|
|
|
// handle of service control manager database
|
|
SC_HANDLE _schSCManager;
|
|
|
|
// Handle of service being created/modified
|
|
SC_HANDLE _scHandle;
|
|
|
|
};
|
|
|
|
// The following are useful for starting DFS Service
|
|
#define SERVICE_WAIT_TIME (1000*6) // 6 seconds
|
|
#define MAX_SERVICE_WAIT_RETRIES (60) // 6*60 = 6 minute
|
|
#define DFS_VERSION_NUMBER 1381
|
|
|
|
DWORD ConfigDfs();
|
|
DWORD ConfigDfsService();
|
|
DWORD StartDfs();
|
|
|
|
#endif // _SETUPSVC_HXX_
|