s3:smb2_create: remove unused timer pointer from smbd_smb2_create_state
[sfrench/samba-autobuild/.git] / librpc / idl / svcctl.idl
1 #include "idl_types.h"
2
3 /*
4   svcctl interface definitions
5 */
6
7 import "misc.idl", "security.idl";
8 [ uuid("367abb81-9844-35f1-ad32-98f038001003"),
9   version(2.0),
10   pointer_default(unique),
11   endpoint("ncacn_np:[\\pipe\\svcctl]", "ncalrpc:"),
12   helper("../librpc/ndr/ndr_svcctl.h"),
13   helpstring("Service Control")
14 ] interface svcctl
15 {
16         typedef struct {
17                 uint32 is_locked;
18                 [string,charset(UTF16)] uint16 *lock_owner;
19                 uint32 lock_duration;
20         } SERVICE_LOCK_STATUS;
21
22         typedef [v1_enum] enum {
23                 SVCCTL_STATE_UNKNOWN            = 0x00000000,   /* only used internally to smbd */
24                 SVCCTL_STOPPED                  = 0x00000001,
25                 SVCCTL_START_PENDING            = 0x00000002,
26                 SVCCTL_STOP_PENDING             = 0x00000003,
27                 SVCCTL_RUNNING                  = 0x00000004,
28                 SVCCTL_CONTINUE_PENDING         = 0x00000005,
29                 SVCCTL_PAUSE_PENDING            = 0x00000006,
30                 SVCCTL_PAUSED                   = 0x00000007
31         } svcctl_ServiceStatus;
32
33         const int SVCCTL_ACCEPT_NONE                    = 0x00000000;
34
35         typedef [bitmap32bit] bitmap {
36                 SVCCTL_ACCEPT_STOP                      = 0x00000001,
37                 SVCCTL_ACCEPT_PAUSE_CONTINUE            = 0x00000002,
38                 SVCCTL_ACCEPT_SHUTDOWN                  = 0x00000004,
39                 SVCCTL_ACCEPT_PARAMCHANGE               = 0x00000008,
40                 SVCCTL_ACCEPT_NETBINDCHANGE             = 0x00000010,
41                 SVCCTL_ACCEPT_HARDWAREPROFILECHANGE     = 0x00000020,
42                 SVCCTL_ACCEPT_POWEREVENT                = 0x00000040
43         } svcctl_ControlsAccepted;
44
45         typedef struct {
46                 uint32 type;
47                 svcctl_ServiceStatus state;
48                 svcctl_ControlsAccepted controls_accepted;
49                 WERROR win32_exit_code;
50                 uint32 service_exit_code;
51                 uint32 check_point;
52                 uint32 wait_hint;
53         } SERVICE_STATUS;
54
55         typedef [public] struct {
56                 SERVICE_STATUS status;
57                 uint32 process_id;
58                 uint32 service_flags;
59         } SERVICE_STATUS_PROCESS;
60
61         typedef [public,gensize] struct {
62                 [relative] nstring *service_name;
63                 [relative] nstring *display_name;
64                 SERVICE_STATUS status;
65         } ENUM_SERVICE_STATUSW;
66
67         typedef [public,gensize] struct {
68                 [relative] astring *service_name;
69                 [relative] astring *display_name;
70                 SERVICE_STATUS status;
71         } ENUM_SERVICE_STATUSA;
72
73         const int SERVICE_TYPE_KERNEL_DRIVER       = 0x01;
74         const int SERVICE_TYPE_FS_DRIVER           = 0x02;
75         const int SERVICE_TYPE_ADAPTER             = 0x04;
76         const int SERVICE_TYPE_RECOGNIZER_DRIVER   = 0x08;
77         const int SERVICE_TYPE_DRIVER=SERVICE_TYPE_KERNEL_DRIVER|SERVICE_TYPE_FS_DRIVER|SERVICE_TYPE_RECOGNIZER_DRIVER;
78         const int SERVICE_TYPE_WIN32_OWN_PROCESS   = 0x10;
79         const int SERVICE_TYPE_WIN32_SHARE_PROCESS = 0x20;
80         const int SERVICE_TYPE_WIN32=SERVICE_TYPE_WIN32_OWN_PROCESS|SERVICE_TYPE_WIN32_SHARE_PROCESS;
81         const int SERVICE_TYPE_INTERACTIVE_PROCESS = 0x100;
82
83         /*****************/
84         /* Function 0x00 */
85         WERROR svcctl_CloseServiceHandle(
86                 [in,out,ref] policy_handle *handle
87         );
88
89         /*****************/
90         /* Function 0x01 */
91
92         /* Service Controls */
93
94         typedef [v1_enum] enum {
95                 SVCCTL_CONTROL_STOP             = 0x00000001,
96                 SVCCTL_CONTROL_PAUSE            = 0x00000002,
97                 SVCCTL_CONTROL_CONTINUE         = 0x00000003,
98                 SVCCTL_CONTROL_INTERROGATE      = 0x00000004,
99                 SVCCTL_CONTROL_SHUTDOWN         = 0x00000005
100         } SERVICE_CONTROL;
101
102         WERROR svcctl_ControlService(
103                 [in,ref] policy_handle *handle,
104                 [in] SERVICE_CONTROL control,
105                 [out,ref] SERVICE_STATUS *service_status
106         );
107
108         /*****************/
109         /* Function 0x02 */
110         WERROR svcctl_DeleteService(
111                 [in,ref] policy_handle *handle
112         );
113
114         /*****************/
115         /* Function 0x03 */
116
117         WERROR svcctl_LockServiceDatabase(
118                 [in,ref] policy_handle *handle,
119                 [out,ref] policy_handle *lock
120         );
121
122         /*****************/
123         /* Function 0x04 */
124         WERROR svcctl_QueryServiceObjectSecurity(
125                 [in] policy_handle *handle,
126                 [in] security_secinfo security_flags,
127                 [out,ref,size_is(offered)] uint8 *buffer,
128                 [in,range(0,0x40000)] uint32 offered,
129                 [out,ref,range(0,0x40000)] uint32 *needed
130         );
131
132         /*****************/
133         /* Function 0x05 */
134         WERROR svcctl_SetServiceObjectSecurity(
135                 [in] policy_handle *handle,
136                 [in] security_secinfo security_flags,
137                 [in,ref,size_is(offered)] uint8 *buffer,
138                 [in] uint32 offered
139         );
140
141         /*****************/
142         /* Function 0x06 */
143         WERROR svcctl_QueryServiceStatus(
144                 [in,ref] policy_handle *handle,
145                 [out,ref] SERVICE_STATUS *service_status
146         );
147
148         /*****************/
149         /* Function 0x07 */
150         [todo] WERROR svcctl_SetServiceStatus(
151         );
152
153         /*****************/
154         /* Function 0x08 */
155         WERROR svcctl_UnlockServiceDatabase(
156                 [in,out,ref] policy_handle *lock
157         );
158
159         /*****************/
160         /* Function 0x09 */
161         [todo] WERROR svcctl_NotifyBootConfigStatus(
162         );
163
164         /*****************/
165         /* Function 0x0a */
166         WERROR svcctl_SCSetServiceBitsW(
167                 [in,ref] policy_handle *handle,
168                 [in] uint32 bits,
169                 [in] boolean32 bitson,
170                 [in] boolean32 immediate
171         );
172
173         /*****************/
174         /* Function 0x0b */
175
176         typedef [v1_enum] enum {
177                 SVCCTL_SVC_ERROR_IGNORE         = 0x00000000,
178                 SVCCTL_SVC_ERROR_NORMAL         = 0x00000001,
179                 SVCCTL_SVC_ERROR_CRITICAL       = 0x00000002,
180                 SVCCTL_SVC_ERROR_SEVERE         = 0x00000003
181         } svcctl_ErrorControl;
182
183         typedef [v1_enum] enum {
184                 SVCCTL_BOOT_START               = 0x00000000,
185                 SVCCTL_SYSTEM_START             = 0x00000001,
186                 SVCCTL_AUTO_START               = 0x00000002,
187                 SVCCTL_DEMAND_START             = 0x00000003,
188                 SVCCTL_DISABLED                 = 0x00000004
189         } svcctl_StartType;
190
191         WERROR svcctl_ChangeServiceConfigW(
192                 [in,ref] policy_handle *handle,
193                 [in] uint32 type,
194                 [in] svcctl_StartType start_type,
195                 [in] svcctl_ErrorControl error_control,
196                 [in,unique] [string,charset(UTF16)] uint16 *binary_path,
197                 [in,unique] [string,charset(UTF16)] uint16 *load_order_group,
198                 [out,ref] uint32 *tag_id,
199                 [in,unique] [string,charset(UTF16)] uint16 *dependencies,
200                 [in,unique] [string,charset(UTF16)] uint16 *service_start_name,
201                 [in,unique] [string,charset(UTF16)] uint16 *password,
202                 [in,unique] [string,charset(UTF16)] uint16 *display_name
203         );
204
205         /*****************/
206         /* Function 0x0c */
207         WERROR svcctl_CreateServiceW(
208                 [in,ref] policy_handle *scmanager_handle,
209                 [in] [string,charset(UTF16)] uint16 ServiceName[],
210                 [in,unique] [string,charset(UTF16)] uint16 *DisplayName,
211                 [in] uint32 desired_access,
212                 [in] uint32 type,
213                 [in] svcctl_StartType start_type,
214                 [in] svcctl_ErrorControl error_control,
215                 [in] [string,charset(UTF16)] uint16 binary_path[],
216                 [in,unique] [string,charset(UTF16)] uint16 *LoadOrderGroupKey,
217                 [in,out,unique] uint32 *TagId,
218                 [in,unique,size_is(dependencies_size)] uint8 *dependencies,
219                 [in] uint32 dependencies_size,
220                 [in,unique] [string,charset(UTF16)] uint16 *service_start_name,
221                 [in,unique,size_is(password_size)] uint8 *password,
222                 [in] uint32 password_size,
223                 [out,ref] policy_handle *handle
224         );
225
226         /*****************/
227         /* Function 0x0d */
228         WERROR svcctl_EnumDependentServicesW(
229                 [in,ref] policy_handle *service,
230                 [in] svcctl_ServiceState state,
231                 [out,ref,size_is(offered)] uint8 *service_status,
232                 [in,range(0,0x40000)] uint32 offered,
233                 [out,ref,range(0,0x40000)] uint32 *needed,
234                 [out,ref,range(0,0x40000)] uint32 *services_returned
235         );
236
237         /*****************/
238         /* Function 0x0e */
239
240         typedef [v1_enum] enum {
241                 SERVICE_STATE_ACTIVE    = 0x00000001,
242                 SERVICE_STATE_INACTIVE  = 0x00000002,
243                 SERVICE_STATE_ALL       = ( SERVICE_STATE_ACTIVE | SERVICE_STATE_INACTIVE )
244         } svcctl_ServiceState;
245
246         WERROR svcctl_EnumServicesStatusW(
247                 [in,ref] policy_handle *handle,
248                 [in] uint32 type,
249                 [in] svcctl_ServiceState state,
250                 [out,ref,size_is(offered)] uint8 *service,
251                 [in] [range(0,0x40000)] uint32 offered,
252                 [out,ref] [range(0,0x40000)] uint32 *needed,
253                 [out,ref] [range(0,0x40000)] uint32 *services_returned,
254                 [in,out,unique] uint32 *resume_handle
255         );
256
257         /*****************/
258         /* Function 0x0f */
259
260         /* Service Control Manager Bits */
261
262         typedef [bitmap32bit] bitmap {
263                 SC_RIGHT_MGR_CONNECT            = 0x0001,
264                 SC_RIGHT_MGR_CREATE_SERVICE     = 0x0002,
265                 SC_RIGHT_MGR_ENUMERATE_SERVICE  = 0x0004,
266                 SC_RIGHT_MGR_LOCK               = 0x0008,
267                 SC_RIGHT_MGR_QUERY_LOCK_STATUS  = 0x0010,
268                 SC_RIGHT_MGR_MODIFY_BOOT_CONFIG = 0x0020
269         } svcctl_MgrAccessMask;
270
271         const int SC_MANAGER_READ_ACCESS =
272                 (SEC_STD_READ_CONTROL                   |
273                  SC_RIGHT_MGR_CONNECT                   |
274                  SC_RIGHT_MGR_ENUMERATE_SERVICE         |
275                  SC_RIGHT_MGR_QUERY_LOCK_STATUS);
276
277         const int SC_MANAGER_EXECUTE_ACCESS = SC_MANAGER_READ_ACCESS;
278
279         const int SC_MANAGER_WRITE_ACCESS =
280                 (SEC_STD_REQUIRED                       |
281                  SC_MANAGER_READ_ACCESS                 |
282                  SC_RIGHT_MGR_CREATE_SERVICE            |
283                  SC_RIGHT_MGR_LOCK                      |
284                  SC_RIGHT_MGR_MODIFY_BOOT_CONFIG);
285
286         const int SC_MANAGER_ALL_ACCESS = SC_MANAGER_WRITE_ACCESS;
287
288         WERROR svcctl_OpenSCManagerW(
289                 [in,unique] [string,charset(UTF16)] uint16 *MachineName,
290                 [in,unique] [string,charset(UTF16)] uint16 *DatabaseName,
291                 [in] svcctl_MgrAccessMask access_mask,
292                 [out,ref] policy_handle *handle
293         );
294
295         /*****************/
296         /* Function 0x10 */
297
298         /* Service Object Bits */
299
300         typedef [bitmap32bit] bitmap {
301                 SC_RIGHT_SVC_QUERY_CONFIG               = 0x0001,
302                 SC_RIGHT_SVC_CHANGE_CONFIG              = 0x0002,
303                 SC_RIGHT_SVC_QUERY_STATUS               = 0x0004,
304                 SC_RIGHT_SVC_ENUMERATE_DEPENDENTS       = 0x0008,
305                 SC_RIGHT_SVC_START                      = 0x0010,
306                 SC_RIGHT_SVC_STOP                       = 0x0020,
307                 SC_RIGHT_SVC_PAUSE_CONTINUE             = 0x0040,
308                 SC_RIGHT_SVC_INTERROGATE                = 0x0080,
309                 SC_RIGHT_SVC_USER_DEFINED_CONTROL       = 0x0100
310         } svcctl_ServiceAccessMask;
311
312         const int SERVICE_READ_ACCESS =
313                 (SEC_STD_READ_CONTROL                   |
314                  SC_RIGHT_SVC_ENUMERATE_DEPENDENTS      |
315                  SC_RIGHT_SVC_INTERROGATE               |
316                  SC_RIGHT_SVC_QUERY_CONFIG              |
317                  SC_RIGHT_SVC_QUERY_STATUS              |
318                  SC_RIGHT_SVC_USER_DEFINED_CONTROL);
319
320         const int SERVICE_EXECUTE_ACCESS =
321                 (SERVICE_READ_ACCESS                    |
322                  SC_RIGHT_SVC_START                     |
323                  SC_RIGHT_SVC_STOP                      |
324                  SC_RIGHT_SVC_PAUSE_CONTINUE);
325
326         const int SERVICE_WRITE_ACCESS =
327                 (SEC_STD_REQUIRED                       |
328                  SERVICE_READ_ACCESS                    |
329                  SERVICE_EXECUTE_ACCESS                 |
330                  SC_RIGHT_SVC_CHANGE_CONFIG);
331
332         const int SERVICE_ALL_ACCESS = SERVICE_WRITE_ACCESS;
333
334         WERROR svcctl_OpenServiceW(
335                 [in,ref] policy_handle *scmanager_handle,
336                 [in] [string,charset(UTF16)] uint16 ServiceName[],
337                 [in] svcctl_ServiceAccessMask access_mask,
338                 [out,ref] policy_handle *handle
339         );
340
341         /*****************/
342         /* Function 0x11 */
343
344         typedef [public,gensize] struct {
345                 uint32 service_type;
346                 svcctl_StartType start_type;
347                 svcctl_ErrorControl error_control;
348                 [string,charset(UTF16)] [range(0,8192)] uint16 *executablepath;
349                 [string,charset(UTF16)] [range(0,8192)] uint16 *loadordergroup;
350                 uint32 tag_id;
351                 [string,charset(UTF16)] [range(0,8192)] uint16 *dependencies;
352                 [string,charset(UTF16)] [range(0,8192)] uint16 *startname;
353                 [string,charset(UTF16)] [range(0,8192)] uint16 *displayname;
354         } QUERY_SERVICE_CONFIG;
355
356         WERROR svcctl_QueryServiceConfigW(
357                 [in,ref] policy_handle *handle,
358                 [out] QUERY_SERVICE_CONFIG *query,
359                 [in] [range(0,8192)] uint32 offered,
360                 [out,ref] [range(0,8192)] uint32 *needed
361         );
362
363         /*****************/
364         /* Function 0x12 */
365         WERROR svcctl_QueryServiceLockStatusW(
366                 [in,ref] policy_handle *handle,
367                 [in] uint32 offered,
368                 [out,ref] SERVICE_LOCK_STATUS *lock_status,
369                 [out,ref] uint32 *needed
370         );
371
372         /*****************/
373         /* Function 0x13 */
374
375         const int SC_MAX_ARGUMENT_LENGTH = 1024;
376         const int SC_MAX_ARGUMENTS = 1024;
377
378         typedef struct {
379                 [string,charset(UTF16),range(0,SC_MAX_ARGUMENT_LENGTH)] uint16 *string;
380         } svcctl_ArgumentString;
381
382         WERROR svcctl_StartServiceW(
383                 [in,ref] policy_handle *handle,
384                 [in,range(0,SC_MAX_ARGUMENTS)] uint32 NumArgs,
385                 [in,unique,size_is(NumArgs)] svcctl_ArgumentString *Arguments
386         );
387
388         /*****************/
389         /* Function 0x14 */
390         WERROR svcctl_GetServiceDisplayNameW(
391                 [in,ref] policy_handle *handle,
392                 [in,unique] [string,charset(UTF16)] uint16 *service_name,
393                 [out,ref] [string,charset(UTF16)] uint16 **display_name,
394                 [in,out,unique] uint32 *display_name_length
395         );
396
397         /*****************/
398         /* Function 0x15 */
399         WERROR svcctl_GetServiceKeyNameW(
400                 [in,ref] policy_handle *handle,
401                 [in,unique] [string,charset(UTF16)] uint16 *service_name,
402                 [out,ref] [string,charset(UTF16)] uint16 **key_name,
403                 [in,out,unique] uint32 *display_name_length
404         );
405
406         /*****************/
407         /* Function 0x16 */
408         WERROR svcctl_SCSetServiceBitsA(
409                 [in,ref] policy_handle *handle,
410                 [in] uint32 bits,
411                 [in] boolean32 bitson,
412                 [in] boolean32 immediate
413         );
414
415         /*****************/
416         /* Function 0x17 */
417         WERROR svcctl_ChangeServiceConfigA(
418                 [in,ref] policy_handle *handle,
419                 [in] uint32 type,
420                 [in] svcctl_StartType start_type,
421                 [in] svcctl_ErrorControl error_control,
422                 [in,unique] [string,charset(UTF16)] uint16 *binary_path,
423                 [in,unique] [string,charset(UTF16)] uint16 *load_order_group,
424                 [out,ref] uint32 *tag_id,
425                 [in,unique] [string,charset(UTF16)] uint16 *dependencies,
426                 [in,unique] [string,charset(UTF16)] uint16 *service_start_name,
427                 [in,unique] [string,charset(UTF16)] uint16 *password,
428                 [in,unique] [string,charset(UTF16)] uint16 *display_name
429         );
430
431         /*****************/
432         /* Function 0x18 */
433         WERROR svcctl_CreateServiceA(
434                 [in,ref] policy_handle *handle,
435                 [in,unique] [string,charset(UTF16)] uint16 *ServiceName,
436                 [in,unique] [string,charset(UTF16)] uint16 *DisplayName,
437                 [in] uint32 desired_access,
438                 [in] uint32 type,
439                 [in] svcctl_StartType start_type,
440                 [in] svcctl_ErrorControl error_control,
441                 [in,unique] [string,charset(UTF16)] uint16 *binary_path,
442                 [in,unique] [string,charset(UTF16)] uint16 *LoadOrderGroupKey,
443                 [out,unique] uint32 *TagId,
444                 [in,unique] [string,charset(UTF16)] uint16 *dependencies,
445                 [in,unique] [string,charset(UTF16)] uint16 *service_start_name,
446                 [in,unique] [string,charset(UTF16)] uint16 *password
447         );
448
449         /*****************/
450         /* Function 0x19 */
451         WERROR svcctl_EnumDependentServicesA(
452                 [in,ref] policy_handle *service,
453                 [in] svcctl_ServiceState state,
454                 [out,unique] ENUM_SERVICE_STATUSA *service_status,
455                 [in] uint32 offered,
456                 [out,ref] uint32 *needed,
457                 [out,ref] uint32 *services_returned
458         );
459
460         /*****************/
461         /* Function 0x1a */
462         WERROR svcctl_EnumServicesStatusA(
463                 [in,ref] policy_handle *handle,
464                 [in] uint32 type,
465                 [in] svcctl_ServiceState state,
466                 [in] uint32 offered,
467                 [out,size_is(offered)] uint8 service[*],
468                 [out,ref] uint32 *needed,
469                 [out,ref] uint32 *services_returned,
470                 [in,out,unique] uint32 *resume_handle
471         );
472
473         /*****************/
474         /* Function 0x1b */
475         WERROR svcctl_OpenSCManagerA(
476                 [in,unique] [string,charset(UTF16)] uint16 *MachineName,
477                 [in,unique] [string,charset(UTF16)] uint16 *DatabaseName,
478                 [in] uint32 access_mask,
479                 [out,ref] policy_handle *handle
480         );
481
482         /*****************/
483         /* Function 0x1c */
484         WERROR svcctl_OpenServiceA(
485                 [in,ref] policy_handle *scmanager_handle,
486                 [in,unique] [string,charset(UTF16)] uint16 *ServiceName,
487                 [in] uint32 access_mask,
488                 [out,ref] policy_handle *handle
489         );
490
491         /*****************/
492         /* Function 0x1d */
493         WERROR svcctl_QueryServiceConfigA(
494                 [in,ref] policy_handle *handle,
495                 [out] uint8 query[offered], /*QUERYU_SERVICE_CONFIG */
496                 [in] uint32 offered,
497                 [out,ref] uint32 *needed
498         );
499
500         /*****************/
501         /* Function 0x1e */
502         WERROR svcctl_QueryServiceLockStatusA(
503                 [in,ref] policy_handle *handle,
504                 [in] uint32 offered,
505                 [out,ref] SERVICE_LOCK_STATUS *lock_status,
506                 [out,ref] uint32 *needed
507         );
508
509         /*****************/
510         /* Function 0x1f */
511         WERROR svcctl_StartServiceA(
512                 [in,ref] policy_handle *handle,
513                 [in] uint32 NumArgs,
514                 [in,unique/*FIXME:,length_is(NumArgs)*/] [string,charset(UTF16)] uint16 *Arguments
515         );
516
517         /*****************/
518         /* Function 0x20 */
519         WERROR svcctl_GetServiceDisplayNameA(
520                 [in,ref] policy_handle *handle,
521                 [in,unique] [string,charset(UTF16)] uint16 *service_name,
522                 [out,ref] [string,charset(UTF16)] uint16 **display_name,
523                 [in,out,unique] uint32 *display_name_length
524         );
525
526         /*****************/
527         /* Function 0x21 */
528         WERROR svcctl_GetServiceKeyNameA(
529                 [in,ref] policy_handle *handle,
530                 [in,unique] [string,charset(UTF16)] uint16 *service_name,
531                 [out,ref] [string,charset(UTF16)] uint16 **key_name,
532                 [in,out,unique] uint32 *display_name_length
533         );
534
535         /*****************/
536         /* Function 0x22 */
537         [todo] WERROR svcctl_GetCurrentGroupeStateW(
538         );
539
540         /*****************/
541         /* Function 0x23 */
542         [todo] WERROR svcctl_EnumServiceGroupW(
543         );
544
545         /*****************/
546         /* Function 0x24 */
547         WERROR svcctl_ChangeServiceConfig2A(
548                 [in,ref] policy_handle *handle,
549                 [in] uint32 info_level,
550                 [in,unique] uint8 *info
551         );
552
553         /*****************/
554         /* Function 0x25 */
555         WERROR svcctl_ChangeServiceConfig2W(
556                 [in,ref] policy_handle *handle,
557                 [in] uint32 info_level,
558                 [in,unique] uint8 *info
559         );
560
561         /*****************/
562         /* Function 0x26 */
563
564         typedef [v1_enum] enum {
565                 SERVICE_CONFIG_DESCRIPTION      = 0x00000001,
566                 SERVICE_CONFIG_FAILURE_ACTIONS  = 0x00000002
567         } svcctl_ConfigLevel;
568
569         typedef [gensize,public] struct {
570                 [relative] nstring *description;
571         } SERVICE_DESCRIPTION;
572
573         typedef [v1_enum] enum {
574                 SC_ACTION_NONE          = 0,
575                 SC_ACTION_RESTART       = 1,
576                 SC_ACTION_REBOOT        = 2,
577                 SC_ACTION_RUN_COMMAND   = 3
578         } SC_ACTION_TYPE;
579
580         typedef struct {
581                 SC_ACTION_TYPE type;
582                 uint32 delay;
583         } SC_ACTION;
584
585         typedef [public,gensize] struct {
586                 uint32 reset_period;
587                 [relative] nstring *rebootmsg;
588                 [relative] nstring *command;
589                 [range(0,1024)] uint32 num_actions;
590                 [relative] [size_is(num_actions)] SC_ACTION *actions;
591         } SERVICE_FAILURE_ACTIONS;
592
593         WERROR svcctl_QueryServiceConfig2A(
594                 [in,ref] policy_handle *handle,
595                 [in] svcctl_ConfigLevel info_level,
596                 [out] uint8 buffer[offered],
597                 [in] uint32 offered,
598                 [out,ref] uint32 *needed
599         );
600
601         /*****************/
602         /* Function 0x27 */
603         WERROR svcctl_QueryServiceConfig2W(
604                 [in,ref] policy_handle *handle,
605                 [in] svcctl_ConfigLevel info_level,
606                 [out,ref,size_is(offered)] uint8 *buffer,
607                 [in] [range(0,8192)] uint32 offered,
608                 [out,ref] [range(0,8192)] uint32 *needed
609         );
610
611         /*****************/
612         /* Function 0x28 */
613
614         typedef [v1_enum] enum {
615                 SVC_STATUS_PROCESS_INFO         = 0x00000000
616         } svcctl_StatusLevel;
617
618         WERROR svcctl_QueryServiceStatusEx(
619                 [in,ref] policy_handle *handle,
620                 [in] svcctl_StatusLevel info_level,
621                 [out,ref,size_is(offered)] uint8 *buffer,
622                 [in] [range(0,8192)] uint32 offered,
623                 [out,ref] [range(0,8192)] uint32 *needed
624         );
625
626         /*****************/
627         /* Function 0x29 */
628         WERROR EnumServicesStatusExA(
629                 [in,ref] policy_handle *scmanager,
630                 [in] uint32 info_level,
631                 [in] uint32 type,
632                 [in] svcctl_ServiceState state,
633                 [out] uint8 services[offered],
634                 [in] uint32 offered,
635                 [out,ref] uint32 *needed,
636                 [out,ref] uint32 *service_returned,
637                 [in,out,unique] uint32 *resume_handle,
638                 [out,ref] [string,charset(UTF16)] uint16 **group_name
639         );
640
641         /*****************/
642         /* Function 0x2a */
643         WERROR EnumServicesStatusExW(
644                 [in,ref] policy_handle *scmanager,
645                 [in] uint32 info_level,
646                 [in] uint32 type,
647                 [in] svcctl_ServiceState state,
648                 [out,ref,size_is(offered)] uint8 *services,
649                 [in] [range(0,0x40000)] uint32 offered,
650                 [out,ref] [range(0,0x40000)] uint32 *needed,
651                 [out,ref] [range(0,0x40000)] uint32 *service_returned,
652                 [in,out,unique] [range(0,0x40000)] uint32 *resume_handle,
653                 [in,unique] [string,charset(UTF16)] uint16 *group_name
654         );
655
656         /*****************/
657         /* Function 0x2b */
658         [todo] WERROR svcctl_SCSendTSMessage(
659         );
660 }