Source code of Windows XP (NT5)
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.
 
 
 
 
 
 

251 lines
7.0 KiB

/**********************************************************************/
/** 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_