123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- /* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved.
- *
- * This is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this software; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
- * USA.
- */
-
- // -=- Service.h
- //
- // Win32 service-mode code.
- // Derive your service from this code and let it handle the annoying Win32
- // service API.
-
- #ifndef __RFB_WIN32_SERVICE_H__
- #define __RFB_WIN32_SERVICE_H__
-
- #include <windows.h>
-
- namespace rfb {
-
- namespace win32 {
-
- //
- // -=- Service
- //
-
- // Application base-class for services.
-
- class Service {
- public:
-
- Service(const TCHAR* name_);
- virtual ~Service();
-
- const TCHAR* getName() {return name;}
- SERVICE_STATUS& getStatus() {return status;}
-
- void setStatus(DWORD status);
- void setStatus();
-
- // - Start the service, having initialised it
- void start();
-
- // - Service main procedure - override to implement a service
- virtual DWORD serviceMain(int argc, TCHAR* argv[]) = 0;
-
- // - Service control notifications
-
- // To get notified when the OS is shutting down
- virtual void osShuttingDown() {};
-
- // To get notified when the service parameters change
- virtual void readParams() {};
-
- // To cause the serviceMain() routine to return
- virtual void stop() {};
-
- public:
- SERVICE_STATUS_HANDLE status_handle;
- SERVICE_STATUS status;
- protected:
- const TCHAR* name;
- };
-
- class ServiceHandle {
- public:
- ServiceHandle(SC_HANDLE h) : handle(h) {}
- ~ServiceHandle() {CloseServiceHandle(handle);}
- operator SC_HANDLE() const {return handle;}
- protected:
- SC_HANDLE handle;
- };
-
- // -=- Routines used by desktop back-end code to manage desktops/window stations
-
- bool desktopChangeRequired();
-
- bool changeDesktop();
-
- // -=- Routines used by the SInput Keyboard class to emulate Ctrl-Alt-Del
- bool emulateCtrlAltDel();
-
- // -=- Routines to initialise the Event Log target Logger
- bool initEventLogLogger(const TCHAR* srcname);
-
- // -=- Routines to register/unregister the service
- // These routines also take care of registering the required
- // event source information, etc.
- // *** should really accept TCHAR argv
-
- bool registerService(const TCHAR* name, const TCHAR* display,
- const TCHAR* desc, int argc, char** argv);
- bool unregisterService(const TCHAR* name);
-
- bool startService(const TCHAR* name);
- bool stopService(const TCHAR* name);
-
- // -=- Get the state of the named service (one of the NT service state values)
- DWORD getServiceState(const TCHAR* name);
-
- // -=- Convert a supplied service state value to a printable string e.g. Running, Stopped...
- // The caller must delete the returned string buffer
- char* serviceStateName(DWORD state);
-
- // -=- Routine to determine whether the host process is running a service
- bool isServiceProcess();
-
- };
-
- };
-
- #endif // __RFB_WIN32_SERVICE_NT_H__
|