master
  1/**
  2 * This file has no copyright assigned and is placed in the Public Domain.
  3 * This file is part of the mingw-w64 runtime package.
  4 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
  5 */
  6#ifndef _WINSVC_
  7#define _WINSVC_
  8
  9#include <_mingw.h>
 10#include <_mingw_unicode.h>
 11#include <apisetcconv.h>
 12
 13#ifdef __cplusplus
 14extern "C" {
 15#endif
 16
 17#define SERVICES_ACTIVE_DATABASEW L"ServicesActive"
 18#define SERVICES_FAILED_DATABASEW L"ServicesFailed"
 19
 20#define SERVICES_ACTIVE_DATABASEA "ServicesActive"
 21#define SERVICES_FAILED_DATABASEA "ServicesFailed"
 22
 23#define SC_GROUP_IDENTIFIERW L'+'
 24#define SC_GROUP_IDENTIFIERA '+'
 25
 26#define SERVICES_ACTIVE_DATABASE __MINGW_NAME_AW(SERVICES_ACTIVE_DATABASE)
 27#define SERVICES_FAILED_DATABASE __MINGW_NAME_AW(SERVICES_FAILED_DATABASE)
 28
 29#define SC_GROUP_IDENTIFIER __MINGW_NAME_AW(SC_GROUP_IDENTIFIER)
 30
 31#define SERVICE_NO_CHANGE 0xffffffff
 32
 33#define SERVICE_ACTIVE 0x00000001
 34#define SERVICE_INACTIVE 0x00000002
 35#define SERVICE_STATE_ALL (SERVICE_ACTIVE | SERVICE_INACTIVE)
 36
 37#define SERVICE_CONTROL_STOP 0x00000001
 38#define SERVICE_CONTROL_PAUSE 0x00000002
 39#define SERVICE_CONTROL_CONTINUE 0x00000003
 40#define SERVICE_CONTROL_INTERROGATE 0x00000004
 41#define SERVICE_CONTROL_SHUTDOWN 0x00000005
 42#define SERVICE_CONTROL_PARAMCHANGE 0x00000006
 43#define SERVICE_CONTROL_NETBINDADD 0x00000007
 44#define SERVICE_CONTROL_NETBINDREMOVE 0x00000008
 45#define SERVICE_CONTROL_NETBINDENABLE 0x00000009
 46#define SERVICE_CONTROL_NETBINDDISABLE 0x0000000A
 47#define SERVICE_CONTROL_DEVICEEVENT 0x0000000B
 48#define SERVICE_CONTROL_HARDWAREPROFILECHANGE 0x0000000C
 49#define SERVICE_CONTROL_POWEREVENT 0x0000000D
 50#define SERVICE_CONTROL_SESSIONCHANGE 0x0000000E
 51#define SERVICE_CONTROL_PRESHUTDOWN 0x0000000F
 52#define SERVICE_CONTROL_TIMECHANGE 0x00000010
 53#define SERVICE_CONTROL_USER_LOGOFF 0x00000011
 54#define SERVICE_CONTROL_TRIGGEREVENT 0x00000020
 55#define SERVICE_CONTROL_LOWRESOURCES 0x00000060
 56#define SERVICE_CONTROL_SYSTEMLOWRESOURCES 0x00000061
 57
 58#define SERVICE_STOPPED 0x00000001
 59#define SERVICE_START_PENDING 0x00000002
 60#define SERVICE_STOP_PENDING 0x00000003
 61#define SERVICE_RUNNING 0x00000004
 62#define SERVICE_CONTINUE_PENDING 0x00000005
 63#define SERVICE_PAUSE_PENDING 0x00000006
 64#define SERVICE_PAUSED 0x00000007
 65
 66#define SERVICE_ACCEPT_STOP 0x00000001
 67#define SERVICE_ACCEPT_PAUSE_CONTINUE 0x00000002
 68#define SERVICE_ACCEPT_SHUTDOWN 0x00000004
 69#define SERVICE_ACCEPT_PARAMCHANGE 0x00000008
 70#define SERVICE_ACCEPT_NETBINDCHANGE 0x00000010
 71#define SERVICE_ACCEPT_HARDWAREPROFILECHANGE 0x00000020
 72#define SERVICE_ACCEPT_POWEREVENT 0x00000040
 73#define SERVICE_ACCEPT_SESSIONCHANGE 0x00000080
 74#define SERVICE_ACCEPT_PRESHUTDOWN 0x00000100
 75#define SERVICE_ACCEPT_TIMECHANGE 0x00000200
 76#define SERVICE_ACCEPT_TRIGGEREVENT 0x00000400
 77#define SERVICE_ACCEPT_USER_LOGOFF 0x00000800
 78#define SERVICE_ACCEPT_LOWRESOURCES 0x00002000
 79#define SERVICE_ACCEPT_SYSTEMLOWRESOURCES 0x00004000
 80
 81#define SC_MANAGER_CONNECT 0x0001
 82#define SC_MANAGER_CREATE_SERVICE 0x0002
 83#define SC_MANAGER_ENUMERATE_SERVICE 0x0004
 84#define SC_MANAGER_LOCK 0x0008
 85#define SC_MANAGER_QUERY_LOCK_STATUS 0x0010
 86#define SC_MANAGER_MODIFY_BOOT_CONFIG 0x0020
 87
 88#define SC_MANAGER_ALL_ACCESS (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)
 89
 90#define SERVICE_QUERY_CONFIG 0x0001
 91#define SERVICE_CHANGE_CONFIG 0x0002
 92#define SERVICE_QUERY_STATUS 0x0004
 93#define SERVICE_ENUMERATE_DEPENDENTS 0x0008
 94#define SERVICE_START 0x0010
 95#define SERVICE_STOP 0x0020
 96#define SERVICE_PAUSE_CONTINUE 0x0040
 97#define SERVICE_INTERROGATE 0x0080
 98#define SERVICE_USER_DEFINED_CONTROL 0x0100
 99
100#define SERVICE_ALL_ACCESS (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)
101
102#define SERVICE_RUNS_IN_SYSTEM_PROCESS 0x00000001
103
104#define SERVICE_CONFIG_DESCRIPTION 1
105#define SERVICE_CONFIG_FAILURE_ACTIONS 2
106#define SERVICE_CONFIG_DELAYED_AUTO_START_INFO 3
107#define SERVICE_CONFIG_FAILURE_ACTIONS_FLAG 4
108#define SERVICE_CONFIG_SERVICE_SID_INFO 5
109#define SERVICE_CONFIG_REQUIRED_PRIVILEGES_INFO 6
110#define SERVICE_CONFIG_PRESHUTDOWN_INFO 7
111#define SERVICE_CONFIG_TRIGGER_INFO 8
112#define SERVICE_CONFIG_PREFERRED_NODE 9
113#define SERVICE_CONFIG_LAUNCH_PROTECTED 12
114
115#define SERVICE_NOTIFY_STATUS_CHANGE_1 1
116#define SERVICE_NOTIFY_STATUS_CHANGE_2 2
117
118#define SERVICE_NOTIFY_STATUS_CHANGE SERVICE_NOTIFY_STATUS_CHANGE_2
119
120#define SERVICE_NOTIFY_STOPPED 0x00000001
121#define SERVICE_NOTIFY_START_PENDING 0x00000002
122#define SERVICE_NOTIFY_STOP_PENDING 0x00000004
123#define SERVICE_NOTIFY_RUNNING 0x00000008
124#define SERVICE_NOTIFY_CONTINUE_PENDING 0x00000010
125#define SERVICE_NOTIFY_PAUSE_PENDING 0x00000020
126#define SERVICE_NOTIFY_PAUSED 0x00000040
127#define SERVICE_NOTIFY_CREATED 0x00000080
128#define SERVICE_NOTIFY_DELETED 0x00000100
129#define SERVICE_NOTIFY_DELETE_PENDING 0x00000200
130
131#define SERVICE_STOP_REASON_FLAG_MIN 0x00000000
132#define SERVICE_STOP_REASON_FLAG_UNPLANNED 0x10000000
133#define SERVICE_STOP_REASON_FLAG_CUSTOM 0x20000000
134#define SERVICE_STOP_REASON_FLAG_PLANNED 0x40000000
135#define SERVICE_STOP_REASON_FLAG_MAX 0x80000000
136
137#define SERVICE_STOP_REASON_MAJOR_MIN 0x00000000
138#define SERVICE_STOP_REASON_MAJOR_OTHER 0x00010000
139#define SERVICE_STOP_REASON_MAJOR_HARDWARE 0x00020000
140#define SERVICE_STOP_REASON_MAJOR_OPERATINGSYSTEM 0x00030000
141#define SERVICE_STOP_REASON_MAJOR_SOFTWARE 0x00040000
142#define SERVICE_STOP_REASON_MAJOR_APPLICATION 0x00050000
143#define SERVICE_STOP_REASON_MAJOR_NONE 0x00060000
144#define SERVICE_STOP_REASON_MAJOR_MAX 0x00070000
145#define SERVICE_STOP_REASON_MAJOR_MIN_CUSTOM 0x00400000
146#define SERVICE_STOP_REASON_MAJOR_MAX_CUSTOM 0x00ff0000
147
148#define SERVICE_STOP_REASON_MINOR_MIN 0x00000000
149#define SERVICE_STOP_REASON_MINOR_OTHER 0x00000001
150#define SERVICE_STOP_REASON_MINOR_MAINTENANCE 0x00000002
151#define SERVICE_STOP_REASON_MINOR_INSTALLATION 0x00000003
152#define SERVICE_STOP_REASON_MINOR_UPGRADE 0x00000004
153#define SERVICE_STOP_REASON_MINOR_RECONFIG 0x00000005
154#define SERVICE_STOP_REASON_MINOR_HUNG 0x00000006
155#define SERVICE_STOP_REASON_MINOR_UNSTABLE 0x00000007
156#define SERVICE_STOP_REASON_MINOR_DISK 0x00000008
157#define SERVICE_STOP_REASON_MINOR_NETWORKCARD 0x00000009
158#define SERVICE_STOP_REASON_MINOR_ENVIRONMENT 0x0000000a
159#define SERVICE_STOP_REASON_MINOR_HARDWARE_DRIVER 0x0000000b
160#define SERVICE_STOP_REASON_MINOR_OTHERDRIVER 0x0000000c
161#define SERVICE_STOP_REASON_MINOR_SERVICEPACK 0x0000000d
162#define SERVICE_STOP_REASON_MINOR_SOFTWARE_UPDATE 0x0000000e
163#define SERVICE_STOP_REASON_MINOR_SECURITYFIX 0x0000000f
164#define SERVICE_STOP_REASON_MINOR_SECURITY 0x00000010
165#define SERVICE_STOP_REASON_MINOR_NETWORK_CONNECTIVITY 0x00000011
166#define SERVICE_STOP_REASON_MINOR_WMI 0x00000012
167#define SERVICE_STOP_REASON_MINOR_SERVICEPACK_UNINSTALL 0x00000013
168#define SERVICE_STOP_REASON_MINOR_SOFTWARE_UPDATE_UNINSTALL 0x00000014
169#define SERVICE_STOP_REASON_MINOR_SECURITYFIX_UNINSTALL 0x00000015
170#define SERVICE_STOP_REASON_MINOR_MMC 0x00000016
171#define SERVICE_STOP_REASON_MINOR_NONE 0x00000017
172#define SERVICE_STOP_REASON_MINOR_MEMOTYLIMIT 0x00000018
173#define SERVICE_STOP_REASON_MINOR_MAX 0x00000019
174#define SERVICE_STOP_REASON_MINOR_MIN_CUSTOM 0x00000100
175#define SERVICE_STOP_REASON_MINOR_MAX_CUSTOM 0x0000FFFF
176
177#define SERVICE_CONTROL_STATUS_REASON_INFO 1
178
179#define SERVICE_TRIGGER_TYPE_DEVICE_INTERFACE_ARRIVAL 1
180#define SERVICE_TRIGGER_TYPE_IP_ADDRESS_AVAILABILITY 2
181#define SERVICE_TRIGGER_TYPE_DOMAIN_JOIN 3
182#define SERVICE_TRIGGER_TYPE_FIREWALL_PORT_EVENT 4
183#define SERVICE_TRIGGER_TYPE_GROUP_POLICY 5
184#define SERVICE_TRIGGER_TYPE_NETWORK_ENDPOINT 6
185#define SERVICE_TRIGGER_TYPE_CUSTOM_SYSTEM_STATE_CHANGE 7
186#define SERVICE_TRIGGER_TYPE_CUSTOM 20
187#define SERVICE_TRIGGER_TYPE_AGGREGATE 30
188
189#define SERVICE_TRIGGER_DATA_TYPE_BINARY 1
190#define SERVICE_TRIGGER_DATA_TYPE_STRING 2
191#define SERVICE_TRIGGER_DATA_TYPE_LEVEL 3
192#define SERVICE_TRIGGER_DATA_TYPE_KEYWORD_ANY 4
193#define SERVICE_TRIGGER_DATA_TYPE_KEYWORD_ALL 5
194
195#define SERVICE_START_REASON_DEMAND 0x00000001
196#define SERVICE_START_REASON_AUTO 0x00000002
197#define SERVICE_START_REASON_TRIGGER 0x00000004
198#define SERVICE_START_REASON_RESTART_ON_FAILURE 0x00000008
199#define SERVICE_START_REASON_DELAYEDAUTO 0x00000010
200
201#define SERVICE_DYNAMIC_INFORMATION_LEVEL_START_REASON 1
202
203#define SERVICE_LAUNCH_PROTECTED_NONE 0
204#define SERVICE_LAUNCH_PROTECTED_WINDOWS 1
205#define SERVICE_LAUNCH_PROTECTED_WINDOWS_LIGHT 2
206#define SERVICE_LAUNCH_PROTECTED_ANTIMALWARE_LIGHT 3
207
208  typedef struct _SERVICE_DESCRIPTIONA {
209    LPSTR lpDescription;
210  } SERVICE_DESCRIPTIONA,*LPSERVICE_DESCRIPTIONA;
211
212  typedef struct _SERVICE_DESCRIPTIONW {
213    LPWSTR lpDescription;
214  } SERVICE_DESCRIPTIONW,*LPSERVICE_DESCRIPTIONW;
215
216  __MINGW_TYPEDEF_AW(SERVICE_DESCRIPTION)
217  __MINGW_TYPEDEF_AW(LPSERVICE_DESCRIPTION)
218
219  typedef enum _SC_ACTION_TYPE {
220    SC_ACTION_NONE = 0,SC_ACTION_RESTART = 1,SC_ACTION_REBOOT = 2,SC_ACTION_RUN_COMMAND = 3
221  } SC_ACTION_TYPE;
222
223  typedef struct _SC_ACTION {
224    SC_ACTION_TYPE Type;
225    DWORD Delay;
226  } SC_ACTION,*LPSC_ACTION;
227
228  typedef struct _SERVICE_FAILURE_ACTIONSA {
229    DWORD dwResetPeriod;
230    LPSTR lpRebootMsg;
231    LPSTR lpCommand;
232    DWORD cActions;
233    SC_ACTION *lpsaActions;
234  } SERVICE_FAILURE_ACTIONSA,*LPSERVICE_FAILURE_ACTIONSA;
235
236  typedef struct _SERVICE_FAILURE_ACTIONSW {
237    DWORD dwResetPeriod;
238    LPWSTR lpRebootMsg;
239    LPWSTR lpCommand;
240    DWORD cActions;
241    SC_ACTION *lpsaActions;
242  } SERVICE_FAILURE_ACTIONSW,*LPSERVICE_FAILURE_ACTIONSW;
243
244  __MINGW_TYPEDEF_AW(SERVICE_FAILURE_ACTIONS)
245  __MINGW_TYPEDEF_AW(LPSERVICE_FAILURE_ACTIONS)
246
247  DECLARE_HANDLE(SC_HANDLE);
248  typedef SC_HANDLE *LPSC_HANDLE;
249
250  DECLARE_HANDLE(SERVICE_STATUS_HANDLE);
251
252  typedef enum _SC_STATUS_TYPE {
253    SC_STATUS_PROCESS_INFO = 0
254  } SC_STATUS_TYPE;
255
256  typedef enum _SC_ENUM_TYPE {
257    SC_ENUM_PROCESS_INFO = 0
258  } SC_ENUM_TYPE;
259
260  typedef struct _SERVICE_STATUS {
261    DWORD dwServiceType;
262    DWORD dwCurrentState;
263    DWORD dwControlsAccepted;
264    DWORD dwWin32ExitCode;
265    DWORD dwServiceSpecificExitCode;
266    DWORD dwCheckPoint;
267    DWORD dwWaitHint;
268  } SERVICE_STATUS,*LPSERVICE_STATUS;
269
270  typedef struct _SERVICE_STATUS_PROCESS {
271    DWORD dwServiceType;
272    DWORD dwCurrentState;
273    DWORD dwControlsAccepted;
274    DWORD dwWin32ExitCode;
275    DWORD dwServiceSpecificExitCode;
276    DWORD dwCheckPoint;
277    DWORD dwWaitHint;
278    DWORD dwProcessId;
279    DWORD dwServiceFlags;
280  } SERVICE_STATUS_PROCESS,*LPSERVICE_STATUS_PROCESS;
281
282  typedef struct _ENUM_SERVICE_STATUSA {
283    LPSTR lpServiceName;
284    LPSTR lpDisplayName;
285    SERVICE_STATUS ServiceStatus;
286  } ENUM_SERVICE_STATUSA,*LPENUM_SERVICE_STATUSA;
287
288  typedef struct _ENUM_SERVICE_STATUSW {
289    LPWSTR lpServiceName;
290    LPWSTR lpDisplayName;
291    SERVICE_STATUS ServiceStatus;
292  } ENUM_SERVICE_STATUSW,*LPENUM_SERVICE_STATUSW;
293
294  __MINGW_TYPEDEF_AW(ENUM_SERVICE_STATUS)
295  __MINGW_TYPEDEF_AW(LPENUM_SERVICE_STATUS)
296
297  typedef struct _ENUM_SERVICE_STATUS_PROCESSA {
298    LPSTR lpServiceName;
299    LPSTR lpDisplayName;
300    SERVICE_STATUS_PROCESS ServiceStatusProcess;
301  } ENUM_SERVICE_STATUS_PROCESSA,*LPENUM_SERVICE_STATUS_PROCESSA;
302
303  typedef struct _ENUM_SERVICE_STATUS_PROCESSW {
304    LPWSTR lpServiceName;
305    LPWSTR lpDisplayName;
306    SERVICE_STATUS_PROCESS ServiceStatusProcess;
307  } ENUM_SERVICE_STATUS_PROCESSW,*LPENUM_SERVICE_STATUS_PROCESSW;
308
309  __MINGW_TYPEDEF_AW(ENUM_SERVICE_STATUS_PROCESS)
310  __MINGW_TYPEDEF_AW(LPENUM_SERVICE_STATUS_PROCESS)
311
312  typedef LPVOID SC_LOCK;
313
314  typedef struct _QUERY_SERVICE_LOCK_STATUSA {
315    DWORD fIsLocked;
316    LPSTR lpLockOwner;
317    DWORD dwLockDuration;
318  } QUERY_SERVICE_LOCK_STATUSA,*LPQUERY_SERVICE_LOCK_STATUSA;
319
320  typedef struct _QUERY_SERVICE_LOCK_STATUSW {
321    DWORD fIsLocked;
322    LPWSTR lpLockOwner;
323    DWORD dwLockDuration;
324  } QUERY_SERVICE_LOCK_STATUSW,*LPQUERY_SERVICE_LOCK_STATUSW;
325
326  __MINGW_TYPEDEF_AW(QUERY_SERVICE_LOCK_STATUS)
327  __MINGW_TYPEDEF_AW(LPQUERY_SERVICE_LOCK_STATUS)
328
329  typedef struct _QUERY_SERVICE_CONFIGA {
330    DWORD dwServiceType;
331    DWORD dwStartType;
332    DWORD dwErrorControl;
333    LPSTR lpBinaryPathName;
334    LPSTR lpLoadOrderGroup;
335    DWORD dwTagId;
336    LPSTR lpDependencies;
337    LPSTR lpServiceStartName;
338    LPSTR lpDisplayName;
339  } QUERY_SERVICE_CONFIGA,*LPQUERY_SERVICE_CONFIGA;
340
341  typedef struct _QUERY_SERVICE_CONFIGW {
342    DWORD dwServiceType;
343    DWORD dwStartType;
344    DWORD dwErrorControl;
345    LPWSTR lpBinaryPathName;
346    LPWSTR lpLoadOrderGroup;
347    DWORD dwTagId;
348    LPWSTR lpDependencies;
349    LPWSTR lpServiceStartName;
350    LPWSTR lpDisplayName;
351  } QUERY_SERVICE_CONFIGW,*LPQUERY_SERVICE_CONFIGW;
352
353  __MINGW_TYPEDEF_AW(QUERY_SERVICE_CONFIG)
354  __MINGW_TYPEDEF_AW(LPQUERY_SERVICE_CONFIG)
355
356  typedef VOID (WINAPI *LPSERVICE_MAIN_FUNCTIONW)(DWORD dwNumServicesArgs,LPWSTR *lpServiceArgVectors);
357  typedef VOID (WINAPI *LPSERVICE_MAIN_FUNCTIONA)(DWORD dwNumServicesArgs,LPSTR *lpServiceArgVectors);
358
359#define LPSERVICE_MAIN_FUNCTION __MINGW_NAME_AW(LPSERVICE_MAIN_FUNCTION)
360
361  typedef struct _SERVICE_TABLE_ENTRYA {
362    LPSTR lpServiceName;
363    LPSERVICE_MAIN_FUNCTIONA lpServiceProc;
364  } SERVICE_TABLE_ENTRYA,*LPSERVICE_TABLE_ENTRYA;
365
366  typedef struct _SERVICE_TABLE_ENTRYW {
367    LPWSTR lpServiceName;
368    LPSERVICE_MAIN_FUNCTIONW lpServiceProc;
369  } SERVICE_TABLE_ENTRYW,*LPSERVICE_TABLE_ENTRYW;
370
371  __MINGW_TYPEDEF_AW(SERVICE_TABLE_ENTRY)
372  __MINGW_TYPEDEF_AW(LPSERVICE_TABLE_ENTRY)
373
374  typedef VOID (WINAPI *LPHANDLER_FUNCTION)(DWORD dwControl);
375  typedef DWORD (WINAPI *LPHANDLER_FUNCTION_EX)(DWORD dwControl,DWORD dwEventType,LPVOID lpEventData,LPVOID lpContext);
376
377#define ChangeServiceConfig __MINGW_NAME_AW(ChangeServiceConfig)
378#define ChangeServiceConfig2 __MINGW_NAME_AW(ChangeServiceConfig2)
379#define CreateService __MINGW_NAME_AW(CreateService)
380#define EnumDependentServices __MINGW_NAME_AW(EnumDependentServices)
381#define EnumServicesStatus __MINGW_NAME_AW(EnumServicesStatus)
382#define EnumServicesStatusEx __MINGW_NAME_AW(EnumServicesStatusEx)
383#define GetServiceKeyName __MINGW_NAME_AW(GetServiceKeyName)
384#define GetServiceDisplayName __MINGW_NAME_AW(GetServiceDisplayName)
385#define OpenSCManager __MINGW_NAME_AW(OpenSCManager)
386#define OpenService __MINGW_NAME_AW(OpenService)
387#define QueryServiceConfig __MINGW_NAME_AW(QueryServiceConfig)
388#define QueryServiceConfig2 __MINGW_NAME_AW(QueryServiceConfig2)
389#define QueryServiceLockStatus __MINGW_NAME_AW(QueryServiceLockStatus)
390#define RegisterServiceCtrlHandler __MINGW_NAME_AW(RegisterServiceCtrlHandler)
391#define RegisterServiceCtrlHandlerEx __MINGW_NAME_AW(RegisterServiceCtrlHandlerEx)
392#define StartServiceCtrlDispatcher __MINGW_NAME_AW(StartServiceCtrlDispatcher)
393#define StartService __MINGW_NAME_AW(StartService)
394
395  WINADVAPI WINBOOL WINAPI ChangeServiceConfigA(SC_HANDLE hService,DWORD dwServiceType,DWORD dwStartType,DWORD dwErrorControl,LPCSTR lpBinaryPathName,LPCSTR lpLoadOrderGroup,LPDWORD lpdwTagId,LPCSTR lpDependencies,LPCSTR lpServiceStartName,LPCSTR lpPassword,LPCSTR lpDisplayName);
396  WINADVAPI WINBOOL WINAPI ChangeServiceConfigW(SC_HANDLE hService,DWORD dwServiceType,DWORD dwStartType,DWORD dwErrorControl,LPCWSTR lpBinaryPathName,LPCWSTR lpLoadOrderGroup,LPDWORD lpdwTagId,LPCWSTR lpDependencies,LPCWSTR lpServiceStartName,LPCWSTR lpPassword,LPCWSTR lpDisplayName);
397  WINADVAPI WINBOOL WINAPI ChangeServiceConfig2A(SC_HANDLE hService,DWORD dwInfoLevel,LPVOID lpInfo);
398  WINADVAPI WINBOOL WINAPI ChangeServiceConfig2W(SC_HANDLE hService,DWORD dwInfoLevel,LPVOID lpInfo);
399  WINADVAPI WINBOOL WINAPI CloseServiceHandle(SC_HANDLE hSCObject);
400  WINADVAPI WINBOOL WINAPI ControlService(SC_HANDLE hService,DWORD dwControl,LPSERVICE_STATUS lpServiceStatus);
401  WINADVAPI SC_HANDLE WINAPI CreateServiceA(SC_HANDLE hSCManager,LPCSTR lpServiceName,LPCSTR lpDisplayName,DWORD dwDesiredAccess,DWORD dwServiceType,DWORD dwStartType,DWORD dwErrorControl,LPCSTR lpBinaryPathName,LPCSTR lpLoadOrderGroup,LPDWORD lpdwTagId,LPCSTR lpDependencies,LPCSTR lpServiceStartName,LPCSTR lpPassword);
402  WINADVAPI SC_HANDLE WINAPI CreateServiceW(SC_HANDLE hSCManager,LPCWSTR lpServiceName,LPCWSTR lpDisplayName,DWORD dwDesiredAccess,DWORD dwServiceType,DWORD dwStartType,DWORD dwErrorControl,LPCWSTR lpBinaryPathName,LPCWSTR lpLoadOrderGroup,LPDWORD lpdwTagId,LPCWSTR lpDependencies,LPCWSTR lpServiceStartName,LPCWSTR lpPassword);
403  WINADVAPI WINBOOL WINAPI DeleteService(SC_HANDLE hService);
404  WINADVAPI WINBOOL WINAPI EnumDependentServicesA(SC_HANDLE hService,DWORD dwServiceState,LPENUM_SERVICE_STATUSA lpServices,DWORD cbBufSize,LPDWORD pcbBytesNeeded,LPDWORD lpServicesReturned);
405  WINADVAPI WINBOOL WINAPI EnumDependentServicesW(SC_HANDLE hService,DWORD dwServiceState,LPENUM_SERVICE_STATUSW lpServices,DWORD cbBufSize,LPDWORD pcbBytesNeeded,LPDWORD lpServicesReturned);
406  WINADVAPI WINBOOL WINAPI EnumServicesStatusA(SC_HANDLE hSCManager,DWORD dwServiceType,DWORD dwServiceState,LPENUM_SERVICE_STATUSA lpServices,DWORD cbBufSize,LPDWORD pcbBytesNeeded,LPDWORD lpServicesReturned,LPDWORD lpResumeHandle);
407  WINADVAPI WINBOOL WINAPI EnumServicesStatusW(SC_HANDLE hSCManager,DWORD dwServiceType,DWORD dwServiceState,LPENUM_SERVICE_STATUSW lpServices,DWORD cbBufSize,LPDWORD pcbBytesNeeded,LPDWORD lpServicesReturned,LPDWORD lpResumeHandle);
408  WINADVAPI WINBOOL WINAPI EnumServicesStatusExA(SC_HANDLE hSCManager,SC_ENUM_TYPE InfoLevel,DWORD dwServiceType,DWORD dwServiceState,LPBYTE lpServices,DWORD cbBufSize,LPDWORD pcbBytesNeeded,LPDWORD lpServicesReturned,LPDWORD lpResumeHandle,LPCSTR pszGroupName);
409  WINADVAPI WINBOOL WINAPI EnumServicesStatusExW(SC_HANDLE hSCManager,SC_ENUM_TYPE InfoLevel,DWORD dwServiceType,DWORD dwServiceState,LPBYTE lpServices,DWORD cbBufSize,LPDWORD pcbBytesNeeded,LPDWORD lpServicesReturned,LPDWORD lpResumeHandle,LPCWSTR pszGroupName);
410  WINADVAPI WINBOOL WINAPI GetServiceKeyNameA(SC_HANDLE hSCManager,LPCSTR lpDisplayName,LPSTR lpServiceName,LPDWORD lpcchBuffer);
411  WINADVAPI WINBOOL WINAPI GetServiceKeyNameW(SC_HANDLE hSCManager,LPCWSTR lpDisplayName,LPWSTR lpServiceName,LPDWORD lpcchBuffer);
412  WINADVAPI WINBOOL WINAPI GetServiceDisplayNameA(SC_HANDLE hSCManager,LPCSTR lpServiceName,LPSTR lpDisplayName,LPDWORD lpcchBuffer);
413  WINADVAPI WINBOOL WINAPI GetServiceDisplayNameW(SC_HANDLE hSCManager,LPCWSTR lpServiceName,LPWSTR lpDisplayName,LPDWORD lpcchBuffer);
414  WINADVAPI SC_LOCK WINAPI LockServiceDatabase(SC_HANDLE hSCManager);
415  WINADVAPI WINBOOL WINAPI NotifyBootConfigStatus(WINBOOL BootAcceptable);
416  WINADVAPI SC_HANDLE WINAPI OpenSCManagerA(LPCSTR lpMachineName,LPCSTR lpDatabaseName,DWORD dwDesiredAccess);
417  WINADVAPI SC_HANDLE WINAPI OpenSCManagerW(LPCWSTR lpMachineName,LPCWSTR lpDatabaseName,DWORD dwDesiredAccess);
418  WINADVAPI SC_HANDLE WINAPI OpenServiceA(SC_HANDLE hSCManager,LPCSTR lpServiceName,DWORD dwDesiredAccess);
419  WINADVAPI SC_HANDLE WINAPI OpenServiceW(SC_HANDLE hSCManager,LPCWSTR lpServiceName,DWORD dwDesiredAccess);
420  WINADVAPI WINBOOL WINAPI QueryServiceConfigA(SC_HANDLE hService,LPQUERY_SERVICE_CONFIGA lpServiceConfig,DWORD cbBufSize,LPDWORD pcbBytesNeeded);
421  WINADVAPI WINBOOL WINAPI QueryServiceConfigW(SC_HANDLE hService,LPQUERY_SERVICE_CONFIGW lpServiceConfig,DWORD cbBufSize,LPDWORD pcbBytesNeeded);
422  WINADVAPI WINBOOL WINAPI QueryServiceConfig2A(SC_HANDLE hService,DWORD dwInfoLevel,LPBYTE lpBuffer,DWORD cbBufSize,LPDWORD pcbBytesNeeded);
423  WINADVAPI WINBOOL WINAPI QueryServiceConfig2W(SC_HANDLE hService,DWORD dwInfoLevel,LPBYTE lpBuffer,DWORD cbBufSize,LPDWORD pcbBytesNeeded);
424  WINADVAPI WINBOOL WINAPI QueryServiceLockStatusA(SC_HANDLE hSCManager,LPQUERY_SERVICE_LOCK_STATUSA lpLockStatus,DWORD cbBufSize,LPDWORD pcbBytesNeeded);
425  WINADVAPI WINBOOL WINAPI QueryServiceLockStatusW(SC_HANDLE hSCManager,LPQUERY_SERVICE_LOCK_STATUSW lpLockStatus,DWORD cbBufSize,LPDWORD pcbBytesNeeded);
426  WINADVAPI WINBOOL WINAPI QueryServiceObjectSecurity(SC_HANDLE hService,SECURITY_INFORMATION dwSecurityInformation,PSECURITY_DESCRIPTOR lpSecurityDescriptor,DWORD cbBufSize,LPDWORD pcbBytesNeeded);
427  WINADVAPI WINBOOL WINAPI QueryServiceStatus(SC_HANDLE hService,LPSERVICE_STATUS lpServiceStatus);
428  WINADVAPI WINBOOL WINAPI QueryServiceStatusEx(SC_HANDLE hService,SC_STATUS_TYPE InfoLevel,LPBYTE lpBuffer,DWORD cbBufSize,LPDWORD pcbBytesNeeded);
429  WINADVAPI SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerA(LPCSTR lpServiceName,LPHANDLER_FUNCTION lpHandlerProc);
430  WINADVAPI SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerW(LPCWSTR lpServiceName,LPHANDLER_FUNCTION lpHandlerProc);
431  WINADVAPI SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerExA(LPCSTR lpServiceName,LPHANDLER_FUNCTION_EX lpHandlerProc,LPVOID lpContext);
432  WINADVAPI SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerExW(LPCWSTR lpServiceName,LPHANDLER_FUNCTION_EX lpHandlerProc,LPVOID lpContext);
433  WINADVAPI WINBOOL WINAPI SetServiceObjectSecurity(SC_HANDLE hService,SECURITY_INFORMATION dwSecurityInformation,PSECURITY_DESCRIPTOR lpSecurityDescriptor);
434  WINADVAPI WINBOOL WINAPI SetServiceStatus(SERVICE_STATUS_HANDLE hServiceStatus,LPSERVICE_STATUS lpServiceStatus);
435  WINADVAPI WINBOOL WINAPI StartServiceCtrlDispatcherA(CONST SERVICE_TABLE_ENTRYA *lpServiceStartTable);
436  WINADVAPI WINBOOL WINAPI StartServiceCtrlDispatcherW(CONST SERVICE_TABLE_ENTRYW *lpServiceStartTable);
437  WINADVAPI WINBOOL WINAPI StartServiceA(SC_HANDLE hService,DWORD dwNumServiceArgs,LPCSTR *lpServiceArgVectors);
438  WINADVAPI WINBOOL WINAPI StartServiceW(SC_HANDLE hService,DWORD dwNumServiceArgs,LPCWSTR *lpServiceArgVectors);
439  WINADVAPI WINBOOL WINAPI UnlockServiceDatabase(SC_LOCK ScLock);
440
441#if (_WIN32_WINNT >= 0x0600)
442
443typedef VOID( CALLBACK * PFN_SC_NOTIFY_CALLBACK ) (
444  PVOID pParameter 
445);
446
447typedef struct _SERVICE_CONTROL_STATUS_REASON_PARAMSA {
448  DWORD                  dwReason;
449  LPSTR                  pszComment;
450  SERVICE_STATUS_PROCESS ServiceStatus;
451} SERVICE_CONTROL_STATUS_REASON_PARAMSA, *PSERVICE_CONTROL_STATUS_REASON_PARAMSA;
452
453typedef struct _SERVICE_CONTROL_STATUS_REASON_PARAMSW {
454  DWORD                  dwReason;
455  LPWSTR                 pszComment;
456  SERVICE_STATUS_PROCESS ServiceStatus;
457} SERVICE_CONTROL_STATUS_REASON_PARAMSW, *PSERVICE_CONTROL_STATUS_REASON_PARAMSW;
458
459__MINGW_TYPEDEF_AW(SERVICE_CONTROL_STATUS_REASON_PARAMS)
460__MINGW_TYPEDEF_AW(PSERVICE_CONTROL_STATUS_REASON_PARAMS)
461
462#define SERVICE_STOP_REASON_FLAG_CUSTOM 0x20000000
463#define SERVICE_STOP_REASON_FLAG_PLANNED 0x40000000
464#define SERVICE_STOP_REASON_FLAG_UNPLANNED 0x10000000
465
466#define SERVICE_STOP_REASON_MAJOR_APPLICATION 0x00050000
467#define SERVICE_STOP_REASON_MAJOR_HARDWARE 0x00020000
468#define SERVICE_STOP_REASON_MAJOR_NONE 0x00060000
469#define SERVICE_STOP_REASON_MAJOR_OPERATINGSYSTEM 0x00030000
470#define SERVICE_STOP_REASON_MAJOR_OTHER 0x00010000
471#define SERVICE_STOP_REASON_MAJOR_SOFTWARE 0x00040000
472
473#define SERVICE_STOP_REASON_MINOR_DISK 0x00000008
474#define SERVICE_STOP_REASON_MINOR_ENVIRONMENT 0x0000000a
475#define SERVICE_STOP_REASON_MINOR_HARDWARE_DRIVER 0x0000000b
476#define SERVICE_STOP_REASON_MINOR_HUNG 0x00000006
477#define SERVICE_STOP_REASON_MINOR_INSTALLATION 0x00000003
478#define SERVICE_STOP_REASON_MINOR_MAINTENANCE 0x00000002
479#define SERVICE_STOP_REASON_MINOR_MMC 0x00000016
480#define SERVICE_STOP_REASON_MINOR_NETWORK_CONNECTIVITY 0x00000011
481#define SERVICE_STOP_REASON_MINOR_NETWORKCARD 0x00000009
482#define SERVICE_STOP_REASON_MINOR_OTHER 0x00000001
483#define SERVICE_STOP_REASON_MINOR_OTHERDRIVER 0x0000000c
484#define SERVICE_STOP_REASON_MINOR_RECONFIG 0x00000005
485#define SERVICE_STOP_REASON_MINOR_SECURITY 0x00000010
486#define SERVICE_STOP_REASON_MINOR_SECURITYFIX 0x0000000f
487#define SERVICE_STOP_REASON_MINOR_SECURITYFIX_UNINSTALL 0x00000015
488#define SERVICE_STOP_REASON_MINOR_SERVICEPACK 0x0000000d
489#define SERVICE_STOP_REASON_MINOR_SERVICEPACK_UNINSTALL 0x00000013
490#define SERVICE_STOP_REASON_MINOR_SOFTWARE_UPDATE 0x0000000e
491#define SERVICE_STOP_REASON_MINOR_UNSTABLE 0x00000007
492#define SERVICE_STOP_REASON_MINOR_UPGRADE 0x00000004
493#define SERVICE_STOP_REASON_MINOR_WMI 0x00000012
494
495typedef struct _SERVICE_NOTIFYA {
496  DWORD                  dwVersion;
497  PFN_SC_NOTIFY_CALLBACK pfnNotifyCallback;
498  PVOID                  pContext;
499  DWORD                  dwNotificationStatus;
500  SERVICE_STATUS_PROCESS ServiceStatus;
501  DWORD                  dwNotificationTriggered;
502  LPSTR                  pszServiceNames;
503} SERVICE_NOTIFYA, *PSERVICE_NOTIFYA;
504
505typedef struct _SERVICE_NOTIFYW {
506  DWORD                  dwVersion;
507  PFN_SC_NOTIFY_CALLBACK pfnNotifyCallback;
508  PVOID                  pContext;
509  DWORD                  dwNotificationStatus;
510  SERVICE_STATUS_PROCESS ServiceStatus;
511  DWORD                  dwNotificationTriggered;
512  LPWSTR                 pszServiceNames;
513} SERVICE_NOTIFYW, *PSERVICE_NOTIFYW;
514
515__MINGW_TYPEDEF_AW(SERVICE_NOTIFY)
516__MINGW_TYPEDEF_AW(PSERVICE_NOTIFY)
517
518#define SERVICE_CONFIG_DELAYED_AUTO_START_INFO 3
519#define SERVICE_CONFIG_FAILURE_ACTIONS_FLAG 4
520#define SERVICE_CONFIG_SERVICE_SID_INFO 5
521#define SERVICE_CONFIG_REQUIRED_PRIVILEGES_INFO 6
522#define SERVICE_CONFIG_PRESHUTDOWN_INFO 7
523
524typedef struct _SERVICE_DELAYED_AUTO_START_INFO {
525  WINBOOL fDelayedAutostart;
526} SERVICE_DELAYED_AUTO_START_INFO, *LPSERVICE_DELAYED_AUTO_START_INFO;
527
528typedef struct _SERVICE_FAILURE_ACTIONS_FLAG {
529  WINBOOL fFailureActionsOnNonCrashFailures;
530} SERVICE_FAILURE_ACTIONS_FLAG, *LPSERVICE_FAILURE_ACTIONS_FLAG;
531
532typedef struct _SERVICE_PRESHUTDOWN_INFO {
533  DWORD dwPreshutdownTimeout;
534} SERVICE_PRESHUTDOWN_INFO, *LPSERVICE_PRESHUTDOWN_INFO;
535
536typedef struct _SERVICE_REQUIRED_PRIVILEGES_INFOA {
537  LPSTR pmszRequiredPrivileges;
538} SERVICE_REQUIRED_PRIVILEGES_INFOA, *LPSERVICE_REQUIRED_PRIVILEGES_INFOA;
539
540typedef struct _SERVICE_REQUIRED_PRIVILEGES_INFOW {
541  LPWSTR pmszRequiredPrivileges;
542} SERVICE_REQUIRED_PRIVILEGES_INFOW, *LPSERVICE_REQUIRED_PRIVILEGES_INFOW;
543
544__MINGW_TYPEDEF_AW(SERVICE_REQUIRED_PRIVILEGES_INFO)
545
546#define SERVICE_SID_TYPE_NONE 0x00000000
547#define SERVICE_SID_TYPE_RESTRICTED 0x00000003
548#define SERVICE_SID_TYPE_UNRESTRICTED 0x00000001
549
550typedef struct _SERVICE_SID_INFO {
551  DWORD dwServiceSidType;
552} SERVICE_SID_INFO, *LPSERVICE_SID_INFO;
553
554WINADVAPI WINBOOL WINAPI ControlServiceExA(
555  SC_HANDLE hService,
556  DWORD dwControl,
557  DWORD dwInfoLevel,
558  PVOID pControlParams
559);
560
561WINADVAPI WINBOOL WINAPI ControlServiceExW(
562  SC_HANDLE hService,
563  DWORD dwControl,
564  DWORD dwInfoLevel,
565  PVOID pControlParams
566);
567
568#define ControlServiceEx __MINGW_NAME_AW(ControlServiceEx)
569
570#define NotifyServiceStatusChange __MINGW_NAME_AW(NotifyServiceStatusChange)
571
572DWORD WINAPI NotifyServiceStatusChangeA(
573  SC_HANDLE hService,
574  DWORD dwNotifyMask,
575  PSERVICE_NOTIFYA pNotifyBuffer
576);
577
578DWORD WINAPI NotifyServiceStatusChangeW(
579  SC_HANDLE hService,
580  DWORD dwNotifyMask,
581  PSERVICE_NOTIFYW pNotifyBuffer
582);
583
584#endif /*(_WIN32_WINNT >= 0x0600)*/
585
586#ifdef __cplusplus
587}
588#endif
589
590#endif /* _WINSVC_ */