1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
/**
@file
@brief
Windows NT Service class library
Copyright Abandoned 1998 Irena Pancirov - Irnet Snc
This file is public domain and comes with NO WARRANTY of any kind
*/
// main application thread
typedef void (*THREAD_FC)(void *);
class NTService
{
public:
NTService();
~NTService();
BOOL bOsNT; ///< true if OS is NT, false for Win95
//install optinos
DWORD dwDesiredAccess;
DWORD dwServiceType;
DWORD dwStartType;
DWORD dwErrorControl;
LPSTR szLoadOrderGroup;
LPDWORD lpdwTagID;
LPSTR szDependencies;
OSVERSIONINFO osVer;
// time-out (in milisec)
int nStartTimeOut;
int nStopTimeOut;
int nPauseTimeOut;
int nResumeTimeOut;
//
DWORD my_argc;
LPTSTR *my_argv;
HANDLE hShutdownEvent;
int nError;
DWORD dwState;
BOOL GetOS(); // returns TRUE if WinNT
BOOL IsNT() { return bOsNT;}
//init service entry point
long Init(LPCSTR szInternName,void *ServiceThread);
//application shutdown event
void SetShutdownEvent(HANDLE hEvent){ hShutdownEvent=hEvent; }
//service install / un-install
BOOL Install(int startType,LPCSTR szInternName,LPCSTR szDisplayName,
LPCSTR szFullPath, LPCSTR szAccountName=NULL,
LPCSTR szPassword=NULL);
BOOL SeekStatus(LPCSTR szInternName, int OperationType);
BOOL Remove(LPCSTR szInternName);
BOOL IsService(LPCSTR ServiceName);
BOOL got_service_option(char **argv, char *service_option);
BOOL is_super_user();
/*
SetRunning() is to be called by the application
when initialization completes and it can accept
stop request
*/
void SetRunning(void);
/*
Stop() is to be called by the application to stop
the service
*/
void Stop(void);
protected:
LPSTR ServiceName;
HANDLE hExitEvent;
SERVICE_STATUS_HANDLE hServiceStatusHandle;
BOOL bPause;
BOOL bRunning;
HANDLE hThreadHandle;
THREAD_FC fpServiceThread;
void PauseService();
void ResumeService();
void StopService();
BOOL StartService();
static void ServiceMain(DWORD argc, LPTSTR *argv);
static void ServiceCtrlHandler (DWORD ctrlCode);
void Exit(DWORD error);
BOOL SetStatus (DWORD dwCurrentState,DWORD dwWin32ExitCode,
DWORD dwServiceSpecificExitCode,
DWORD dwCheckPoint,DWORD dwWaitHint);
};
/* ------------------------- the end -------------------------------------- */
|