winsvc.h 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332
  1. /*
  2. * Copyright (C) the Wine project
  3. *
  4. * This library is free software; you can redistribute it and/or
  5. * modify it under the terms of the GNU Lesser General Public
  6. * License as published by the Free Software Foundation; either
  7. * version 2.1 of the License, or (at your option) any later version.
  8. *
  9. * This library is distributed in the hope that it will be useful,
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  12. * Lesser General Public License for more details.
  13. *
  14. * You should have received a copy of the GNU Lesser General Public
  15. * License along with this library; if not, write to the Free Software
  16. * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  17. */
  18. #ifndef __WINE_WINSVC_H
  19. #define __WINE_WINSVC_H
  20. #ifdef __cplusplus
  21. extern "C" {
  22. #endif /* defined(__cplusplus) */
  23. /* Service database names */
  24. #define SERVICES_ACTIVE_DATABASEA "ServicesActive"
  25. #define SERVICES_FAILED_DATABASEA "ServicesFailed"
  26. #if defined(__GNUC__)
  27. # define SERVICES_ACTIVE_DATABASEW (const WCHAR []){ 'S','e','r','v','i','c','e','s','A','c','t','i','v','e',0 }
  28. # define SERVICES_FAILED_DATABASEW (const WCHAR []){ 'S','e','r','v','i','c','e','s','F','a','i','l','e','d',0 }
  29. #elif defined(_MSC_VER)
  30. # define SERVICES_ACTIVE_DATABASEW L"ServicesActive"
  31. # define SERVICES_FAILED_DATABASEW L"ServicesFailed"
  32. #endif
  33. #define SERVICES_ACTIVE_DATABASE WINELIB_NAME_AW( SERVICES_ACTIVE_DATABASE )
  34. #define SERVICES_FAILED_DATABASE WINELIB_NAME_AW( SERVICES_FAILED_DATABASE )
  35. /* Controls */
  36. #define SERVICE_CONTROL_STOP 0x00000001
  37. #define SERVICE_CONTROL_PAUSE 0x00000002
  38. #define SERVICE_CONTROL_CONTINUE 0x00000003
  39. #define SERVICE_CONTROL_INTERROGATE 0x00000004
  40. #define SERVICE_CONTROL_SHUTDOWN 0x00000005
  41. #define SERVICE_CONTROL_PARAMCHANGE 0x00000006
  42. #define SERVICE_CONTROL_NETBINDADD 0x00000007
  43. #define SERVICE_CONTROL_NETBINDREMOVE 0x00000008
  44. #define SERVICE_CONTROL_NETBINDENABLE 0x00000009
  45. #define SERVICE_CONTROL_NETBINDDISABLE 0x0000000A
  46. #define SERVICE_CONTROL_DEVICEEVENT 0x0000000B
  47. #define SERVICE_CONTROL_HARDWAREPROFILECHANGE 0x0000000C
  48. #define SERVICE_CONTROL_POWEREVENT 0x0000000D
  49. #define SERVICE_CONTROL_SESSIONCHANGE 0x0000000E
  50. /* Service State */
  51. #define SERVICE_STOPPED 0x00000001
  52. #define SERVICE_START_PENDING 0x00000002
  53. #define SERVICE_STOP_PENDING 0x00000003
  54. #define SERVICE_RUNNING 0x00000004
  55. #define SERVICE_CONTINUE_PENDING 0x00000005
  56. #define SERVICE_PAUSE_PENDING 0x00000006
  57. #define SERVICE_PAUSED 0x00000007
  58. /* Controls Accepted */
  59. #define SERVICE_ACCEPT_STOP 0x00000001
  60. #define SERVICE_ACCEPT_PAUSE_CONTINUE 0x00000002
  61. #define SERVICE_ACCEPT_SHUTDOWN 0x00000004
  62. #define SERVICE_ACCEPT_PARAMCHANGE 0x00000008
  63. #define SERVICE_ACCEPT_NETBINDCHANGE 0x00000010
  64. #define SERVICE_ACCEPT_HARDWAREPROFILECHANGE 0x00000020
  65. #define SERVICE_ACCEPT_POWEREVENT 0x00000040
  66. #define SERVICE_ACCEPT_SESSIONCHANGE 0x00000080
  67. /* Service Control Manager Object access types */
  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 | \
  75. SC_MANAGER_CONNECT | \
  76. SC_MANAGER_CREATE_SERVICE | \
  77. SC_MANAGER_ENUMERATE_SERVICE | \
  78. SC_MANAGER_LOCK | \
  79. SC_MANAGER_QUERY_LOCK_STATUS | \
  80. SC_MANAGER_MODIFY_BOOT_CONFIG )
  81. #define SERVICE_QUERY_CONFIG 0x0001
  82. #define SERVICE_CHANGE_CONFIG 0x0002
  83. #define SERVICE_QUERY_STATUS 0x0004
  84. #define SERVICE_ENUMERATE_DEPENDENTS 0x0008
  85. #define SERVICE_START 0x0010
  86. #define SERVICE_STOP 0x0020
  87. #define SERVICE_PAUSE_CONTINUE 0x0040
  88. #define SERVICE_INTERROGATE 0x0080
  89. #define SERVICE_USER_DEFINED_CONTROL 0x0100
  90. #define SERVICE_ALL_ACCESS ( STANDARD_RIGHTS_REQUIRED | \
  91. SERVICE_QUERY_CONFIG | \
  92. SERVICE_CHANGE_CONFIG | \
  93. SERVICE_QUERY_STATUS | \
  94. SERVICE_ENUMERATE_DEPENDENTS | \
  95. SERVICE_START | \
  96. SERVICE_STOP | \
  97. SERVICE_PAUSE_CONTINUE | \
  98. SERVICE_INTERROGATE | \
  99. SERVICE_USER_DEFINED_CONTROL )
  100. #define SERVICE_NO_CHANGE 0xffffffff
  101. /* Handle types */
  102. typedef HANDLE SC_HANDLE, *LPSC_HANDLE;
  103. typedef DWORD SERVICE_STATUS_HANDLE;
  104. typedef LPVOID SC_LOCK;
  105. /* Service status structure */
  106. typedef struct _SERVICE_STATUS {
  107. DWORD dwServiceType;
  108. DWORD dwCurrentState;
  109. DWORD dwControlsAccepted;
  110. DWORD dwWin32ExitCode;
  111. DWORD dwServiceSpecificExitCode;
  112. DWORD dwCheckPoint;
  113. DWORD dwWaitHint;
  114. } SERVICE_STATUS, *LPSERVICE_STATUS;
  115. typedef enum _SC_STATUS_TYPE {
  116. SC_STATUS_PROCESS_INFO = 0
  117. } SC_STATUS_TYPE;
  118. /* Service main function prototype */
  119. typedef VOID (CALLBACK *LPSERVICE_MAIN_FUNCTIONA)(DWORD,LPSTR*);
  120. typedef VOID (CALLBACK *LPSERVICE_MAIN_FUNCTIONW)(DWORD,LPWSTR*);
  121. DECL_WINELIB_TYPE_AW(LPSERVICE_MAIN_FUNCTION)
  122. /* Service start table */
  123. typedef struct _SERVICE_TABLE_ENTRYA {
  124. LPSTR lpServiceName;
  125. LPSERVICE_MAIN_FUNCTIONA lpServiceProc;
  126. } SERVICE_TABLE_ENTRYA, *LPSERVICE_TABLE_ENTRYA;
  127. typedef struct _SERVICE_TABLE_ENTRYW {
  128. LPWSTR lpServiceName;
  129. LPSERVICE_MAIN_FUNCTIONW lpServiceProc;
  130. } SERVICE_TABLE_ENTRYW, *LPSERVICE_TABLE_ENTRYW;
  131. DECL_WINELIB_TYPE_AW(SERVICE_TABLE_ENTRY)
  132. DECL_WINELIB_TYPE_AW(LPSERVICE_TABLE_ENTRY)
  133. /* Service status enumeration structure */
  134. typedef struct _ENUM_SERVICE_STATUSA {
  135. LPSTR lpServiceName;
  136. LPSTR lpDisplayName;
  137. SERVICE_STATUS ServiceStatus;
  138. } ENUM_SERVICE_STATUSA, *LPENUM_SERVICE_STATUSA;
  139. typedef struct _ENUM_SERVICE_STATUSW {
  140. LPWSTR lpServiceName;
  141. LPWSTR lpDisplayName;
  142. SERVICE_STATUS ServiceStatus;
  143. } ENUM_SERVICE_STATUSW, *LPENUM_SERVICE_STATUSW;
  144. DECL_WINELIB_TYPE_AW(ENUM_SERVICE_STATUS)
  145. DECL_WINELIB_TYPE_AW(LPENUM_SERVICE_STATUS)
  146. typedef struct _QUERY_SERVICE_CONFIGA {
  147. DWORD dwServiceType;
  148. DWORD dwStartType;
  149. DWORD dwErrorControl;
  150. LPSTR lpBinaryPathName;
  151. LPSTR lpLoadOrderGroup;
  152. DWORD dwTagId;
  153. LPSTR lpDependencies;
  154. LPSTR lpServiceStartName;
  155. LPSTR lpDisplayName;
  156. } QUERY_SERVICE_CONFIGA, *LPQUERY_SERVICE_CONFIGA;
  157. typedef struct _QUERY_SERVICE_CONFIGW {
  158. DWORD dwServiceType;
  159. DWORD dwStartType;
  160. DWORD dwErrorControl;
  161. LPWSTR lpBinaryPathName;
  162. LPWSTR lpLoadOrderGroup;
  163. DWORD dwTagId;
  164. LPWSTR lpDependencies;
  165. LPWSTR lpServiceStartName;
  166. LPWSTR lpDisplayName;
  167. } QUERY_SERVICE_CONFIGW, *LPQUERY_SERVICE_CONFIGW;
  168. /* defines and structures for ChangeServiceConfig2 */
  169. #define SERVICE_CONFIG_DESCRIPTION 1
  170. #define SERVICE_CONFIG_FAILURE_ACTIONS 2
  171. typedef struct _SERVICE_DESCRIPTIONA {
  172. LPSTR lpDescription;
  173. } SERVICE_DESCRIPTIONA,*LPSERVICE_DESCRIPTIONA;
  174. typedef struct _SERVICE_DESCRIPTIONW {
  175. LPWSTR lpDescription;
  176. } SERVICE_DESCRIPTIONW,*LPSERVICE_DESCRIPTIONW;
  177. DECL_WINELIB_TYPE_AW(SERVICE_DESCRIPTION)
  178. DECL_WINELIB_TYPE_AW(LPSERVICE_DESCRIPTION)
  179. typedef enum _SC_ACTION_TYPE {
  180. SC_ACTION_NONE = 0,
  181. SC_ACTION_RESTART = 1,
  182. SC_ACTION_REBOOT = 2,
  183. SC_ACTION_RUN_COMMAND = 3
  184. } SC_ACTION_TYPE;
  185. typedef struct _SC_ACTION {
  186. SC_ACTION_TYPE Type;
  187. DWORD Delay;
  188. } SC_ACTION,*LPSC_ACTION;
  189. typedef struct _SERVICE_FAILURE_ACTIONSA {
  190. DWORD dwResetPeriod;
  191. LPSTR lpRebootMsg;
  192. LPSTR lpCommand;
  193. DWORD cActions;
  194. SC_ACTION * lpsaActions;
  195. } SERVICE_FAILURE_ACTIONSA,*LPSERVICE_FAILURE_ACTIONSA;
  196. typedef struct _SERVICE_FAILURE_ACTIONSW {
  197. DWORD dwResetPeriod;
  198. LPWSTR lpRebootMsg;
  199. LPWSTR lpCommand;
  200. DWORD cActions;
  201. SC_ACTION * lpsaActions;
  202. } SERVICE_FAILURE_ACTIONSW,*LPSERVICE_FAILURE_ACTIONSW;
  203. DECL_WINELIB_TYPE_AW(SERVICE_FAILURE_ACTIONS)
  204. DECL_WINELIB_TYPE_AW(LPSERVICE_FAILURE_ACTIONS)
  205. typedef struct _QUERY_SERVICE_LOCK_STATUSA
  206. {
  207. DWORD fIsLocked;
  208. LPSTR lpLockOwner;
  209. DWORD dwLockDuration;
  210. } QUERY_SERVICE_LOCK_STATUSA, *LPQUERY_SERVICE_LOCK_STATUSA;
  211. typedef struct _QUERY_SERVICE_LOCK_STATUSW
  212. {
  213. DWORD fIsLocked;
  214. LPWSTR lpLockOwner;
  215. DWORD dwLockDuration;
  216. } QUERY_SERVICE_LOCK_STATUSW, *LPQUERY_SERVICE_LOCK_STATUSW;
  217. DECL_WINELIB_TYPE_AW(QUERY_SERVICE_LOCK_STATUS)
  218. /* Service control handler function prototype */
  219. typedef VOID (WINAPI *LPHANDLER_FUNCTION)(DWORD);
  220. typedef DWORD (WINAPI *LPHANDLER_FUNCTION_EX)(DWORD,DWORD,LPVOID,LPVOID);
  221. /* API function prototypes */
  222. BOOL WINAPI ChangeServiceConfigA(SC_HANDLE,DWORD,DWORD,DWORD,LPCSTR,LPCSTR,LPDWORD,LPCSTR,LPCSTR,LPCSTR,LPCSTR);
  223. BOOL WINAPI ChangeServiceConfigW(SC_HANDLE,DWORD,DWORD,DWORD,LPCWSTR,LPCWSTR,LPDWORD,LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR);
  224. #define ChangeServiceConfig WINELIB_NAME_AW(ChangeServiceConfig)
  225. BOOL WINAPI ChangeServiceConfig2A(SC_HANDLE,DWORD,LPVOID);
  226. BOOL WINAPI ChangeServiceConfig2W(SC_HANDLE,DWORD,LPVOID);
  227. #define ChangeServiceConfig2 WINELIB_NAME_AW(ChangeServiceConfig2)
  228. BOOL WINAPI CloseServiceHandle(SC_HANDLE);
  229. BOOL WINAPI ControlService(SC_HANDLE,DWORD,LPSERVICE_STATUS);
  230. SC_HANDLE WINAPI CreateServiceA(SC_HANDLE,LPCSTR,LPCSTR,DWORD,DWORD,DWORD,DWORD,LPCSTR,
  231. LPCSTR,LPDWORD,LPCSTR,LPCSTR,LPCSTR);
  232. SC_HANDLE WINAPI CreateServiceW(SC_HANDLE,LPCWSTR,LPCWSTR,DWORD,DWORD,DWORD,DWORD,LPCWSTR,
  233. LPCWSTR,LPDWORD,LPCWSTR,LPCWSTR,LPCWSTR);
  234. #define CreateService WINELIB_NAME_AW(CreateService)
  235. BOOL WINAPI DeleteService(SC_HANDLE);
  236. BOOL WINAPI EnumDependentServicesA(SC_HANDLE,DWORD,LPENUM_SERVICE_STATUSA,DWORD,LPDWORD,LPDWORD);
  237. BOOL WINAPI EnumDependentServicesW(SC_HANDLE,DWORD,LPENUM_SERVICE_STATUSW,DWORD,LPDWORD,LPDWORD);
  238. #define EnumDependentServices WINELIB_NAME_AW(EnumDependentServices)
  239. BOOL WINAPI EnumServicesStatusA(SC_HANDLE,DWORD,DWORD,LPENUM_SERVICE_STATUSA,
  240. DWORD,LPDWORD,LPDWORD,LPDWORD);
  241. BOOL WINAPI EnumServicesStatusW(SC_HANDLE,DWORD,DWORD,LPENUM_SERVICE_STATUSW,
  242. DWORD,LPDWORD,LPDWORD,LPDWORD);
  243. #define EnumServicesStatus WINELIB_NAME_AW(EnumServicesStatus)
  244. BOOL WINAPI GetServiceDisplayNameA(SC_HANDLE,LPCSTR,LPSTR,LPDWORD);
  245. BOOL WINAPI GetServiceDisplayNameW(SC_HANDLE,LPCWSTR,LPWSTR,LPDWORD);
  246. #define GetServiceDisplayName WINELIB_NAME_AW(GetServiceDisplayName)
  247. BOOL WINAPI GetServiceKeyNameA(SC_HANDLE,LPCSTR,LPSTR,LPDWORD);
  248. BOOL WINAPI GetServiceKeyNameW(SC_HANDLE,LPCWSTR,LPWSTR,LPDWORD);
  249. #define GetServiceKeyName WINELIB_NAME_AW(GetServiceKeyName)
  250. SC_LOCK WINAPI LockServiceDatabase(SC_HANDLE);
  251. SC_HANDLE WINAPI OpenSCManagerA(LPCSTR,LPCSTR,DWORD);
  252. SC_HANDLE WINAPI OpenSCManagerW(LPCWSTR,LPCWSTR,DWORD);
  253. #define OpenSCManager WINELIB_NAME_AW(OpenSCManager)
  254. SC_HANDLE WINAPI OpenServiceA(SC_HANDLE,LPCSTR,DWORD);
  255. SC_HANDLE WINAPI OpenServiceW(SC_HANDLE,LPCWSTR,DWORD);
  256. #define OpenService WINELIB_NAME_AW(OpenService)
  257. BOOL WINAPI QueryServiceStatus(SC_HANDLE,LPSERVICE_STATUS);
  258. BOOL WINAPI QueryServiceStatusEx(SC_HANDLE,SC_STATUS_TYPE,LPBYTE,DWORD,LPDWORD);
  259. BOOL WINAPI QueryServiceConfigA(SC_HANDLE,LPQUERY_SERVICE_CONFIGA,DWORD,LPDWORD);
  260. BOOL WINAPI QueryServiceConfigW(SC_HANDLE,LPQUERY_SERVICE_CONFIGW,DWORD,LPDWORD);
  261. #define QueryServiceConfig WINELIB_NAME_AW(QueryServiceConfig)
  262. BOOL WINAPI QueryServiceLockStatusA(SC_HANDLE,LPQUERY_SERVICE_LOCK_STATUSA,DWORD,LPDWORD);
  263. BOOL WINAPI QueryServiceLockStatusW(SC_HANDLE,LPQUERY_SERVICE_LOCK_STATUSW,DWORD,LPDWORD);
  264. #define QueryServiceLockStatus WINELIB_NAME_AW(QueryServiceLockStatus)
  265. SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerA(LPCSTR,LPHANDLER_FUNCTION);
  266. SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerW(LPCWSTR,LPHANDLER_FUNCTION);
  267. #define RegisterServiceCtrlHandler WINELIB_NAME_AW(RegisterServiceCtrlHandler)
  268. SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerExA(LPCSTR,LPHANDLER_FUNCTION_EX,LPVOID);
  269. SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerExW(LPCWSTR,LPHANDLER_FUNCTION_EX,LPVOID);
  270. #define RegisterServiceCtrlHandlerEx WINELIB_NAME_AW(RegisterServiceCtrlHandlerEx)
  271. BOOL WINAPI SetServiceObjectSecurity(SC_HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR);
  272. BOOL WINAPI SetServiceStatus(SERVICE_STATUS_HANDLE,LPSERVICE_STATUS);
  273. BOOL WINAPI StartServiceA(SC_HANDLE,DWORD,LPCSTR*);
  274. BOOL WINAPI StartServiceW(SC_HANDLE,DWORD,LPCWSTR*);
  275. #define StartService WINELIB_NAME_AW(StartService)
  276. BOOL WINAPI StartServiceCtrlDispatcherA(LPSERVICE_TABLE_ENTRYA);
  277. BOOL WINAPI StartServiceCtrlDispatcherW(LPSERVICE_TABLE_ENTRYW);
  278. #define StartServiceCtrlDispatcher WINELIB_NAME_AW(StartServiceCtrlDispatcher)
  279. BOOL WINAPI UnlockServiceDatabase(SC_LOCK);
  280. #ifdef __cplusplus
  281. } /* extern "C" */
  282. #endif /* defined(__cplusplus) */
  283. #endif /* !defined(__WINE_WINSVC_H) */