-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathServiceHelper.cpp
53 lines (43 loc) · 1.54 KB
/
ServiceHelper.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include "Header.h"
ServiceHelper::ServiceHelper(std::wstring service, int32_t DesiredAccess) : scmHandle(nullptr), serviceHandle(nullptr), serviceName(service.c_str()), dwDesiredAccess(DesiredAccess){
scmHandle = OpenSCManager(NULL, NULL, SC_MANAGER_CONNECT | SC_MANAGER_ENUMERATE_SERVICE );
if (scmHandle != NULL) {
serviceHandle = OpenServiceW(scmHandle, L"Tapisrv", dwDesiredAccess);
if (serviceHandle) { std::wcout << "Service" << serviceName << "successfully.\n" << std::endl; }
else {
std::cerr << "Failed to open service. Error: " << GetLastError() << std::endl;
}
}
}
ServiceHelper::~ServiceHelper() {
Close();
}
ServiceHelper::ServiceHelper(const ServiceHelper& other) {
serviceName = other.serviceName;
scmHandle = other.scmHandle;
serviceHandle = other.serviceHandle;
dwDesiredAccess = other.dwDesiredAccess;
}
bool ServiceHelper::StartTheDamnService() {
if (serviceHandle != NULL) {
return StartServiceW(serviceHandle, 0, NULL);
}
}
bool ServiceHelper::StopTheDamnService() {
SERVICE_STATUS serviceStatus;
if (!ControlService(serviceHandle, SERVICE_CONTROL_STOP, &serviceStatus)) {
std::cerr << "Failed to stop service. Error: " << GetLastError() << std::endl;
return false;
}
return true;
}
void ServiceHelper::Close() {
if (serviceHandle != NULL) {
CloseServiceHandle(serviceHandle);
serviceHandle = NULL;
}
if (scmHandle != NULL) {
CloseServiceHandle(scmHandle);
scmHandle = NULL;
}
}