| // THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF |
| // ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO |
| // THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A |
| // PARTICULAR PURPOSE. |
| // |
| // Copyright (C) 1993-1997 Microsoft Corporation. All Rights Reserved. |
| // |
| // MODULE: service.h |
| // |
| // AUTHOR: Craig Link |
| // |
| // |
| // Comments: The use of this header file and the accompanying service.c |
| // file simplifies the process of writting a service. You as a developer |
| // simply need to follow the TODO's outlined in this header file, and |
| // implement the ServiceStart() and ServiceStop() functions. |
| // |
| // There is no need to modify the code in service.c. Just add service.c |
| // to your project and link with the following libraries... |
| // |
| // libcmt.lib kernel32.lib advapi.lib shell32.lib |
| // |
| // This code also supports unicode. Be sure to compile both service.c and |
| // and code #include "service.h" with the same Unicode setting. |
| // |
| // Upon completion, your code will have the following command line interface |
| // |
| // <service exe> -? to display this list |
| // <service exe> -install to install the service |
| // <service exe> -remove to remove the service |
| // <service exe> -debug <params> to run as a console app for debugging |
| // |
| // Note: This code also implements Ctrl+C and Ctrl+Break handlers |
| // when using the debug option. These console events cause |
| // your ServiceStop routine to be called |
| // |
| // Also, this code only handles the OWN_SERVICE service type |
| // running in the LOCAL_SYSTEM security context. |
| // |
| // To control your service ( start, stop, etc ) you may use the |
| // Services control panel applet or the NET.EXE program. |
| // |
| // To aid in writing/debugging service, the |
| // SDK contains a utility (MSTOOLS\BIN\SC.EXE) that |
| // can be used to control, configure, or obtain service status. |
| // SC displays complete status for any service/driver |
| // in the service database, and allows any of the configuration |
| // parameters to be easily changed at the command line. |
| // For more information on SC.EXE, type SC at the command line. |
| // |
| |
| /* |
| * modified Mar.07, 2002 by Feng Qin <fqin@ncsa.uiuc.edu> |
| * Mar.15, 2002 |
| * |
| * removed some functions we don't use at all |
| * add code to start the service immediately after service is installed |
| * |
| * $Id: service.h,v 1.1.1.1 2004/05/18 01:50:44 kgibbs Exp $ |
| */ |
| |
| #ifndef _SERVICE_H |
| #define _SERVICE_H |
| |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| |
| ////////////////////////////////////////////////////////////////////////////// |
| //// todo: change to desired strings |
| //// |
| // name of the executable |
| #define SZAPPNAME "IPerf" |
| |
| // internal name of the service |
| #define SZSERVICENAME "IPerfService" |
| |
| // displayed name of the service |
| #define SZSERVICEDISPLAYNAME "IPerf Service" |
| |
| // list of service dependencies - "dep1\0dep2\0\0" |
| #define SZDEPENDENCIES "" |
| |
| ////////////////////////////////////////////////////////////////////////////// |
| |
| |
| |
| ////////////////////////////////////////////////////////////////////////////// |
| //// todo: ServiceStart()must be defined by in your code. |
| //// The service should use ReportStatusToSCMgr to indicate |
| //// progress. This routine must also be used by StartService() |
| //// to report to the SCM when the service is running. |
| //// |
| //// If a ServiceStop procedure is going to take longer than |
| //// 3 seconds to execute, it should spawn a thread to |
| //// execute the stop code, and return. Otherwise, the |
| //// ServiceControlManager will believe that the service has |
| //// stopped responding |
| //// |
| VOID ServiceStart(DWORD dwArgc, LPTSTR *lpszArgv); |
| VOID ServiceStop(); |
| ////////////////////////////////////////////////////////////////////////////// |
| |
| VOID WINAPI service_ctrl(DWORD dwCtrlCode); |
| VOID WINAPI service_main(DWORD dwArgc, LPTSTR *lpszArgv); |
| VOID CmdInstallService(int argc, char **argv); |
| BOOL CmdRemoveService(); |
| BOOL CmdStartService(int argc, char **argv); |
| LPTSTR GetLastErrorText( LPTSTR lpszBuf, DWORD dwSize ); |
| VOID ServiceStart (DWORD dwArgc, LPTSTR *lpszArgv); |
| VOID ServiceStop(); |
| |
| ////////////////////////////////////////////////////////////////////////////// |
| //// The following are procedures which |
| //// may be useful to call within the above procedures, |
| //// but require no implementation by the user. |
| //// They are implemented in service.c |
| |
| // |
| // FUNCTION: ReportStatusToSCMgr() |
| // |
| // PURPOSE: Sets the current status of the service and |
| // reports it to the Service Control Manager |
| // |
| // PARAMETERS: |
| // dwCurrentState - the state of the service |
| // dwWin32ExitCode - error code to report |
| // dwWaitHint - worst case estimate to next checkpoint |
| // |
| // RETURN VALUE: |
| // TRUE - success |
| // FALSE - failure |
| // |
| BOOL ReportStatusToSCMgr(DWORD dwCurrentState, DWORD dwWin32ExitCode, DWORD dwWaitHint); |
| |
| |
| // |
| // FUNCTION: AddToMessageLog(LPTSTR lpszMsg) |
| // |
| // PURPOSE: Allows any thread to log an error message |
| // |
| // PARAMETERS: |
| // lpszMsg - text for message |
| // |
| // RETURN VALUE: |
| // none |
| // |
| void AddToMessageLog(LPTSTR lpszMsg); |
| ////////////////////////////////////////////////////////////////////////////// |
| |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif |
| |