Leaked source code of windows server 2003
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.
 
 
 
 
 
 

175 lines
3.2 KiB

/*++
Copyright (c) 2002 Microsoft Corporation
Module Name :
service.cpp
Abstract:
Functions to control the SCM
Author:
Christopher Achille (cachille)
Project:
URLScan Update
Revision History:
March 2002: Created
--*/
#include "stdafx.h"
#include "windows.h"
#include "service.h"
// StopService
//
// Stop a service, given a handle to it
//
BOOL
StopService( SC_HANDLE hService )
{
SERVICE_STATUS svcStatus;
DWORD dwTimeWaited = 0;
if ( !ControlService( hService, SERVICE_CONTROL_STOP, &svcStatus ))
{
// Could not send stop message
return FALSE;
}
while ( QueryServiceStatus( hService, & svcStatus ) &&
( svcStatus.dwCurrentState == SERVICE_STOP_PENDING ) &&
( dwTimeWaited < SERVICE_MAXWAIT )
)
{
Sleep( SERVICE_INTERVALCHECK );
dwTimeWaited += SERVICE_INTERVALCHECK;
}
return svcStatus.dwCurrentState == SERVICE_STOPPED;
}
// Stop the webService
//
// Stops the web service, and also tells us if it was running
//
// Paramters:
// bWasRunning - TRUE == web service was running before it was stopped
// FALSE == it was not running, so it did not need to be stopped
//
// Return Values:
// TRUE - Successfully stopped
// FALSE - Could not be stopped
//
BOOL
StopWebSerivce( BOOL *bWasRunning )
{
SC_HANDLE hManager = NULL;
SC_HANDLE hService = NULL;
SERVICE_STATUS svcStatus;
BOOL bRunning = FALSE;
BOOL bRet = TRUE;
// ASSERT( bWasRunning );
hManager = OpenSCManager( NULL, NULL, GENERIC_ALL );
if ( hManager == NULL )
{
// Could not open SCM
return FALSE;
}
hService = ::OpenService( hManager, SERVICE_NAME_WEB, GENERIC_ALL );
if ( hService == NULL )
{
// could not open Service
CloseServiceHandle( hManager );
return FALSE;
}
if ( QueryServiceStatus( hService, &svcStatus ))
{
bRunning = svcStatus.dwCurrentState != SERVICE_STOPPED;
if ( bRunning )
{
// If it is running, try to stop it
bRet = StopService( hService );
}
}
else
{
bRet = FALSE;
}
if ( bRet )
{
*bWasRunning = bRunning;
}
if ( hManager )
{
CloseServiceHandle( hManager );
}
if ( hService )
{
CloseServiceHandle( hService );
}
return bRet;
}
// StartWebService
//
// Start the WebSerivce
//
// Return
// TRUE - Successfuly started
// FALSE - Unsuccessful, not started
BOOL
StartWebSerivce()
{
SC_HANDLE hManager = NULL;
SC_HANDLE hService = NULL;
BOOL bRet = FALSE;
hManager = OpenSCManager( NULL, NULL, GENERIC_ALL );
if ( hManager == NULL )
{
// Could not open SCM
return FALSE;
}
hService = ::OpenService( hManager, SERVICE_NAME_WEB, GENERIC_ALL );
if ( hService )
{
if ( StartService( hService, 0, NULL ) )
{
bRet = TRUE;
}
}
if ( hManager )
{
CloseServiceHandle( hManager );
}
if ( hService )
{
CloseServiceHandle( hService );
}
return bRet;
}