Files
2022-09-09 16:30:03 +08:00

125 lines
3.3 KiB
C++

#pragma once
#include <string>
#include <winsvc.h>
namespace WinSys {
enum class ServiceEnumType {
AllDrivers = SERVICE_DRIVER,
KernelDrivers = SERVICE_KERNEL_DRIVER,
FileSystemDrivers = SERVICE_FILE_SYSTEM_DRIVER,
AllServices = SERVICE_WIN32,
ServicesOwnProcess = SERVICE_WIN32_OWN_PROCESS,
ServicesSharedProcess = SERVICE_WIN32_SHARE_PROCESS
};
DEFINE_ENUM_FLAG_OPERATORS(ServiceEnumType);
enum class ServiceEnumState {
Active = SERVICE_ACTIVE,// Running
Inactive = SERVICE_INACTIVE,// Stopped
All = Active|Inactive
};
DEFINE_ENUM_FLAG_OPERATORS(ServiceEnumState);
enum class ServiceType {
FileSystemDriver = SERVICE_FILE_SYSTEM_DRIVER,
KernelDriver = SERVICE_KERNEL_DRIVER,
Win32OwnProcess = SERVICE_WIN32_OWN_PROCESS,
Win32SharedProcess = SERVICE_WIN32_SHARE_PROCESS,
InteractiveProcess = SERVICE_INTERACTIVE_PROCESS,
UserService = SERVICE_USER_SERVICE,
UserServiceInstance = SERVICE_USERSERVICE_INSTANCE,
PackageService = SERVICE_PKG_SERVICE,
};
DEFINE_ENUM_FLAG_OPERATORS(ServiceType);
enum class ServiceState {
Unknown = 0,
Stopped = SERVICE_STOPPED,
StartPending = SERVICE_START_PENDING,
PausePending = SERVICE_PAUSE_PENDING,
Running = SERVICE_RUNNING,
ContinuePending = SERVICE_CONTINUE_PENDING,
StopPending = SERVICE_STOP_PENDING,
Paused = SERVICE_PAUSED,
};
enum class ServiceControlsAccepted {
None = 0,
NetBindChange = SERVICE_ACCEPT_NETBINDCHANGE,
ParamChange = SERVICE_ACCEPT_PARAMCHANGE,
PauseContinue = SERVICE_ACCEPT_PAUSE_CONTINUE,
Preshutdown = SERVICE_ACCEPT_PRESHUTDOWN,
Shutdown = SERVICE_ACCEPT_SHUTDOWN,
Stop = SERVICE_ACCEPT_STOP,
HardwareProfileChange = SERVICE_ACCEPT_HARDWAREPROFILECHANGE,
PowerEvent = SERVICE_ACCEPT_POWEREVENT,
SessionChange = SERVICE_ACCEPT_SESSIONCHANGE,
TimeChanged = SERVICE_ACCEPT_TIMECHANGE,
TriggerEvent = SERVICE_ACCEPT_TRIGGEREVENT,
UserLogOff = SERVICE_ACCEPT_USER_LOGOFF,
LowResources = SERVICE_ACCEPT_LOWRESOURCES,
SystemLowResources = SERVICE_ACCEPT_SYSTEMLOWRESOURCES,
InternalReserved = 0x1000,
};
DEFINE_ENUM_FLAG_OPERATORS(ServiceControlsAccepted);
enum class ServiceFlags {
None = 0,
RunInSystemProcess = SERVICE_RUNS_IN_SYSTEM_PROCESS
};
struct ServiceStatusProcess {
ServiceType Type;
ServiceState CurrentState;
ServiceControlsAccepted ControlsAccepted;
uint32_t Win32ExitCode;
uint32_t ServiceSpecificExitCode;
uint32_t CheckPoint;
uint32_t WaitHint;
uint32_t ProcessId;
ServiceFlags Flags;
};
static_assert(sizeof(ServiceStatusProcess) == sizeof(SERVICE_STATUS_PROCESS));
struct ServiceInfo {
friend class ServiceManager;
friend class Service;
const std::wstring& GetName() const {
return _name;
}
const std::wstring & GetDisplayName() const {
return _displayName;
}
const ServiceStatusProcess& GetStatusProcess() const {
return _status;
}
private:
std::wstring _name, _displayName;
ServiceStatusProcess _status;
};
struct DriverInfo {
friend class ServiceManager;
friend class Service;
const std::wstring& GetName() const {
return _name;
}
const std::wstring& GetDisplayName() const {
return _displayName;
}
const ServiceStatusProcess& GetStatusProcess() const {
return _status;
}
private:
std::wstring _name, _displayName;
ServiceStatusProcess _status;
};
}