windows-nt/Source/XPSP1/NT/printscan/wia/inc/svcinfo.h

242 lines
6.1 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
/*++
Copyright (c) 1997 Microsoft Corporation
Module Name:
svcinfo.h
Abstract:
Author:
Vlad Sadovsky (vlads) 22-Sep-1997
Environment:
User Mode - Win32
Revision History:
22-Sep-1997 VladS created
--*/
# ifndef _SVCINFO_H_
# define _SVCINFO_H_
/************************************************************
* Include Headers
************************************************************/
#include <base.h>
/***********************************************************
* Named constants definitions
************************************************************/
/************************************************************
* Private Constants
************************************************************/
#define NULL_SERVICE_STATUS_HANDLE ( (SERVICE_STATUS_HANDLE ) NULL)
#define SERVICE_START_WAIT_HINT ( 10000) // milliseconds
#define SERVICE_STOP_WAIT_HINT ( 10000) // milliseconds
#ifndef DLLEXP
//#define DLLEXP __declspec( dllexport )
#define DLLEXP
#endif
/************************************************************
* Type Definitions
************************************************************/
#define SIGNATURE_SVC (DWORD)'SVCa'
#define SIGNATURE_SVC_FREE (DWORD)'SVCf'
//
// These functions get called back with the pointer to SvcInfo object
// as the context parameter.
//
typedef DWORD ( *PFN_SERVICE_SPECIFIC_INITIALIZE) ( LPVOID pContext);
typedef DWORD ( *PFN_SERVICE_SPECIFIC_CLEANUP) ( LPVOID pContext);
typedef DWORD ( *PFN_SERVICE_SPECIFIC_PNPPWRHANDLER) ( LPVOID pContext,UINT msg,WPARAM wParam,LPARAM lParam);
typedef VOID ( *PFN_SERVICE_CTRL_HANDLER) ( DWORD OpCode);
class SVC_INFO : public BASE {
private:
DWORD m_dwSignature;
SERVICE_STATUS m_svcStatus;
SERVICE_STATUS_HANDLE m_hsvcStatus;
HANDLE m_hShutdownEvent;
STR m_sServiceName;
STR m_sModuleName;
//
// Call back functions for service specific data/function
//
PFN_SERVICE_SPECIFIC_INITIALIZE m_pfnInitialize;
PFN_SERVICE_SPECIFIC_CLEANUP m_pfnCleanup;
PFN_SERVICE_SPECIFIC_PNPPWRHANDLER m_pfnPnpPower;
DWORD ReportServiceStatus( VOID);
VOID InterrogateService( VOID );
VOID StopService( VOID );
VOID PauseService( VOID );
VOID ContinueService( VOID );
VOID ShutdownService( VOID );
public:
// *** IUnknown methods ***
STDMETHODIMP QueryInterface( REFIID riid, LPVOID * ppvObj);
STDMETHODIMP_(ULONG) AddRef( void);
STDMETHODIMP_(ULONG) Release( void);
//
// Initialization/Termination related methods
//
SVC_INFO(
IN LPCTSTR lpszServiceName,
IN TCHAR * lpszModuleName,
IN PFN_SERVICE_SPECIFIC_INITIALIZE pfnInitialize,
IN PFN_SERVICE_SPECIFIC_CLEANUP pfnCleanup,
IN PFN_SERVICE_SPECIFIC_PNPPWRHANDLER pfnPnpPower
);
~SVC_INFO( VOID);
BOOL IsValid(VOID) const
{
return (( QueryError() == NO_ERROR) && (m_dwSignature == SIGNATURE_SVC));
}
DWORD QueryCurrentServiceState( VOID) const
{
return ( m_svcStatus.dwCurrentState);
}
//
// Parameter access methods.
//
//
// Service control related methods
//
LPCTSTR QueryServiceName(VOID) const
{
return m_sServiceName.QueryStr();
}
DWORD
QueryServiceSpecificExitCode( VOID) const
{
return ( m_svcStatus.dwServiceSpecificExitCode);
}
VOID
SetServiceSpecificExitCode( DWORD err)
{
m_svcStatus.dwServiceSpecificExitCode = err;
}
DWORD
DelayCurrentServiceCtrlOperation( IN DWORD dwWaitHint)
{
return
UpdateServiceStatus(m_svcStatus.dwCurrentState,
m_svcStatus.dwWin32ExitCode,
m_svcStatus.dwCheckPoint,
dwWaitHint);
}
DWORD
UpdateServiceStatus(IN DWORD State,
IN DWORD Win32ExitCode,
IN DWORD CheckPoint,
IN DWORD WaitHint );
VOID
ServiceCtrlHandler( IN DWORD dwOpCode);
DWORD
StartServiceOperation(
IN PFN_SERVICE_CTRL_HANDLER pfnCtrlHandler
);
//
// Miscellaneous methods
//
}; // class SVC_INFO
typedef SVC_INFO * PSVC_INFO;
/************************************************************
* Macros
************************************************************/
//
//
// Use the following macro once in outer scope of the file
// where we construct the global SvcInfo object.
//
// Every client of SvcInfo should define the following macro
// passing as parameter their global pointer to SvcInfo object
// This is required to generate certain stub functions, since
// the service controller call-back functions do not return
// the context information.
//
// Also we define the global g_pSvcInfo variable and
// a static variable gs_pfnSch,which is a pointer to the local service control handler function.
//
# define _INTERNAL_DEFINE_SVCINFO_INTERFACE( pSvcInfo) \
\
static VOID ServiceCtrlHandler( DWORD OpCode) \
{ \
( pSvcInfo)->ServiceCtrlHandler( OpCode); \
} \
\
static PFN_SERVICE_CTRL_HANDLER gs_pfnSch = ServiceCtrlHandler;
//
// Since all the services should use the global variable called g_pSvcInfo
// this is a convenience macro for defining the interface for services
// structure
//
# define DEFINE_SVC_INFO_INTERFACE() \
PSVC_INFO g_pSvcInfo; \
_INTERNAL_DEFINE_SVCINFO_INTERFACE( g_pSvcInfo);
//
// Use the macro SERVICE_CTRL_HANDLER() to pass the parameter for
// service control handler when we initialize the SvcInfo object
//
# define SERVICE_CTRL_HANDLER() ( gs_pfnSch)
# endif // _SVCINFO_H_
/************************ End of File ***********************/