svcproc.h
上传用户:hzhsqp
上传日期:2007-01-06
资源大小:1600k
文件大小:7k
源码类别:

IP电话/视频会议

开发平台:

Visual C++

  1. /*
  2.  * svcproc.h
  3.  *
  4.  * Service Process (daemon) class.
  5.  *
  6.  * Portable Windows Library
  7.  *
  8.  * Copyright (c) 1993-1998 Equivalence Pty. Ltd.
  9.  *
  10.  * The contents of this file are subject to the Mozilla Public License
  11.  * Version 1.0 (the "License"); you may not use this file except in
  12.  * compliance with the License. You may obtain a copy of the License at
  13.  * http://www.mozilla.org/MPL/
  14.  *
  15.  * Software distributed under the License is distributed on an "AS IS"
  16.  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
  17.  * the License for the specific language governing rights and limitations
  18.  * under the License.
  19.  *
  20.  * The Original Code is Portable Windows Library.
  21.  *
  22.  * The Initial Developer of the Original Code is Equivalence Pty. Ltd.
  23.  *
  24.  * Portions are Copyright (C) 1993 Free Software Foundation, Inc.
  25.  * All Rights Reserved.
  26.  *
  27.  * Contributor(s): ______________________________________.
  28.  *
  29.  * $Log: svcproc.h,v $
  30.  * Revision 1.24  1998/12/04 10:13:08  robertj
  31.  * Added virtual for determining if process is a service. Fixes linkage problem.
  32.  *
  33.  * Revision 1.23  1998/11/30 02:55:35  robertj
  34.  * New directory structure
  35.  *
  36.  * Revision 1.22  1998/09/24 03:30:29  robertj
  37.  * Added open software license.
  38.  *
  39.  * Revision 1.21  1998/04/07 13:32:31  robertj
  40.  * Changed startup code to support PApplication class.
  41.  *
  42.  * Revision 1.20  1998/03/29 06:16:50  robertj
  43.  * Rearranged initialisation sequence so PProcess descendent constructors can do "things".
  44.  *
  45.  * Revision 1.19  1997/07/08 13:00:57  robertj
  46.  * DLL support.
  47.  *
  48.  * Revision 1.18  1997/03/18 21:23:26  robertj
  49.  * Fix service manager falsely accusing app of crashing if OnStart() is slow.
  50.  *
  51.  * Revision 1.17  1997/02/05 11:49:38  robertj
  52.  * Changed current process function to return reference and validate objects descendancy.
  53.  *
  54.  * Revision 1.16  1996/11/18 11:32:02  robertj
  55.  * Fixed bug in doing a "stop" command closing ALL instances of service.
  56.  *
  57.  * Revision 1.15  1996/10/31 12:38:56  robertj
  58.  * Fixed bug in window not being displayed when command line used.
  59.  *
  60.  * Revision 1.14  1996/10/08 13:04:53  robertj
  61.  * Rewrite to use standard window isntead of console window.
  62.  *
  63.  * Revision 1.13  1996/08/19 13:36:41  robertj
  64.  * Moved PSYSTEMLOG macro to common code.
  65.  *
  66.  * Revision 1.12  1996/08/17 10:00:35  robertj
  67.  * Changes for Windows DLL support.
  68.  *
  69.  * Revision 1.11  1996/08/09 11:17:26  robertj
  70.  * Moved log macro to platform dependent header.
  71.  *
  72.  * Revision 1.10  1996/08/08 10:09:16  robertj
  73.  * Directory structure changes for common files.
  74.  *
  75.  * Revision 1.9  1996/07/30 12:23:44  robertj
  76.  * Changed SIGINTR handler to just set termination event.
  77.  *
  78.  * Revision 1.8  1996/07/20 05:33:06  robertj
  79.  * Fixed some Win95 service bugs and missing functionality (service stop).
  80.  *
  81.  * Revision 1.7  1996/05/23 10:03:00  robertj
  82.  * Windows 95 support.
  83.  *
  84.  * Revision 1.6  1996/04/17 12:09:02  robertj
  85.  * Added service dependencies.
  86.  *
  87.  * Revision 1.5  1996/01/28 02:55:02  robertj
  88.  * WIN16 support.
  89.  *
  90.  * Revision 1.4  1996/01/02 12:54:12  robertj
  91.  * Made "common".
  92.  *
  93.  * Revision 1.3  1995/12/10 11:50:05  robertj
  94.  * Numerous fixes for WIN32 service processes.
  95.  *
  96.  * Revision 1.2  1995/07/02 01:23:27  robertj
  97.  * Set up service process to be in subthread not main thread.
  98.  *
  99.  * Revision 1.1  1995/06/17 00:50:54  robertj
  100.  * Initial revision
  101.  *
  102.  */
  103. #ifndef _PSERVICEPROCESS
  104. ///////////////////////////////////////////////////////////////////////////////
  105. // PServiceProcess
  106. #include "../../svcproc.h"
  107. #ifdef _WIN32
  108.   public:
  109.     virtual const char * GetServiceDependencies() const { return NULL; }
  110.       // Get a set of null terminated strings terminated with double null.
  111.     virtual BOOL IsServiceProcess() const;
  112.   private:
  113.     static void __stdcall StaticMainEntry(DWORD argc, LPTSTR * argv);
  114.     /* Internal function called from the Service Manager. This simply calls the
  115.        <A>MainEntry()</A> function on the PServiceProcess instance.
  116.     */
  117.     void MainEntry(DWORD argc, LPTSTR * argv);
  118.     /* Internal function function that takes care of actually starting the
  119.        service, informing the service controller at each step along the way.
  120.        After launching the worker thread, it waits on the event that the worker
  121.        thread will signal at its termination.
  122.     */
  123.     static void StaticThreadEntry(void *);
  124.     /* Internal function called to begin the work of the service process. This
  125.        essentially just calls the <A>Main()</A> function on the
  126.        PServiceProcess instance.
  127.     */
  128.     void ThreadEntry();
  129.     /* Internal function function that starts the worker thread for the
  130.        service.
  131.     */
  132.     static void __stdcall StaticControlEntry(DWORD code);
  133.     /* This function is called by the Service Controller whenever someone calls
  134.        ControlService in reference to our service.
  135.      */
  136.     void ControlEntry(DWORD code);
  137.     /* This function is called by the Service Controller whenever someone calls
  138.        ControlService in reference to our service.
  139.      */
  140.     static void Control_C(int);
  141.     /* This function is called on a SIGINTR (Control-C) signal for use in
  142.        debug mode.
  143.      */
  144.     BOOL ReportStatus(
  145.       DWORD dwCurrentState,
  146.       DWORD dwWin32ExitCode = NO_ERROR,
  147.       DWORD dwCheckPoint = 0,
  148.       DWORD dwWaitHint = 0
  149.     );
  150.     /* This function is called by the Main() and Control() functions to update the
  151.        service's status to the service control manager.
  152.      */
  153.     BOOL ProcessCommand(const char * cmd);
  154.     // Process command line argument for controlling the service.
  155.     BOOL CreateControlWindow(BOOL createDebugWindow);
  156.     static LPARAM WINAPI StaticWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
  157.     LPARAM WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
  158.     void DebugOutput(const char * out);
  159.     BOOL                  isWin95;
  160.     SERVICE_STATUS        status;
  161.     SERVICE_STATUS_HANDLE statusHandle;
  162.     HANDLE                startedEvent;
  163.     HANDLE                terminationEvent;
  164.     HWND                  controlWindow;
  165.     HWND                  debugWindow;
  166. #endif
  167.   friend void PAssertFunc(const char * file, int line, const char * msg);
  168. };
  169. #if defined(_MSC_VER) && !defined(_WIN32)
  170. extern "C" int __argc;
  171. extern "C" char ** __argv;
  172. #endif
  173. #ifdef __BORLANDC__
  174. #define __argc _argc
  175. #define __argv _argv
  176. #endif
  177. #undef PCREATE_PROCESS
  178. #define PCREATE_PROCESS(cls) 
  179.   extern "C" int PASCAL WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, int) 
  180.     { PProcess::PreInitialise(__argc, __argv, _environ); 
  181.       static cls instance; 
  182.       return instance._main(hInst); 
  183.     }
  184. #endif