]> sjero.net Git - iperf/blob - include/service.h
Original 2.0.2 iperf sources
[iperf] / include / service.h
1 // THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
2 // ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
3 // THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
4 // PARTICULAR PURPOSE.
5 //
6 // Copyright (C) 1993-1997  Microsoft Corporation.  All Rights Reserved.
7 //
8 //  MODULE: service.h
9 //
10 //  AUTHOR: Craig Link
11 //
12 //
13 //  Comments:  The use of this header file and the accompanying service.c
14 //  file simplifies the process of writting a service.  You as a developer
15 //  simply need to follow the TODO's outlined in this header file, and 
16 //  implement the ServiceStart() and ServiceStop() functions.
17 //  
18 //  There is no need to modify the code in service.c.  Just add service.c
19 //  to your project and link with the following libraries...
20 //
21 //  libcmt.lib kernel32.lib advapi.lib shell32.lib
22 //
23 //  This code also supports unicode.  Be sure to compile both service.c and
24 //  and code #include "service.h" with the same Unicode setting.
25 //
26 //  Upon completion, your code will have the following command line interface
27 //
28 //  <service exe> -?                to display this list
29 //  <service exe> -install          to install the service
30 //  <service exe> -remove           to remove the service
31 //  <service exe> -debug <params>   to run as a console app for debugging
32 //
33 //  Note: This code also implements Ctrl+C and Ctrl+Break handlers
34 //        when using the debug option.  These console events cause
35 //        your ServiceStop routine to be called
36 //
37 //        Also, this code only handles the OWN_SERVICE service type
38 //        running in the LOCAL_SYSTEM security context.
39 //
40 //        To control your service ( start, stop, etc ) you may use the
41 //        Services control panel applet or the NET.EXE program.
42 //
43 //        To aid in writing/debugging service, the
44 //        SDK contains a utility (MSTOOLS\BIN\SC.EXE) that
45 //        can be used to control, configure, or obtain service status.
46 //        SC displays complete status for any service/driver
47 //        in the service database, and allows any of the configuration
48 //        parameters to be easily changed at the command line.
49 //        For more information on SC.EXE, type SC at the command line.
50 //
51
52 /*
53  * modified Mar.07, 2002 by Feng Qin <fqin@ncsa.uiuc.edu>
54  *          Mar.15, 2002
55  *
56  * removed some functions we don't use at all
57  * add code to start the service immediately after service is installed
58  * 
59  * $Id: service.h,v 1.1.1.1 2004/05/18 01:50:44 kgibbs Exp $
60  */
61
62 #ifndef _SERVICE_H
63 #define _SERVICE_H
64
65
66 #ifdef __cplusplus
67 extern "C" {
68 #endif
69
70
71 //////////////////////////////////////////////////////////////////////////////
72 //// todo: change to desired strings
73 ////
74 // name of the executable
75 #define SZAPPNAME            "IPerf"
76
77 // internal name of the service
78 #define SZSERVICENAME        "IPerfService"
79
80 // displayed name of the service
81 #define SZSERVICEDISPLAYNAME "IPerf Service"
82
83 // list of service dependencies - "dep1\0dep2\0\0"
84 #define SZDEPENDENCIES       ""
85
86 //////////////////////////////////////////////////////////////////////////////
87
88
89
90 //////////////////////////////////////////////////////////////////////////////
91 //// todo: ServiceStart()must be defined by in your code.
92 ////       The service should use ReportStatusToSCMgr to indicate
93 ////       progress.  This routine must also be used by StartService()
94 ////       to report to the SCM when the service is running.
95 ////
96 ////       If a ServiceStop procedure is going to take longer than
97 ////       3 seconds to execute, it should spawn a thread to
98 ////       execute the stop code, and return.  Otherwise, the
99 ////       ServiceControlManager will believe that the service has
100 ////       stopped responding
101 ////
102 VOID ServiceStart(DWORD dwArgc, LPTSTR *lpszArgv);
103 VOID ServiceStop();
104 //////////////////////////////////////////////////////////////////////////////
105
106 VOID WINAPI service_ctrl(DWORD dwCtrlCode);
107 VOID WINAPI service_main(DWORD dwArgc, LPTSTR *lpszArgv);
108 VOID CmdInstallService(int argc, char **argv);
109 BOOL CmdRemoveService();
110 BOOL CmdStartService(int argc, char **argv);
111 LPTSTR GetLastErrorText( LPTSTR lpszBuf, DWORD dwSize );
112 VOID ServiceStart (DWORD dwArgc, LPTSTR *lpszArgv);
113 VOID ServiceStop();
114
115 //////////////////////////////////////////////////////////////////////////////
116 //// The following are procedures which
117 //// may be useful to call within the above procedures,
118 //// but require no implementation by the user.
119 //// They are implemented in service.c
120
121 //
122 //  FUNCTION: ReportStatusToSCMgr()
123 //
124 //  PURPOSE: Sets the current status of the service and
125 //           reports it to the Service Control Manager
126 //
127 //  PARAMETERS:
128 //    dwCurrentState - the state of the service
129 //    dwWin32ExitCode - error code to report
130 //    dwWaitHint - worst case estimate to next checkpoint
131 //
132 //  RETURN VALUE:
133 //    TRUE  - success 
134 //    FALSE - failure
135 //
136 BOOL ReportStatusToSCMgr(DWORD dwCurrentState, DWORD dwWin32ExitCode, DWORD dwWaitHint);
137
138
139 //
140 //  FUNCTION: AddToMessageLog(LPTSTR lpszMsg)
141 //
142 //  PURPOSE: Allows any thread to log an error message
143 //
144 //  PARAMETERS:
145 //    lpszMsg - text for message
146 //
147 //  RETURN VALUE:
148 //    none
149 //
150 void AddToMessageLog(LPTSTR lpszMsg);
151 //////////////////////////////////////////////////////////////////////////////
152
153
154 #ifdef __cplusplus
155 }
156 #endif
157
158 #endif
159