[PSDK]
[reactos.git] / reactos / include / psdk / winsvc.h
1 #ifndef _WINSVC_
2 #define _WINSVC_
3
4 #ifdef __cplusplus
5 extern "C" {
6 #endif
7 #define SERVICES_ACTIVE_DATABASEA "ServicesActive"
8 #define SERVICES_ACTIVE_DATABASEW L"ServicesActive"
9 #define SERVICES_FAILED_DATABASEA "ServicesFailed"
10 #define SERVICES_FAILED_DATABASEW L"ServicesFailed"
11 #define SC_GROUP_IDENTIFIERA '+'
12 #define SC_GROUP_IDENTIFIERW L'+'
13 #define SC_MANAGER_ALL_ACCESS 0xf003f
14 #define SC_MANAGER_CONNECT 1
15 #define SC_MANAGER_CREATE_SERVICE 2
16 #define SC_MANAGER_ENUMERATE_SERVICE 4
17 #define SC_MANAGER_LOCK 8
18 #define SC_MANAGER_QUERY_LOCK_STATUS 16
19 #define SC_MANAGER_MODIFY_BOOT_CONFIG 32
20 #define SERVICE_NO_CHANGE 0xffffffff
21 #define SERVICE_STOPPED 1
22 #define SERVICE_START_PENDING 2
23 #define SERVICE_STOP_PENDING 3
24 #define SERVICE_RUNNING 4
25 #define SERVICE_CONTINUE_PENDING 5
26 #define SERVICE_PAUSE_PENDING 6
27 #define SERVICE_PAUSED 7
28 #define SERVICE_ACCEPT_STOP 1
29 #define SERVICE_ACCEPT_PAUSE_CONTINUE 2
30 #define SERVICE_ACCEPT_SHUTDOWN 4
31 #define SERVICE_ACCEPT_PARAMCHANGE 8
32 #define SERVICE_ACCEPT_NETBINDCHANGE 16
33 #define SERVICE_ACCEPT_HARDWAREPROFILECHANGE 32
34 #define SERVICE_ACCEPT_POWEREVENT 64
35 #define SERVICE_ACCEPT_SESSIONCHANGE 128
36 #define SERVICE_CONTROL_STOP 1
37 #define SERVICE_CONTROL_PAUSE 2
38 #define SERVICE_CONTROL_CONTINUE 3
39 #define SERVICE_CONTROL_INTERROGATE 4
40 #define SERVICE_CONTROL_SHUTDOWN 5
41 #define SERVICE_CONTROL_PARAMCHANGE 6
42 #define SERVICE_CONTROL_NETBINDADD 7
43 #define SERVICE_CONTROL_NETBINDREMOVE 8
44 #define SERVICE_CONTROL_NETBINDENABLE 9
45 #define SERVICE_CONTROL_NETBINDDISABLE 10
46 #define SERVICE_CONTROL_DEVICEEVENT 11
47 #define SERVICE_CONTROL_HARDWAREPROFILECHANGE 12
48 #define SERVICE_CONTROL_POWEREVENT 13
49 #define SERVICE_CONTROL_SESSIONCHANGE 14
50 #define SERVICE_ACTIVE 1
51 #define SERVICE_INACTIVE 2
52 #define SERVICE_STATE_ALL 3
53 #define SERVICE_QUERY_CONFIG 1
54 #define SERVICE_CHANGE_CONFIG 2
55 #define SERVICE_QUERY_STATUS 4
56 #define SERVICE_ENUMERATE_DEPENDENTS 8
57 #define SERVICE_START 16
58 #define SERVICE_STOP 32
59 #define SERVICE_PAUSE_CONTINUE 64
60 #define SERVICE_INTERROGATE 128
61 #define SERVICE_USER_DEFINED_CONTROL 256
62 #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)
63 #define SERVICE_RUNS_IN_SYSTEM_PROCESS 1
64
65 #define SERVICE_CONFIG_DESCRIPTION 1
66 #define SERVICE_CONFIG_FAILURE_ACTIONS 2
67 #define SERVICE_CONFIG_DELAYED_AUTO_START_INFO 3
68 #define SERVICE_CONFIG_FAILURE_ACTIONS_FLAG 4
69 #define SERVICE_CONFIG_SERVICE_SID_INFO 5
70 #define SERVICE_CONFIG_REQUIRED_PRIVILEGES_INFO 6
71 #define SERVICE_CONFIG_PRESHUTDOWN_INFO 7
72 #define SERVICE_CONFIG_TRIGGER_INFO 8
73 #define SERVICE_CONFIG_PREFERRED_NODE 9
74 #define SERVICE_CONFIG_RUNLEVEL_INFO 10
75
76 #ifndef _SERVICE_PRESHUTDOWN_INFO_DEFINED_
77 #define _SERVICE_PRESHUTDOWN_INFO_DEFINED_
78 typedef struct _SERVICE_PRESHUTDOWN_INFO {
79 DWORD dwPreshutdownTimeout;
80 } SERVICE_PRESHUTDOWN_INFO, *LPSERVICE_PRESHUTDOWN_INFO;
81 #endif
82
83 typedef struct _SERVICE_STATUS {
84 DWORD dwServiceType;
85 DWORD dwCurrentState;
86 DWORD dwControlsAccepted;
87 DWORD dwWin32ExitCode;
88 DWORD dwServiceSpecificExitCode;
89 DWORD dwCheckPoint;
90 DWORD dwWaitHint;
91 } SERVICE_STATUS,*LPSERVICE_STATUS;
92 typedef struct _SERVICE_STATUS_PROCESS {
93 DWORD dwServiceType;
94 DWORD dwCurrentState;
95 DWORD dwControlsAccepted;
96 DWORD dwWin32ExitCode;
97 DWORD dwServiceSpecificExitCode;
98 DWORD dwCheckPoint;
99 DWORD dwWaitHint;
100 DWORD dwProcessId;
101 DWORD dwServiceFlags;
102 } SERVICE_STATUS_PROCESS, *LPSERVICE_STATUS_PROCESS;
103 typedef enum _SC_STATUS_TYPE {
104 SC_STATUS_PROCESS_INFO = 0
105 } SC_STATUS_TYPE;
106 typedef enum _SC_ENUM_TYPE {
107 SC_ENUM_PROCESS_INFO = 0
108 } SC_ENUM_TYPE;
109 typedef struct _ENUM_SERVICE_STATUSA {
110 LPSTR lpServiceName;
111 LPSTR lpDisplayName;
112 SERVICE_STATUS ServiceStatus;
113 } ENUM_SERVICE_STATUSA,*LPENUM_SERVICE_STATUSA;
114 typedef struct _ENUM_SERVICE_STATUSW {
115 LPWSTR lpServiceName;
116 LPWSTR lpDisplayName;
117 SERVICE_STATUS ServiceStatus;
118 } ENUM_SERVICE_STATUSW,*LPENUM_SERVICE_STATUSW;
119 typedef struct _ENUM_SERVICE_STATUS_PROCESSA {
120 LPSTR lpServiceName;
121 LPSTR lpDisplayName;
122 SERVICE_STATUS_PROCESS ServiceStatusProcess;
123 } ENUM_SERVICE_STATUS_PROCESSA,*LPENUM_SERVICE_STATUS_PROCESSA;
124 typedef struct _ENUM_SERVICE_STATUS_PROCESSW {
125 LPWSTR lpServiceName;
126 LPWSTR lpDisplayName;
127 SERVICE_STATUS_PROCESS ServiceStatusProcess;
128 } ENUM_SERVICE_STATUS_PROCESSW,*LPENUM_SERVICE_STATUS_PROCESSW;
129 typedef struct _QUERY_SERVICE_CONFIGA {
130 DWORD dwServiceType;
131 DWORD dwStartType;
132 DWORD dwErrorControl;
133 LPSTR lpBinaryPathName;
134 LPSTR lpLoadOrderGroup;
135 DWORD dwTagId;
136 LPSTR lpDependencies;
137 LPSTR lpServiceStartName;
138 LPSTR lpDisplayName;
139 } QUERY_SERVICE_CONFIGA,*LPQUERY_SERVICE_CONFIGA;
140 typedef struct _QUERY_SERVICE_CONFIGW {
141 DWORD dwServiceType;
142 DWORD dwStartType;
143 DWORD dwErrorControl;
144 LPWSTR lpBinaryPathName;
145 LPWSTR lpLoadOrderGroup;
146 DWORD dwTagId;
147 LPWSTR lpDependencies;
148 LPWSTR lpServiceStartName;
149 LPWSTR lpDisplayName;
150 } QUERY_SERVICE_CONFIGW,*LPQUERY_SERVICE_CONFIGW;
151 typedef struct _QUERY_SERVICE_LOCK_STATUSA {
152 DWORD fIsLocked;
153 LPSTR lpLockOwner;
154 DWORD dwLockDuration;
155 } QUERY_SERVICE_LOCK_STATUSA,*LPQUERY_SERVICE_LOCK_STATUSA;
156 typedef struct _QUERY_SERVICE_LOCK_STATUSW {
157 DWORD fIsLocked;
158 LPWSTR lpLockOwner;
159 DWORD dwLockDuration;
160 } QUERY_SERVICE_LOCK_STATUSW,*LPQUERY_SERVICE_LOCK_STATUSW;
161 typedef void (WINAPI *LPSERVICE_MAIN_FUNCTIONA)(DWORD,LPSTR*);
162 typedef void (WINAPI *LPSERVICE_MAIN_FUNCTIONW)(DWORD,LPWSTR*);
163 typedef struct _SERVICE_TABLE_ENTRYA {
164 LPSTR lpServiceName;
165 LPSERVICE_MAIN_FUNCTIONA lpServiceProc;
166 } SERVICE_TABLE_ENTRYA,*LPSERVICE_TABLE_ENTRYA;
167 typedef struct _SERVICE_TABLE_ENTRYW {
168 LPWSTR lpServiceName;
169 LPSERVICE_MAIN_FUNCTIONW lpServiceProc;
170 } SERVICE_TABLE_ENTRYW,*LPSERVICE_TABLE_ENTRYW;
171 DECLARE_HANDLE(SC_HANDLE);
172 typedef SC_HANDLE *LPSC_HANDLE;
173 typedef PVOID SC_LOCK;
174 DECLARE_HANDLE(SERVICE_STATUS_HANDLE);
175 typedef VOID(WINAPI *LPHANDLER_FUNCTION)(DWORD);
176 typedef DWORD (WINAPI *LPHANDLER_FUNCTION_EX)(DWORD,DWORD,LPVOID,LPVOID);
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 typedef enum _SC_ACTION_TYPE {
184 SC_ACTION_NONE = 0,
185 SC_ACTION_RESTART = 1,
186 SC_ACTION_REBOOT = 2,
187 SC_ACTION_RUN_COMMAND = 3
188 } SC_ACTION_TYPE;
189 typedef struct _SC_ACTION {
190 SC_ACTION_TYPE Type;
191 DWORD Delay;
192 } SC_ACTION,*LPSC_ACTION;
193 typedef struct _SERVICE_FAILURE_ACTIONSA {
194 DWORD dwResetPeriod;
195 LPSTR lpRebootMsg;
196 LPSTR lpCommand;
197 DWORD cActions;
198 SC_ACTION * lpsaActions;
199 } SERVICE_FAILURE_ACTIONSA,*LPSERVICE_FAILURE_ACTIONSA;
200 typedef struct _SERVICE_FAILURE_ACTIONSW {
201 DWORD dwResetPeriod;
202 LPWSTR lpRebootMsg;
203 LPWSTR lpCommand;
204 DWORD cActions;
205 SC_ACTION * lpsaActions;
206 } SERVICE_FAILURE_ACTIONSW,*LPSERVICE_FAILURE_ACTIONSW;
207
208 typedef struct _SERVICE_REQUIRED_PRIVILEGES_INFOA {
209 LPSTR pmszRequiredPrivileges;
210 } SERVICE_REQUIRED_PRIVILEGES_INFOA, *LPSERVICE_REQUIRED_PRIVILEGES_INFOA;
211
212 typedef struct _SERVICE_REQUIRED_PRIVILEGES_INFOW {
213 LPWSTR pmszRequiredPrivileges;
214 } SERVICE_REQUIRED_PRIVILEGES_INFOW, *LPSERVICE_REQUIRED_PRIVILEGES_INFOW;
215
216 BOOL WINAPI ChangeServiceConfigA(_In_ SC_HANDLE, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_opt_ LPCSTR, _In_opt_ LPCSTR, _Out_opt_ LPDWORD, _In_opt_ LPCSTR, _In_opt_ LPCSTR, _In_opt_ LPCSTR, _In_opt_ LPCSTR);
217 BOOL WINAPI ChangeServiceConfigW(_In_ SC_HANDLE, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_opt_ LPCWSTR, _In_opt_ LPCWSTR, _Out_opt_ LPDWORD, _In_opt_ LPCWSTR, _In_opt_ LPCWSTR, _In_opt_ LPCWSTR, _In_opt_ LPCWSTR);
218 BOOL WINAPI ChangeServiceConfig2A(_In_ SC_HANDLE, _In_ DWORD, _In_opt_ LPVOID);
219 BOOL WINAPI ChangeServiceConfig2W(_In_ SC_HANDLE, _In_ DWORD, _In_opt_ LPVOID);
220 BOOL WINAPI CloseServiceHandle(_In_ SC_HANDLE);
221 BOOL WINAPI ControlService(_In_ SC_HANDLE, _In_ DWORD, _Out_ LPSERVICE_STATUS);
222 _Must_inspect_result_ SC_HANDLE WINAPI CreateServiceA(_In_ SC_HANDLE, _In_ LPCSTR, _In_opt_ LPCSTR, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_opt_ LPCSTR, _In_opt_ LPCSTR, _Out_opt_ PDWORD, _In_opt_ LPCSTR, _In_opt_ LPCSTR, _In_opt_ LPCSTR);
223 _Must_inspect_result_ SC_HANDLE WINAPI CreateServiceW(_In_ SC_HANDLE, _In_ LPCWSTR, _In_opt_ LPCWSTR, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_opt_ LPCWSTR, _In_opt_ LPCWSTR, _Out_opt_ PDWORD, _In_opt_ LPCWSTR, _In_opt_ LPCWSTR, _In_opt_ LPCWSTR);
224 BOOL WINAPI DeleteService(_In_ SC_HANDLE);
225
226 _Must_inspect_result_
227 BOOL
228 WINAPI
229 EnumDependentServicesA(
230 _In_ SC_HANDLE hService,
231 _In_ DWORD dwServiceState,
232 _Out_writes_bytes_opt_(cbBufSize) LPENUM_SERVICE_STATUSA lpServices,
233 _In_ DWORD cbBufSize,
234 _Out_ LPDWORD pcbBytesNeeded,
235 _Out_ LPDWORD lpServicesReturned);
236
237 _Must_inspect_result_
238 BOOL
239 WINAPI
240 EnumDependentServicesW(
241 _In_ SC_HANDLE hService,
242 _In_ DWORD dwServiceState,
243 _Out_writes_bytes_opt_(cbBufSize) LPENUM_SERVICE_STATUSW lpServices,
244 _In_ DWORD cbBufSize,
245 _Out_ LPDWORD pcbBytesNeeded,
246 _Out_ LPDWORD lpServicesReturned);
247
248 _Must_inspect_result_
249 BOOL
250 WINAPI
251 EnumServicesStatusA(
252 _In_ SC_HANDLE hSCManager,
253 _In_ DWORD dwServiceType,
254 _In_ DWORD dwServiceState,
255 _Out_writes_bytes_opt_(cbBufSize) LPENUM_SERVICE_STATUSA lpServices,
256 _In_ DWORD cbBufSize,
257 _Out_ LPDWORD pcbBytesNeeded,
258 _Out_ LPDWORD lpServicesReturned,
259 _Inout_opt_ LPDWORD lpResumeHandle);
260
261 _Must_inspect_result_
262 BOOL
263 WINAPI
264 EnumServicesStatusW(
265 _In_ SC_HANDLE hSCManager,
266 _In_ DWORD dwServiceType,
267 _In_ DWORD dwServiceState,
268 _Out_writes_bytes_opt_(cbBufSize) LPENUM_SERVICE_STATUSW lpServices,
269 _In_ DWORD cbBufSize,
270 _Out_ LPDWORD pcbBytesNeeded,
271 _Out_ LPDWORD lpServicesReturned,
272 _Inout_opt_ LPDWORD lpResumeHandle);
273
274 _Must_inspect_result_
275 BOOL
276 WINAPI
277 EnumServicesStatusExA(
278 _In_ SC_HANDLE hSCManager,
279 _In_ SC_ENUM_TYPE InfoLevel,
280 _In_ DWORD dwServiceType,
281 _In_ DWORD dwServiceState,
282 _Out_writes_bytes_opt_(cbBufSize) LPBYTE lpServices,
283 _In_ DWORD cbBufSize,
284 _Out_ LPDWORD pcbBytesNeeded,
285 _Out_ LPDWORD lpServicesReturned,
286 _Inout_opt_ LPDWORD lpResumeHandle,
287 _In_opt_ LPCSTR pszGroupName);
288
289 _Must_inspect_result_
290 BOOL
291 WINAPI
292 EnumServicesStatusExW(
293 _In_ SC_HANDLE hSCManager,
294 _In_ SC_ENUM_TYPE InfoLevel,
295 _In_ DWORD dwServiceType,
296 _In_ DWORD dwServiceState,
297 _Out_writes_bytes_opt_(cbBufSize) LPBYTE lpServices,
298 _In_ DWORD cbBufSize,
299 _Out_ LPDWORD pcbBytesNeeded,
300 _Out_ LPDWORD lpServicesReturned,
301 _Inout_opt_ LPDWORD lpResumeHandle,
302 _In_opt_ LPCWSTR pszGroupName);
303
304 _Must_inspect_result_
305 BOOL
306 WINAPI
307 GetServiceDisplayNameA(
308 _In_ SC_HANDLE hSCManager,
309 _In_ LPCSTR lpServiceName,
310 _Out_writes_opt_(*lpcchBuffer) LPSTR lpDisplayName,
311 _Inout_ LPDWORD lpcchBuffer);
312
313 _Must_inspect_result_
314 BOOL
315 WINAPI
316 GetServiceDisplayNameW(
317 _In_ SC_HANDLE hSCManager,
318 _In_ LPCWSTR lpServiceName,
319 _Out_writes_opt_(*lpcchBuffer) LPWSTR lpDisplayName,
320 _Inout_ LPDWORD lpcchBuffer);
321
322 _Must_inspect_result_
323 BOOL
324 WINAPI
325 GetServiceKeyNameA(
326 _In_ SC_HANDLE hSCManager,
327 _In_ LPCSTR lpDisplayName,
328 _Out_writes_opt_(*lpcchBuffer) LPSTR lpServiceName,
329 _Inout_ LPDWORD lpcchBuffer);
330
331 _Must_inspect_result_
332 BOOL
333 WINAPI
334 GetServiceKeyNameW(
335 _In_ SC_HANDLE hSCManager,
336 _In_ LPCWSTR lpDisplayName,
337 _Out_writes_opt_(*lpcchBuffer) LPWSTR lpServiceName,
338 _Inout_ LPDWORD lpcchBuffer);
339
340 SC_LOCK WINAPI LockServiceDatabase(_In_ SC_HANDLE);
341 BOOL WINAPI NotifyBootConfigStatus(_In_ BOOL);
342 _Must_inspect_result_ SC_HANDLE WINAPI OpenSCManagerA(_In_opt_ LPCSTR, _In_opt_ LPCSTR, _In_ DWORD);
343 _Must_inspect_result_ SC_HANDLE WINAPI OpenSCManagerW(_In_opt_ LPCWSTR, _In_opt_ LPCWSTR, _In_ DWORD);
344 _Must_inspect_result_ SC_HANDLE WINAPI OpenServiceA(_In_ SC_HANDLE, _In_ LPCSTR, _In_ DWORD);
345 _Must_inspect_result_ SC_HANDLE WINAPI OpenServiceW(_In_ SC_HANDLE, _In_ LPCWSTR, _In_ DWORD);
346
347 _Must_inspect_result_
348 BOOL
349 WINAPI
350 QueryServiceConfigA(
351 _In_ SC_HANDLE hService,
352 _Out_writes_bytes_opt_(cbBufSize) LPQUERY_SERVICE_CONFIGA lpServiceConfig,
353 _In_ DWORD cbBufSize,
354 _Out_ LPDWORD pcbBytesNeeded);
355
356 _Must_inspect_result_
357 BOOL
358 WINAPI
359 QueryServiceConfigW(
360 _In_ SC_HANDLE hService,
361 _Out_writes_bytes_opt_(cbBufSize) LPQUERY_SERVICE_CONFIGW lpServiceConfig,
362 _In_ DWORD cbBufSize,
363 _Out_ LPDWORD pcbBytesNeeded);
364
365 _When_(dwInfoLevel == SERVICE_CONFIG_DESCRIPTION, _At_(cbBufSize, _In_range_(>=, sizeof(LPSERVICE_DESCRIPTIONA))))
366 _When_(dwInfoLevel == SERVICE_CONFIG_FAILURE_ACTIONS, _At_(cbBufSize, _In_range_(>=, sizeof(LPSERVICE_FAILURE_ACTIONSA))))
367 _When_(dwInfoLevel == SERVICE_CONFIG_REQUIRED_PRIVILEGES_INFO, _At_(cbBufSize, _In_range_(>=, sizeof(LPSERVICE_REQUIRED_PRIVILEGES_INFOA))))
368 _Must_inspect_result_
369 BOOL
370 WINAPI
371 QueryServiceConfig2A(
372 _In_ SC_HANDLE hService,
373 _In_ DWORD dwInfoLevel,
374 _Out_writes_bytes_opt_(cbBufSize) LPBYTE lpBuffer,
375 _In_ DWORD cbBufSize,
376 _Out_ LPDWORD pcbBytesNeeded);
377
378 _When_(dwInfoLevel == SERVICE_CONFIG_DESCRIPTION, _At_(cbBufSize, _In_range_(>=, sizeof(LPSERVICE_DESCRIPTIONW))))
379 _When_(dwInfoLevel == SERVICE_CONFIG_FAILURE_ACTIONS, _At_(cbBufSize, _In_range_(>=, sizeof(LPSERVICE_FAILURE_ACTIONSW))))
380 _When_(dwInfoLevel == SERVICE_CONFIG_REQUIRED_PRIVILEGES_INFO, _At_(cbBufSize, _In_range_(>=, sizeof(LPSERVICE_REQUIRED_PRIVILEGES_INFOW))))
381 _Must_inspect_result_
382 BOOL
383 WINAPI
384 QueryServiceConfig2W(
385 _In_ SC_HANDLE hService,
386 _In_ DWORD dwInfoLevel,
387 _Out_writes_bytes_opt_(cbBufSize) LPBYTE lpBuffer,
388 _In_ DWORD cbBufSize,
389 _Out_ LPDWORD pcbBytesNeeded);
390
391 _Must_inspect_result_
392 BOOL
393 WINAPI
394 QueryServiceLockStatusA(
395 _In_ SC_HANDLE hSCManager,
396 _Out_writes_bytes_opt_(cbBufSize) LPQUERY_SERVICE_LOCK_STATUSA lpLockStatus,
397 _In_ DWORD cbBufSize,
398 _Out_ LPDWORD pcbBytesNeeded);
399
400 _Must_inspect_result_
401 BOOL
402 WINAPI
403 QueryServiceLockStatusW(
404 _In_ SC_HANDLE hSCManager,
405 _Out_writes_bytes_opt_(cbBufSize) LPQUERY_SERVICE_LOCK_STATUSW lpLockStatus,
406 _In_ DWORD cbBufSize,
407 _Out_ LPDWORD pcbBytesNeeded);
408
409 _Must_inspect_result_
410 BOOL
411 WINAPI
412 QueryServiceObjectSecurity(
413 _In_ SC_HANDLE hService,
414 _In_ SECURITY_INFORMATION dwSecurityInformation,
415 _Out_writes_bytes_opt_(cbBufSize) PSECURITY_DESCRIPTOR lpSecurityDescriptor,
416 _In_ DWORD cbBufSize,
417 _Out_ LPDWORD pcbBytesNeeded);
418
419 _Must_inspect_result_ BOOL WINAPI QueryServiceStatus(_In_ SC_HANDLE, _Out_ LPSERVICE_STATUS);
420
421 _Must_inspect_result_
422 BOOL
423 WINAPI
424 QueryServiceStatusEx(
425 _In_ SC_HANDLE hService,
426 _In_ SC_STATUS_TYPE InfoLevel,
427 _Out_writes_bytes_opt_(cbBufSize) LPBYTE lpBuffer,
428 _In_ DWORD cbBufSize,
429 _Out_ LPDWORD pcbBytesNeeded);
430
431 _Must_inspect_result_ SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerA(_In_ LPCSTR, _In_ LPHANDLER_FUNCTION);
432 _Must_inspect_result_ SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerW(_In_ LPCWSTR, _In_ LPHANDLER_FUNCTION);
433 _Must_inspect_result_ SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerExA(_In_ LPCSTR, _In_ LPHANDLER_FUNCTION_EX, _In_opt_ LPVOID);
434 _Must_inspect_result_ SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerExW(_In_ LPCWSTR, _In_ LPHANDLER_FUNCTION_EX, _In_opt_ LPVOID);
435 BOOL WINAPI SetServiceObjectSecurity(_In_ SC_HANDLE, _In_ SECURITY_INFORMATION, _In_ PSECURITY_DESCRIPTOR);
436 BOOL WINAPI SetServiceStatus(_In_ SERVICE_STATUS_HANDLE, _In_ LPSERVICE_STATUS);
437
438 BOOL
439 WINAPI
440 StartServiceA(
441 _In_ SC_HANDLE hService,
442 _In_ DWORD dwNumServiceArgs,
443 _In_reads_opt_(dwNumServiceArgs) LPCSTR *lpServiceArgVectors);
444
445 BOOL
446 WINAPI
447 StartServiceW(
448 _In_ SC_HANDLE hService,
449 _In_ DWORD dwNumServiceArgs,
450 _In_reads_opt_(dwNumServiceArgs) LPCWSTR *lpServiceArgVectors);
451
452 BOOL WINAPI StartServiceCtrlDispatcherA(_In_ const SERVICE_TABLE_ENTRYA*);
453 BOOL WINAPI StartServiceCtrlDispatcherW(_In_ const SERVICE_TABLE_ENTRYW*);
454 BOOL WINAPI UnlockServiceDatabase(_In_ SC_LOCK);
455
456 #ifdef UNICODE
457 typedef ENUM_SERVICE_STATUSW ENUM_SERVICE_STATUS,*LPENUM_SERVICE_STATUS;
458 typedef ENUM_SERVICE_STATUS_PROCESSW ENUM_SERVICE_STATUS_PROCESS;
459 typedef LPENUM_SERVICE_STATUS_PROCESSW LPENUM_SERVICE_STATUS_PROCESS;
460 typedef QUERY_SERVICE_CONFIGW QUERY_SERVICE_CONFIG,*LPQUERY_SERVICE_CONFIG;
461 typedef QUERY_SERVICE_LOCK_STATUSW QUERY_SERVICE_LOCK_STATUS,*LPQUERY_SERVICE_LOCK_STATUS;
462 typedef SERVICE_TABLE_ENTRYW SERVICE_TABLE_ENTRY,*LPSERVICE_TABLE_ENTRY;
463 typedef LPSERVICE_MAIN_FUNCTIONW LPSERVICE_MAIN_FUNCTION;
464 typedef SERVICE_DESCRIPTIONW SERVICE_DESCRIPTION;
465 typedef LPSERVICE_DESCRIPTIONW LPSERVICE_DESCRIPTION;
466 typedef SERVICE_FAILURE_ACTIONSW SERVICE_FAILURE_ACTIONS;
467 typedef LPSERVICE_FAILURE_ACTIONSW LPSERVICE_FAILURE_ACTIONS;
468 typedef SERVICE_REQUIRED_PRIVILEGES_INFOW SERVICE_REQUIRED_PRIVILEGES_INFO;
469 typedef LPSERVICE_REQUIRED_PRIVILEGES_INFOW LPSERVICE_REQUIRED_PRIVILEGES_INFO;
470 #define SERVICES_ACTIVE_DATABASE SERVICES_ACTIVE_DATABASEW
471 #define SERVICES_FAILED_DATABASE SERVICES_FAILED_DATABASEW
472 #define SC_GROUP_IDENTIFIER SC_GROUP_IDENTIFIERW
473 #define ChangeServiceConfig ChangeServiceConfigW
474 #define ChangeServiceConfig2 ChangeServiceConfig2W
475 #define CreateService CreateServiceW
476 #define EnumDependentServices EnumDependentServicesW
477 #define EnumServicesStatus EnumServicesStatusW
478 #define EnumServicesStatusEx EnumServicesStatusExW
479 #define GetServiceDisplayName GetServiceDisplayNameW
480 #define GetServiceKeyName GetServiceKeyNameW
481 #define OpenSCManager OpenSCManagerW
482 #define OpenService OpenServiceW
483 #define QueryServiceConfig QueryServiceConfigW
484 #define QueryServiceConfig2 QueryServiceConfig2W
485 #define QueryServiceLockStatus QueryServiceLockStatusW
486 #define RegisterServiceCtrlHandler RegisterServiceCtrlHandlerW
487 #define RegisterServiceCtrlHandlerEx RegisterServiceCtrlHandlerExW
488 #define StartService StartServiceW
489 #define StartServiceCtrlDispatcher StartServiceCtrlDispatcherW
490 #else
491 typedef ENUM_SERVICE_STATUSA ENUM_SERVICE_STATUS,*LPENUM_SERVICE_STATUS;
492 typedef ENUM_SERVICE_STATUS_PROCESSA ENUM_SERVICE_STATUS_PROCESS;
493 typedef LPENUM_SERVICE_STATUS_PROCESSA LPENUM_SERVICE_STATUS_PROCESS;
494 typedef QUERY_SERVICE_CONFIGA QUERY_SERVICE_CONFIG,*LPQUERY_SERVICE_CONFIG;
495 typedef QUERY_SERVICE_LOCK_STATUSA QUERY_SERVICE_LOCK_STATUS,*LPQUERY_SERVICE_LOCK_STATUS;
496 typedef SERVICE_TABLE_ENTRYA SERVICE_TABLE_ENTRY,*LPSERVICE_TABLE_ENTRY;
497 typedef LPSERVICE_MAIN_FUNCTIONA LPSERVICE_MAIN_FUNCTION;
498 typedef SERVICE_DESCRIPTIONA SERVICE_DESCRIPTION;
499 typedef LPSERVICE_DESCRIPTIONA LPSERVICE_DESCRIPTION;
500 typedef SERVICE_FAILURE_ACTIONSA SERVICE_FAILURE_ACTIONS;
501 typedef LPSERVICE_FAILURE_ACTIONSA LPSERVICE_FAILURE_ACTIONS;
502 typedef SERVICE_REQUIRED_PRIVILEGES_INFOA SERVICE_REQUIRED_PRIVILEGES_INFO;
503 typedef LPSERVICE_REQUIRED_PRIVILEGES_INFOA LPSERVICE_REQUIRED_PRIVILEGES_INFO;
504 #define SERVICES_ACTIVE_DATABASE SERVICES_ACTIVE_DATABASEA
505 #define SERVICES_FAILED_DATABASE SERVICES_FAILED_DATABASEA
506 #define SC_GROUP_IDENTIFIER SC_GROUP_IDENTIFIERA
507 #define ChangeServiceConfig ChangeServiceConfigA
508 #define ChangeServiceConfig2 ChangeServiceConfig2A
509 #define CreateService CreateServiceA
510 #define EnumDependentServices EnumDependentServicesA
511 #define EnumServicesStatus EnumServicesStatusA
512 #define EnumServicesStatusEx EnumServicesStatusExA
513 #define GetServiceDisplayName GetServiceDisplayNameA
514 #define GetServiceKeyName GetServiceKeyNameA
515 #define OpenSCManager OpenSCManagerA
516 #define OpenService OpenServiceA
517 #define QueryServiceConfig QueryServiceConfigA
518 #define QueryServiceConfig2 QueryServiceConfig2A
519 #define QueryServiceLockStatus QueryServiceLockStatusA
520 #define RegisterServiceCtrlHandler RegisterServiceCtrlHandlerA
521 #define RegisterServiceCtrlHandlerEx RegisterServiceCtrlHandlerExA
522 #define StartService StartServiceA
523 #define StartServiceCtrlDispatcher StartServiceCtrlDispatcherA
524 #endif
525 #ifdef __cplusplus
526 }
527 #endif
528 #endif /* _WINSVC_H */