nexmon – Blame information for rev 1
?pathlinks?
Rev | Author | Line No. | Line |
---|---|---|---|
1 | office | 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 |