WinService.h 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. #ifndef __WINDOWS_SERVICE_20160113__
  2. #define __WINDOWS_SERVICE_20160113__
  3. #include <WinSvc.h>
  4. namespace WinService
  5. {
  6. // 工作启动回调函数;
  7. typedef void (CALLBACK *WorkStartCallback)();
  8. // 工作结束回调函数;
  9. typedef void (CALLBACK *WorkEndofCallback)();
  10. typedef struct SCVARIANT {
  11. TCHAR scName[MAX_PATH]; // 服务名称;
  12. TCHAR scDisplayName[MAX_PATH]; // 服务显示名称;
  13. TCHAR scDescription[MAX_PATH]; // 服务描述内容;
  14. HANDLE hscEvent; // 服务控制事件;
  15. SERVICE_STATUS scStatus; // 服务状态;
  16. SERVICE_STATUS_HANDLE scStatusHandle; // 服务状态句柄;
  17. WorkStartCallback lpStartWorkCallBack; // 开启工作者;
  18. WorkEndofCallback lpEndofWorkCallBack; // 结束工作者;
  19. SCVARIANT()
  20. {
  21. hscEvent = NULL;
  22. scStatusHandle = NULL;
  23. lpStartWorkCallBack = NULL;
  24. lpEndofWorkCallBack = NULL;
  25. memset(scName, 0, MAX_PATH * sizeof(TCHAR));
  26. memset(scDescription, 0, MAX_PATH * sizeof(TCHAR));
  27. // 设置服务类型;
  28. scStatus.dwServiceType =
  29. SERVICE_WIN32_OWN_PROCESS | SERVICE_INTERACTIVE_PROCESS; // | SERVICE_INTERACTIVE_PROCESS与桌面交互;
  30. // 设置服务默认状态为停止;
  31. scStatus.dwCurrentState = SERVICE_STOPPED; // SERVICE_RUNNING;
  32. // 设置服务接受停止控制;
  33. scStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP;
  34. scStatus.dwWin32ExitCode = 0;
  35. scStatus.dwServiceSpecificExitCode = 0;
  36. scStatus.dwCheckPoint = 0;
  37. scStatus.dwWaitHint = 0;
  38. }
  39. }SCVariant, *pSCVariant;
  40. extern SCVariant g_scVariant;
  41. // 设置服务名称和描述名称;
  42. void InitServiceName(IN LPCTSTR lpServiceName = NULL, IN LPCTSTR lpServiceDescription = NULL);
  43. // 服务是否安装;
  44. BOOL IsInstalled();
  45. // 安装服务;
  46. BOOL Install();
  47. BOOL Uninstall();
  48. // windows服务程序入口函数;
  49. extern void WINAPI ServiceMain();
  50. // windows服务状态控制;
  51. extern void WINAPI SvcCtrlHandler(IN DWORD dwControlCode);
  52. // 初始化SOCKET库;
  53. extern int InitWinSock();
  54. // 服务日志事件;
  55. extern void SvcReportEvent(IN LPCTSTR pFormat, ...);
  56. // 向SCM报告服务状态;
  57. extern BOOL ReportSvcStatus(
  58. IN DWORD dwCurrentState,
  59. IN DWORD dwWin32ExitCode,
  60. IN DWORD dwServiceSpecificExitCode,
  61. IN DWORD dwCheckPoint,
  62. IN DWORD dwWaitHint);
  63. // 启动指定的服务;
  64. extern void StartSvc(IN LPCTSTR lpSvcName = NULL);
  65. extern void StopSvc(IN LPCTSTR lpSvcName = NULL);
  66. extern void KillService();
  67. // 设置回调函数指针;
  68. extern void SetCallBack(IN LPVOID lpStartWorkCallBack, IN LPVOID lpEndofWorkCallBack);
  69. // 在服务进程里调用外部exe;
  70. extern BOOL StartProcess(IN LPCTSTR lpExePath);
  71. // 服务日志;
  72. extern void LogEvent(IN LPCTSTR pFormat, ...);
  73. extern void UpdateSvcDacl(IN LPCTSTR lpSvcName);
  74. extern BOOL StopDependentServices();
  75. // 查询服务状态;
  76. extern void DoQuerySvc(IN LPCTSTR lpSvcName);
  77. // 更新服务描述;
  78. extern void DoUpdateSvcDesc(IN LPCTSTR lpSvcName);
  79. extern void DoDisableSvc(IN LPCTSTR lpSvcName);
  80. extern void DoEnableSvc(IN LPCTSTR lpSvcName);
  81. extern void DoDeleteSvc(IN LPCTSTR lpSvcName);
  82. //
  83. extern BOOL GetTokenByName(IN HANDLE &hToken, IN LPCTSTR lpName);
  84. //
  85. extern BOOL GetDebugPriv();
  86. //
  87. extern DWORD GetExplorerToken(OUT HANDLE* phExplorerToken);
  88. };
  89. #endif