Windows2003-3790/inetsrv/query/h/svcutil.hxx

65 lines
1.9 KiB
C++

//+--------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 2001-2001.
//
// File: svcutil.hxx
//
// Contents: Service control manager helper code.
//
// History: 10-Oct-2001 dlee Created
//
//---------------------------------------------------------------------------
#pragma once
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 IsNull() { return ( 0 == _h ); }
void Free() { if ( 0 != _h ) CloseServiceHandle( _h ); _h = 0; }
private:
SC_HANDLE _h;
};
//+-------------------------------------------------------------------------
//
// Function: IsServiceRunning
//
// Synopsis: Determines if a service is running
//
// Arguments: pwcServiceName -- The name (short or long) of the service
//
// Returns: TRUE if the service is running, FALSE otherwise or if the
// system is low on resources or the status can't be queried.
//
// History: 10-Oct-2001 dlee Created
//
//--------------------------------------------------------------------------
__inline BOOL IsServiceRunning( WCHAR const * pwcServiceName )
{
CServiceHandle xhSC( OpenSCManager( 0, 0, SC_MANAGER_ALL_ACCESS ) );
if ( xhSC.IsNull() )
return FALSE;
CServiceHandle xhService( OpenService( xhSC.Get(),
pwcServiceName,
SERVICE_QUERY_STATUS ) );
if ( xhSC.IsNull() )
return FALSE;
SERVICE_STATUS svcStatus;
if ( QueryServiceStatus( xhService.Get(), &svcStatus ) )
return ( SERVICE_RUNNING == svcStatus.dwCurrentState );
return FALSE;
} //IsServiceRunning