home *** CD-ROM | disk | FTP | other *** search
/ Softwarová Záchrana 3 / Softwarova-zachrana-3.bin / pserv.cpl / pserv-2.4.exe / source / cservice.h < prev    next >
C/C++ Source or Header  |  2005-01-05  |  5KB  |  144 lines

  1. #ifndef CService_H
  2. #define CService_H
  3.  
  4. #include "afxcoll.h"
  5.  
  6.  
  7. class CServiceList;
  8.  
  9. #define CHANGED_START_TYPE      (1UL << 0)
  10. #define CHANGED_DESCRIPTION     (1UL << 1)
  11. #define CHANGED_DISPLAYNAME     (1UL << 2)
  12. #define CHANGED_BINARYPATH      (1UL << 3)
  13. #define CHANGED_ERROR_CONTROL   (1UL << 4)
  14. #define CHANGED_LOGON_SYSTEM    (1UL << 5)
  15. #define CHANGED_LOGON_USER      (1UL << 6)
  16. #define CHANGED_ALLOW_UI        (1UL << 7)
  17.  
  18. typedef enum
  19. {
  20.     SERVICE_STATE_PENDING,
  21.     SERVICE_STATE_REACHED,
  22.     SERVICE_STATE_FAILED
  23. } SERVICE_STATE_TYPE;
  24.  
  25. #include "CListViewTools.h"
  26.  
  27. class CService : public CListViewEntry
  28.     {
  29.     public:
  30.         CService(CServiceList* owner);
  31.         virtual ~CService();
  32.         virtual CString GetDisplayString(DWORD dwIndex);
  33.         virtual COLORREF GetTextColor();
  34.         virtual CString GetInfoTip();
  35.  
  36.         BOOL CreateFrom(SC_HANDLE hSCM, LPENUM_SERVICE_STATUS_PROCESS lpStatus);
  37.         BOOL ApplyChanges();
  38.         BOOL Install();
  39.         BOOL Enable();
  40.         BOOL Disable();
  41.         BOOL StartAutomatically();
  42.         BOOL StartAtBoot();
  43.         BOOL StartAtSystem();
  44.         BOOL Delete();
  45.         DWORD GetProcessID()
  46.         {
  47.             return m_ServiceStatus.dwProcessId;
  48.         }
  49.         BOOL IsRunning()
  50.         {
  51.             return (m_ServiceStatus.dwCurrentState == SERVICE_RUNNING);
  52.         }
  53.         BOOL IsDisabled()
  54.         {
  55.             return (m_dwStartType == SERVICE_DISABLED);
  56.         }
  57.  
  58.         SERVICE_STATE_TYPE BeginStart(LPDWORD lpdwWaitHint); 
  59.         SERVICE_STATE_TYPE BeginStop(LPDWORD lpdwWaitHint); 
  60.         SERVICE_STATE_TYPE BeginPause(LPDWORD lpdwWaitHint); 
  61.         SERVICE_STATE_TYPE BeginContinue(LPDWORD lpdwWaitHint); 
  62.         SERVICE_STATE_TYPE BeginRestart(LPDWORD lpdwWaitHint); 
  63.         SERVICE_STATE_TYPE IsStarted();
  64.         SERVICE_STATE_TYPE IsRestarted();
  65.         SERVICE_STATE_TYPE IsStopped();
  66.         SERVICE_STATE_TYPE IsPaused();
  67.         SERVICE_STATE_TYPE IsContinued();
  68.         void FinishStateType();
  69.  
  70.         CString GetStatusAsString();
  71.         CString GetPrintStatusAsString();
  72.         CString GetStartAsString();
  73.         static CString GetStartAsString(DWORD dwAction);
  74.         CString GetTypeAsString();
  75.         CString GetPidAsString();
  76.         CString m_strServiceName;
  77.         CString m_strDisplayName;
  78.         CString m_strBinaryPathName;
  79.         CString m_strDescription;
  80.         CString m_strServiceStartName;
  81.         CString m_strServiceStartPassword;
  82.         CString m_strLoadOrderGroup;
  83.         DWORD m_dwServiceType;
  84.         DWORD m_dwStartType;
  85.         DWORD m_dwChangeFlags;
  86.         DWORD m_dwErrorControl;
  87.         SERVICE_STATUS_PROCESS m_ServiceStatus;
  88.         CServiceList* GetOwner()
  89.         {
  90.             return m_pOwner;
  91.         }
  92.  
  93.  
  94.     protected:
  95.         BOOL RefreshServiceStatus();
  96.  
  97.         SC_HANDLE m_hTempService;
  98.         SC_HANDLE m_hTempSCM;
  99.         CServiceList* m_pOwner;
  100.         BOOL m_bRestartPending;
  101.         BOOL m_bRestartHasBeenStopped;
  102.     };
  103.  
  104. typedef SERVICE_STATE_TYPE (CService::*BEGINSTATFN)(LPDWORD lpdwWaitHint);
  105. typedef SERVICE_STATE_TYPE (CService::*QUERYSTATEFN)();
  106. typedef BOOL (CService::*SETSTARTTYPEFN)();
  107.  
  108. class CServiceList : public CListViewEntries
  109.     {
  110.     public:
  111.         CServiceList();
  112.         ~CServiceList();
  113.         BOOL Refresh();
  114.         virtual void ExportXmlToFile( CFile* pFile );
  115.         void SetEnumType( DWORD dwEnumType );
  116.         void ConnectTo( LPCTSTR lpszMachine );
  117.         LPCTSTR GetTagString()
  118.         {
  119.             return (m_dwEnumType == SERVICE_WIN32) ? TEXT("services") : TEXT("devices");
  120.         }
  121.  
  122.         virtual UINT GetContextMenuID();
  123.  
  124.         static int SortByDisplayName(const CService** ps1, const CService** ps2); 
  125.         static int SortByServiceName(const CService** ps1, const CService** ps2); 
  126.         static int SortByStatus(const CService** ps1, const CService** ps2); 
  127.         static int SortByStart(const CService** ps1, const CService** ps2); 
  128.         static int SortByType(const CService** ps1, const CService** ps2); 
  129.         static int SortByBinaryPathName(const CService** ps1, const CService** ps2); 
  130.         static int SortByUser(const CService** ps1, const CService** ps2); 
  131.         static int SortByLoadOrderGroup(const CService** ps1, const CService** ps2); 
  132.         static int SortByPid(const CService** ps1, const CService** ps2); 
  133.         static int SortByDescription(const CService** ps1, const CService** ps2); 
  134.  
  135.         DWORD m_dwEnumType;
  136.         CStringArray m_LoadOrderGroups;
  137.         
  138.         BOOL AddServiceFromStatus(SC_HANDLE hSCM, LPENUM_SERVICE_STATUS_PROCESS lpStatus);
  139.     private:
  140.         void RefreshTitleString();
  141.     };
  142.  
  143. #endif // CService_H
  144.