#ifndef WINSERVICE_H #define WINSERVICE_H /* * * Windows Service related functions declaration * By Raju Krishanppa(raju_krishnappa@yahoo.com) * */ #ifdef __cplusplus extern "C" { #endif /* */ /* * Define Constants for Register, De-register , Run As service or Console mode */ #define REGISTER_SERVICE 0 #define UN_REGISTER_SERVICE 1 #define RUN_AS_SERVICE 2 #define RUN_AS_CONSOLE 3 /* * Error levels returned when registering or unregistering the service */ #define SERVICE_ERROR_NONE 0 #define SERVICE_ERROR_SCM_OPEN 1 /* Can not open SCM */ #define SERVICE_ERROR_CREATE_SERVICE 2 /* Can not create service */ #define SERVICE_ERROR_CREATE_REGISTRY_ENTRIES 3 /* Can not create registry entries */ #define SERVICE_ERROR_OPEN_SERVICE 4 /* Can not open service (service does not exist) */ /* * Define Message catalog ID * MessageId: DISPLAY_MSG * MessageText: %1. */ #define DISPLAY_MSG 0x00000064L /* * Hint Value to SCM to wait before sending successive commands to service */ #define SCM_WAIT_INTERVAL 7000 /* * Define Generic String Size, to hold Error or Information */ #define MAX_STR_SIZE 1024 /* * Delcare Global variables, which are visible to other modules */ extern BOOL g_fRunningAsService; /* * Input parameter structure to thread */ typedef struct _InputParams { DWORD Argc; LPTSTR *Argv; } InputParams; /* * Define Service Related functions */ /* * To register application as windows service with SCM */ int RegisterService (LPCTSTR lpszServiceName, LPCTSTR lpszServiceDisplayName, LPCTSTR lpszServiceDescription, InputParams * StartUpArg, int quiet); /* * To unregister service */ int UnregisterService (LPCTSTR lpszServiceName, int quiet); /* * To parse command line for startup option */ INT ParseCmdLineForServiceOption (INT argc, TCHAR * argv[], int *quiet); /* * To write to windows event log */ VOID WriteToEventLog (WORD wType, LPCTSTR pszFormat, ...); /* * To display generic windows error */ VOID DisplayError (LPCTSTR pszTitle, int quite); /* * Service Main function, Which will spawn a thread, and calls the * Service run part */ VOID WINAPI ServiceMain (DWORD argc, LPTSTR argv[]); /* * To start Service */ BOOL RunAsService (INT (*ServiceFunction) (INT, LPTSTR *)); /* * Call back function to process SCM Requests */ VOID WINAPI ControlHandler (DWORD dwControl); /* * To Stop the service */ VOID ProcessServiceStop (VOID); /* * To Pause service */ VOID ProcessServicePause (VOID); /* * To Continue paused service */ VOID ProcessServiceContinue (VOID); /* * To send Current Service status to SCM when INTERROGATE command is sent */ VOID ProcessServiceInterrogate (VOID); /* * To allocate and Set security descriptor */ BOOL SetSimpleSecurityAttributes (SECURITY_ATTRIBUTES * pSecurityAttr); /* * To free Security Descriptor */ VOID FreeSecurityAttributes (SECURITY_ATTRIBUTES * pSecurityAttr); /* * TheadFunction - To spawan as thread - Invokes registered service function */ unsigned WINAPI ThreadFunction (LPVOID lpParam); /* * Service STOP function registration with this framewrok * * this function must be invoked before calling RunAsService */ VOID RegisterStopFunction (VOID (*StopFunc) (VOID)); #ifdef __cplusplus } #endif /* */ #endif /* WINSERVICE_H */