1 // Licensed under the Apache License, Version 2.0 2 // <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license 3 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option. 4 // All files in the project carrying such notice may not be copied, modified, or distributed 5 // except according to those terms. 6 //! Header file for the Service Control Manager 7 use shared::minwindef::{BOOL, DWORD, LPBYTE, LPDWORD, LPVOID}; 8 use um::winnt::{ 9 HANDLE, LPCSTR, LPCWSTR, LPSTR, LPWSTR, PSECURITY_DESCRIPTOR, PVOID, 10 SECURITY_INFORMATION, STANDARD_RIGHTS_REQUIRED 11 }; 12 pub const SERVICE_NO_CHANGE: DWORD = 0xffffffff; 13 pub const SERVICE_ACTIVE: DWORD = 0x00000001; 14 pub const SERVICE_INACTIVE: DWORD = 0x00000002; 15 pub const SERVICE_STATE_ALL: DWORD = SERVICE_ACTIVE | SERVICE_INACTIVE; 16 pub const SERVICE_CONTROL_STOP: DWORD = 0x00000001; 17 pub const SERVICE_CONTROL_PAUSE: DWORD = 0x00000002; 18 pub const SERVICE_CONTROL_CONTINUE: DWORD = 0x00000003; 19 pub const SERVICE_CONTROL_INTERROGATE: DWORD = 0x00000004; 20 pub const SERVICE_CONTROL_SHUTDOWN: DWORD = 0x00000005; 21 pub const SERVICE_CONTROL_PARAMCHANGE: DWORD = 0x00000006; 22 pub const SERVICE_CONTROL_NETBINDADD: DWORD = 0x00000007; 23 pub const SERVICE_CONTROL_NETBINDREMOVE: DWORD = 0x00000008; 24 pub const SERVICE_CONTROL_NETBINDENABLE: DWORD = 0x00000009; 25 pub const SERVICE_CONTROL_NETBINDDISABLE: DWORD = 0x0000000A; 26 pub const SERVICE_CONTROL_DEVICEEVENT: DWORD = 0x0000000B; 27 pub const SERVICE_CONTROL_HARDWAREPROFILECHANGE: DWORD = 0x0000000C; 28 pub const SERVICE_CONTROL_POWEREVENT: DWORD = 0x0000000D; 29 pub const SERVICE_CONTROL_SESSIONCHANGE: DWORD = 0x0000000E; 30 pub const SERVICE_CONTROL_PRESHUTDOWN: DWORD = 0x0000000F; 31 pub const SERVICE_CONTROL_TIMECHANGE: DWORD = 0x00000010; 32 pub const SERVICE_CONTROL_TRIGGEREVENT: DWORD = 0x00000020; 33 pub const SERVICE_STOPPED: DWORD = 0x00000001; 34 pub const SERVICE_START_PENDING: DWORD = 0x00000002; 35 pub const SERVICE_STOP_PENDING: DWORD = 0x00000003; 36 pub const SERVICE_RUNNING: DWORD = 0x00000004; 37 pub const SERVICE_CONTINUE_PENDING: DWORD = 0x00000005; 38 pub const SERVICE_PAUSE_PENDING: DWORD = 0x00000006; 39 pub const SERVICE_PAUSED: DWORD = 0x00000007; 40 pub const SERVICE_ACCEPT_STOP: DWORD = 0x00000001; 41 pub const SERVICE_ACCEPT_PAUSE_CONTINUE: DWORD = 0x00000002; 42 pub const SERVICE_ACCEPT_SHUTDOWN: DWORD = 0x00000004; 43 pub const SERVICE_ACCEPT_PARAMCHANGE: DWORD = 0x00000008; 44 pub const SERVICE_ACCEPT_NETBINDCHANGE: DWORD = 0x00000010; 45 pub const SERVICE_ACCEPT_HARDWAREPROFILECHANGE: DWORD = 0x00000020; 46 pub const SERVICE_ACCEPT_POWEREVENT: DWORD = 0x00000040; 47 pub const SERVICE_ACCEPT_SESSIONCHANGE: DWORD = 0x00000080; 48 pub const SERVICE_ACCEPT_PRESHUTDOWN: DWORD = 0x00000100; 49 pub const SERVICE_ACCEPT_TIMECHANGE: DWORD = 0x00000200; 50 pub const SERVICE_ACCEPT_TRIGGEREVENT: DWORD = 0x00000400; 51 // SERVICE_ACCEPT_USER_LOGOFF 52 pub const SC_MANAGER_CONNECT: DWORD = 0x0001; 53 pub const SC_MANAGER_CREATE_SERVICE: DWORD = 0x0002; 54 pub const SC_MANAGER_ENUMERATE_SERVICE: DWORD = 0x0004; 55 pub const SC_MANAGER_LOCK: DWORD = 0x0008; 56 pub const SC_MANAGER_QUERY_LOCK_STATUS: DWORD = 0x0010; 57 pub const SC_MANAGER_MODIFY_BOOT_CONFIG: DWORD = 0x0020; 58 pub const SC_MANAGER_ALL_ACCESS: DWORD = STANDARD_RIGHTS_REQUIRED | SC_MANAGER_CONNECT 59 | SC_MANAGER_CREATE_SERVICE | SC_MANAGER_ENUMERATE_SERVICE | SC_MANAGER_LOCK 60 | SC_MANAGER_QUERY_LOCK_STATUS | SC_MANAGER_MODIFY_BOOT_CONFIG; 61 pub const SERVICE_QUERY_CONFIG: DWORD = 0x0001; 62 pub const SERVICE_CHANGE_CONFIG: DWORD = 0x0002; 63 pub const SERVICE_QUERY_STATUS: DWORD = 0x0004; 64 pub const SERVICE_ENUMERATE_DEPENDENTS: DWORD = 0x0008; 65 pub const SERVICE_START: DWORD = 0x0010; 66 pub const SERVICE_STOP: DWORD = 0x0020; 67 pub const SERVICE_PAUSE_CONTINUE: DWORD = 0x0040; 68 pub const SERVICE_INTERROGATE: DWORD = 0x0080; 69 pub const SERVICE_USER_DEFINED_CONTROL: DWORD = 0x0100; 70 pub const SERVICE_ALL_ACCESS: DWORD = STANDARD_RIGHTS_REQUIRED | SERVICE_QUERY_CONFIG 71 | SERVICE_CHANGE_CONFIG | SERVICE_QUERY_STATUS | SERVICE_ENUMERATE_DEPENDENTS | SERVICE_START 72 | SERVICE_STOP | SERVICE_PAUSE_CONTINUE | SERVICE_INTERROGATE | SERVICE_USER_DEFINED_CONTROL; 73 pub const SERVICE_RUNS_IN_SYSTEM_PROCESS: DWORD = 0x00000001; 74 pub const SERVICE_CONFIG_DESCRIPTION: DWORD = 1; 75 pub const SERVICE_CONFIG_FAILURE_ACTIONS: DWORD = 2; 76 pub const SERVICE_CONFIG_DELAYED_AUTO_START_INFO: DWORD = 3; 77 pub const SERVICE_CONFIG_FAILURE_ACTIONS_FLAG: DWORD = 4; 78 pub const SERVICE_CONFIG_SERVICE_SID_INFO: DWORD = 5; 79 pub const SERVICE_CONFIG_REQUIRED_PRIVILEGES_INFO: DWORD = 6; 80 pub const SERVICE_CONFIG_PRESHUTDOWN_INFO: DWORD = 7; 81 pub const SERVICE_CONFIG_TRIGGER_INFO: DWORD = 8; 82 pub const SERVICE_CONFIG_PREFERRED_NODE: DWORD = 9; 83 pub const SERVICE_CONFIG_LAUNCH_PROTECTED: DWORD = 12; 84 pub const SERVICE_NOTIFY_STATUS_CHANGE_1: DWORD = 1; 85 pub const SERVICE_NOTIFY_STATUS_CHANGE_2: DWORD = 2; 86 pub const SERVICE_NOTIFY_STATUS_CHANGE: DWORD = SERVICE_NOTIFY_STATUS_CHANGE_2; 87 pub const SERVICE_NOTIFY_STOPPED: DWORD = 0x00000001; 88 pub const SERVICE_NOTIFY_START_PENDING: DWORD = 0x00000002; 89 pub const SERVICE_NOTIFY_STOP_PENDING: DWORD = 0x00000004; 90 pub const SERVICE_NOTIFY_RUNNING: DWORD = 0x00000008; 91 pub const SERVICE_NOTIFY_CONTINUE_PENDING: DWORD = 0x00000010; 92 pub const SERVICE_NOTIFY_PAUSE_PENDING: DWORD = 0x00000020; 93 pub const SERVICE_NOTIFY_PAUSED: DWORD = 0x00000040; 94 pub const SERVICE_NOTIFY_CREATED: DWORD = 0x00000080; 95 pub const SERVICE_NOTIFY_DELETED: DWORD = 0x00000100; 96 pub const SERVICE_NOTIFY_DELETE_PENDING: DWORD = 0x00000200; 97 pub const SERVICE_STOP_REASON_FLAG_MIN: DWORD = 0x00000000; 98 pub const SERVICE_STOP_REASON_FLAG_UNPLANNED: DWORD = 0x10000000; 99 pub const SERVICE_STOP_REASON_FLAG_CUSTOM: DWORD = 0x20000000; 100 pub const SERVICE_STOP_REASON_FLAG_PLANNED: DWORD = 0x40000000; 101 pub const SERVICE_STOP_REASON_FLAG_MAX: DWORD = 0x80000000; 102 pub const SERVICE_STOP_REASON_MAJOR_MIN: DWORD = 0x00000000; 103 pub const SERVICE_STOP_REASON_MAJOR_OTHER: DWORD = 0x00010000; 104 pub const SERVICE_STOP_REASON_MAJOR_HARDWARE: DWORD = 0x00020000; 105 pub const SERVICE_STOP_REASON_MAJOR_OPERATINGSYSTEM: DWORD = 0x00030000; 106 pub const SERVICE_STOP_REASON_MAJOR_SOFTWARE: DWORD = 0x00040000; 107 pub const SERVICE_STOP_REASON_MAJOR_APPLICATION: DWORD = 0x00050000; 108 pub const SERVICE_STOP_REASON_MAJOR_NONE: DWORD = 0x00060000; 109 pub const SERVICE_STOP_REASON_MAJOR_MAX: DWORD = 0x00070000; 110 pub const SERVICE_STOP_REASON_MAJOR_MIN_CUSTOM: DWORD = 0x00400000; 111 pub const SERVICE_STOP_REASON_MAJOR_MAX_CUSTOM: DWORD = 0x00ff0000; 112 pub const SERVICE_STOP_REASON_MINOR_MIN: DWORD = 0x00000000; 113 pub const SERVICE_STOP_REASON_MINOR_OTHER: DWORD = 0x00000001; 114 pub const SERVICE_STOP_REASON_MINOR_MAINTENANCE: DWORD = 0x00000002; 115 pub const SERVICE_STOP_REASON_MINOR_INSTALLATION: DWORD = 0x00000003; 116 pub const SERVICE_STOP_REASON_MINOR_UPGRADE: DWORD = 0x00000004; 117 pub const SERVICE_STOP_REASON_MINOR_RECONFIG: DWORD = 0x00000005; 118 pub const SERVICE_STOP_REASON_MINOR_HUNG: DWORD = 0x00000006; 119 pub const SERVICE_STOP_REASON_MINOR_UNSTABLE: DWORD = 0x00000007; 120 pub const SERVICE_STOP_REASON_MINOR_DISK: DWORD = 0x00000008; 121 pub const SERVICE_STOP_REASON_MINOR_NETWORKCARD: DWORD = 0x00000009; 122 pub const SERVICE_STOP_REASON_MINOR_ENVIRONMENT: DWORD = 0x0000000a; 123 pub const SERVICE_STOP_REASON_MINOR_HARDWARE_DRIVER: DWORD = 0x0000000b; 124 pub const SERVICE_STOP_REASON_MINOR_OTHERDRIVER: DWORD = 0x0000000c; 125 pub const SERVICE_STOP_REASON_MINOR_SERVICEPACK: DWORD = 0x0000000d; 126 pub const SERVICE_STOP_REASON_MINOR_SOFTWARE_UPDATE: DWORD = 0x0000000e; 127 pub const SERVICE_STOP_REASON_MINOR_SECURITYFIX: DWORD = 0x0000000f; 128 pub const SERVICE_STOP_REASON_MINOR_SECURITY: DWORD = 0x00000010; 129 pub const SERVICE_STOP_REASON_MINOR_NETWORK_CONNECTIVITY: DWORD = 0x00000011; 130 pub const SERVICE_STOP_REASON_MINOR_WMI: DWORD = 0x00000012; 131 pub const SERVICE_STOP_REASON_MINOR_SERVICEPACK_UNINSTALL: DWORD = 0x00000013; 132 pub const SERVICE_STOP_REASON_MINOR_SOFTWARE_UPDATE_UNINSTALL: DWORD = 0x00000014; 133 pub const SERVICE_STOP_REASON_MINOR_SECURITYFIX_UNINSTALL: DWORD = 0x00000015; 134 pub const SERVICE_STOP_REASON_MINOR_MMC: DWORD = 0x00000016; 135 pub const SERVICE_STOP_REASON_MINOR_NONE: DWORD = 0x00000017; 136 pub const SERVICE_STOP_REASON_MINOR_MAX: DWORD = 0x00000018; 137 pub const SERVICE_STOP_REASON_MINOR_MIN_CUSTOM: DWORD = 0x00000100; 138 pub const SERVICE_STOP_REASON_MINOR_MAX_CUSTOM: DWORD = 0x0000FFFF; 139 pub const SERVICE_CONTROL_STATUS_REASON_INFO: DWORD = 1; 140 pub const SERVICE_SID_TYPE_NONE: DWORD = 0x00000000; 141 pub const SERVICE_SID_TYPE_UNRESTRICTED: DWORD = 0x00000001; 142 pub const SERVICE_SID_TYPE_RESTRICTED: DWORD = 0x00000002 | SERVICE_SID_TYPE_UNRESTRICTED; 143 pub const SERVICE_TRIGGER_TYPE_DEVICE_INTERFACE_ARRIVAL: DWORD = 1; 144 pub const SERVICE_TRIGGER_TYPE_IP_ADDRESS_AVAILABILITY: DWORD = 2; 145 pub const SERVICE_TRIGGER_TYPE_DOMAIN_JOIN: DWORD = 3; 146 pub const SERVICE_TRIGGER_TYPE_FIREWALL_PORT_EVENT: DWORD = 4; 147 pub const SERVICE_TRIGGER_TYPE_GROUP_POLICY: DWORD = 5; 148 pub const SERVICE_TRIGGER_TYPE_NETWORK_ENDPOINT: DWORD = 6; 149 pub const SERVICE_TRIGGER_TYPE_CUSTOM_SYSTEM_STATE_CHANGE: DWORD = 7; 150 pub const SERVICE_TRIGGER_TYPE_CUSTOM: DWORD = 20; 151 pub const SERVICE_TRIGGER_DATA_TYPE_BINARY: DWORD = 1; 152 pub const SERVICE_TRIGGER_DATA_TYPE_STRING: DWORD = 2; 153 pub const SERVICE_TRIGGER_DATA_TYPE_LEVEL: DWORD = 3; 154 pub const SERVICE_TRIGGER_DATA_TYPE_KEYWORD_ANY: DWORD = 4; 155 pub const SERVICE_TRIGGER_DATA_TYPE_KEYWORD_ALL: DWORD = 5; 156 pub const SERVICE_START_REASON_DEMAND: DWORD = 0x00000001; 157 pub const SERVICE_START_REASON_AUTO: DWORD = 0x00000002; 158 pub const SERVICE_START_REASON_TRIGGER: DWORD = 0x00000004; 159 pub const SERVICE_START_REASON_RESTART_ON_FAILURE: DWORD = 0x00000008; 160 pub const SERVICE_START_REASON_DELAYEDAUTO: DWORD = 0x00000010; 161 pub const SERVICE_DYNAMIC_INFORMATION_LEVEL_START_REASON: DWORD = 1; 162 pub const SERVICE_LAUNCH_PROTECTED_NONE: DWORD = 0; 163 pub const SERVICE_LAUNCH_PROTECTED_WINDOWS: DWORD = 1; 164 pub const SERVICE_LAUNCH_PROTECTED_WINDOWS_LIGHT: DWORD = 2; 165 pub const SERVICE_LAUNCH_PROTECTED_ANTIMALWARE_LIGHT: DWORD = 3; 166 DEFINE_GUID!{NETWORK_MANAGER_FIRST_IP_ADDRESS_ARRIVAL_GUID, 167 0x4f27f2de, 0x14e2, 0x430b, 0xa5, 0x49, 0x7c, 0xd4, 0x8c, 0xbc, 0x82, 0x45} 168 DEFINE_GUID!{NETWORK_MANAGER_LAST_IP_ADDRESS_REMOVAL_GUID, 169 0xcc4ba62a, 0x162e, 0x4648, 0x84, 0x7a, 0xb6, 0xbd, 0xf9, 0x93, 0xe3, 0x35} 170 DEFINE_GUID!{DOMAIN_JOIN_GUID, 171 0x1ce20aba, 0x9851, 0x4421, 0x94, 0x30, 0x1d, 0xde, 0xb7, 0x66, 0xe8, 0x09} 172 DEFINE_GUID!{DOMAIN_LEAVE_GUID, 173 0xddaf516e, 0x58c2, 0x4866, 0x95, 0x74, 0xc3, 0xb6, 0x15, 0xd4, 0x2e, 0xa1} 174 DEFINE_GUID!{FIREWALL_PORT_OPEN_GUID, 175 0xb7569e07, 0x8421, 0x4ee0, 0xad, 0x10, 0x86, 0x91, 0x5a, 0xfd, 0xad, 0x09} 176 DEFINE_GUID!{FIREWALL_PORT_CLOSE_GUID, 177 0xa144ed38, 0x8e12, 0x4de4, 0x9d, 0x96, 0xe6, 0x47, 0x40, 0xb1, 0xa5, 0x24} 178 DEFINE_GUID!{MACHINE_POLICY_PRESENT_GUID, 179 0x659fcae6, 0x5bdb, 0x4da9, 0xb1, 0xff, 0xca, 0x2a, 0x17, 0x8d, 0x46, 0xe0} 180 DEFINE_GUID!{USER_POLICY_PRESENT_GUID, 181 0x54fb46c8, 0xf089, 0x464c, 0xb1, 0xfd, 0x59, 0xd1, 0xb6, 0x2c, 0x3b, 0x50} 182 DEFINE_GUID!{RPC_INTERFACE_EVENT_GUID, 183 0xbc90d167, 0x9470, 0x4139, 0xa9, 0xba, 0xbe, 0x0b, 0xbb, 0xf5, 0xb7, 0x4d} 184 DEFINE_GUID!{NAMED_PIPE_EVENT_GUID, 185 0x1f81d131, 0x3fac, 0x4537, 0x9e, 0x0c, 0x7e, 0x7b, 0x0c, 0x2f, 0x4b, 0x55} 186 DEFINE_GUID!{CUSTOM_SYSTEM_STATE_CHANGE_EVENT_GUID, 187 0x2d7a2816, 0x0c5e, 0x45fc, 0x9c, 0xe7, 0x57, 0x0e, 0x5e, 0xcd, 0xe9, 0xc9} 188 DECLARE_HANDLE!{SC_HANDLE, SC_HANDLE__} 189 pub type LPSC_HANDLE = *mut SC_HANDLE; 190 DECLARE_HANDLE!{SERVICE_STATUS_HANDLE, SERVICE_STATUS_HANDLE__} 191 ENUM!{enum SC_STATUS_TYPE { 192 SC_STATUS_PROCESS_INFO = 0, 193 }} 194 ENUM!{enum SC_ENUM_TYPE { 195 SC_ENUM_PROCESS_INFO = 0, 196 }} 197 STRUCT!{struct SERVICE_STATUS { 198 dwServiceType: DWORD, 199 dwCurrentState: DWORD, 200 dwControlsAccepted: DWORD, 201 dwWin32ExitCode: DWORD, 202 dwServiceSpecificExitCode: DWORD, 203 dwCheckPoint: DWORD, 204 dwWaitHint: DWORD, 205 }} 206 pub type LPSERVICE_STATUS = *mut SERVICE_STATUS; 207 STRUCT!{struct SERVICE_STATUS_PROCESS { 208 dwServiceType: DWORD, 209 dwCurrentState: DWORD, 210 dwControlsAccepted: DWORD, 211 dwWin32ExitCode: DWORD, 212 dwServiceSpecificExitCode: DWORD, 213 dwCheckPoint: DWORD, 214 dwWaitHint: DWORD, 215 dwProcessId: DWORD, 216 dwServiceFlags: DWORD, 217 }} 218 pub type LPSERVICE_STATUS_PROCESS = *mut SERVICE_STATUS_PROCESS; 219 STRUCT!{struct ENUM_SERVICE_STATUSA { 220 lpServiceName: LPSTR, 221 lpDisplayName: LPSTR, 222 ServiceStatus: SERVICE_STATUS, 223 }} 224 pub type LPENUM_SERVICE_STATUSA = *mut ENUM_SERVICE_STATUSA; 225 STRUCT!{struct ENUM_SERVICE_STATUSW { 226 lpServiceName: LPWSTR, 227 lpDisplayName: LPWSTR, 228 ServiceStatus: SERVICE_STATUS, 229 }} 230 pub type LPENUM_SERVICE_STATUSW = *mut ENUM_SERVICE_STATUSW; 231 STRUCT!{struct ENUM_SERVICE_STATUS_PROCESSA { 232 lpServiceName: LPSTR, 233 lpDisplayName: LPSTR, 234 ServiceStatusProcess: SERVICE_STATUS_PROCESS, 235 }} 236 pub type LPENUM_SERVICE_STATUS_PROCESSA = *mut ENUM_SERVICE_STATUS_PROCESSA; 237 STRUCT!{struct ENUM_SERVICE_STATUS_PROCESSW { 238 lpServiceName: LPWSTR, 239 lpDisplayName: LPWSTR, 240 ServiceStatusProcess: SERVICE_STATUS_PROCESS, 241 }} 242 pub type LPENUM_SERVICE_STATUS_PROCESSW = *mut ENUM_SERVICE_STATUS_PROCESSW; 243 pub type SC_LOCK = LPVOID; 244 STRUCT!{struct QUERY_SERVICE_LOCK_STATUSA { 245 fIsLocked: DWORD, 246 lpLockOwner: LPSTR, 247 dwLockDuration: DWORD, 248 }} 249 pub type LPQUERY_SERVICE_LOCK_STATUSA = *mut QUERY_SERVICE_LOCK_STATUSA; 250 STRUCT!{struct QUERY_SERVICE_LOCK_STATUSW { 251 fIsLocked: DWORD, 252 lpLockOwner: LPWSTR, 253 dwLockDuration: DWORD, 254 }} 255 pub type LPQUERY_SERVICE_LOCK_STATUSW = *mut QUERY_SERVICE_LOCK_STATUSW; 256 STRUCT!{struct QUERY_SERVICE_CONFIGA { 257 dwServiceType: DWORD, 258 dwStartType: DWORD, 259 dwErrorControl: DWORD, 260 lpBinaryPathName: LPSTR, 261 lpLoadOrderGroup: LPSTR, 262 dwTagId: DWORD, 263 lpDependencies: LPSTR, 264 lpServiceStartName: LPSTR, 265 lpDisplayName: LPSTR, 266 }} 267 pub type LPQUERY_SERVICE_CONFIGA = *mut QUERY_SERVICE_CONFIGA; 268 STRUCT!{struct QUERY_SERVICE_CONFIGW { 269 dwServiceType: DWORD, 270 dwStartType: DWORD, 271 dwErrorControl: DWORD, 272 lpBinaryPathName: LPWSTR, 273 lpLoadOrderGroup: LPWSTR, 274 dwTagId: DWORD, 275 lpDependencies: LPWSTR, 276 lpServiceStartName: LPWSTR, 277 lpDisplayName: LPWSTR, 278 }} 279 pub type LPQUERY_SERVICE_CONFIGW = *mut QUERY_SERVICE_CONFIGW; 280 FN!{stdcall LPSERVICE_MAIN_FUNCTIONW( 281 dwNumServicesArgs: DWORD, 282 lpServiceArgVectors: *mut LPWSTR, 283 ) -> ()} 284 FN!{stdcall LPSERVICE_MAIN_FUNCTIONA( 285 dwNumServicesArgs: DWORD, 286 lpServiceArgVectors: *mut LPSTR, 287 ) -> ()} 288 STRUCT!{struct SERVICE_TABLE_ENTRYA { 289 lpServiceName: LPCSTR, 290 lpServiceProc: LPSERVICE_MAIN_FUNCTIONA, 291 }} 292 pub type LPSERVICE_TABLE_ENTRYA = *mut SERVICE_TABLE_ENTRYA; 293 STRUCT!{struct SERVICE_TABLE_ENTRYW { 294 lpServiceName: LPCWSTR, 295 lpServiceProc: LPSERVICE_MAIN_FUNCTIONW, 296 }} 297 pub type LPSERVICE_TABLE_ENTRYW = *mut SERVICE_TABLE_ENTRYW; 298 FN!{stdcall LPHANDLER_FUNCTION( 299 dwControl: DWORD, 300 ) -> ()} 301 FN!{stdcall LPHANDLER_FUNCTION_EX( 302 dwControl: DWORD, 303 dwEventType: DWORD, 304 lpEventData: LPVOID, 305 lpContext: LPVOID, 306 ) -> DWORD} 307 FN!{stdcall PFN_SC_NOTIFY_CALLBACK( 308 pParameter: PVOID, 309 ) -> ()} 310 STRUCT!{struct SERVICE_NOTIFY_1 { 311 dwVersion: DWORD, 312 pfnNotifyCallback: PFN_SC_NOTIFY_CALLBACK, 313 pContext: PVOID, 314 dwNotificationStatus: DWORD, 315 ServiceStatus: SERVICE_STATUS_PROCESS, 316 }} 317 pub type PSERVICE_NOTIFY_1 = *mut SERVICE_NOTIFY_1; 318 STRUCT!{struct SERVICE_NOTIFY_2A { 319 dwVersion: DWORD, 320 pfnNotifyCallback: PFN_SC_NOTIFY_CALLBACK, 321 pContext: PVOID, 322 dwNotificationStatus: DWORD, 323 ServiceStatus: SERVICE_STATUS_PROCESS, 324 dwNotificationTriggered: DWORD, 325 pszServiceNames: LPSTR, 326 }} 327 pub type PSERVICE_NOTIFY_2A = *mut SERVICE_NOTIFY_2A; 328 STRUCT!{struct SERVICE_NOTIFY_2W { 329 dwVersion: DWORD, 330 pfnNotifyCallback: PFN_SC_NOTIFY_CALLBACK, 331 pContext: PVOID, 332 dwNotificationStatus: DWORD, 333 ServiceStatus: SERVICE_STATUS_PROCESS, 334 dwNotificationTriggered: DWORD, 335 pszServiceNames: LPWSTR, 336 }} 337 pub type PSERVICE_NOTIFY_2W = *mut SERVICE_NOTIFY_2W; 338 pub type SERVICE_NOTIFYA = SERVICE_NOTIFY_2A; 339 pub type PSERVICE_NOTIFYA = PSERVICE_NOTIFY_2A; 340 pub type SERVICE_NOTIFYW = SERVICE_NOTIFY_2W; 341 pub type PSERVICE_NOTIFYW = PSERVICE_NOTIFY_2W; 342 extern "system" { ChangeServiceConfigA( hService: SC_HANDLE, dwServiceType: DWORD, dsStartType: DWORD, dwErrorControl: DWORD, lpBinaryPathName: LPCSTR, lpLoadOrderGroup: LPCSTR, lpdwTagId: LPDWORD, lpDependencies: LPCSTR, lpServiceStartName: LPCSTR, lpPassword: LPCSTR, lpDisplayName: LPCSTR, ) -> BOOL343 pub fn ChangeServiceConfigA( 344 hService: SC_HANDLE, 345 dwServiceType: DWORD, 346 dsStartType: DWORD, 347 dwErrorControl: DWORD, 348 lpBinaryPathName: LPCSTR, 349 lpLoadOrderGroup: LPCSTR, 350 lpdwTagId: LPDWORD, 351 lpDependencies: LPCSTR, 352 lpServiceStartName: LPCSTR, 353 lpPassword: LPCSTR, 354 lpDisplayName: LPCSTR, 355 ) -> BOOL; ChangeServiceConfigW( hService: SC_HANDLE, dwServiceType: DWORD, dsStartType: DWORD, dwErrorControl: DWORD, lpBinaryPathName: LPCWSTR, lpLoadOrderGroup: LPCWSTR, lpdwTagId: LPDWORD, lpDependencies: LPCWSTR, lpServiceStartName: LPCWSTR, lpPassword: LPCWSTR, lpDisplayName: LPCWSTR, ) -> BOOL356 pub fn ChangeServiceConfigW( 357 hService: SC_HANDLE, 358 dwServiceType: DWORD, 359 dsStartType: DWORD, 360 dwErrorControl: DWORD, 361 lpBinaryPathName: LPCWSTR, 362 lpLoadOrderGroup: LPCWSTR, 363 lpdwTagId: LPDWORD, 364 lpDependencies: LPCWSTR, 365 lpServiceStartName: LPCWSTR, 366 lpPassword: LPCWSTR, 367 lpDisplayName: LPCWSTR, 368 ) -> BOOL; ChangeServiceConfig2A( hService: SC_HANDLE, dwInfoLevel: DWORD, lpInfo: LPVOID, ) -> BOOL369 pub fn ChangeServiceConfig2A( 370 hService: SC_HANDLE, 371 dwInfoLevel: DWORD, 372 lpInfo: LPVOID, 373 ) -> BOOL; ChangeServiceConfig2W( hService: SC_HANDLE, dwInfoLevel: DWORD, lpInfo: LPVOID, ) -> BOOL374 pub fn ChangeServiceConfig2W( 375 hService: SC_HANDLE, 376 dwInfoLevel: DWORD, 377 lpInfo: LPVOID, 378 ) -> BOOL; CloseServiceHandle( hSCObject: SC_HANDLE, ) -> BOOL379 pub fn CloseServiceHandle( 380 hSCObject: SC_HANDLE, 381 ) -> BOOL; ControlService( hService: SC_HANDLE, dwControl: DWORD, lpServiceStatus: LPSERVICE_STATUS, ) -> BOOL382 pub fn ControlService( 383 hService: SC_HANDLE, 384 dwControl: DWORD, 385 lpServiceStatus: LPSERVICE_STATUS, 386 ) -> BOOL; 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_HANDLE387 pub fn CreateServiceA( 388 hSCManager: SC_HANDLE, 389 lpServiceName: LPCSTR, 390 lpDisplayName: LPCSTR, 391 dwDesiredAccess: DWORD, 392 dwServiceType: DWORD, 393 dwStartType: DWORD, 394 dwErrorControl: DWORD, 395 lpBinaryPathName: LPCSTR, 396 lpLoadOrderGroup: LPCSTR, 397 lpdwTagId: LPDWORD, 398 lpDependencies: LPCSTR, 399 lpServiceStartName: LPCSTR, 400 lpPassword: LPCSTR, 401 ) -> SC_HANDLE; 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_HANDLE402 pub fn CreateServiceW( 403 hSCManager: SC_HANDLE, 404 lpServiceName: LPCWSTR, 405 lpDisplayName: LPCWSTR, 406 dwDesiredAccess: DWORD, 407 dwServiceType: DWORD, 408 dwStartType: DWORD, 409 dwErrorControl: DWORD, 410 lpBinaryPathName: LPCWSTR, 411 lpLoadOrderGroup: LPCWSTR, 412 lpdwTagId: LPDWORD, 413 lpDependencies: LPCWSTR, 414 lpServiceStartName: LPCWSTR, 415 lpPassword: LPCWSTR, 416 ) -> SC_HANDLE; DeleteService( hService: SC_HANDLE, ) -> BOOL417 pub fn DeleteService( 418 hService: SC_HANDLE, 419 ) -> BOOL; EnumDependentServicesA( hService: SC_HANDLE, dwServiceState: DWORD, lpServices: LPENUM_SERVICE_STATUSA, cbBufSize: DWORD, pcbBytesNeeded: LPDWORD, lpServicesReturned: LPDWORD, ) -> BOOL420 pub fn EnumDependentServicesA( 421 hService: SC_HANDLE, 422 dwServiceState: DWORD, 423 lpServices: LPENUM_SERVICE_STATUSA, 424 cbBufSize: DWORD, 425 pcbBytesNeeded: LPDWORD, 426 lpServicesReturned: LPDWORD, 427 ) -> BOOL; EnumDependentServicesW( hService: SC_HANDLE, dwServiceState: DWORD, lpServices: LPENUM_SERVICE_STATUSW, cbBufSize: DWORD, pcbBytesNeeded: LPDWORD, lpServicesReturned: LPDWORD, ) -> BOOL428 pub fn EnumDependentServicesW( 429 hService: SC_HANDLE, 430 dwServiceState: DWORD, 431 lpServices: LPENUM_SERVICE_STATUSW, 432 cbBufSize: DWORD, 433 pcbBytesNeeded: LPDWORD, 434 lpServicesReturned: LPDWORD, 435 ) -> BOOL; EnumServicesStatusA( hSCManager: SC_HANDLE, dwServiceType: DWORD, dwServiceState: DWORD, lpServices: LPENUM_SERVICE_STATUSA, cbBufSize: DWORD, pcbBytesNeeded: LPDWORD, lpServicesReturned: LPDWORD, lpResumeHandle: LPDWORD, ) -> BOOL436 pub fn EnumServicesStatusA( 437 hSCManager: SC_HANDLE, 438 dwServiceType: DWORD, 439 dwServiceState: DWORD, 440 lpServices: LPENUM_SERVICE_STATUSA, 441 cbBufSize: DWORD, 442 pcbBytesNeeded: LPDWORD, 443 lpServicesReturned: LPDWORD, 444 lpResumeHandle: LPDWORD, 445 ) -> BOOL; EnumServicesStatusW( hSCManager: SC_HANDLE, dwServiceType: DWORD, dwServiceState: DWORD, lpServices: LPENUM_SERVICE_STATUSW, cbBufSize: DWORD, pcbBytesNeeded: LPDWORD, lpServicesReturned: LPDWORD, lpResumeHandle: LPDWORD, ) -> BOOL446 pub fn EnumServicesStatusW( 447 hSCManager: SC_HANDLE, 448 dwServiceType: DWORD, 449 dwServiceState: DWORD, 450 lpServices: LPENUM_SERVICE_STATUSW, 451 cbBufSize: DWORD, 452 pcbBytesNeeded: LPDWORD, 453 lpServicesReturned: LPDWORD, 454 lpResumeHandle: LPDWORD, 455 ) -> BOOL; EnumServicesStatusExA( hSCManager: SC_HANDLE, InfoLevel: SC_ENUM_TYPE, dwServiceType: DWORD, dwServiceState: DWORD, lpServices: LPBYTE, cbBufSize: DWORD, pcbBytesNeeded: LPDWORD, lpServicesReturned: LPDWORD, lpResumeHandle: LPDWORD, pszGroupName: LPCSTR, ) -> BOOL456 pub fn EnumServicesStatusExA( 457 hSCManager: SC_HANDLE, 458 InfoLevel: SC_ENUM_TYPE, 459 dwServiceType: DWORD, 460 dwServiceState: DWORD, 461 lpServices: LPBYTE, 462 cbBufSize: DWORD, 463 pcbBytesNeeded: LPDWORD, 464 lpServicesReturned: LPDWORD, 465 lpResumeHandle: LPDWORD, 466 pszGroupName: LPCSTR, 467 ) -> BOOL; EnumServicesStatusExW( hSCManager: SC_HANDLE, InfoLevel: SC_ENUM_TYPE, dwServiceType: DWORD, dwServiceState: DWORD, lpServices: LPBYTE, cbBufSize: DWORD, pcbBytesNeeded: LPDWORD, lpServicesReturned: LPDWORD, lpResumeHandle: LPDWORD, pszGroupName: LPCWSTR, ) -> BOOL468 pub fn EnumServicesStatusExW( 469 hSCManager: SC_HANDLE, 470 InfoLevel: SC_ENUM_TYPE, 471 dwServiceType: DWORD, 472 dwServiceState: DWORD, 473 lpServices: LPBYTE, 474 cbBufSize: DWORD, 475 pcbBytesNeeded: LPDWORD, 476 lpServicesReturned: LPDWORD, 477 lpResumeHandle: LPDWORD, 478 pszGroupName: LPCWSTR, 479 ) -> BOOL; GetServiceKeyNameA( hSCManager: SC_HANDLE, lpDisplayName: LPCSTR, lpServiceName: LPSTR, lpcchBuffer: LPDWORD, ) -> BOOL480 pub fn GetServiceKeyNameA( 481 hSCManager: SC_HANDLE, 482 lpDisplayName: LPCSTR, 483 lpServiceName: LPSTR, 484 lpcchBuffer: LPDWORD, 485 ) -> BOOL; GetServiceKeyNameW( hSCManager: SC_HANDLE, lpDisplayName: LPCWSTR, lpServiceName: LPWSTR, lpcchBuffer: LPDWORD, ) -> BOOL486 pub fn GetServiceKeyNameW( 487 hSCManager: SC_HANDLE, 488 lpDisplayName: LPCWSTR, 489 lpServiceName: LPWSTR, 490 lpcchBuffer: LPDWORD, 491 ) -> BOOL; GetServiceDisplayNameA( hSCManager: SC_HANDLE, lpServiceName: LPCSTR, lpDisplayName: LPSTR, lpcchBuffer: LPDWORD, ) -> BOOL492 pub fn GetServiceDisplayNameA( 493 hSCManager: SC_HANDLE, 494 lpServiceName: LPCSTR, 495 lpDisplayName: LPSTR, 496 lpcchBuffer: LPDWORD, 497 ) -> BOOL; GetServiceDisplayNameW( hSCManager: SC_HANDLE, lpServiceName: LPCWSTR, lpDisplayName: LPWSTR, lpcchBuffer: LPDWORD, ) -> BOOL498 pub fn GetServiceDisplayNameW( 499 hSCManager: SC_HANDLE, 500 lpServiceName: LPCWSTR, 501 lpDisplayName: LPWSTR, 502 lpcchBuffer: LPDWORD, 503 ) -> BOOL; LockServiceDatabase( hSCManager: SC_HANDLE, ) -> SC_LOCK504 pub fn LockServiceDatabase( 505 hSCManager: SC_HANDLE, 506 ) -> SC_LOCK; NotifyBootConfigStatus( BootAcceptable: BOOL, ) -> BOOL507 pub fn NotifyBootConfigStatus( 508 BootAcceptable: BOOL, 509 ) -> BOOL; OpenSCManagerA( lpMachineName: LPCSTR, lpDatabaseName: LPCSTR, dwDesiredAccess: DWORD, ) -> SC_HANDLE510 pub fn OpenSCManagerA( 511 lpMachineName: LPCSTR, 512 lpDatabaseName: LPCSTR, 513 dwDesiredAccess: DWORD, 514 ) -> SC_HANDLE; OpenSCManagerW( lpMachineName: LPCWSTR, lpDatabaseName: LPCWSTR, dwDesiredAccess: DWORD, ) -> SC_HANDLE515 pub fn OpenSCManagerW( 516 lpMachineName: LPCWSTR, 517 lpDatabaseName: LPCWSTR, 518 dwDesiredAccess: DWORD, 519 ) -> SC_HANDLE; OpenServiceA( hSCManager: SC_HANDLE, lpServiceName: LPCSTR, dwDesiredAccess: DWORD, ) -> SC_HANDLE520 pub fn OpenServiceA( 521 hSCManager: SC_HANDLE, 522 lpServiceName: LPCSTR, 523 dwDesiredAccess: DWORD, 524 ) -> SC_HANDLE; OpenServiceW( hSCManager: SC_HANDLE, lpServiceName: LPCWSTR, dwDesiredAccess: DWORD, ) -> SC_HANDLE525 pub fn OpenServiceW( 526 hSCManager: SC_HANDLE, 527 lpServiceName: LPCWSTR, 528 dwDesiredAccess: DWORD, 529 ) -> SC_HANDLE; QueryServiceConfigA( hService: SC_HANDLE, lpServiceConfig: LPQUERY_SERVICE_CONFIGA, cbBufSize: DWORD, pcbBytesNeeded: LPDWORD, ) -> BOOL530 pub fn QueryServiceConfigA( 531 hService: SC_HANDLE, 532 lpServiceConfig: LPQUERY_SERVICE_CONFIGA, 533 cbBufSize: DWORD, 534 pcbBytesNeeded: LPDWORD, 535 ) -> BOOL; QueryServiceConfigW( hService: SC_HANDLE, lpServiceConfig: LPQUERY_SERVICE_CONFIGW, cbBufSize: DWORD, pcbBytesNeeded: LPDWORD, ) -> BOOL536 pub fn QueryServiceConfigW( 537 hService: SC_HANDLE, 538 lpServiceConfig: LPQUERY_SERVICE_CONFIGW, 539 cbBufSize: DWORD, 540 pcbBytesNeeded: LPDWORD, 541 ) -> BOOL; QueryServiceConfig2A( hService: SC_HANDLE, dwInfoLevel: DWORD, lpBuffer: LPBYTE, cbBufSize: DWORD, pcbBytesNeeded: LPDWORD, ) -> BOOL542 pub fn QueryServiceConfig2A( 543 hService: SC_HANDLE, 544 dwInfoLevel: DWORD, 545 lpBuffer: LPBYTE, 546 cbBufSize: DWORD, 547 pcbBytesNeeded: LPDWORD, 548 ) -> BOOL; QueryServiceConfig2W( hService: SC_HANDLE, dwInfoLevel: DWORD, lpBuffer: LPBYTE, cbBufSize: DWORD, pcbBytesNeeded: LPDWORD, ) -> BOOL549 pub fn QueryServiceConfig2W( 550 hService: SC_HANDLE, 551 dwInfoLevel: DWORD, 552 lpBuffer: LPBYTE, 553 cbBufSize: DWORD, 554 pcbBytesNeeded: LPDWORD, 555 ) -> BOOL; QueryServiceLockStatusA( hSCManager: SC_HANDLE, lpLockStatus: LPQUERY_SERVICE_LOCK_STATUSA, cbBufSize: DWORD, pcbBytesNeeded: LPDWORD, ) -> BOOL556 pub fn QueryServiceLockStatusA( 557 hSCManager: SC_HANDLE, 558 lpLockStatus: LPQUERY_SERVICE_LOCK_STATUSA, 559 cbBufSize: DWORD, 560 pcbBytesNeeded: LPDWORD, 561 ) -> BOOL; QueryServiceLockStatusW( hSCManager: SC_HANDLE, lpLockStatus: LPQUERY_SERVICE_LOCK_STATUSW, cbBufSize: DWORD, pcbBytesNeeded: LPDWORD, ) -> BOOL562 pub fn QueryServiceLockStatusW( 563 hSCManager: SC_HANDLE, 564 lpLockStatus: LPQUERY_SERVICE_LOCK_STATUSW, 565 cbBufSize: DWORD, 566 pcbBytesNeeded: LPDWORD, 567 ) -> BOOL; QueryServiceObjectSecurity( hService: SC_HANDLE, dwSecurityInformation: SECURITY_INFORMATION, lpSecurityDescriptor: PSECURITY_DESCRIPTOR, cbBufSize: DWORD, pcbBytesNeeded: LPDWORD, ) -> BOOL568 pub fn QueryServiceObjectSecurity( 569 hService: SC_HANDLE, 570 dwSecurityInformation: SECURITY_INFORMATION, 571 lpSecurityDescriptor: PSECURITY_DESCRIPTOR, 572 cbBufSize: DWORD, 573 pcbBytesNeeded: LPDWORD, 574 ) -> BOOL; QueryServiceStatus( hService: SC_HANDLE, lpServiceStatus: LPSERVICE_STATUS, ) -> BOOL575 pub fn QueryServiceStatus( 576 hService: SC_HANDLE, 577 lpServiceStatus: LPSERVICE_STATUS, 578 ) -> BOOL; QueryServiceStatusEx( hService: SC_HANDLE, InfoLevel: SC_STATUS_TYPE, lpBuffer: LPBYTE, cbBufSize: DWORD, pcbBytesNeeded: LPDWORD, ) -> BOOL579 pub fn QueryServiceStatusEx( 580 hService: SC_HANDLE, 581 InfoLevel: SC_STATUS_TYPE, 582 lpBuffer: LPBYTE, 583 cbBufSize: DWORD, 584 pcbBytesNeeded: LPDWORD, 585 ) -> BOOL; RegisterServiceCtrlHandlerA( lpServiceName: LPCSTR, lpHandlerProc: LPHANDLER_FUNCTION, ) -> SERVICE_STATUS_HANDLE586 pub fn RegisterServiceCtrlHandlerA( 587 lpServiceName: LPCSTR, 588 lpHandlerProc: LPHANDLER_FUNCTION, 589 ) -> SERVICE_STATUS_HANDLE; RegisterServiceCtrlHandlerW( lpServiceName: LPCWSTR, lpHandlerProc: LPHANDLER_FUNCTION, ) -> SERVICE_STATUS_HANDLE590 pub fn RegisterServiceCtrlHandlerW( 591 lpServiceName: LPCWSTR, 592 lpHandlerProc: LPHANDLER_FUNCTION, 593 ) -> SERVICE_STATUS_HANDLE; RegisterServiceCtrlHandlerExA( lpServiceName: LPCSTR, lpHandlerProc: LPHANDLER_FUNCTION_EX, lpContext: LPVOID, ) -> SERVICE_STATUS_HANDLE594 pub fn RegisterServiceCtrlHandlerExA( 595 lpServiceName: LPCSTR, 596 lpHandlerProc: LPHANDLER_FUNCTION_EX, 597 lpContext: LPVOID, 598 ) -> SERVICE_STATUS_HANDLE; RegisterServiceCtrlHandlerExW( lpServiceName: LPCWSTR, lpHandlerProc: LPHANDLER_FUNCTION_EX, lpContext: LPVOID, ) -> SERVICE_STATUS_HANDLE599 pub fn RegisterServiceCtrlHandlerExW( 600 lpServiceName: LPCWSTR, 601 lpHandlerProc: LPHANDLER_FUNCTION_EX, 602 lpContext: LPVOID, 603 ) -> SERVICE_STATUS_HANDLE; SetServiceObjectSecurity( hService: SC_HANDLE, dwSecurityInformation: SECURITY_INFORMATION, lpSecurityDescriptor: PSECURITY_DESCRIPTOR, ) -> BOOL604 pub fn SetServiceObjectSecurity( 605 hService: SC_HANDLE, 606 dwSecurityInformation: SECURITY_INFORMATION, 607 lpSecurityDescriptor: PSECURITY_DESCRIPTOR, 608 ) -> BOOL; SetServiceStatus( hServiceStatus: SERVICE_STATUS_HANDLE, lpServiceStatus: LPSERVICE_STATUS, ) -> BOOL609 pub fn SetServiceStatus( 610 hServiceStatus: SERVICE_STATUS_HANDLE, 611 lpServiceStatus: LPSERVICE_STATUS, 612 ) -> BOOL; StartServiceCtrlDispatcherA( lpServiceStartTable: *const SERVICE_TABLE_ENTRYA, ) -> BOOL613 pub fn StartServiceCtrlDispatcherA( 614 lpServiceStartTable: *const SERVICE_TABLE_ENTRYA, 615 ) -> BOOL; StartServiceCtrlDispatcherW( lpServiceStartTable: *const SERVICE_TABLE_ENTRYW, ) -> BOOL616 pub fn StartServiceCtrlDispatcherW( 617 lpServiceStartTable: *const SERVICE_TABLE_ENTRYW, 618 ) -> BOOL; StartServiceA( hService: SC_HANDLE, dwNumServiceArgs: DWORD, lpServiceArgVectors: *mut LPCSTR, ) -> BOOL619 pub fn StartServiceA( 620 hService: SC_HANDLE, 621 dwNumServiceArgs: DWORD, 622 lpServiceArgVectors: *mut LPCSTR, 623 ) -> BOOL; StartServiceW( hService: SC_HANDLE, dwNumServiceArgs: DWORD, lpServiceArgVectors: *mut LPCWSTR, ) -> BOOL624 pub fn StartServiceW( 625 hService: SC_HANDLE, 626 dwNumServiceArgs: DWORD, 627 lpServiceArgVectors: *mut LPCWSTR, 628 ) -> BOOL; UnlockServiceDatabase( ScLock: SC_LOCK, ) -> BOOL629 pub fn UnlockServiceDatabase( 630 ScLock: SC_LOCK, 631 ) -> BOOL; NotifyServiceStatusChangeA( hService: SC_HANDLE, dwNotifyMask: DWORD, pNotifyBuffer: PSERVICE_NOTIFYA, ) -> DWORD632 pub fn NotifyServiceStatusChangeA( 633 hService: SC_HANDLE, 634 dwNotifyMask: DWORD, 635 pNotifyBuffer: PSERVICE_NOTIFYA, 636 ) -> DWORD; NotifyServiceStatusChangeW( hService: SC_HANDLE, dwNotifyMask: DWORD, pNotifyBuffer: PSERVICE_NOTIFYW, ) -> DWORD637 pub fn NotifyServiceStatusChangeW( 638 hService: SC_HANDLE, 639 dwNotifyMask: DWORD, 640 pNotifyBuffer: PSERVICE_NOTIFYW, 641 ) -> DWORD; ControlServiceExA( hService: SC_HANDLE, dwControl: DWORD, dwInfoLevel: DWORD, pControlParams: PVOID, ) -> BOOL642 pub fn ControlServiceExA( 643 hService: SC_HANDLE, 644 dwControl: DWORD, 645 dwInfoLevel: DWORD, 646 pControlParams: PVOID, 647 ) -> BOOL; ControlServiceExW( hService: SC_HANDLE, dwControl: DWORD, dwInfoLevel: DWORD, pControlParams: PVOID, ) -> BOOL648 pub fn ControlServiceExW( 649 hService: SC_HANDLE, 650 dwControl: DWORD, 651 dwInfoLevel: DWORD, 652 pControlParams: PVOID, 653 ) -> BOOL; QueryServiceDynamicInformation( hServiceStatus: SERVICE_STATUS_HANDLE, dwInfoLevel: DWORD, ppDynamicInfo: *mut PVOID, ) -> BOOL654 pub fn QueryServiceDynamicInformation( 655 hServiceStatus: SERVICE_STATUS_HANDLE, 656 dwInfoLevel: DWORD, 657 ppDynamicInfo: *mut PVOID, 658 ) -> BOOL; WaitServiceState( hService: SC_HANDLE, dwNotify: DWORD, dwTimeout: DWORD, hCancelEvent: HANDLE, ) -> DWORD659 pub fn WaitServiceState ( 660 hService: SC_HANDLE, 661 dwNotify: DWORD, 662 dwTimeout: DWORD, 663 hCancelEvent: HANDLE, 664 ) -> DWORD; 665 } 666