1 | /* $Id: winsvc.h,v 1.1 1999-12-21 00:29:31 sandervl Exp $ */
|
---|
2 | #ifndef __WINSVC_H__
|
---|
3 | #define __WINSVC_H__
|
---|
4 |
|
---|
5 | #include "winbase.h"
|
---|
6 |
|
---|
7 | #define SERVICES_ACTIVE_DATABASEW L"ServicesActive"
|
---|
8 | #define SERVICES_FAILED_DATABASEW L"ServicesFailed"
|
---|
9 |
|
---|
10 | #define SERVICES_ACTIVE_DATABASEA "ServicesActive"
|
---|
11 | #define SERVICES_FAILED_DATABASEA "ServicesFailed"
|
---|
12 |
|
---|
13 | #define SC_GROUP_IDENTIFIERW L'+'
|
---|
14 | #define SC_GROUP_IDENTIFIERA '+'
|
---|
15 |
|
---|
16 | #ifdef UNICODE
|
---|
17 | #define SERVICES_ACTIVE_DATABASE SERVICES_ACTIVE_DATABASEW
|
---|
18 | #define SERVICES_FAILED_DATABASE SERVICES_FAILED_DATABASEW
|
---|
19 | #define SC_GROUP_IDENTIFIER SC_GROUP_IDENTIFIERW
|
---|
20 | #else
|
---|
21 | #define SERVICES_ACTIVE_DATABASE SERVICES_ACTIVE_DATABASEA
|
---|
22 | #define SERVICES_FAILED_DATABASE SERVICES_FAILED_DATABASEA
|
---|
23 | #define SC_GROUP_IDENTIFIER SC_GROUP_IDENTIFIERA
|
---|
24 | #endif
|
---|
25 |
|
---|
26 |
|
---|
27 | #define SERVICE_NO_CHANGE 0xffffffff
|
---|
28 |
|
---|
29 | #define SERVICE_ACTIVE 0x00000001
|
---|
30 | #define SERVICE_INACTIVE 0x00000002
|
---|
31 | #define SERVICE_STATE_ALL (SERVICE_ACTIVE|SERVICE_INACTIVE)
|
---|
32 |
|
---|
33 | #define SERVICE_CONTROL_STOP 0x00000001
|
---|
34 | #define SERVICE_CONTROL_PAUSE 0x00000002
|
---|
35 | #define SERVICE_CONTROL_CONTINUE 0x00000003
|
---|
36 | #define SERVICE_CONTROL_INTERROGATE 0x00000004
|
---|
37 | #define SERVICE_CONTROL_SHUTDOWN 0x00000005
|
---|
38 |
|
---|
39 | #define SERVICE_STOPPED 0x00000001
|
---|
40 | #define SERVICE_START_PENDING 0x00000002
|
---|
41 | #define SERVICE_STOP_PENDING 0x00000003
|
---|
42 | #define SERVICE_RUNNING 0x00000004
|
---|
43 | #define SERVICE_CONTINUE_PENDING 0x00000005
|
---|
44 | #define SERVICE_PAUSE_PENDING 0x00000006
|
---|
45 | #define SERVICE_PAUSED 0x00000007
|
---|
46 |
|
---|
47 | #define SERVICE_ACCEPT_STOP 0x00000001
|
---|
48 | #define SERVICE_ACCEPT_PAUSE_CONTINUE 0x00000002
|
---|
49 | #define SERVICE_ACCEPT_SHUTDOWN 0x00000004
|
---|
50 |
|
---|
51 | #define SC_MANAGER_CONNECT 0x0001
|
---|
52 | #define SC_MANAGER_CREATE_SERVICE 0x0002
|
---|
53 | #define SC_MANAGER_ENUMERATE_SERVICE 0x0004
|
---|
54 | #define SC_MANAGER_LOCK 0x0008
|
---|
55 | #define SC_MANAGER_QUERY_LOCK_STATUS 0x0010
|
---|
56 | #define SC_MANAGER_MODIFY_BOOT_CONFIG 0x0020
|
---|
57 |
|
---|
58 | #define SC_MANAGER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SC_MANAGER_CONNECT| \
|
---|
59 | SC_MANAGER_CREATE_SERVICE|SC_MANAGER_ENUMERATE_SERVICE| \
|
---|
60 | SC_MANAGER_LOCK|SC_MANAGER_QUERY_LOCK_STATUS| \
|
---|
61 | SC_MANAGER_MODIFY_BOOT_CONFIG)
|
---|
62 |
|
---|
63 | #define SERVICE_QUERY_CONFIG 0x0001
|
---|
64 | #define SERVICE_CHANGE_CONFIG 0x0002
|
---|
65 | #define SERVICE_QUERY_STATUS 0x0004
|
---|
66 | #define SERVICE_ENUMERATE_DEPENDENTS 0x0008
|
---|
67 | #define SERVICE_START 0x0010
|
---|
68 | #define SERVICE_STOP 0x0020
|
---|
69 | #define SERVICE_PAUSE_CONTINUE 0x0040
|
---|
70 | #define SERVICE_INTERROGATE 0x0080
|
---|
71 | #define SERVICE_USER_DEFINED_CONTROL 0x0100
|
---|
72 |
|
---|
73 | #define SERVICE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SERVICE_QUERY_CONFIG| \
|
---|
74 | SERVICE_CHANGE_CONFIG|SERVICE_QUERY_STATUS| \
|
---|
75 | SERVICE_ENUMERATE_DEPENDENTS|SERVICE_START| \
|
---|
76 | SERVICE_STOP|SERVICE_PAUSE_CONTINUE| \
|
---|
77 | SERVICE_INTERROGATE|SERVICE_USER_DEFINED_CONTROL)
|
---|
78 |
|
---|
79 | typedef HANDLE SC_HANDLE;
|
---|
80 | typedef SC_HANDLE *LPSC_HANDLE;
|
---|
81 | typedef LPVOID SC_LOCK;
|
---|
82 | typedef DWORD SERVICE_STATUS_HANDLE;
|
---|
83 | typedef VOID (* WINAPI LPHANDLER_FUNCTION)(DWORD dwControl);
|
---|
84 |
|
---|
85 |
|
---|
86 | typedef struct _SERVICE_STATUS {
|
---|
87 | DWORD dwServiceType;
|
---|
88 | DWORD dwCurrentState;
|
---|
89 | DWORD dwControlsAccepted;
|
---|
90 | DWORD dwWin32ExitCode;
|
---|
91 | DWORD dwServiceSpecificExitCode;
|
---|
92 | DWORD dwCheckPoint;
|
---|
93 | DWORD dwWaitHint;
|
---|
94 | } SERVICE_STATUS, *LPSERVICE_STATUS;
|
---|
95 |
|
---|
96 | typedef struct _ENUM_SERVICE_STATUSA {
|
---|
97 | LPSTR lpServiceName;
|
---|
98 | LPSTR lpDisplayName;
|
---|
99 | SERVICE_STATUS ServiceStatus;
|
---|
100 | } ENUM_SERVICE_STATUSA, *LPENUM_SERVICE_STATUSA;
|
---|
101 |
|
---|
102 | typedef struct _ENUM_SERVICE_STATUSW {
|
---|
103 | LPWSTR lpServiceName;
|
---|
104 | LPWSTR lpDisplayName;
|
---|
105 | SERVICE_STATUS ServiceStatus;
|
---|
106 | } ENUM_SERVICE_STATUSW, *LPENUM_SERVICE_STATUSW;
|
---|
107 |
|
---|
108 | typedef struct _QUERY_SERVICE_LOCK_STATUSA {
|
---|
109 | DWORD fIsLocked;
|
---|
110 | LPSTR lpLockOwner;
|
---|
111 | DWORD dwLockDuration;
|
---|
112 | } QUERY_SERVICE_LOCK_STATUSA, *LPQUERY_SERVICE_LOCK_STATUSA;
|
---|
113 |
|
---|
114 | typedef struct _QUERY_SERVICE_LOCK_STATUSW {
|
---|
115 | DWORD fIsLocked;
|
---|
116 | LPWSTR lpLockOwner;
|
---|
117 | DWORD dwLockDuration;
|
---|
118 | } QUERY_SERVICE_LOCK_STATUSW, *LPQUERY_SERVICE_LOCK_STATUSW;
|
---|
119 |
|
---|
120 | typedef struct _QUERY_SERVICE_CONFIGA {
|
---|
121 | DWORD dwServiceType;
|
---|
122 | DWORD dwStartType;
|
---|
123 | DWORD dwErrorControl;
|
---|
124 | LPSTR lpBinaryPathName;
|
---|
125 | LPSTR lpLoadOrderGroup;
|
---|
126 | DWORD dwTagId;
|
---|
127 | LPSTR lpDependencies;
|
---|
128 | LPSTR lpServiceStartName;
|
---|
129 | LPSTR lpDisplayName;
|
---|
130 | } QUERY_SERVICE_CONFIGA, *LPQUERY_SERVICE_CONFIGA;
|
---|
131 |
|
---|
132 | typedef struct _QUERY_SERVICE_CONFIGW {
|
---|
133 | DWORD dwServiceType;
|
---|
134 | DWORD dwStartType;
|
---|
135 | DWORD dwErrorControl;
|
---|
136 | LPWSTR lpBinaryPathName;
|
---|
137 | LPWSTR lpLoadOrderGroup;
|
---|
138 | DWORD dwTagId;
|
---|
139 | LPWSTR lpDependencies;
|
---|
140 | LPWSTR lpServiceStartName;
|
---|
141 | LPWSTR lpDisplayName;
|
---|
142 | } QUERY_SERVICE_CONFIGW, *LPQUERY_SERVICE_CONFIGW;
|
---|
143 |
|
---|
144 | /* service main function prototype */
|
---|
145 | typedef VOID (* CALLBACK LPSERVICE_MAIN_FUNCTIONA)(DWORD,LPSTR);
|
---|
146 | typedef VOID (* CALLBACK LPSERVICE_MAIN_FUNCTIONW)(DWORD,LPWSTR);
|
---|
147 | DECL_WINELIB_TYPE_AW(LPSERVICE_MAIN_FUNCTION)
|
---|
148 |
|
---|
149 | /* service start table */
|
---|
150 | typedef struct
|
---|
151 | {
|
---|
152 | LPSTR lpServiceName;
|
---|
153 | LPSERVICE_MAIN_FUNCTIONA lpServiceProc;
|
---|
154 | } *LPSERVICE_TABLE_ENTRYA, SERVICE_TABLE_ENTRYA;
|
---|
155 |
|
---|
156 | typedef struct
|
---|
157 | {
|
---|
158 | LPWSTR lpServiceName;
|
---|
159 | LPSERVICE_MAIN_FUNCTIONW lpServiceProc;
|
---|
160 | } *LPSERVICE_TABLE_ENTRYW, SERVICE_TABLE_ENTRYW;
|
---|
161 |
|
---|
162 | DECL_WINELIB_TYPE_AW(SERVICE_TABLE_ENTRY)
|
---|
163 | DECL_WINELIB_TYPE_AW(LPSERVICE_TABLE_ENTRY)
|
---|
164 |
|
---|
165 | #ifdef UNICODE
|
---|
166 | typedef QUERY_SERVICE_LOCK_STATUSW QUERY_SERVICE_LOCK_STATUS;
|
---|
167 | typedef LPQUERY_SERVICE_LOCK_STATUSW LPQUERY_SERVICE_LOCK_STATUS;
|
---|
168 | typedef ENUM_SERVICE_STATUSW ENUM_SERVICE_STATUS;
|
---|
169 | typedef LPENUM_SERVICE_STATUSW LPENUM_SERVICE_STATUS;
|
---|
170 | typedef QUERY_SERVICE_CONFIGW QUERY_SERVICE_CONFIG;
|
---|
171 | typedef LPQUERY_SERVICE_CONFIGW LPQUERY_SERVICE_CONFIG;
|
---|
172 | #else
|
---|
173 | typedef ENUM_SERVICE_STATUSA ENUM_SERVICE_STATUS;
|
---|
174 | typedef LPENUM_SERVICE_STATUSA LPENUM_SERVICE_STATUS;
|
---|
175 | typedef QUERY_SERVICE_LOCK_STATUSA QUERY_SERVICE_LOCK_STATUS;
|
---|
176 | typedef LPQUERY_SERVICE_LOCK_STATUSA LPQUERY_SERVICE_LOCK_STATUS;
|
---|
177 | typedef QUERY_SERVICE_CONFIGA QUERY_SERVICE_CONFIG;
|
---|
178 | typedef LPQUERY_SERVICE_CONFIGA LPQUERY_SERVICE_CONFIG;
|
---|
179 | #endif
|
---|
180 |
|
---|
181 | HANDLE WINAPI OpenSCManagerA(LPCSTR,LPCSTR,DWORD);
|
---|
182 | HANDLE WINAPI OpenSCManagerW(LPCWSTR,LPCWSTR,DWORD);
|
---|
183 | #define OpenSCManager WINELIB_NAME_AW(OpenSCManager)
|
---|
184 | HANDLE WINAPI OpenServiceA(SC_HANDLE,LPCSTR,DWORD);
|
---|
185 | HANDLE WINAPI OpenServiceW(SC_HANDLE,LPCWSTR,DWORD);
|
---|
186 | #define OpenService WINELIB_NAME_AW(OpenService)
|
---|
187 |
|
---|
188 | BOOL WINAPI CloseServiceHandle(SC_HANDLE);
|
---|
189 | BOOL WINAPI ControlService(SC_HANDLE,DWORD,LPSERVICE_STATUS);
|
---|
190 | BOOL WINAPI DeleteService(SC_HANDLE);
|
---|
191 |
|
---|
192 | BOOL WINAPI StartServiceA(SC_HANDLE,DWORD,LPCSTR*);
|
---|
193 | BOOL WINAPI StartServiceW(SC_HANDLE,DWORD,LPCWSTR*);
|
---|
194 | #define StartService WINELIB_NAME_AW(StartService)
|
---|
195 |
|
---|
196 |
|
---|
197 | BOOL WINAPI QueryServiceConfigA(SC_HANDLE schService,
|
---|
198 | LPQUERY_SERVICE_CONFIG lpqscServConfig,
|
---|
199 | DWORD cbBufSize,
|
---|
200 | LPDWORD lpcbBytesNeeded);
|
---|
201 |
|
---|
202 | BOOL WINAPI QueryServiceConfigW(SC_HANDLE schService,
|
---|
203 | LPQUERY_SERVICE_CONFIG lpqscServConfig,
|
---|
204 | DWORD cbBufSize,
|
---|
205 | LPDWORD lpcbBytesNeeded);
|
---|
206 |
|
---|
207 | #define QueryServiceConfig WINELIB_NAME_AW(QueryServiceConfig)
|
---|
208 |
|
---|
209 |
|
---|
210 | BOOL WINAPI QueryServiceLockStatusA(SC_HANDLE schSCManager,
|
---|
211 | LPQUERY_SERVICE_LOCK_STATUSA lpqslsLockStat,
|
---|
212 | DWORD cbBufSize,
|
---|
213 | LPDWORD lpcbBytesNeeded);
|
---|
214 |
|
---|
215 | BOOL WINAPI QueryServiceLockStatusW(SC_HANDLE schSCManager,
|
---|
216 | LPQUERY_SERVICE_LOCK_STATUSW lpqslsLockStat,
|
---|
217 | DWORD cbBufSize,
|
---|
218 | LPDWORD lpcbBytesNeeded);
|
---|
219 |
|
---|
220 | #define QueryServiceLockStatus WINELIB_NAME_AW(QueryServiceLockStatus)
|
---|
221 |
|
---|
222 | BOOL WINAPI QueryServiceObjectSecurity(SC_HANDLE schService,
|
---|
223 | SECURITY_INFORMATION fdwSecurityInfo,
|
---|
224 | PSECURITY_DESCRIPTOR psdSecurityDesc,
|
---|
225 | DWORD cbBufSize,
|
---|
226 | LPDWORD lpcbBytesNeeded);
|
---|
227 |
|
---|
228 | BOOL WINAPI QueryServiceStatus(SC_HANDLE schService,
|
---|
229 | LPSERVICE_STATUS lpssServiceStatus);
|
---|
230 |
|
---|
231 | BOOL WINAPI SetServiceObjectSecurity(SC_HANDLE schService,
|
---|
232 | SECURITY_INFORMATION fdwSecurityInfo,
|
---|
233 | PSECURITY_DESCRIPTOR psdSecurityDesc);
|
---|
234 |
|
---|
235 | BOOL WINAPI ChangeServiceConfigA(SC_HANDLE hService,
|
---|
236 | DWORD dwServiceType,
|
---|
237 | DWORD dwStartType,
|
---|
238 | DWORD dwErrorControl,
|
---|
239 | LPCSTR lpBinaryPathName,
|
---|
240 | LPCSTR lpLoadOrderGroup,
|
---|
241 | LPDWORD lpdwTagId,
|
---|
242 | LPCSTR lpDependencies,
|
---|
243 | LPCSTR lpServiceStartName,
|
---|
244 | LPCSTR lpPassword,
|
---|
245 | LPCSTR lpDisplayName);
|
---|
246 |
|
---|
247 |
|
---|
248 | BOOL WINAPI ChangeServiceConfigW(SC_HANDLE hService,
|
---|
249 | DWORD dwServiceType,
|
---|
250 | DWORD dwStartType,
|
---|
251 | DWORD dwErrorControl,
|
---|
252 | LPCWSTR lpBinaryPathName,
|
---|
253 | LPCWSTR lpLoadOrderGroup,
|
---|
254 | LPDWORD lpdwTagId,
|
---|
255 | LPCWSTR lpDependencies,
|
---|
256 | LPCWSTR lpServiceStartName,
|
---|
257 | LPCWSTR lpPassword,
|
---|
258 | LPCWSTR lpDisplayName);
|
---|
259 |
|
---|
260 | #define ChangeServiceConfig WINELIB_NAME_AW(ChangeServiceConfig)
|
---|
261 |
|
---|
262 | SC_HANDLE WINAPI CreateServiceA(SC_HANDLE hSCManager,
|
---|
263 | LPCSTR lpServiceName,
|
---|
264 | LPCSTR lpDisplayName,
|
---|
265 | DWORD dwDesiredAccess,
|
---|
266 | DWORD dwServiceType,
|
---|
267 | DWORD dwStartType,
|
---|
268 | DWORD dwErrorControl,
|
---|
269 | LPCSTR lpBinaryPathName,
|
---|
270 | LPCSTR lpLoadOrderGroup,
|
---|
271 | LPDWORD lpdwTagId,
|
---|
272 | LPCSTR lpDependencies,
|
---|
273 | LPCSTR lpServiceStartName,
|
---|
274 | LPCSTR lpPassword);
|
---|
275 |
|
---|
276 | SC_HANDLE WINAPI CreateServiceW(SC_HANDLE hSCManager,
|
---|
277 | LPCWSTR lpServiceName,
|
---|
278 | LPCWSTR lpDisplayName,
|
---|
279 | DWORD dwDesiredAccess,
|
---|
280 | DWORD dwServiceType,
|
---|
281 | DWORD dwStartType,
|
---|
282 | DWORD dwErrorControl,
|
---|
283 | LPCWSTR lpBinaryPathName,
|
---|
284 | LPCWSTR lpLoadOrderGroup,
|
---|
285 | LPDWORD lpdwTagId,
|
---|
286 | LPCWSTR lpDependencies,
|
---|
287 | LPCWSTR lpServiceStartName,
|
---|
288 | LPCWSTR lpPassword);
|
---|
289 |
|
---|
290 | #define CreateService WINELIB_NAME_AW(CreateService)
|
---|
291 |
|
---|
292 | BOOL WINAPI GetServiceDisplayNameA(SC_HANDLE hSCManager,
|
---|
293 | LPCSTR lpServiceName,
|
---|
294 | LPTSTR lpDisplayName,
|
---|
295 | LPDWORD lpcchBuffer);
|
---|
296 |
|
---|
297 | BOOL WINAPI GetServiceDisplayNameW(SC_HANDLE hSCManager,
|
---|
298 | LPCWSTR lpServiceName,
|
---|
299 | LPWSTR lpDisplayName,
|
---|
300 | LPDWORD lpcchBuffer);
|
---|
301 |
|
---|
302 | #define GetServiceDisplayName WINELIB_NAME_AW(GetServiceDisplayName)
|
---|
303 |
|
---|
304 | BOOL WINAPI EnumDependentServicesA(SC_HANDLE hService,
|
---|
305 | DWORD dwServiceState,
|
---|
306 | LPENUM_SERVICE_STATUSA lpServices,
|
---|
307 | DWORD cbBufSize,
|
---|
308 | LPDWORD pcbBytesNeeded,
|
---|
309 | LPDWORD lpServicesReturned);
|
---|
310 |
|
---|
311 | BOOL WINAPI EnumDependentServicesW(SC_HANDLE hService,
|
---|
312 | DWORD dwServiceState,
|
---|
313 | LPENUM_SERVICE_STATUSW lpServices,
|
---|
314 | DWORD cbBufSize,
|
---|
315 | LPDWORD pcbBytesNeeded,
|
---|
316 | LPDWORD lpServicesReturned);
|
---|
317 |
|
---|
318 | #define EnumDependentServices WINELIB_NAME_AW(EnumDependentServices)
|
---|
319 |
|
---|
320 | BOOL WINAPI EnumServicesStatusA(SC_HANDLE hSCManager,
|
---|
321 | DWORD dwServiceType,
|
---|
322 | DWORD dwServiceState,
|
---|
323 | LPENUM_SERVICE_STATUSA lpServices,
|
---|
324 | DWORD cbBufSize,
|
---|
325 | LPDWORD pcbBytesNeeded,
|
---|
326 | LPDWORD lpServicesReturned,
|
---|
327 | LPDWORD lpResumeHandle);
|
---|
328 |
|
---|
329 | BOOL WINAPI EnumServicesStatusW(SC_HANDLE hSCManager,
|
---|
330 | DWORD dwServiceType,
|
---|
331 | DWORD dwServiceState,
|
---|
332 | LPENUM_SERVICE_STATUSW lpServices,
|
---|
333 | DWORD cbBufSize,
|
---|
334 | LPDWORD pcbBytesNeeded,
|
---|
335 | LPDWORD lpServicesReturned,
|
---|
336 | LPDWORD lpResumeHandle);
|
---|
337 |
|
---|
338 | #define EnumServicesStatus WINELIB_NAME_AW(EnumServicesStatus)
|
---|
339 |
|
---|
340 | BOOL WINAPI GetServiceKeyNameA(SC_HANDLE hSCManager,
|
---|
341 | LPCSTR lpDisplayName,
|
---|
342 | LPTSTR lpServiceName,
|
---|
343 | LPDWORD lpcchBuffer);
|
---|
344 |
|
---|
345 | BOOL WINAPI GetServiceKeyNameW(SC_HANDLE hSCManager,
|
---|
346 | LPCWSTR lpDisplayName,
|
---|
347 | LPWSTR lpServiceName,
|
---|
348 | LPDWORD lpcchBuffer);
|
---|
349 |
|
---|
350 | #define GetServiceKeyName WINELIB_NAME_AW(GetServiceKeyName)
|
---|
351 |
|
---|
352 | SC_LOCK WINAPI LockServiceDatabase(SC_HANDLE hSCManager);
|
---|
353 |
|
---|
354 | BOOL WINAPI UnlockServiceDatabase(SC_LOCK sclLock);
|
---|
355 |
|
---|
356 | #endif // __WINSVC_H__
|
---|