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 160