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
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
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
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
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
;
98 typedef struct _SERVICE_STATUS
{
100 DWORD dwCurrentState
;
101 DWORD dwControlsAccepted
;
102 DWORD dwWin32ExitCode
;
103 DWORD dwServiceSpecificExitCode
;
106 } SERVICE_STATUS
,*LPSERVICE_STATUS
;
107 typedef struct _SERVICE_STATUS_PROCESS
{
109 DWORD dwCurrentState
;
110 DWORD dwControlsAccepted
;
111 DWORD dwWin32ExitCode
;
112 DWORD dwServiceSpecificExitCode
;
116 DWORD dwServiceFlags
;
117 } SERVICE_STATUS_PROCESS
, *LPSERVICE_STATUS_PROCESS
;
118 typedef enum _SC_STATUS_TYPE
{
119 SC_STATUS_PROCESS_INFO
= 0
121 typedef enum _SC_ENUM_TYPE
{
122 SC_ENUM_PROCESS_INFO
= 0
124 typedef struct _ENUM_SERVICE_STATUSA
{
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
{
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
{
147 DWORD dwErrorControl
;
148 LPSTR lpBinaryPathName
;
149 LPSTR lpLoadOrderGroup
;
151 LPSTR lpDependencies
;
152 LPSTR lpServiceStartName
;
154 } QUERY_SERVICE_CONFIGA
,*LPQUERY_SERVICE_CONFIGA
;
155 typedef struct _QUERY_SERVICE_CONFIGW
{
158 DWORD dwErrorControl
;
159 LPWSTR lpBinaryPathName
;
160 LPWSTR lpLoadOrderGroup
;
162 LPWSTR lpDependencies
;
163 LPWSTR lpServiceStartName
;
164 LPWSTR lpDisplayName
;
165 } QUERY_SERVICE_CONFIGW
,*LPQUERY_SERVICE_CONFIGW
;
166 typedef struct _QUERY_SERVICE_LOCK_STATUSA
{
169 DWORD dwLockDuration
;
170 } QUERY_SERVICE_LOCK_STATUSA
,*LPQUERY_SERVICE_LOCK_STATUSA
;
171 typedef struct _QUERY_SERVICE_LOCK_STATUSW
{
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
{
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
{
194 } SERVICE_DESCRIPTIONA
,*LPSERVICE_DESCRIPTIONA
;
195 typedef struct _SERVICE_DESCRIPTIONW
{
196 LPWSTR lpDescription
;
197 } SERVICE_DESCRIPTIONW
,*LPSERVICE_DESCRIPTIONW
;
198 typedef enum _SC_ACTION_TYPE
{
200 SC_ACTION_RESTART
= 1,
201 SC_ACTION_REBOOT
= 2,
202 SC_ACTION_RUN_COMMAND
= 3
204 typedef struct _SC_ACTION
{
207 } SC_ACTION
,*LPSC_ACTION
;
208 typedef struct _SERVICE_FAILURE_ACTIONSA
{
213 SC_ACTION
* lpsaActions
;
214 } SERVICE_FAILURE_ACTIONSA
,*LPSERVICE_FAILURE_ACTIONSA
;
215 typedef struct _SERVICE_FAILURE_ACTIONSW
{
220 SC_ACTION
* lpsaActions
;
221 } SERVICE_FAILURE_ACTIONSW
,*LPSERVICE_FAILURE_ACTIONSW
;
223 typedef struct _SERVICE_REQUIRED_PRIVILEGES_INFOA
{
224 LPSTR pmszRequiredPrivileges
;
225 } SERVICE_REQUIRED_PRIVILEGES_INFOA
, *LPSERVICE_REQUIRED_PRIVILEGES_INFOA
;
227 typedef struct _SERVICE_REQUIRED_PRIVILEGES_INFOW
{
228 LPWSTR pmszRequiredPrivileges
;
229 } SERVICE_REQUIRED_PRIVILEGES_INFOW
, *LPSERVICE_REQUIRED_PRIVILEGES_INFOW
;
231 typedef VOID (CALLBACK
*PFN_SC_NOTIFY_CALLBACK
)(_In_ PVOID
);
232 typedef struct _SERVICE_NOTIFY_1
{
234 PFN_SC_NOTIFY_CALLBACK pfnNotifyCallback
;
236 DWORD dwNotificationStatus
;
237 SERVICE_STATUS_PROCESS ServiceStatus
;
238 } SERVICE_NOTIFY_1
, *PSERVICE_NOTIFY_1
;
239 typedef struct _SERVICE_NOTIFY_2A
{
241 PFN_SC_NOTIFY_CALLBACK pfnNotifyCallback
;
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
{
250 PFN_SC_NOTIFY_CALLBACK pfnNotifyCallback
;
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
;
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
);
270 _Must_inspect_result_
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
);
281 _Must_inspect_result_
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
);
292 _Must_inspect_result_
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
);
305 _Must_inspect_result_
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
);
318 _Must_inspect_result_
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
);
333 _Must_inspect_result_
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
);
348 _Must_inspect_result_
351 GetServiceDisplayNameA(
352 _In_ SC_HANDLE hSCManager
,
353 _In_ LPCSTR lpServiceName
,
354 _Out_writes_opt_(*lpcchBuffer
) LPSTR lpDisplayName
,
355 _Inout_ LPDWORD lpcchBuffer
);
357 _Must_inspect_result_
360 GetServiceDisplayNameW(
361 _In_ SC_HANDLE hSCManager
,
362 _In_ LPCWSTR lpServiceName
,
363 _Out_writes_opt_(*lpcchBuffer
) LPWSTR lpDisplayName
,
364 _Inout_ LPDWORD lpcchBuffer
);
366 _Must_inspect_result_
370 _In_ SC_HANDLE hSCManager
,
371 _In_ LPCSTR lpDisplayName
,
372 _Out_writes_opt_(*lpcchBuffer
) LPSTR lpServiceName
,
373 _Inout_ LPDWORD lpcchBuffer
);
375 _Must_inspect_result_
379 _In_ SC_HANDLE hSCManager
,
380 _In_ LPCWSTR lpDisplayName
,
381 _Out_writes_opt_(*lpcchBuffer
) LPWSTR lpServiceName
,
382 _Inout_ LPDWORD lpcchBuffer
);
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
);
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
);
396 _Must_inspect_result_
400 _In_ SC_HANDLE hService
,
401 _Out_writes_bytes_opt_(cbBufSize
) LPQUERY_SERVICE_CONFIGA lpServiceConfig
,
402 _In_ DWORD cbBufSize
,
403 _Out_ LPDWORD pcbBytesNeeded
);
405 _Must_inspect_result_
409 _In_ SC_HANDLE hService
,
410 _Out_writes_bytes_opt_(cbBufSize
) LPQUERY_SERVICE_CONFIGW lpServiceConfig
,
411 _In_ DWORD cbBufSize
,
412 _Out_ LPDWORD pcbBytesNeeded
);
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_
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
);
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_
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
);
440 _Must_inspect_result_
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
);
449 _Must_inspect_result_
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
);
458 _Must_inspect_result_
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
);
468 _Must_inspect_result_ BOOL WINAPI
QueryServiceStatus(_In_ SC_HANDLE
, _Out_ LPSERVICE_STATUS
);
470 _Must_inspect_result_
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
);
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
);
490 _In_ SC_HANDLE hService
,
491 _In_ DWORD dwNumServiceArgs
,
492 _In_reads_opt_(dwNumServiceArgs
) LPCSTR
*lpServiceArgVectors
);
497 _In_ SC_HANDLE hService
,
498 _In_ DWORD dwNumServiceArgs
,
499 _In_reads_opt_(dwNumServiceArgs
) LPCWSTR
*lpServiceArgVectors
);
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
);
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
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
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
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
591 #endif /* _WINSVC_H */