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-1996  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 #ifndef _SERVICE_H
53 #define _SERVICE_H
54 
55 
56 #ifdef __cplusplus
57 extern "C" {
58 #endif
59 
60 
61 //////////////////////////////////////////////////////////////////////////////
62 //// todo: change to desired strings
63 ////
64 // name of the executable
65 #define SZAPPNAME            "rxstack"
66 // internal name of the service
67 #define SZSERVICENAME        "Regina Stack"
68 // displayed name of the service
69 #define SZSERVICEDISPLAYNAME "Regina Stack"
70 // list of service dependencies - "dep1\0dep2\0\0"
71 #define SZDEPENDENCIES       ""
72 //////////////////////////////////////////////////////////////////////////////
73 
74 
75 
76 //////////////////////////////////////////////////////////////////////////////
77 //// todo: ServiceStart()must be defined by in your code.
78 ////       The service should use ReportStatusToSCMgr to indicate
79 ////       progress.  This routine must also be used by StartService()
80 ////       to report to the SCM when the service is running.
81 ////
82 ////       If a ServiceStop procedure is going to take longer than
83 ////       3 seconds to execute, it should spawn a thread to
84 ////       execute the stop code, and return.  Otherwise, the
85 ////       ServiceControlManager will believe that the service has
86 ////       stopped responding
87 ////
88 VOID ServiceStart(DWORD dwArgc, LPTSTR *lpszArgv);
89 VOID ServiceStop();
90 //////////////////////////////////////////////////////////////////////////////
91 
92 
93 
94 //////////////////////////////////////////////////////////////////////////////
95 //// The following are procedures which
96 //// may be useful to call within the above procedures,
97 //// but require no implementation by the user.
98 //// They are implemented in service.c
99 
100 //
101 //  FUNCTION: ReportStatusToSCMgr()
102 //
103 //  PURPOSE: Sets the current status of the service and
104 //           reports it to the Service Control Manager
105 //
106 //  PARAMETERS:
107 //    dwCurrentState - the state of the service
108 //    dwWin32ExitCode - error code to report
109 //    dwWaitHint - worst case estimate to next checkpoint
110 //
111 //  RETURN VALUE:
112 //    TRUE  - success
113 //    FALSE - failure
114 //
115 BOOL ReportStatusToSCMgr(DWORD dwCurrentState, DWORD dwWin32ExitCode, DWORD dwWaitHint);
116 
117 
118 //
119 //  FUNCTION: AddToMessageLog(LPTSTR lpszMsg)
120 //
121 //  PURPOSE: Allows any thread to log an error message
122 //
123 //  PARAMETERS:
124 //    lpszMsg - text for message
125 //
126 //  RETURN VALUE:
127 //    none
128 //
129 void AddToMessageLog(LPTSTR lpszMsg);
130 //////////////////////////////////////////////////////////////////////////////
131 
132 // Are we running on NT ?
133 BOOL IsItNT( void );
134 
135 #ifdef __cplusplus
136 }
137 #endif
138 
139 #endif
140