|
|
/**********************************************************************/ /** Microsoft Windows NT **/ /** Copyright(c) Microsoft Corp., 1992 **/ /**********************************************************************/
/*
scman.hxx Header file for SC manager class and SC service class.
FILE HISTORY: terryk 05-May-1992 Created KeithMo 11-Nov-1992 Added DisplayName goodies.
*/
#ifndef _SCMAN_HXX_
#define _SCMAN_HXX_
#include "base.hxx"
#include "string.hxx"
extern "C" { #include <winsvc.h>
}
//
// SC Manager database selection: either Active or Failed database.
//
typedef enum { ACTIVE, FAILED } SERVICE_DATABASE;
/*************************************************************************
NAME: SERVICE_CONTROL
SYNOPSIS: Parent class of SC_MANAGER and SC_SERVICE. It is used to handle the set and query handle.
INTERFACE: SERVICE_CONTROL() - constructor APIERR Close() - close the handle SC_HANDLE QueryHandle() - return the handle. VOID SetHandle() - set the object handle.
PARENT: BASE
HISTORY: terryk 05-May-1992 Created
**************************************************************************/
DLL_CLASS SERVICE_CONTROL : public BASE { private: SC_HANDLE _hHandle;
protected: BUFFER _buffer;
VOID SetHandle( SC_HANDLE hHandle ) { _hHandle = hHandle; };
public: SERVICE_CONTROL();
SC_HANDLE QueryHandle() const { return _hHandle; };
const BUFFER & QueryBuffer( VOID ) const { return _buffer; }
APIERR Close(); };
/*************************************************************************
NAME: SC_MANAGER
SYNOPSIS: Wrapper class for registry sc manager object.
INTERFACE: SC_MANAGER() - constructor ~SC_MANAGER() - destructor
APIERR Lock() - lock the current sc manager object APIERR Unlock() - unlock the current sc manager object APIERR QueryLockStatus() - get current lock information
APIERR EnumServiceStatus() - enumerate services in the service control manager database along with the status of each service.
APIERR UpdateLastKnownGood() - update the last-know-good configuration which the system was booted from.
PARENT: SERVICE_CONTROL
HISTORY: terryk 05-May-1992
**************************************************************************/
DLL_CLASS SC_MANAGER : public SERVICE_CONTROL { private: SC_LOCK _scLock; BOOL _fOwnerAlloc ;
public: SC_MANAGER( const TCHAR * pszMachineName, UINT dwAccess, SERVICE_DATABASE database = ACTIVE );
// Constructor using a preexisting SC_HANDLE
SC_MANAGER ( SC_HANDLE hSvcCtrl ) ;
// it will close the handle as well
~SC_MANAGER();
// lock functions
APIERR Lock(); APIERR Unlock(); APIERR QueryLockStatus( LPQUERY_SERVICE_LOCK_STATUS *ppLockStatus );
//
// NOTE: pszGroupName should only be used when enumerating the services
// on the local machine (or if you know the remote machine is NT 4.0+
// and supports the EnumServiceGroup() API.)
//
APIERR EnumServiceStatus( UINT dwServiceType, UINT dwServiceState, LPENUM_SERVICE_STATUS *ppServices, DWORD * lpServicesReturned, const TCHAR * pszGroupName = NULL );
APIERR QueryServiceDisplayName( const TCHAR * pszKeyName, NLS_STR * pnlsDisplayName );
APIERR QueryServiceKeyName( const TCHAR * pszDisplayName, NLS_STR * pnlsKeyName );
#ifdef _BUILD_263_
APIERR UpdateLastKnownGood(); #endif
};
/*************************************************************************
NAME: SC_SERVICE
SYNOPSIS: wrapper class for service object in the registry SC manager database.
INTERFACE: SC_SERVICE() - constructor ~SC_SERVICE() - destructor
APIERR QueryConfig() - examine the service configuration parameters. APIERR ChangeConfig() - change the service configuration parameters
APIERR QuerySecurity() - examine the security descriptor of a service object. APIERR SetSecurity() - modify the security descriptor of a service object.
APIERR QueryStatus() - exmaind the service status APIERR Control() - sends a control to a serivce APIERR Start() - start the execution of a service APIERR Delete() - remove the service from the service control manager database. APIERR EnumDependent() - enumerate services that depend on the specified service.
PARENT: SERVICE_CONTROL
HISTORY: terryk 05-May-1992
**************************************************************************/
DLL_CLASS SC_SERVICE : public SERVICE_CONTROL { public: SC_SERVICE( const SC_MANAGER & scManager, const TCHAR *pszServiceName, UINT dwAccess = GENERIC_READ | GENERIC_EXECUTE ); SC_SERVICE( const SC_MANAGER & scManager, const TCHAR *pszServiceName, const TCHAR *pszDisplayName, UINT dwServiceType, UINT dwStartType, UINT dwErrorControl, const TCHAR *pszBinaryPathName, const TCHAR *pszLoadOrderGroup, const TCHAR *pszDependencies, const TCHAR *pszServiceStartName, const TCHAR *pszPassword, UINT dwAccess = GENERIC_READ | GENERIC_EXECUTE ); ~SC_SERVICE();
// configuration methods
APIERR ChangeConfig( UINT dwServiceType, UINT dwStartType, UINT dwErrorControl, const TCHAR *pszBinaryPathName = NULL, const TCHAR *pszLoadOrderGroup = NULL, const TCHAR *pszDependencies = NULL, const TCHAR *pszServiceStartName = NULL, const TCHAR *pszPassword = NULL, const TCHAR *pszDisplayName = NULL ); APIERR QueryConfig( LPQUERY_SERVICE_CONFIG *ppServiceConfig );
// security methods
APIERR QuerySecurity( SECURITY_INFORMATION dwSecurityInformation, PSECURITY_DESCRIPTOR *ppSecurityDescriptor ); APIERR SetSecurity( SECURITY_INFORMATION dwSecurityInformation, const PSECURITY_DESCRIPTOR lpSecurityDescriptor );
// misc. methods
APIERR QueryStatus( LPSERVICE_STATUS lpServiceStatus ); APIERR Start( UINT dwNumServiceArgs, const TCHAR ** ppszServiceArgs ); APIERR Delete(); APIERR Control( UINT dwControl, LPSERVICE_STATUS lpServiceStatus ); APIERR EnumDependent( UINT dwServiceState, LPENUM_SERVICE_STATUS *ppServiceStatus, DWORD * lpServiceReturned ); };
#endif // _SCMAN_HXX_
|