mirror of
https://github.com/BeneficialCode/WinArk.git
synced 2026-10-17 04:40:35 +08:00
125 lines
3.3 KiB
C++
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;
|
|
};
|
|
} |