windows-nt/Source/XPSP1/NT/inetsrv/query/h/smartsvc.hxx
2020-09-26 16:20:57 +08:00

72 lines
1.6 KiB
C++

//+-------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1997.
//
// File: smartsvc.hxx
//
// Contents: Smart service controller
//
// History: 01 May 1997 KyleP Created
//
//--------------------------------------------------------------------------
#pragma once
//
// smart pointer class for SC_HANDLEs
//
class CServiceHandle
{
public :
CServiceHandle() { _h = 0; }
CServiceHandle( SC_HANDLE hSC ) : _h( hSC ) {}
~CServiceHandle() { Free(); }
void Set( SC_HANDLE h ) { _h = h; }
SC_HANDLE Get() { return _h; }
BOOL IsOk() { return (0 != _h); }
void Free()
{
if ( IsOk() )
CloseServiceHandle( _h );
_h = 0;
}
private:
SC_HANDLE _h;
};
//+-------------------------------------------------------------------------
//
// Function: WaitForSvc
//
// Synopsis: Stops a given service
//
// Arguments: xSC -- the service control manager
// pwcSVC -- name of the service to stop
//
// Returns: TRUE if the service was stopped
//
// History: 8-Jan-97 dlee Created
//
//--------------------------------------------------------------------------
inline BOOL WaitForSvc( CServiceHandle &x )
{
SERVICE_STATUS svcStatus;
if ( QueryServiceStatus( x.Get(), &svcStatus ) )
return SERVICE_STOP_PENDING == svcStatus.dwCurrentState ||
SERVICE_RUNNING == svcStatus.dwCurrentState ||
SERVICE_PAUSED == svcStatus.dwCurrentState;
return FALSE;
} //WaitForSvc