[PSDK] Add CLSID_ISFBand, IShellFolderBand and IFolderBandPriv
[reactos.git] / sdk / 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 #define SERVICE_NOTIFY_STATUS_CHANGE_1 1
77 #define SERVICE_NOTIFY_STATUS_CHANGE_2 2
78 #define SERVICE_NOTIFY_STATUS_CHANGE SERVICE_NOTIFY_STATUS_CHANGE_2
79
80 #define SERVICE_NOTIFY_STOPPED 1
81 #define SERVICE_NOTIFY_START_PENDING 2
82 #define SERVICE_NOTIFY_STOP_PENDING 4
83 #define SERVICE_NOTIFY_RUNNING 8
84 #define SERVICE_NOTIFY_CONTINUE_PENDING 16
85 #define SERVICE_NOTIFY_PAUSE_PENDING 32
86 #define SERVICE_NOTIFY_PAUSED 64
87 #define SERVICE_NOTIFY_CREATED 128
88 #define SERVICE_NOTIFY_DELETED 256
89 #define SERVICE_NOTIFY_DELETE_PENDING 512
90
91 #ifndef _SERVICE_PRESHUTDOWN_INFO_DEFINED_
92 #define _SERVICE_PRESHUTDOWN_INFO_DEFINED_
93 typedef struct _SERVICE_PRESHUTDOWN_INFO {
94 DWORD dwPreshutdownTimeout;
95 } SERVICE_PRESHUTDOWN_INFO, *LPSERVICE_PRESHUTDOWN_INFO;
96 #endif
97
98 typedef struct _SERVICE_STATUS {
99 DWORD dwServiceType;
100 DWORD dwCurrentState;
101 DWORD dwControlsAccepted;
102 DWORD dwWin32ExitCode;
103 DWORD dwServiceSpecificExitCode;
104 DWORD dwCheckPoint;
105 DWORD dwWaitHint;
106 } SERVICE_STATUS,*LPSERVICE_STATUS;
107 typedef struct _SERVICE_STATUS_PROCESS {
108 DWORD dwServiceType;
109 DWORD dwCurrentState;
110 DWORD dwControlsAccepted;
111 DWORD dwWin32ExitCode;
112 DWORD dwServiceSpecificExitCode;
113 DWORD dwCheckPoint;
114 DWORD dwWaitHint;
115 DWORD dwProcessId;
116 DWORD dwServiceFlags;
117 } SERVICE_STATUS_PROCESS, *LPSERVICE_STATUS_PROCESS;
118 typedef enum _SC_STATUS_TYPE {
119 SC_STATUS_PROCESS_INFO = 0
120 } SC_STATUS_TYPE;
121 typedef enum _SC_ENUM_TYPE {
122 SC_ENUM_PROCESS_INFO = 0
123 } SC_ENUM_TYPE;
124 typedef struct _ENUM_SERVICE_STATUSA {
125 LPSTR lpServiceName;
126 LPSTR lpDisplayName;
127 SERVICE_STATUS ServiceStatus;
128 } ENUM_SERVICE_STATUSA,*LPENUM_SERVICE_STATUSA;
129 typedef struct _ENUM_SERVICE_STATUSW {
130 LPWSTR lpServiceName;
131 LPWSTR lpDisplayName;
132 SERVICE_STATUS ServiceStatus;
133 } ENUM_SERVICE_STATUSW,*LPENUM_SERVICE_STATUSW;
134 typedef struct _ENUM_SERVICE_STATUS_PROCESSA {
135 LPSTR lpServiceName;
136 LPSTR lpDisplayName;
137 SERVICE_STATUS_PROCESS ServiceStatusProcess;
138 } ENUM_SERVICE_STATUS_PROCESSA,*LPENUM_SERVICE_STATUS_PROCESSA;
139 typedef struct _ENUM_SERVICE_STATUS_PROCESSW {
140 LPWSTR lpServiceName;
141 LPWSTR lpDisplayName;
142 SERVICE_STATUS_PROCESS ServiceStatusProcess;
143 } ENUM_SERVICE_STATUS_PROCESSW,*LPENUM_SERVICE_STATUS_PROCESSW;
144 typedef struct _QUERY_SERVICE_CONFIGA {
145 DWORD dwServiceType;
146 DWORD dwStartType;
147 DWORD dwErrorControl;
148 LPSTR lpBinaryPathName;
149 LPSTR lpLoadOrderGroup;
150 DWORD dwTagId;
151 LPSTR lpDependencies;
152 LPSTR lpServiceStartName;
153 LPSTR lpDisplayName;
154 } QUERY_SERVICE_CONFIGA,*LPQUERY_SERVICE_CONFIGA;
155 typedef struct _QUERY_SERVICE_CONFIGW {
156 DWORD dwServiceType;
157 DWORD dwStartType;
158 DWORD dwErrorControl;
159 LPWSTR lpBinaryPathName;
160 LPWSTR lpLoadOrderGroup;
161 DWORD dwTagId;
162 LPWSTR lpDependencies;
163 LPWSTR lpServiceStartName;
164 LPWSTR lpDisplayName;
165 } QUERY_SERVICE_CONFIGW,*LPQUERY_SERVICE_CONFIGW;
166 typedef struct _QUERY_SERVICE_LOCK_STATUSA {
167 DWORD fIsLocked;
168 LPSTR lpLockOwner;
169 DWORD dwLockDuration;
170 } QUERY_SERVICE_LOCK_STATUSA,*LPQUERY_SERVICE_LOCK_STATUSA;
171 typedef struct _QUERY_SERVICE_LOCK_STATUSW {
172 DWORD fIsLocked;
173 LPWSTR lpLockOwner;
174 DWORD dwLockDuration;
175 } QUERY_SERVICE_LOCK_STATUSW,*LPQUERY_SERVICE_LOCK_STATUSW;
176 typedef void (WINAPI *LPSERVICE_MAIN_FUNCTIONA)(DWORD,LPSTR*);
177 typedef void (WINAPI *LPSERVICE_MAIN_FUNCTIONW)(DWORD,LPWSTR*);
178 typedef struct _SERVICE_TABLE_ENTRYA {
179 LPSTR lpServiceName;
180 LPSERVICE_MAIN_FUNCTIONA lpServiceProc;
181 } SERVICE_TABLE_ENTRYA,*LPSERVICE_TABLE_ENTRYA;
182 typedef struct _SERVICE_TABLE_ENTRYW {
183 LPWSTR lpServiceName;
184 LPSERVICE_MAIN_FUNCTIONW lpServiceProc;
185 } SERVICE_TABLE_ENTRYW,*LPSERVICE_TABLE_ENTRYW;
186 DECLARE_HANDLE(SC_HANDLE);
187 typedef SC_HANDLE *LPSC_HANDLE;
188 typedef PVOID SC_LOCK;
189 DECLARE_HANDLE(SERVICE_STATUS_HANDLE);
190 typedef VOID(WINAPI *LPHANDLER_FUNCTION)(DWORD);
191 typedef DWORD (WINAPI *LPHANDLER_FUNCTION_EX)(DWORD,DWORD,LPVOID,LPVOID);
192 typedef struct _SERVICE_DESCRIPTIONA {
193 LPSTR lpDescription;
194 } SERVICE_DESCRIPTIONA,*LPSERVICE_DESCRIPTIONA;
195 typedef struct _SERVICE_DESCRIPTIONW {
196 LPWSTR lpDescription;
197 } SERVICE_DESCRIPTIONW,*LPSERVICE_DESCRIPTIONW;
198 typedef enum _SC_ACTION_TYPE {
199 SC_ACTION_NONE = 0,
200 SC_ACTION_RESTART = 1,
201 SC_ACTION_REBOOT = 2,
202 SC_ACTION_RUN_COMMAND = 3
203 } SC_ACTION_TYPE;
204 typedef struct _SC_ACTION {
205 SC_ACTION_TYPE Type;
206 DWORD Delay;
207 } SC_ACTION,*LPSC_ACTION;
208 typedef struct _SERVICE_FAILURE_ACTIONSA {
209 DWORD dwResetPeriod;
210 LPSTR lpRebootMsg;
211 LPSTR lpCommand;
212 DWORD cActions;
213 SC_ACTION * lpsaActions;
214 } SERVICE_FAILURE_ACTIONSA,*LPSERVICE_FAILURE_ACTIONSA;
215 typedef struct _SERVICE_FAILURE_ACTIONSW {
216 DWORD dwResetPeriod;
217 LPWSTR lpRebootMsg;
218 LPWSTR lpCommand;
219 DWORD cActions;
220 SC_ACTION * lpsaActions;
221 } SERVICE_FAILURE_ACTIONSW,*LPSERVICE_FAILURE_ACTIONSW;
222
223 typedef struct _SERVICE_REQUIRED_PRIVILEGES_INFOA {
224 LPSTR pmszRequiredPrivileges;
225 } SERVICE_REQUIRED_PRIVILEGES_INFOA, *LPSERVICE_REQUIRED_PRIVILEGES_INFOA;
226
227 typedef struct _SERVICE_REQUIRED_PRIVILEGES_INFOW {
228 LPWSTR pmszRequiredPrivileges;
229 } SERVICE_REQUIRED_PRIVILEGES_INFOW, *LPSERVICE_REQUIRED_PRIVILEGES_INFOW;
230
231 typedef VOID (CALLBACK *PFN_SC_NOTIFY_CALLBACK)(_In_ PVOID);
232 typedef struct _SERVICE_NOTIFY_1 {
233 DWORD dwVersion;
234 PFN_SC_NOTIFY_CALLBACK pfnNotifyCallback;
235 PVOID pContext;
236 DWORD dwNotificationStatus;
237 SERVICE_STATUS_PROCESS ServiceStatus;
238 } SERVICE_NOTIFY_1, *PSERVICE_NOTIFY_1;
239 typedef struct _SERVICE_NOTIFY_2A {
240 DWORD dwVersion;
241 PFN_SC_NOTIFY_CALLBACK pfnNotifyCallback;
242 PVOID pContext;
243 DWORD dwNotificationStatus;
244 SERVICE_STATUS_PROCESS ServiceStatus;
245 DWORD dwNotificationTriggered;
246 LPSTR pszServiceNames;
247 } SERVICE_NOTIFY_2A, *PSERVICE_NOTIFY_2A;
248 typedef struct _SERVICE_NOTIFY_2W {
249 DWORD dwVersion;
250 PFN_SC_NOTIFY_CALLBACK pfnNotifyCallback;
251 PVOID pContext;
252 DWORD dwNotificationStatus;
253 SERVICE_STATUS_PROCESS ServiceStatus;
254 DWORD dwNotificationTriggered;
255 LPWSTR pszServiceNames;
256 } SERVICE_NOTIFY_2W, *PSERVICE_NOTIFY_2W;
257 typedef SERVICE_NOTIFY_2A SERVICE_NOTIFYA, *PSERVICE_NOTIFYA;
258 typedef SERVICE_NOTIFY_2W SERVICE_NOTIFYW, *PSERVICE_NOTIFYW;
259
260 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);
261 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);
262 BOOL WINAPI ChangeServiceConfig2A(_In_ SC_HANDLE, _In_ DWORD, _In_opt_ LPVOID);
263 BOOL WINAPI ChangeServiceConfig2W(_In_ SC_HANDLE, _In_ DWORD, _In_opt_ LPVOID);
264 BOOL WINAPI CloseServiceHandle(_In_ SC_HANDLE);
265 BOOL WINAPI ControlService(_In_ SC_HANDLE, _In_ DWORD, _Out_ LPSERVICE_STATUS);
266 _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);
267 _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);
268 BOOL WINAPI DeleteService(_In_ SC_HANDLE);
269
270 _Must_inspect_result_
271 BOOL
272 WINAPI
273 EnumDependentServicesA(
274 _In_ SC_HANDLE hService,
275 _In_ DWORD dwServiceState,
276 _Out_writes_bytes_opt_(cbBufSize) LPENUM_SERVICE_STATUSA lpServices,
277 _In_ DWORD cbBufSize,
278 _Out_ LPDWORD pcbBytesNeeded,
279 _Out_ LPDWORD lpServicesReturned);
280
281 _Must_inspect_result_
282 BOOL
283 WINAPI
284 EnumDependentServicesW(
285 _In_ SC_HANDLE hService,
286 _In_ DWORD dwServiceState,
287 _Out_writes_bytes_opt_(cbBufSize) LPENUM_SERVICE_STATUSW lpServices,
288 _In_ DWORD cbBufSize,
289 _Out_ LPDWORD pcbBytesNeeded,
290 _Out_ LPDWORD lpServicesReturned);
291
292 _Must_inspect_result_
293 BOOL
294 WINAPI
295 EnumServicesStatusA(
296 _In_ SC_HANDLE hSCManager,
297 _In_ DWORD dwServiceType,
298 _In_ DWORD dwServiceState,
299 _Out_writes_bytes_opt_(cbBufSize) LPENUM_SERVICE_STATUSA lpServices,
300 _In_ DWORD cbBufSize,
301 _Out_ LPDWORD pcbBytesNeeded,
302 _Out_ LPDWORD lpServicesReturned,
303 _Inout_opt_ LPDWORD lpResumeHandle);
304
305 _Must_inspect_result_
306 BOOL
307 WINAPI
308 EnumServicesStatusW(
309 _In_ SC_HANDLE hSCManager,
310 _In_ DWORD dwServiceType,
311 _In_ DWORD dwServiceState,
312 _Out_writes_bytes_opt_(cbBufSize) LPENUM_SERVICE_STATUSW lpServices,
313 _In_ DWORD cbBufSize,
314 _Out_ LPDWORD pcbBytesNeeded,
315 _Out_ LPDWORD lpServicesReturned,
316 _Inout_opt_ LPDWORD lpResumeHandle);
317
318 _Must_inspect_result_
319 BOOL
320 WINAPI
321 EnumServicesStatusExA(
322 _In_ SC_HANDLE hSCManager,
323 _In_ SC_ENUM_TYPE InfoLevel,
324 _In_ DWORD dwServiceType,
325 _In_ DWORD dwServiceState,
326 _Out_writes_bytes_opt_(cbBufSize) LPBYTE lpServices,
327 _In_ DWORD cbBufSize,
328 _Out_ LPDWORD pcbBytesNeeded,
329 _Out_ LPDWORD lpServicesReturned,
330 _Inout_opt_ LPDWORD lpResumeHandle,
331 _In_opt_ LPCSTR pszGroupName);
332
333 _Must_inspect_result_
334 BOOL
335 WINAPI
336 EnumServicesStatusExW(
337 _In_ SC_HANDLE hSCManager,
338 _In_ SC_ENUM_TYPE InfoLevel,
339 _In_ DWORD dwServiceType,
340 _In_ DWORD dwServiceState,
341 _Out_writes_bytes_opt_(cbBufSize) LPBYTE lpServices,
342 _In_ DWORD cbBufSize,
343 _Out_ LPDWORD pcbBytesNeeded,
344 _Out_ LPDWORD lpServicesReturned,
345 _Inout_opt_ LPDWORD lpResumeHandle,
346 _In_opt_ LPCWSTR pszGroupName);
347
348 _Must_inspect_result_
349 BOOL
350 WINAPI
351 GetServiceDisplayNameA(
352 _In_ SC_HANDLE hSCManager,
353 _In_ LPCSTR lpServiceName,
354 _Out_writes_opt_(*lpcchBuffer) LPSTR lpDisplayName,
355 _Inout_ LPDWORD lpcchBuffer);
356
357 _Must_inspect_result_
358 BOOL
359 WINAPI
360 GetServiceDisplayNameW(
361 _In_ SC_HANDLE hSCManager,
362 _In_ LPCWSTR lpServiceName,
363 _Out_writes_opt_(*lpcchBuffer) LPWSTR lpDisplayName,
364 _Inout_ LPDWORD lpcchBuffer);
365
366 _Must_inspect_result_
367 BOOL
368 WINAPI
369 GetServiceKeyNameA(
370 _In_ SC_HANDLE hSCManager,
371 _In_ LPCSTR lpDisplayName,
372 _Out_writes_opt_(*lpcchBuffer) LPSTR lpServiceName,
373 _Inout_ LPDWORD lpcchBuffer);
374
375 _Must_inspect_result_
376 BOOL
377 WINAPI
378 GetServiceKeyNameW(
379 _In_ SC_HANDLE hSCManager,
380 _In_ LPCWSTR lpDisplayName,
381 _Out_writes_opt_(*lpcchBuffer) LPWSTR lpServiceName,
382 _Inout_ LPDWORD lpcchBuffer);
383
384 SC_LOCK WINAPI LockServiceDatabase(_In_ SC_HANDLE);
385 BOOL WINAPI NotifyBootConfigStatus(_In_ BOOL);
386 _Must_inspect_result_ SC_HANDLE WINAPI OpenSCManagerA(_In_opt_ LPCSTR, _In_opt_ LPCSTR, _In_ DWORD);
387 _Must_inspect_result_ SC_HANDLE WINAPI OpenSCManagerW(_In_opt_ LPCWSTR, _In_opt_ LPCWSTR, _In_ DWORD);
388 _Must_inspect_result_ SC_HANDLE WINAPI OpenServiceA(_In_ SC_HANDLE, _In_ LPCSTR, _In_ DWORD);
389 _Must_inspect_result_ SC_HANDLE WINAPI OpenServiceW(_In_ SC_HANDLE, _In_ LPCWSTR, _In_ DWORD);
390
391 #if (NTDDI_VERSION >= NTDDI_VISTA)
392 DWORD WINAPI NotifyServiceStatusChangeA(_In_ SC_HANDLE, _In_ DWORD, _In_ PSERVICE_NOTIFYA);
393 DWORD WINAPI NotifyServiceStatusChangeW(_In_ SC_HANDLE, _In_ DWORD, _In_ PSERVICE_NOTIFYW);
394 #endif
395
396 _Must_inspect_result_
397 BOOL
398 WINAPI
399 QueryServiceConfigA(
400 _In_ SC_HANDLE hService,
401 _Out_writes_bytes_opt_(cbBufSize) LPQUERY_SERVICE_CONFIGA lpServiceConfig,
402 _In_ DWORD cbBufSize,
403 _Out_ LPDWORD pcbBytesNeeded);
404
405 _Must_inspect_result_
406 BOOL
407 WINAPI
408 QueryServiceConfigW(
409 _In_ SC_HANDLE hService,
410 _Out_writes_bytes_opt_(cbBufSize) LPQUERY_SERVICE_CONFIGW lpServiceConfig,
411 _In_ DWORD cbBufSize,
412 _Out_ LPDWORD pcbBytesNeeded);
413
414 _When_(dwInfoLevel == SERVICE_CONFIG_DESCRIPTION, _At_(cbBufSize, _In_range_(>=, sizeof(LPSERVICE_DESCRIPTIONA))))
415 _When_(dwInfoLevel == SERVICE_CONFIG_FAILURE_ACTIONS, _At_(cbBufSize, _In_range_(>=, sizeof(LPSERVICE_FAILURE_ACTIONSA))))
416 _When_(dwInfoLevel == SERVICE_CONFIG_REQUIRED_PRIVILEGES_INFO, _At_(cbBufSize, _In_range_(>=, sizeof(LPSERVICE_REQUIRED_PRIVILEGES_INFOA))))
417 _Must_inspect_result_
418 BOOL
419 WINAPI
420 QueryServiceConfig2A(
421 _In_ SC_HANDLE hService,
422 _In_ DWORD dwInfoLevel,
423 _Out_writes_bytes_opt_(cbBufSize) LPBYTE lpBuffer,
424 _In_ DWORD cbBufSize,
425 _Out_ LPDWORD pcbBytesNeeded);
426
427 _When_(dwInfoLevel == SERVICE_CONFIG_DESCRIPTION, _At_(cbBufSize, _In_range_(>=, sizeof(LPSERVICE_DESCRIPTIONW))))
428 _When_(dwInfoLevel == SERVICE_CONFIG_FAILURE_ACTIONS, _At_(cbBufSize, _In_range_(>=, sizeof(LPSERVICE_FAILURE_ACTIONSW))))
429 _When_(dwInfoLevel == SERVICE_CONFIG_REQUIRED_PRIVILEGES_INFO, _At_(cbBufSize, _In_range_(>=, sizeof(LPSERVICE_REQUIRED_PRIVILEGES_INFOW))))
430 _Must_inspect_result_
431 BOOL
432 WINAPI
433 QueryServiceConfig2W(
434 _In_ SC_HANDLE hService,
435 _In_ DWORD dwInfoLevel,
436 _Out_writes_bytes_opt_(cbBufSize) LPBYTE lpBuffer,
437 _In_ DWORD cbBufSize,
438 _Out_ LPDWORD pcbBytesNeeded);
439
440 _Must_inspect_result_
441 BOOL
442 WINAPI
443 QueryServiceLockStatusA(
444 _In_ SC_HANDLE hSCManager,
445 _Out_writes_bytes_opt_(cbBufSize) LPQUERY_SERVICE_LOCK_STATUSA lpLockStatus,
446 _In_ DWORD cbBufSize,
447 _Out_ LPDWORD pcbBytesNeeded);
448
449 _Must_inspect_result_
450 BOOL
451 WINAPI
452 QueryServiceLockStatusW(
453 _In_ SC_HANDLE hSCManager,
454 _Out_writes_bytes_opt_(cbBufSize) LPQUERY_SERVICE_LOCK_STATUSW lpLockStatus,
455 _In_ DWORD cbBufSize,
456 _Out_ LPDWORD pcbBytesNeeded);
457
458 _Must_inspect_result_
459 BOOL
460 WINAPI
461 QueryServiceObjectSecurity(
462 _In_ SC_HANDLE hService,
463 _In_ SECURITY_INFORMATION dwSecurityInformation,
464 _Out_writes_bytes_opt_(cbBufSize) PSECURITY_DESCRIPTOR lpSecurityDescriptor,
465 _In_ DWORD cbBufSize,
466 _Out_ LPDWORD pcbBytesNeeded);
467
468 _Must_inspect_result_ BOOL WINAPI QueryServiceStatus(_In_ SC_HANDLE, _Out_ LPSERVICE_STATUS);
469
470 _Must_inspect_result_
471 BOOL
472 WINAPI
473 QueryServiceStatusEx(
474 _In_ SC_HANDLE hService,
475 _In_ SC_STATUS_TYPE InfoLevel,
476 _Out_writes_bytes_opt_(cbBufSize) LPBYTE lpBuffer,
477 _In_ DWORD cbBufSize,
478 _Out_ LPDWORD pcbBytesNeeded);
479
480 _Must_inspect_result_ SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerA(_In_ LPCSTR, _In_ LPHANDLER_FUNCTION);
481 _Must_inspect_result_ SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerW(_In_ LPCWSTR, _In_ LPHANDLER_FUNCTION);
482 _Must_inspect_result_ SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerExA(_In_ LPCSTR, _In_ LPHANDLER_FUNCTION_EX, _In_opt_ LPVOID);
483 _Must_inspect_result_ SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerExW(_In_ LPCWSTR, _In_ LPHANDLER_FUNCTION_EX, _In_opt_ LPVOID);
484 BOOL WINAPI SetServiceObjectSecurity(_In_ SC_HANDLE, _In_ SECURITY_INFORMATION, _In_ PSECURITY_DESCRIPTOR);
485 BOOL WINAPI SetServiceStatus(_In_ SERVICE_STATUS_HANDLE, _In_ LPSERVICE_STATUS);
486
487 BOOL
488 WINAPI
489 StartServiceA(
490 _In_ SC_HANDLE hService,
491 _In_ DWORD dwNumServiceArgs,
492 _In_reads_opt_(dwNumServiceArgs) LPCSTR *lpServiceArgVectors);
493
494 BOOL
495 WINAPI
496 StartServiceW(
497 _In_ SC_HANDLE hService,
498 _In_ DWORD dwNumServiceArgs,
499 _In_reads_opt_(dwNumServiceArgs) LPCWSTR *lpServiceArgVectors);
500
501 BOOL WINAPI StartServiceCtrlDispatcherA(_In_ const SERVICE_TABLE_ENTRYA*);
502 BOOL WINAPI StartServiceCtrlDispatcherW(_In_ const SERVICE_TABLE_ENTRYW*);
503 BOOL WINAPI UnlockServiceDatabase(_In_ SC_LOCK);
504
505 #ifdef UNICODE
506 typedef ENUM_SERVICE_STATUSW ENUM_SERVICE_STATUS,*LPENUM_SERVICE_STATUS;
507 typedef ENUM_SERVICE_STATUS_PROCESSW ENUM_SERVICE_STATUS_PROCESS;
508 typedef LPENUM_SERVICE_STATUS_PROCESSW LPENUM_SERVICE_STATUS_PROCESS;
509 typedef QUERY_SERVICE_CONFIGW QUERY_SERVICE_CONFIG,*LPQUERY_SERVICE_CONFIG;
510 typedef QUERY_SERVICE_LOCK_STATUSW QUERY_SERVICE_LOCK_STATUS,*LPQUERY_SERVICE_LOCK_STATUS;
511 typedef SERVICE_TABLE_ENTRYW SERVICE_TABLE_ENTRY,*LPSERVICE_TABLE_ENTRY;
512 typedef LPSERVICE_MAIN_FUNCTIONW LPSERVICE_MAIN_FUNCTION;
513 typedef SERVICE_DESCRIPTIONW SERVICE_DESCRIPTION;
514 typedef LPSERVICE_DESCRIPTIONW LPSERVICE_DESCRIPTION;
515 typedef SERVICE_FAILURE_ACTIONSW SERVICE_FAILURE_ACTIONS;
516 typedef LPSERVICE_FAILURE_ACTIONSW LPSERVICE_FAILURE_ACTIONS;
517 typedef SERVICE_REQUIRED_PRIVILEGES_INFOW SERVICE_REQUIRED_PRIVILEGES_INFO;
518 typedef LPSERVICE_REQUIRED_PRIVILEGES_INFOW LPSERVICE_REQUIRED_PRIVILEGES_INFO;
519 typedef SERVICE_NOTIFY_2W SERVICE_NOTIFY_2;
520 typedef PSERVICE_NOTIFY_2W PSERVICE_NOTIFY_2;
521 typedef SERVICE_NOTIFYW SERVICE_NOTIFY;
522 typedef PSERVICE_NOTIFYW PSERVICE_NOTIFY;
523 #define SERVICES_ACTIVE_DATABASE SERVICES_ACTIVE_DATABASEW
524 #define SERVICES_FAILED_DATABASE SERVICES_FAILED_DATABASEW
525 #define SC_GROUP_IDENTIFIER SC_GROUP_IDENTIFIERW
526 #define ChangeServiceConfig ChangeServiceConfigW
527 #define ChangeServiceConfig2 ChangeServiceConfig2W
528 #define CreateService CreateServiceW
529 #define EnumDependentServices EnumDependentServicesW
530 #define EnumServicesStatus EnumServicesStatusW
531 #define EnumServicesStatusEx EnumServicesStatusExW
532 #define GetServiceDisplayName GetServiceDisplayNameW
533 #define GetServiceKeyName GetServiceKeyNameW
534 #if (NTDDI_VERSION >= NTDDI_VISTA)
535 #define NotifyServiceStatusChange NotifyServiceStatusChangeW
536 #endif
537 #define OpenSCManager OpenSCManagerW
538 #define OpenService OpenServiceW
539 #define QueryServiceConfig QueryServiceConfigW
540 #define QueryServiceConfig2 QueryServiceConfig2W
541 #define QueryServiceLockStatus QueryServiceLockStatusW
542 #define RegisterServiceCtrlHandler RegisterServiceCtrlHandlerW
543 #define RegisterServiceCtrlHandlerEx RegisterServiceCtrlHandlerExW
544 #define StartService StartServiceW
545 #define StartServiceCtrlDispatcher StartServiceCtrlDispatcherW
546 #else
547 typedef ENUM_SERVICE_STATUSA ENUM_SERVICE_STATUS,*LPENUM_SERVICE_STATUS;
548 typedef ENUM_SERVICE_STATUS_PROCESSA ENUM_SERVICE_STATUS_PROCESS;
549 typedef LPENUM_SERVICE_STATUS_PROCESSA LPENUM_SERVICE_STATUS_PROCESS;
550 typedef QUERY_SERVICE_CONFIGA QUERY_SERVICE_CONFIG,*LPQUERY_SERVICE_CONFIG;
551 typedef QUERY_SERVICE_LOCK_STATUSA QUERY_SERVICE_LOCK_STATUS,*LPQUERY_SERVICE_LOCK_STATUS;
552 typedef SERVICE_TABLE_ENTRYA SERVICE_TABLE_ENTRY,*LPSERVICE_TABLE_ENTRY;
553 typedef LPSERVICE_MAIN_FUNCTIONA LPSERVICE_MAIN_FUNCTION;
554 typedef SERVICE_DESCRIPTIONA SERVICE_DESCRIPTION;
555 typedef LPSERVICE_DESCRIPTIONA LPSERVICE_DESCRIPTION;
556 typedef SERVICE_FAILURE_ACTIONSA SERVICE_FAILURE_ACTIONS;
557 typedef LPSERVICE_FAILURE_ACTIONSA LPSERVICE_FAILURE_ACTIONS;
558 typedef SERVICE_REQUIRED_PRIVILEGES_INFOA SERVICE_REQUIRED_PRIVILEGES_INFO;
559 typedef LPSERVICE_REQUIRED_PRIVILEGES_INFOA LPSERVICE_REQUIRED_PRIVILEGES_INFO;
560 typedef SERVICE_NOTIFY_2A SERVICE_NOTIFY_2;
561 typedef PSERVICE_NOTIFY_2A PSERVICE_NOTIFY_2;
562 typedef SERVICE_NOTIFYA SERVICE_NOTIFY;
563 typedef PSERVICE_NOTIFYA PSERVICE_NOTIFY;
564 #define SERVICES_ACTIVE_DATABASE SERVICES_ACTIVE_DATABASEA
565 #define SERVICES_FAILED_DATABASE SERVICES_FAILED_DATABASEA
566 #define SC_GROUP_IDENTIFIER SC_GROUP_IDENTIFIERA
567 #define ChangeServiceConfig ChangeServiceConfigA
568 #define ChangeServiceConfig2 ChangeServiceConfig2A
569 #define CreateService CreateServiceA
570 #define EnumDependentServices EnumDependentServicesA
571 #define EnumServicesStatus EnumServicesStatusA
572 #define EnumServicesStatusEx EnumServicesStatusExA
573 #define GetServiceDisplayName GetServiceDisplayNameA
574 #define GetServiceKeyName GetServiceKeyNameA
575 #define OpenSCManager OpenSCManagerA
576 #define OpenService OpenServiceA
577 #if (NTDDI_VERSION >= NTDDI_VISTA)
578 #define NotifyServiceStatusChange NotifyServiceStatusChangeA
579 #endif
580 #define QueryServiceConfig QueryServiceConfigA
581 #define QueryServiceConfig2 QueryServiceConfig2A
582 #define QueryServiceLockStatus QueryServiceLockStatusA
583 #define RegisterServiceCtrlHandler RegisterServiceCtrlHandlerA
584 #define RegisterServiceCtrlHandlerEx RegisterServiceCtrlHandlerExA
585 #define StartService StartServiceA
586 #define StartServiceCtrlDispatcher StartServiceCtrlDispatcherA
587 #endif
588 #ifdef __cplusplus
589 }
590 #endif
591 #endif /* _WINSVC_H */