1 /*--------------------------------------------------------------------------- 2 THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF 3 ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED 4 TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A 5 PARTICULAR PURPOSE. 6 7 Copyright (C) Microsoft Corporation. All rights reserved. 8 9 MODULE: service.h 10 11 Comments: The use of this header file and the accompanying service.c 12 file simplifies the process of writting a service. You as a developer 13 simply need to follow the TODO's outlined in this header file, and 14 implement the ServiceStart() and ServiceStop() functions. 15 16 There is no need to modify the code in service.c. Just add service.c 17 to your project and link with the following libraries... 18 19 libcmt.lib kernel32.lib advapi.lib shell32.lib 20 21 This code also supports unicode. Be sure to compile both service.c and 22 and code #include "service.h" with the same Unicode setting. 23 24 Upon completion, your code will have the following command line interface 25 26 <service exe> -? to display this list 27 <service exe> -install to install the service 28 <service exe> -remove to remove the service 29 <service exe> -debug <params> to run as a console app for debugging 30 31 Note: This code also implements Ctrl+C and Ctrl+Break handlers 32 when using the debug option. These console events cause 33 your ServiceStop routine to be called 34 35 Also, this code only handles the OWN_SERVICE service type 36 running in the LOCAL_SYSTEM security context. 37 38 To control your service ( start, stop, etc ) you may use the 39 Services control panel applet or the NET.EXE program. 40 41 To aid in writing/debugging service, the 42 SDK contains a utility (MSTOOLS\BIN\SC.EXE) that 43 can be used to control, configure, or obtain service status. 44 SC displays complete status for any service/driver 45 in the service database, and allows any of the configuration 46 parameters to be easily changed at the command line. 47 For more information on SC.EXE, type SC at the command line. 48 49 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 "nfsd" 66 // internal name of the service 67 #define SZSERVICENAME "pnfs" 68 // displayed name of the service 69 #define SZSERVICEDISPLAYNAME "NFSv4.1 Client" 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 133 #ifdef __cplusplus 134 } 135 #endif 136 137 #endif 138