winsvc.h 26 KB

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