// Licensed under the Apache License, Version 2.0
// <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0 > or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT >, at your option.
// All files in the project carrying such notice may not be copied, modified, or distributed
// except according to those terms.
//! Header file for the Service Control Manager
use shared::minwindef::{BOOL, DWORD, LPBYTE, LPDWORD, LPVOID};
use um::winnt::{
HANDLE, LPCSTR, LPCWSTR, LPSTR, LPWSTR, PSECURITY_DESCRIPTOR, PVOID,
SECURITY_INFORMATION, STANDARD_RIGHTS_REQUIRED
};
pub const SERVICE_NO_CHANGE: DWORD =
0 xffffffff;
pub const SERVICE_ACTIVE: DWORD =
0 x00000001;
pub const SERVICE_INACTIVE: DWORD =
0 x00000002;
pub const SERVICE_STATE_ALL: DWORD = SERVICE_ACTIVE | SERVICE_INACTIVE;
pub const SERVICE_CONTROL_STOP: DWORD =
0 x00000001;
pub const SERVICE_CONTROL_PAUSE: DWORD =
0 x00000002;
pub const SERVICE_CONTROL_CONTINUE: DWORD =
0 x00000003;
pub const SERVICE_CONTROL_INTERROGATE: DWORD =
0 x00000004;
pub const SERVICE_CONTROL_SHUTDOWN: DWORD =
0 x00000005;
pub const SERVICE_CONTROL_PARAMCHANGE: DWORD =
0 x00000006;
pub const SERVICE_CONTROL_NETBINDADD: DWORD =
0 x00000007;
pub const SERVICE_CONTROL_NETBINDREMOVE: DWORD =
0 x00000008;
pub const SERVICE_CONTROL_NETBINDENABLE: DWORD =
0 x00000009;
pub const SERVICE_CONTROL_NETBINDDISABLE: DWORD =
0 x0000000A;
pub const SERVICE_CONTROL_DEVICEEVENT: DWORD =
0 x0000000B;
pub const SERVICE_CONTROL_HARDWAREPROFILECHANGE: DWORD =
0 x0000000C;
pub const SERVICE_CONTROL_POWEREVENT: DWORD =
0 x0000000D;
pub const SERVICE_CONTROL_SESSIONCHANGE: DWORD =
0 x0000000E;
pub const SERVICE_CONTROL_PRESHUTDOWN: DWORD =
0 x0000000F;
pub const SERVICE_CONTROL_TIMECHANGE: DWORD =
0 x00000010;
pub const SERVICE_CONTROL_TRIGGEREVENT: DWORD =
0 x00000020;
pub const SERVICE_STOPPED: DWORD =
0 x00000001;
pub const SERVICE_START_PENDING: DWORD =
0 x00000002;
pub const SERVICE_STOP_PENDING: DWORD =
0 x00000003;
pub const SERVICE_RUNNING: DWORD =
0 x00000004;
pub const SERVICE_CONTINUE_PENDING: DWORD =
0 x00000005;
pub const SERVICE_PAUSE_PENDING: DWORD =
0 x00000006;
pub const SERVICE_PAUSED: DWORD =
0 x00000007;
pub const SERVICE_ACCEPT_STOP: DWORD =
0 x00000001;
pub const SERVICE_ACCEPT_PAUSE_CONTINUE: DWORD =
0 x00000002;
pub const SERVICE_ACCEPT_SHUTDOWN: DWORD =
0 x00000004;
pub const SERVICE_ACCEPT_PARAMCHANGE: DWORD =
0 x00000008;
pub const SERVICE_ACCEPT_NETBINDCHANGE: DWORD =
0 x00000010;
pub const SERVICE_ACCEPT_HARDWAREPROFILECHANGE: DWORD =
0 x00000020;
pub const SERVICE_ACCEPT_POWEREVENT: DWORD =
0 x00000040;
pub const SERVICE_ACCEPT_SESSIONCHANGE: DWORD =
0 x00000080;
pub const SERVICE_ACCEPT_PRESHUTDOWN: DWORD =
0 x00000100;
pub const SERVICE_ACCEPT_TIMECHANGE: DWORD =
0 x00000200;
pub const SERVICE_ACCEPT_TRIGGEREVENT: DWORD =
0 x00000400;
// SERVICE_ACCEPT_USER_LOGOFF
pub const SC_MANAGER_CONNECT: DWORD =
0 x0001;
pub const SC_MANAGER_CREATE_SERVICE: DWORD =
0 x0002;
pub const SC_MANAGER_ENUMERATE_SERVICE: DWORD =
0 x0004;
pub const SC_MANAGER_LOCK: DWORD =
0 x0008;
pub const SC_MANAGER_QUERY_LOCK_STATUS: DWORD =
0 x0010;
pub const SC_MANAGER_MODIFY_BOOT_CONFIG: DWORD =
0 x0020;
pub const SC_MANAGER_ALL_ACCESS: DWORD = STANDARD_RIGHTS_REQUIRED | SC_MANAGER_CONNECT
| SC_MANAGER_CREATE_SERVICE | SC_MANAGER_ENUMERATE_SERVICE | SC_MANAGER_LOCK
| SC_MANAGER_QUERY_LOCK_STATUS | SC_MANAGER_MODIFY_BOOT_CONFIG;
pub const SERVICE_QUERY_CONFIG: DWORD =
0 x0001;
pub const SERVICE_CHANGE_CONFIG: DWORD =
0 x0002;
pub const SERVICE_QUERY_STATUS: DWORD =
0 x0004;
pub const SERVICE_ENUMERATE_DEPENDENTS: DWORD =
0 x0008;
pub const SERVICE_START: DWORD =
0 x0010;
pub const SERVICE_STOP: DWORD =
0 x0020;
pub const SERVICE_PAUSE_CONTINUE: DWORD =
0 x0040;
pub const SERVICE_INTERROGATE: DWORD =
0 x0080;
pub const SERVICE_USER_DEFINED_CONTROL: DWORD =
0 x0100;
pub const SERVICE_ALL_ACCESS: DWORD = STANDARD_RIGHTS_REQUIRED | SERVICE_QUERY_CONFIG
| SERVICE_CHANGE_CONFIG | SERVICE_QUERY_STATUS | SERVICE_ENUMERATE_DEPENDENTS | SERVICE
_START
| SERVICE_STOP | SERVICE_PAUSE_CONTINUE | SERVICE_INTERROGATE | SERVICE_USER_DEFINED_CONTROL;
pub const SERVICE_RUNS_IN_SYSTEM_PROCESS: DWORD = 0 x00000001;
pub const SERVICE_CONFIG_DESCRIPTION: DWORD = 1 ;
pub const SERVICE_CONFIG_FAILURE_ACTIONS: DWORD = 2 ;
pub const SERVICE_CONFIG_DELAYED_AUTO_START_INFO: DWORD = 3 ;
pub const SERVICE_CONFIG_FAILURE_ACTIONS_FLAG: DWORD = 4 ;
pub const SERVICE_CONFIG_SERVICE_SID_INFO: DWORD = 5 ;
pub const SERVICE_CONFIG_REQUIRED_PRIVILEGES_INFO: DWORD = 6 ;
pub const SERVICE_CONFIG_PRESHUTDOWN_INFO: DWORD = 7 ;
pub const SERVICE_CONFIG_TRIGGER_INFO: DWORD = 8 ;
pub const SERVICE_CONFIG_PREFERRED_NODE: DWORD = 9 ;
pub const SERVICE_CONFIG_LAUNCH_PROTECTED: DWORD = 12 ;
pub const SERVICE_NOTIFY_STATUS_CHANGE_1: DWORD = 1 ;
pub const SERVICE_NOTIFY_STATUS_CHANGE_2: DWORD = 2 ;
pub const SERVICE_NOTIFY_STATUS_CHANGE: DWORD = SERVICE_NOTIFY_STATUS_CHANGE_2;
pub const SERVICE_NOTIFY_STOPPED: DWORD = 0 x00000001;
pub const SERVICE_NOTIFY_START_PENDING: DWORD = 0 x00000002;
pub const SERVICE_NOTIFY_STOP_PENDING: DWORD = 0 x00000004;
pub const SERVICE_NOTIFY_RUNNING: DWORD = 0 x00000008;
pub const SERVICE_NOTIFY_CONTINUE_PENDING: DWORD = 0 x00000010;
pub const SERVICE_NOTIFY_PAUSE_PENDING: DWORD = 0 x00000020;
pub const SERVICE_NOTIFY_PAUSED: DWORD = 0 x00000040;
pub const SERVICE_NOTIFY_CREATED: DWORD = 0 x00000080;
pub const SERVICE_NOTIFY_DELETED: DWORD = 0 x00000100;
pub const SERVICE_NOTIFY_DELETE_PENDING: DWORD = 0 x00000200;
pub const SERVICE_STOP_REASON_FLAG_MIN: DWORD = 0 x00000000;
pub const SERVICE_STOP_REASON_FLAG_UNPLANNED: DWORD = 0 x10000000;
pub const SERVICE_STOP_REASON_FLAG_CUSTOM: DWORD = 0 x20000000;
pub const SERVICE_STOP_REASON_FLAG_PLANNED: DWORD = 0 x40000000;
pub const SERVICE_STOP_REASON_FLAG_MAX: DWORD = 0 x80000000;
pub const SERVICE_STOP_REASON_MAJOR_MIN: DWORD = 0 x00000000;
pub const SERVICE_STOP_REASON_MAJOR_OTHER: DWORD = 0 x00010000;
pub const SERVICE_STOP_REASON_MAJOR_HARDWARE: DWORD = 0 x00020000;
pub const SERVICE_STOP_REASON_MAJOR_OPERATINGSYSTEM: DWORD = 0 x00030000;
pub const SERVICE_STOP_REASON_MAJOR_SOFTWARE: DWORD = 0 x00040000;
pub const SERVICE_STOP_REASON_MAJOR_APPLICATION: DWORD = 0 x00050000;
pub const SERVICE_STOP_REASON_MAJOR_NONE: DWORD = 0 x00060000;
pub const SERVICE_STOP_REASON_MAJOR_MAX: DWORD = 0 x00070000;
pub const SERVICE_STOP_REASON_MAJOR_MIN_CUSTOM: DWORD = 0 x00400000;
pub const SERVICE_STOP_REASON_MAJOR_MAX_CUSTOM: DWORD = 0 x00ff0000;
pub const SERVICE_STOP_REASON_MINOR_MIN: DWORD = 0 x00000000;
pub const SERVICE_STOP_REASON_MINOR_OTHER: DWORD = 0 x00000001;
pub const SERVICE_STOP_REASON_MINOR_MAINTENANCE: DWORD = 0 x00000002;
pub const SERVICE_STOP_REASON_MINOR_INSTALLATION: DWORD = 0 x00000003;
pub const SERVICE_STOP_REASON_MINOR_UPGRADE: DWORD = 0 x00000004;
pub const SERVICE_STOP_REASON_MINOR_RECONFIG: DWORD = 0 x00000005;
pub const SERVICE_STOP_REASON_MINOR_HUNG: DWORD = 0 x00000006;
pub const SERVICE_STOP_REASON_MINOR_UNSTABLE: DWORD = 0 x00000007;
pub const SERVICE_STOP_REASON_MINOR_DISK: DWORD = 0 x00000008;
pub const SERVICE_STOP_REASON_MINOR_NETWORKCARD: DWORD = 0 x00000009;
pub const SERVICE_STOP_REASON_MINOR_ENVIRONMENT: DWORD = 0 x0000000a;
pub const SERVICE_STOP_REASON_MINOR_HARDWARE_DRIVER: DWORD = 0 x0000000b;
pub const SERVICE_STOP_REASON_MINOR_OTHERDRIVER: DWORD = 0 x0000000c;
pub const SERVICE_STOP_REASON_MINOR_SERVICEPACK: DWORD = 0 x0000000d;
pub const SERVICE_STOP_REASON_MINOR_SOFTWARE_UPDATE: DWORD = 0 x0000000e;
pub const SERVICE_STOP_REASON_MINOR_SECURITYFIX: DWORD = 0 x0000000f;
pub const SERVICE_STOP_REASON_MINOR_SECURITY: DWORD = 0 x00000010;
pub const SERVICE_STOP_REASON_MINOR_NETWORK_CONNECTIVITY: DWORD = 0 x00000011;
pub const SERVICE_STOP_REASON_MINOR_WMI: DWORD = 0 x00000012;
pub const SERVICE_STOP_REASON_MINOR_SERVICEPACK_UNINSTALL: DWORD = 0 x00000013;
pub const SERVICE_STOP_REASON_MINOR_SOFTWARE_UPDATE_UNINSTALL: DWORD = 0 x00000014;
pub const SERVICE_STOP_REASON_MINOR_SECURITYFIX_UNINSTALL: DWORD = 0 x00000015;
pub const SERVICE_STOP_REASON_MINOR_MMC: DWORD = 0 x00000016;
pub const SERVICE_STOP_REASON_MINOR_NONE: DWORD = 0 x00000017;
pub const SERVICE_STOP_REASON_MINOR_MAX: DWORD = 0 x00000018;
pub const SERVICE_STOP_REASON_MINOR_MIN_CUSTOM: DWORD = 0 x00000100;
pub const SERVICE_STOP_REASON_MINOR_MAX_CUSTOM: DWORD = 0 x0000FFFF;
pub const SERVICE_CONTROL_STATUS_REASON_INFO: DWORD = 1 ;
pub const SERVICE_SID_TYPE_NONE: DWORD = 0 x00000000;
pub const SERVICE_SID_TYPE_UNRESTRICTED: DWORD = 0 x00000001;
pub const SERVICE_SID_TYPE_RESTRICTED: DWORD = 0 x00000002 | SERVICE_SID_TYPE_UNRESTRICTED;
pub const SERVICE_TRIGGER_TYPE_DEVICE_INTERFACE_ARRIVAL: DWORD = 1 ;
pub const SERVICE_TRIGGER_TYPE_IP_ADDRESS_AVAILABILITY: DWORD = 2 ;
pub const SERVICE_TRIGGER_TYPE_DOMAIN_JOIN: DWORD = 3 ;
pub const SERVICE_TRIGGER_TYPE_FIREWALL_PORT_EVENT: DWORD = 4 ;
pub const SERVICE_TRIGGER_TYPE_GROUP_POLICY: DWORD = 5 ;
pub const SERVICE_TRIGGER_TYPE_NETWORK_ENDPOINT: DWORD = 6 ;
pub const SERVICE_TRIGGER_TYPE_CUSTOM_SYSTEM_STATE_CHANGE: DWORD = 7 ;
pub const SERVICE_TRIGGER_TYPE_CUSTOM: DWORD = 20 ;
pub const SERVICE_TRIGGER_DATA_TYPE_BINARY: DWORD = 1 ;
pub const SERVICE_TRIGGER_DATA_TYPE_STRING: DWORD = 2 ;
pub const SERVICE_TRIGGER_DATA_TYPE_LEVEL: DWORD = 3 ;
pub const SERVICE_TRIGGER_DATA_TYPE_KEYWORD_ANY: DWORD = 4 ;
pub const SERVICE_TRIGGER_DATA_TYPE_KEYWORD_ALL: DWORD = 5 ;
pub const SERVICE_START_REASON_DEMAND: DWORD = 0 x00000001;
pub const SERVICE_START_REASON_AUTO: DWORD = 0 x00000002;
pub const SERVICE_START_REASON_TRIGGER: DWORD = 0 x00000004;
pub const SERVICE_START_REASON_RESTART_ON_FAILURE: DWORD = 0 x00000008;
pub const SERVICE_START_REASON_DELAYEDAUTO: DWORD = 0 x00000010;
pub const SERVICE_DYNAMIC_INFORMATION_LEVEL_START_REASON: DWORD = 1 ;
pub const SERVICE_LAUNCH_PROTECTED_NONE: DWORD = 0 ;
pub const SERVICE_LAUNCH_PROTECTED_WINDOWS: DWORD = 1 ;
pub const SERVICE_LAUNCH_PROTECTED_WINDOWS_LIGHT: DWORD = 2 ;
pub const SERVICE_LAUNCH_PROTECTED_ANTIMALWARE_LIGHT: DWORD = 3 ;
DEFINE_GUID!{NETWORK_MANAGER_FIRST_IP_ADDRESS_ARRIVAL_GUID,
0 x4f27f2de, 0 x14e2, 0 x430b, 0 xa5, 0 x49, 0 x7c, 0 xd4, 0 x8c, 0 xbc, 0 x82, 0 x45}
DEFINE_GUID!{NETWORK_MANAGER_LAST_IP_ADDRESS_REMOVAL_GUID,
0 xcc4ba62a, 0 x162e, 0 x4648, 0 x84, 0 x7a, 0 xb6, 0 xbd, 0 xf9, 0 x93, 0 xe3, 0 x35}
DEFINE_GUID!{DOMAIN_JOIN_GUID,
0 x1ce20aba, 0 x9851, 0 x4421, 0 x94, 0 x30, 0 x1d, 0 xde, 0 xb7, 0 x66, 0 xe8, 0 x09}
DEFINE_GUID!{DOMAIN_LEAVE_GUID,
0 xddaf516e, 0 x58c2, 0 x4866, 0 x95, 0 x74, 0 xc3, 0 xb6, 0 x15, 0 xd4, 0 x2e, 0 xa1}
DEFINE_GUID!{FIREWALL_PORT_OPEN_GUID,
0 xb7569e07, 0 x8421, 0 x4ee0, 0 xad, 0 x10, 0 x86, 0 x91, 0 x5a, 0 xfd, 0 xad, 0 x09}
DEFINE_GUID!{FIREWALL_PORT_CLOSE_GUID,
0 xa144ed38, 0 x8e12, 0 x4de4, 0 x9d, 0 x96, 0 xe6, 0 x47, 0 x40, 0 xb1, 0 xa5, 0 x24}
DEFINE_GUID!{MACHINE_POLICY_PRESENT_GUID,
0 x659fcae6, 0 x5bdb, 0 x4da9, 0 xb1, 0 xff, 0 xca, 0 x2a, 0 x17, 0 x8d, 0 x46, 0 xe0}
DEFINE_GUID!{USER_POLICY_PRESENT_GUID,
0 x54fb46c8, 0 xf089, 0 x464c, 0 xb1, 0 xfd, 0 x59, 0 xd1, 0 xb6, 0 x2c, 0 x3b, 0 x50}
DEFINE_GUID!{RPC_INTERFACE_EVENT_GUID,
0 xbc90d167, 0 x9470, 0 x4139, 0 xa9, 0 xba, 0 xbe, 0 x0b, 0 xbb, 0 xf5, 0 xb7, 0 x4d}
DEFINE_GUID!{NAMED_PIPE_EVENT_GUID,
0 x1f81d131, 0 x3fac, 0 x4537, 0 x9e, 0 x0c, 0 x7e, 0 x7b, 0 x0c, 0 x2f, 0 x4b, 0 x55}
DEFINE_GUID!{CUSTOM_SYSTEM_STATE_CHANGE_EVENT_GUID,
0 x2d7a2816, 0 x0c5e, 0 x45fc, 0 x9c, 0 xe7, 0 x57, 0 x0e, 0 x5e, 0 xcd, 0 xe9, 0 xc9}
ENUM !{enum SC_ACTION_TYPE {
SC_ACTION_NONE = 0 ,
SC_ACTION_RESTART = 1 ,
SC_ACTION_REBOOT = 2 ,
SC_ACTION_RUN_COMMAND = 3 ,
}}
STRUCT !{struct SC_ACTION {
Type : SC_ACTION_TYPE,
Delay: DWORD,
}}
pub type LPSC_ACTION = *mut SC_ACTION;
STRUCT !{struct SERVICE_FAILURE_ACTIONSW {
dwResetPeriod: DWORD,
lpRebootMsg: LPWSTR,
lpCommand: LPWSTR,
cActions: DWORD,
lpsaActions: LPSC_ACTION,
}}
pub type LPSERVICE_FAILURE_ACTIONSW = *mut SERVICE_FAILURE_ACTIONSW;
STRUCT !{struct SERVICE_FAILURE_ACTIONS_FLAG {
fFailureActionsOnNonCrashFailures: BOOL,
}}
DECLARE_HANDLE!{SC_HANDLE, SC_HANDLE__}
pub type LPSC_HANDLE = *mut SC_HANDLE;
DECLARE_HANDLE!{SERVICE_STATUS_HANDLE, SERVICE_STATUS_HANDLE__}
ENUM !{enum SC_STATUS_TYPE {
SC_STATUS_PROCESS_INFO = 0 ,
}}
ENUM !{enum SC_ENUM_TYPE {
SC_ENUM_PROCESS_INFO = 0 ,
}}
STRUCT !{struct SERVICE_STATUS {
dwServiceType: DWORD,
dwCurrentState: DWORD,
dwControlsAccepted: DWORD,
dwWin32ExitCode: DWORD,
dwServiceSpecificExitCode: DWORD,
dwCheckPoint: DWORD,
dwWaitHint: DWORD,
}}
pub type LPSERVICE_STATUS = *mut SERVICE_STATUS;
STRUCT !{struct SERVICE_STATUS_PROCESS {
dwServiceType: DWORD,
dwCurrentState: DWORD,
dwControlsAccepted: DWORD,
dwWin32ExitCode: DWORD,
dwServiceSpecificExitCode: DWORD,
dwCheckPoint: DWORD,
dwWaitHint: DWORD,
dwProcessId: DWORD,
dwServiceFlags: DWORD,
}}
pub type LPSERVICE_STATUS_PROCESS = *mut SERVICE_STATUS_PROCESS;
STRUCT !{struct ENUM_SERVICE_STATUSA {
lpServiceName: LPSTR,
lpDisplayName: LPSTR,
ServiceStatus: SERVICE_STATUS,
}}
pub type LPENUM_SERVICE_STATUSA = *mut ENUM_SERVICE_STATUSA;
STRUCT !{struct ENUM_SERVICE_STATUSW {
lpServiceName: LPWSTR,
lpDisplayName: LPWSTR,
ServiceStatus: SERVICE_STATUS,
}}
pub type LPENUM_SERVICE_STATUSW = *mut ENUM_SERVICE_STATUSW;
STRUCT !{struct ENUM_SERVICE_STATUS_PROCESSA {
lpServiceName: LPSTR,
lpDisplayName: LPSTR,
ServiceStatusProcess: SERVICE_STATUS_PROCESS,
}}
pub type LPENUM_SERVICE_STATUS_PROCESSA = *mut ENUM_SERVICE_STATUS_PROCESSA;
STRUCT !{struct ENUM_SERVICE_STATUS_PROCESSW {
lpServiceName: LPWSTR,
lpDisplayName: LPWSTR,
ServiceStatusProcess: SERVICE_STATUS_PROCESS,
}}
pub type LPENUM_SERVICE_STATUS_PROCESSW = *mut ENUM_SERVICE_STATUS_PROCESSW;
pub type SC_LOCK = LPVOID;
STRUCT !{struct QUERY_SERVICE_LOCK_STATUSA {
fIsLocked: DWORD,
lpLockOwner: LPSTR,
dwLockDuration: DWORD,
}}
pub type LPQUERY_SERVICE_LOCK_STATUSA = *mut QUERY_SERVICE_LOCK_STATUSA;
STRUCT !{struct QUERY_SERVICE_LOCK_STATUSW {
fIsLocked: DWORD,
lpLockOwner: LPWSTR,
dwLockDuration: DWORD,
}}
pub type LPQUERY_SERVICE_LOCK_STATUSW = *mut QUERY_SERVICE_LOCK_STATUSW;
STRUCT !{struct QUERY_SERVICE_CONFIGA {
dwServiceType: DWORD,
dwStartType: DWORD,
dwErrorControl: DWORD,
lpBinaryPathName: LPSTR,
lpLoadOrderGroup: LPSTR,
dwTagId: DWORD,
lpDependencies: LPSTR,
lpServiceStartName: LPSTR,
lpDisplayName: LPSTR,
}}
pub type LPQUERY_SERVICE_CONFIGA = *mut QUERY_SERVICE_CONFIGA;
STRUCT !{struct QUERY_SERVICE_CONFIGW {
dwServiceType: DWORD,
dwStartType: DWORD,
dwErrorControl: DWORD,
lpBinaryPathName: LPWSTR,
lpLoadOrderGroup: LPWSTR,
dwTagId: DWORD,
lpDependencies: LPWSTR,
lpServiceStartName: LPWSTR,
lpDisplayName: LPWSTR,
}}
pub type LPQUERY_SERVICE_CONFIGW = *mut QUERY_SERVICE_CONFIGW;
STRUCT !{struct SERVICE_DESCRIPTIONA {
lpDescription: LPSTR,
}}
pub type LPSERVICE_DESCRIPTIONA = *mut SERVICE_DESCRIPTIONA;
STRUCT !{struct SERVICE_DESCRIPTIONW {
lpDescription: LPWSTR,
}}
pub type LPSERVICE_DESCRIPTIONW = *mut SERVICE_DESCRIPTIONW;
FN !{stdcall LPSERVICE_MAIN_FUNCTIONW(
dwNumServicesArgs: DWORD,
lpServiceArgVectors: *mut LPWSTR,
) -> ()}
FN !{stdcall LPSERVICE_MAIN_FUNCTIONA(
dwNumServicesArgs: DWORD,
lpServiceArgVectors: *mut LPSTR,
) -> ()}
STRUCT !{struct SERVICE_TABLE_ENTRYA {
lpServiceName: LPCSTR,
lpServiceProc: LPSERVICE_MAIN_FUNCTIONA,
}}
pub type LPSERVICE_TABLE_ENTRYA = *mut SERVICE_TABLE_ENTRYA;
STRUCT !{struct SERVICE_TABLE_ENTRYW {
lpServiceName: LPCWSTR,
lpServiceProc: LPSERVICE_MAIN_FUNCTIONW,
}}
pub type LPSERVICE_TABLE_ENTRYW = *mut SERVICE_TABLE_ENTRYW;
FN !{stdcall LPHANDLER_FUNCTION(
dwControl: DWORD,
) -> ()}
FN !{stdcall LPHANDLER_FUNCTION_EX(
dwControl: DWORD,
dwEventType: DWORD,
lpEventData: LPVOID,
lpContext: LPVOID,
) -> DWORD}
FN !{stdcall PFN_SC_NOTIFY_CALLBACK(
pParameter: PVOID,
) -> ()}
STRUCT !{struct SERVICE_NOTIFY_1 {
dwVersion: DWORD,
pfnNotifyCallback: PFN_SC_NOTIFY_CALLBACK,
pContext: PVOID,
dwNotificationStatus: DWORD,
ServiceStatus: SERVICE_STATUS_PROCESS,
}}
pub type PSERVICE_NOTIFY_1 = *mut SERVICE_NOTIFY_1;
STRUCT !{struct SERVICE_NOTIFY_2A {
dwVersion: DWORD,
pfnNotifyCallback: PFN_SC_NOTIFY_CALLBACK,
pContext: PVOID,
dwNotificationStatus: DWORD,
ServiceStatus: SERVICE_STATUS_PROCESS,
dwNotificationTriggered: DWORD,
pszServiceNames: LPSTR,
}}
pub type PSERVICE_NOTIFY_2A = *mut SERVICE_NOTIFY_2A;
STRUCT !{struct SERVICE_NOTIFY_2W {
dwVersion: DWORD,
pfnNotifyCallback: PFN_SC_NOTIFY_CALLBACK,
pContext: PVOID,
dwNotificationStatus: DWORD,
ServiceStatus: SERVICE_STATUS_PROCESS,
dwNotificationTriggered: DWORD,
pszServiceNames: LPWSTR,
}}
pub type PSERVICE_NOTIFY_2W = *mut SERVICE_NOTIFY_2W;
pub type SERVICE_NOTIFYA = SERVICE_NOTIFY_2A;
pub type PSERVICE_NOTIFYA = PSERVICE_NOTIFY_2A;
pub type SERVICE_NOTIFYW = SERVICE_NOTIFY_2W;
pub type PSERVICE_NOTIFYW = PSERVICE_NOTIFY_2W;
extern "system" {
pub fn ChangeServiceConfigA(
hService: SC_HANDLE,
dwServiceType: DWORD,
dsStartType: DWORD,
dwErrorControl: DWORD,
lpBinaryPathName: LPCSTR,
lpLoadOrderGroup: LPCSTR,
lpdwTagId: LPDWORD,
lpDependencies: LPCSTR,
lpServiceStartName: LPCSTR,
lpPassword: LPCSTR,
lpDisplayName: LPCSTR,
) -> BOOL;
pub fn ChangeServiceConfigW(
hService: SC_HANDLE,
dwServiceType: DWORD,
dsStartType: DWORD,
dwErrorControl: DWORD,
lpBinaryPathName: LPCWSTR,
lpLoadOrderGroup: LPCWSTR,
lpdwTagId: LPDWORD,
lpDependencies: LPCWSTR,
lpServiceStartName: LPCWSTR,
lpPassword: LPCWSTR,
lpDisplayName: LPCWSTR,
) -> BOOL;
pub fn ChangeServiceConfig2A(
hService: SC_HANDLE,
dwInfoLevel: DWORD,
lpInfo: LPVOID,
) -> BOOL;
pub fn ChangeServiceConfig2W(
hService: SC_HANDLE,
dwInfoLevel: DWORD,
lpInfo: LPVOID,
) -> BOOL;
pub fn CloseServiceHandle(
hSCObject: SC_HANDLE,
) -> BOOL;
pub fn ControlService(
hService: SC_HANDLE,
dwControl: DWORD,
lpServiceStatus: LPSERVICE_STATUS,
) -> BOOL;
pub fn CreateServiceA(
hSCManager: SC_HANDLE,
lpServiceName: LPCSTR,
lpDisplayName: LPCSTR,
dwDesiredAccess: DWORD,
dwServiceType: DWORD,
dwStartType: DWORD,
dwErrorControl: DWORD,
lpBinaryPathName: LPCSTR,
lpLoadOrderGroup: LPCSTR,
lpdwTagId: LPDWORD,
lpDependencies: LPCSTR,
lpServiceStartName: LPCSTR,
lpPassword: LPCSTR,
) -> SC_HANDLE;
pub fn CreateServiceW(
hSCManager: SC_HANDLE,
lpServiceName: LPCWSTR,
lpDisplayName: LPCWSTR,
dwDesiredAccess: DWORD,
dwServiceType: DWORD,
dwStartType: DWORD,
dwErrorControl: DWORD,
lpBinaryPathName: LPCWSTR,
lpLoadOrderGroup: LPCWSTR,
lpdwTagId: LPDWORD,
lpDependencies: LPCWSTR,
lpServiceStartName: LPCWSTR,
lpPassword: LPCWSTR,
) -> SC_HANDLE;
pub fn DeleteService(
hService: SC_HANDLE,
) -> BOOL;
pub fn EnumDependentServicesA(
hService: SC_HANDLE,
dwServiceState: DWORD,
lpServices: LPENUM_SERVICE_STATUSA,
cbBufSize: DWORD,
pcbBytesNeeded: LPDWORD,
lpServicesReturned: LPDWORD,
) -> BOOL;
pub fn EnumDependentServicesW(
hService: SC_HANDLE,
dwServiceState: DWORD,
lpServices: LPENUM_SERVICE_STATUSW,
cbBufSize: DWORD,
pcbBytesNeeded: LPDWORD,
lpServicesReturned: LPDWORD,
) -> BOOL;
pub fn EnumServicesStatusA(
hSCManager: SC_HANDLE,
dwServiceType: DWORD,
dwServiceState: DWORD,
lpServices: LPENUM_SERVICE_STATUSA,
cbBufSize: DWORD,
pcbBytesNeeded: LPDWORD,
lpServicesReturned: LPDWORD,
lpResumeHandle: LPDWORD,
) -> BOOL;
pub fn EnumServicesStatusW(
hSCManager: SC_HANDLE,
dwServiceType: DWORD,
dwServiceState: DWORD,
lpServices: LPENUM_SERVICE_STATUSW,
cbBufSize: DWORD,
pcbBytesNeeded: LPDWORD,
lpServicesReturned: LPDWORD,
lpResumeHandle: LPDWORD,
) -> BOOL;
pub fn EnumServicesStatusExA(
hSCManager: SC_HANDLE,
InfoLevel: SC_ENUM_TYPE,
dwServiceType: DWORD,
dwServiceState: DWORD,
lpServices: LPBYTE,
cbBufSize: DWORD,
pcbBytesNeeded: LPDWORD,
lpServicesReturned: LPDWORD,
lpResumeHandle: LPDWORD,
pszGroupName: LPCSTR,
) -> BOOL;
pub fn EnumServicesStatusExW(
hSCManager: SC_HANDLE,
InfoLevel: SC_ENUM_TYPE,
dwServiceType: DWORD,
dwServiceState: DWORD,
lpServices: LPBYTE,
cbBufSize: DWORD,
pcbBytesNeeded: LPDWORD,
lpServicesReturned: LPDWORD,
lpResumeHandle: LPDWORD,
pszGroupName: LPCWSTR,
) -> BOOL;
pub fn GetServiceKeyNameA(
hSCManager: SC_HANDLE,
lpDisplayName: LPCSTR,
lpServiceName: LPSTR,
lpcchBuffer: LPDWORD,
) -> BOOL;
pub fn GetServiceKeyNameW(
hSCManager: SC_HANDLE,
lpDisplayName: LPCWSTR,
lpServiceName: LPWSTR,
lpcchBuffer: LPDWORD,
) -> BOOL;
pub fn GetServiceDisplayNameA(
hSCManager: SC_HANDLE,
lpServiceName: LPCSTR,
lpDisplayName: LPSTR,
lpcchBuffer: LPDWORD,
) -> BOOL;
pub fn GetServiceDisplayNameW(
hSCManager: SC_HANDLE,
lpServiceName: LPCWSTR,
lpDisplayName: LPWSTR,
lpcchBuffer: LPDWORD,
) -> BOOL;
pub fn LockServiceDatabase(
hSCManager: SC_HANDLE,
) -> SC_LOCK;
pub fn NotifyBootConfigStatus(
BootAcceptable: BOOL,
) -> BOOL;
pub fn OpenSCManagerA(
lpMachineName: LPCSTR,
lpDatabaseName: LPCSTR,
dwDesiredAccess: DWORD,
) -> SC_HANDLE;
pub fn OpenSCManagerW(
lpMachineName: LPCWSTR,
lpDatabaseName: LPCWSTR,
dwDesiredAccess: DWORD,
) -> SC_HANDLE;
pub fn OpenServiceA(
hSCManager: SC_HANDLE,
lpServiceName: LPCSTR,
dwDesiredAccess: DWORD,
) -> SC_HANDLE;
pub fn OpenServiceW(
hSCManager: SC_HANDLE,
lpServiceName: LPCWSTR,
dwDesiredAccess: DWORD,
) -> SC_HANDLE;
pub fn QueryServiceConfigA(
hService: SC_HANDLE,
lpServiceConfig: LPQUERY_SERVICE_CONFIGA,
cbBufSize: DWORD,
pcbBytesNeeded: LPDWORD,
) -> BOOL;
pub fn QueryServiceConfigW(
hService: SC_HANDLE,
lpServiceConfig: LPQUERY_SERVICE_CONFIGW,
cbBufSize: DWORD,
pcbBytesNeeded: LPDWORD,
) -> BOOL;
pub fn QueryServiceConfig2A(
hService: SC_HANDLE,
dwInfoLevel: DWORD,
lpBuffer: LPBYTE,
cbBufSize: DWORD,
pcbBytesNeeded: LPDWORD,
) -> BOOL;
pub fn QueryServiceConfig2W(
hService: SC_HANDLE,
dwInfoLevel: DWORD,
lpBuffer: LPBYTE,
cbBufSize: DWORD,
pcbBytesNeeded: LPDWORD,
) -> BOOL;
pub fn QueryServiceLockStatusA(
hSCManager: SC_HANDLE,
lpLockStatus: LPQUERY_SERVICE_LOCK_STATUSA,
cbBufSize: DWORD,
pcbBytesNeeded: LPDWORD,
) -> BOOL;
pub fn QueryServiceLockStatusW(
hSCManager: SC_HANDLE,
lpLockStatus: LPQUERY_SERVICE_LOCK_STATUSW,
cbBufSize: DWORD,
pcbBytesNeeded: LPDWORD,
) -> BOOL;
pub fn QueryServiceObjectSecurity(
hService: SC_HANDLE,
dwSecurityInformation: SECURITY_INFORMATION,
lpSecurityDescriptor: PSECURITY_DESCRIPTOR,
cbBufSize: DWORD,
pcbBytesNeeded: LPDWORD,
) -> BOOL;
pub fn QueryServiceStatus(
hService: SC_HANDLE,
lpServiceStatus: LPSERVICE_STATUS,
) -> BOOL;
pub fn QueryServiceStatusEx(
hService: SC_HANDLE,
InfoLevel: SC_STATUS_TYPE,
lpBuffer: LPBYTE,
cbBufSize: DWORD,
pcbBytesNeeded: LPDWORD,
) -> BOOL;
pub fn RegisterServiceCtrlHandlerA(
lpServiceName: LPCSTR,
lpHandlerProc: LPHANDLER_FUNCTION,
) -> SERVICE_STATUS_HANDLE;
pub fn RegisterServiceCtrlHandlerW(
lpServiceName: LPCWSTR,
lpHandlerProc: LPHANDLER_FUNCTION,
) -> SERVICE_STATUS_HANDLE;
pub fn RegisterServiceCtrlHandlerExA(
lpServiceName: LPCSTR,
lpHandlerProc: LPHANDLER_FUNCTION_EX,
lpContext: LPVOID,
) -> SERVICE_STATUS_HANDLE;
pub fn RegisterServiceCtrlHandlerExW(
lpServiceName: LPCWSTR,
lpHandlerProc: LPHANDLER_FUNCTION_EX,
lpContext: LPVOID,
) -> SERVICE_STATUS_HANDLE;
pub fn SetServiceObjectSecurity(
hService: SC_HANDLE,
dwSecurityInformation: SECURITY_INFORMATION,
lpSecurityDescriptor: PSECURITY_DESCRIPTOR,
) -> BOOL;
pub fn SetServiceStatus(
hServiceStatus: SERVICE_STATUS_HANDLE,
lpServiceStatus: LPSERVICE_STATUS,
) -> BOOL;
pub fn StartServiceCtrlDispatcherA(
lpServiceStartTable: *const SERVICE_TABLE_ENTRYA,
) -> BOOL;
pub fn StartServiceCtrlDispatcherW(
lpServiceStartTable: *const SERVICE_TABLE_ENTRYW,
) -> BOOL;
pub fn StartServiceA(
hService: SC_HANDLE,
dwNumServiceArgs: DWORD,
lpServiceArgVectors: *mut LPCSTR,
) -> BOOL;
pub fn StartServiceW(
hService: SC_HANDLE,
dwNumServiceArgs: DWORD,
lpServiceArgVectors: *mut LPCWSTR,
) -> BOOL;
pub fn UnlockServiceDatabase(
ScLock: SC_LOCK,
) -> BOOL;
pub fn NotifyServiceStatusChangeA(
hService: SC_HANDLE,
dwNotifyMask: DWORD,
pNotifyBuffer: PSERVICE_NOTIFYA,
) -> DWORD;
pub fn NotifyServiceStatusChangeW(
hService: SC_HANDLE,
dwNotifyMask: DWORD,
pNotifyBuffer: PSERVICE_NOTIFYW,
) -> DWORD;
pub fn ControlServiceExA(
hService: SC_HANDLE,
dwControl: DWORD,
dwInfoLevel: DWORD,
pControlParams: PVOID,
) -> BOOL;
pub fn ControlServiceExW(
hService: SC_HANDLE,
dwControl: DWORD,
dwInfoLevel: DWORD,
pControlParams: PVOID,
) -> BOOL;
pub fn QueryServiceDynamicInformation(
hServiceStatus: SERVICE_STATUS_HANDLE,
dwInfoLevel: DWORD,
ppDynamicInfo: *mut PVOID,
) -> BOOL;
pub fn WaitServiceState (
hService: SC_HANDLE,
dwNotify: DWORD,
dwTimeout: DWORD,
hCancelEvent: HANDLE,
) -> DWORD;
}
Messung V0.5 in Prozent C=98 H=97 G=97
¤ Dauer der Verarbeitung: 0.14 Sekunden
(vorverarbeitet am 2026-06-18)
¤
*© Formatika GbR, Deutschland