• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/router/samba-3.5.8/librpc/gen_ndr/
1/*
2 * Unix SMB/CIFS implementation.
3 * client auto-generated by pidl. DO NOT MODIFY!
4 */
5
6#include "includes.h"
7#include "../librpc/gen_ndr/cli_svcctl.h"
8
9struct rpccli_svcctl_CloseServiceHandle_state {
10	struct svcctl_CloseServiceHandle orig;
11	struct svcctl_CloseServiceHandle tmp;
12	TALLOC_CTX *out_mem_ctx;
13	NTSTATUS (*dispatch_recv)(struct tevent_req *req, TALLOC_CTX *mem_ctx);
14};
15
16static void rpccli_svcctl_CloseServiceHandle_done(struct tevent_req *subreq);
17
18struct tevent_req *rpccli_svcctl_CloseServiceHandle_send(TALLOC_CTX *mem_ctx,
19							 struct tevent_context *ev,
20							 struct rpc_pipe_client *cli,
21							 struct policy_handle *_handle /* [in,out] [ref] */)
22{
23	struct tevent_req *req;
24	struct rpccli_svcctl_CloseServiceHandle_state *state;
25	struct tevent_req *subreq;
26
27	req = tevent_req_create(mem_ctx, &state,
28				struct rpccli_svcctl_CloseServiceHandle_state);
29	if (req == NULL) {
30		return NULL;
31	}
32	state->out_mem_ctx = NULL;
33	state->dispatch_recv = cli->dispatch_recv;
34
35	/* In parameters */
36	state->orig.in.handle = _handle;
37
38	/* Out parameters */
39	state->orig.out.handle = _handle;
40
41	/* Result */
42	ZERO_STRUCT(state->orig.out.result);
43
44	state->out_mem_ctx = talloc_named_const(state, 0,
45			     "rpccli_svcctl_CloseServiceHandle_out_memory");
46	if (tevent_req_nomem(state->out_mem_ctx, req)) {
47		return tevent_req_post(req, ev);
48	}
49
50	/* make a temporary copy, that we pass to the dispatch function */
51	state->tmp = state->orig;
52
53	subreq = cli->dispatch_send(state, ev, cli,
54				    &ndr_table_svcctl,
55				    NDR_SVCCTL_CLOSESERVICEHANDLE,
56				    &state->tmp);
57	if (tevent_req_nomem(subreq, req)) {
58		return tevent_req_post(req, ev);
59	}
60	tevent_req_set_callback(subreq, rpccli_svcctl_CloseServiceHandle_done, req);
61	return req;
62}
63
64static void rpccli_svcctl_CloseServiceHandle_done(struct tevent_req *subreq)
65{
66	struct tevent_req *req = tevent_req_callback_data(
67		subreq, struct tevent_req);
68	struct rpccli_svcctl_CloseServiceHandle_state *state = tevent_req_data(
69		req, struct rpccli_svcctl_CloseServiceHandle_state);
70	NTSTATUS status;
71	TALLOC_CTX *mem_ctx;
72
73	if (state->out_mem_ctx) {
74		mem_ctx = state->out_mem_ctx;
75	} else {
76		mem_ctx = state;
77	}
78
79	status = state->dispatch_recv(subreq, mem_ctx);
80	TALLOC_FREE(subreq);
81	if (!NT_STATUS_IS_OK(status)) {
82		tevent_req_nterror(req, status);
83		return;
84	}
85
86	/* Copy out parameters */
87	*state->orig.out.handle = *state->tmp.out.handle;
88
89	/* Copy result */
90	state->orig.out.result = state->tmp.out.result;
91
92	/* Reset temporary structure */
93	ZERO_STRUCT(state->tmp);
94
95	tevent_req_done(req);
96}
97
98NTSTATUS rpccli_svcctl_CloseServiceHandle_recv(struct tevent_req *req,
99					       TALLOC_CTX *mem_ctx,
100					       WERROR *result)
101{
102	struct rpccli_svcctl_CloseServiceHandle_state *state = tevent_req_data(
103		req, struct rpccli_svcctl_CloseServiceHandle_state);
104	NTSTATUS status;
105
106	if (tevent_req_is_nterror(req, &status)) {
107		tevent_req_received(req);
108		return status;
109	}
110
111	/* Steal possbile out parameters to the callers context */
112	talloc_steal(mem_ctx, state->out_mem_ctx);
113
114	/* Return result */
115	*result = state->orig.out.result;
116
117	tevent_req_received(req);
118	return NT_STATUS_OK;
119}
120
121NTSTATUS rpccli_svcctl_CloseServiceHandle(struct rpc_pipe_client *cli,
122					  TALLOC_CTX *mem_ctx,
123					  struct policy_handle *handle /* [in,out] [ref] */,
124					  WERROR *werror)
125{
126	struct svcctl_CloseServiceHandle r;
127	NTSTATUS status;
128
129	/* In parameters */
130	r.in.handle = handle;
131
132	status = cli->dispatch(cli,
133				mem_ctx,
134				&ndr_table_svcctl,
135				NDR_SVCCTL_CLOSESERVICEHANDLE,
136				&r);
137
138	if (!NT_STATUS_IS_OK(status)) {
139		return status;
140	}
141
142	if (NT_STATUS_IS_ERR(status)) {
143		return status;
144	}
145
146	/* Return variables */
147	*handle = *r.out.handle;
148
149	/* Return result */
150	if (werror) {
151		*werror = r.out.result;
152	}
153
154	return werror_to_ntstatus(r.out.result);
155}
156
157struct rpccli_svcctl_ControlService_state {
158	struct svcctl_ControlService orig;
159	struct svcctl_ControlService tmp;
160	TALLOC_CTX *out_mem_ctx;
161	NTSTATUS (*dispatch_recv)(struct tevent_req *req, TALLOC_CTX *mem_ctx);
162};
163
164static void rpccli_svcctl_ControlService_done(struct tevent_req *subreq);
165
166struct tevent_req *rpccli_svcctl_ControlService_send(TALLOC_CTX *mem_ctx,
167						     struct tevent_context *ev,
168						     struct rpc_pipe_client *cli,
169						     struct policy_handle *_handle /* [in] [ref] */,
170						     enum SERVICE_CONTROL _control /* [in]  */,
171						     struct SERVICE_STATUS *_service_status /* [out] [ref] */)
172{
173	struct tevent_req *req;
174	struct rpccli_svcctl_ControlService_state *state;
175	struct tevent_req *subreq;
176
177	req = tevent_req_create(mem_ctx, &state,
178				struct rpccli_svcctl_ControlService_state);
179	if (req == NULL) {
180		return NULL;
181	}
182	state->out_mem_ctx = NULL;
183	state->dispatch_recv = cli->dispatch_recv;
184
185	/* In parameters */
186	state->orig.in.handle = _handle;
187	state->orig.in.control = _control;
188
189	/* Out parameters */
190	state->orig.out.service_status = _service_status;
191
192	/* Result */
193	ZERO_STRUCT(state->orig.out.result);
194
195	state->out_mem_ctx = talloc_named_const(state, 0,
196			     "rpccli_svcctl_ControlService_out_memory");
197	if (tevent_req_nomem(state->out_mem_ctx, req)) {
198		return tevent_req_post(req, ev);
199	}
200
201	/* make a temporary copy, that we pass to the dispatch function */
202	state->tmp = state->orig;
203
204	subreq = cli->dispatch_send(state, ev, cli,
205				    &ndr_table_svcctl,
206				    NDR_SVCCTL_CONTROLSERVICE,
207				    &state->tmp);
208	if (tevent_req_nomem(subreq, req)) {
209		return tevent_req_post(req, ev);
210	}
211	tevent_req_set_callback(subreq, rpccli_svcctl_ControlService_done, req);
212	return req;
213}
214
215static void rpccli_svcctl_ControlService_done(struct tevent_req *subreq)
216{
217	struct tevent_req *req = tevent_req_callback_data(
218		subreq, struct tevent_req);
219	struct rpccli_svcctl_ControlService_state *state = tevent_req_data(
220		req, struct rpccli_svcctl_ControlService_state);
221	NTSTATUS status;
222	TALLOC_CTX *mem_ctx;
223
224	if (state->out_mem_ctx) {
225		mem_ctx = state->out_mem_ctx;
226	} else {
227		mem_ctx = state;
228	}
229
230	status = state->dispatch_recv(subreq, mem_ctx);
231	TALLOC_FREE(subreq);
232	if (!NT_STATUS_IS_OK(status)) {
233		tevent_req_nterror(req, status);
234		return;
235	}
236
237	/* Copy out parameters */
238	*state->orig.out.service_status = *state->tmp.out.service_status;
239
240	/* Copy result */
241	state->orig.out.result = state->tmp.out.result;
242
243	/* Reset temporary structure */
244	ZERO_STRUCT(state->tmp);
245
246	tevent_req_done(req);
247}
248
249NTSTATUS rpccli_svcctl_ControlService_recv(struct tevent_req *req,
250					   TALLOC_CTX *mem_ctx,
251					   WERROR *result)
252{
253	struct rpccli_svcctl_ControlService_state *state = tevent_req_data(
254		req, struct rpccli_svcctl_ControlService_state);
255	NTSTATUS status;
256
257	if (tevent_req_is_nterror(req, &status)) {
258		tevent_req_received(req);
259		return status;
260	}
261
262	/* Steal possbile out parameters to the callers context */
263	talloc_steal(mem_ctx, state->out_mem_ctx);
264
265	/* Return result */
266	*result = state->orig.out.result;
267
268	tevent_req_received(req);
269	return NT_STATUS_OK;
270}
271
272NTSTATUS rpccli_svcctl_ControlService(struct rpc_pipe_client *cli,
273				      TALLOC_CTX *mem_ctx,
274				      struct policy_handle *handle /* [in] [ref] */,
275				      enum SERVICE_CONTROL control /* [in]  */,
276				      struct SERVICE_STATUS *service_status /* [out] [ref] */,
277				      WERROR *werror)
278{
279	struct svcctl_ControlService r;
280	NTSTATUS status;
281
282	/* In parameters */
283	r.in.handle = handle;
284	r.in.control = control;
285
286	status = cli->dispatch(cli,
287				mem_ctx,
288				&ndr_table_svcctl,
289				NDR_SVCCTL_CONTROLSERVICE,
290				&r);
291
292	if (!NT_STATUS_IS_OK(status)) {
293		return status;
294	}
295
296	if (NT_STATUS_IS_ERR(status)) {
297		return status;
298	}
299
300	/* Return variables */
301	*service_status = *r.out.service_status;
302
303	/* Return result */
304	if (werror) {
305		*werror = r.out.result;
306	}
307
308	return werror_to_ntstatus(r.out.result);
309}
310
311struct rpccli_svcctl_DeleteService_state {
312	struct svcctl_DeleteService orig;
313	struct svcctl_DeleteService tmp;
314	TALLOC_CTX *out_mem_ctx;
315	NTSTATUS (*dispatch_recv)(struct tevent_req *req, TALLOC_CTX *mem_ctx);
316};
317
318static void rpccli_svcctl_DeleteService_done(struct tevent_req *subreq);
319
320struct tevent_req *rpccli_svcctl_DeleteService_send(TALLOC_CTX *mem_ctx,
321						    struct tevent_context *ev,
322						    struct rpc_pipe_client *cli,
323						    struct policy_handle *_handle /* [in] [ref] */)
324{
325	struct tevent_req *req;
326	struct rpccli_svcctl_DeleteService_state *state;
327	struct tevent_req *subreq;
328
329	req = tevent_req_create(mem_ctx, &state,
330				struct rpccli_svcctl_DeleteService_state);
331	if (req == NULL) {
332		return NULL;
333	}
334	state->out_mem_ctx = NULL;
335	state->dispatch_recv = cli->dispatch_recv;
336
337	/* In parameters */
338	state->orig.in.handle = _handle;
339
340	/* Out parameters */
341
342	/* Result */
343	ZERO_STRUCT(state->orig.out.result);
344
345	/* make a temporary copy, that we pass to the dispatch function */
346	state->tmp = state->orig;
347
348	subreq = cli->dispatch_send(state, ev, cli,
349				    &ndr_table_svcctl,
350				    NDR_SVCCTL_DELETESERVICE,
351				    &state->tmp);
352	if (tevent_req_nomem(subreq, req)) {
353		return tevent_req_post(req, ev);
354	}
355	tevent_req_set_callback(subreq, rpccli_svcctl_DeleteService_done, req);
356	return req;
357}
358
359static void rpccli_svcctl_DeleteService_done(struct tevent_req *subreq)
360{
361	struct tevent_req *req = tevent_req_callback_data(
362		subreq, struct tevent_req);
363	struct rpccli_svcctl_DeleteService_state *state = tevent_req_data(
364		req, struct rpccli_svcctl_DeleteService_state);
365	NTSTATUS status;
366	TALLOC_CTX *mem_ctx;
367
368	if (state->out_mem_ctx) {
369		mem_ctx = state->out_mem_ctx;
370	} else {
371		mem_ctx = state;
372	}
373
374	status = state->dispatch_recv(subreq, mem_ctx);
375	TALLOC_FREE(subreq);
376	if (!NT_STATUS_IS_OK(status)) {
377		tevent_req_nterror(req, status);
378		return;
379	}
380
381	/* Copy out parameters */
382
383	/* Copy result */
384	state->orig.out.result = state->tmp.out.result;
385
386	/* Reset temporary structure */
387	ZERO_STRUCT(state->tmp);
388
389	tevent_req_done(req);
390}
391
392NTSTATUS rpccli_svcctl_DeleteService_recv(struct tevent_req *req,
393					  TALLOC_CTX *mem_ctx,
394					  WERROR *result)
395{
396	struct rpccli_svcctl_DeleteService_state *state = tevent_req_data(
397		req, struct rpccli_svcctl_DeleteService_state);
398	NTSTATUS status;
399
400	if (tevent_req_is_nterror(req, &status)) {
401		tevent_req_received(req);
402		return status;
403	}
404
405	/* Steal possbile out parameters to the callers context */
406	talloc_steal(mem_ctx, state->out_mem_ctx);
407
408	/* Return result */
409	*result = state->orig.out.result;
410
411	tevent_req_received(req);
412	return NT_STATUS_OK;
413}
414
415NTSTATUS rpccli_svcctl_DeleteService(struct rpc_pipe_client *cli,
416				     TALLOC_CTX *mem_ctx,
417				     struct policy_handle *handle /* [in] [ref] */,
418				     WERROR *werror)
419{
420	struct svcctl_DeleteService r;
421	NTSTATUS status;
422
423	/* In parameters */
424	r.in.handle = handle;
425
426	status = cli->dispatch(cli,
427				mem_ctx,
428				&ndr_table_svcctl,
429				NDR_SVCCTL_DELETESERVICE,
430				&r);
431
432	if (!NT_STATUS_IS_OK(status)) {
433		return status;
434	}
435
436	if (NT_STATUS_IS_ERR(status)) {
437		return status;
438	}
439
440	/* Return variables */
441
442	/* Return result */
443	if (werror) {
444		*werror = r.out.result;
445	}
446
447	return werror_to_ntstatus(r.out.result);
448}
449
450struct rpccli_svcctl_LockServiceDatabase_state {
451	struct svcctl_LockServiceDatabase orig;
452	struct svcctl_LockServiceDatabase tmp;
453	TALLOC_CTX *out_mem_ctx;
454	NTSTATUS (*dispatch_recv)(struct tevent_req *req, TALLOC_CTX *mem_ctx);
455};
456
457static void rpccli_svcctl_LockServiceDatabase_done(struct tevent_req *subreq);
458
459struct tevent_req *rpccli_svcctl_LockServiceDatabase_send(TALLOC_CTX *mem_ctx,
460							  struct tevent_context *ev,
461							  struct rpc_pipe_client *cli,
462							  struct policy_handle *_handle /* [in] [ref] */,
463							  struct policy_handle *_lock /* [out] [ref] */)
464{
465	struct tevent_req *req;
466	struct rpccli_svcctl_LockServiceDatabase_state *state;
467	struct tevent_req *subreq;
468
469	req = tevent_req_create(mem_ctx, &state,
470				struct rpccli_svcctl_LockServiceDatabase_state);
471	if (req == NULL) {
472		return NULL;
473	}
474	state->out_mem_ctx = NULL;
475	state->dispatch_recv = cli->dispatch_recv;
476
477	/* In parameters */
478	state->orig.in.handle = _handle;
479
480	/* Out parameters */
481	state->orig.out.lock = _lock;
482
483	/* Result */
484	ZERO_STRUCT(state->orig.out.result);
485
486	state->out_mem_ctx = talloc_named_const(state, 0,
487			     "rpccli_svcctl_LockServiceDatabase_out_memory");
488	if (tevent_req_nomem(state->out_mem_ctx, req)) {
489		return tevent_req_post(req, ev);
490	}
491
492	/* make a temporary copy, that we pass to the dispatch function */
493	state->tmp = state->orig;
494
495	subreq = cli->dispatch_send(state, ev, cli,
496				    &ndr_table_svcctl,
497				    NDR_SVCCTL_LOCKSERVICEDATABASE,
498				    &state->tmp);
499	if (tevent_req_nomem(subreq, req)) {
500		return tevent_req_post(req, ev);
501	}
502	tevent_req_set_callback(subreq, rpccli_svcctl_LockServiceDatabase_done, req);
503	return req;
504}
505
506static void rpccli_svcctl_LockServiceDatabase_done(struct tevent_req *subreq)
507{
508	struct tevent_req *req = tevent_req_callback_data(
509		subreq, struct tevent_req);
510	struct rpccli_svcctl_LockServiceDatabase_state *state = tevent_req_data(
511		req, struct rpccli_svcctl_LockServiceDatabase_state);
512	NTSTATUS status;
513	TALLOC_CTX *mem_ctx;
514
515	if (state->out_mem_ctx) {
516		mem_ctx = state->out_mem_ctx;
517	} else {
518		mem_ctx = state;
519	}
520
521	status = state->dispatch_recv(subreq, mem_ctx);
522	TALLOC_FREE(subreq);
523	if (!NT_STATUS_IS_OK(status)) {
524		tevent_req_nterror(req, status);
525		return;
526	}
527
528	/* Copy out parameters */
529	*state->orig.out.lock = *state->tmp.out.lock;
530
531	/* Copy result */
532	state->orig.out.result = state->tmp.out.result;
533
534	/* Reset temporary structure */
535	ZERO_STRUCT(state->tmp);
536
537	tevent_req_done(req);
538}
539
540NTSTATUS rpccli_svcctl_LockServiceDatabase_recv(struct tevent_req *req,
541						TALLOC_CTX *mem_ctx,
542						WERROR *result)
543{
544	struct rpccli_svcctl_LockServiceDatabase_state *state = tevent_req_data(
545		req, struct rpccli_svcctl_LockServiceDatabase_state);
546	NTSTATUS status;
547
548	if (tevent_req_is_nterror(req, &status)) {
549		tevent_req_received(req);
550		return status;
551	}
552
553	/* Steal possbile out parameters to the callers context */
554	talloc_steal(mem_ctx, state->out_mem_ctx);
555
556	/* Return result */
557	*result = state->orig.out.result;
558
559	tevent_req_received(req);
560	return NT_STATUS_OK;
561}
562
563NTSTATUS rpccli_svcctl_LockServiceDatabase(struct rpc_pipe_client *cli,
564					   TALLOC_CTX *mem_ctx,
565					   struct policy_handle *handle /* [in] [ref] */,
566					   struct policy_handle *lock /* [out] [ref] */,
567					   WERROR *werror)
568{
569	struct svcctl_LockServiceDatabase r;
570	NTSTATUS status;
571
572	/* In parameters */
573	r.in.handle = handle;
574
575	status = cli->dispatch(cli,
576				mem_ctx,
577				&ndr_table_svcctl,
578				NDR_SVCCTL_LOCKSERVICEDATABASE,
579				&r);
580
581	if (!NT_STATUS_IS_OK(status)) {
582		return status;
583	}
584
585	if (NT_STATUS_IS_ERR(status)) {
586		return status;
587	}
588
589	/* Return variables */
590	*lock = *r.out.lock;
591
592	/* Return result */
593	if (werror) {
594		*werror = r.out.result;
595	}
596
597	return werror_to_ntstatus(r.out.result);
598}
599
600struct rpccli_svcctl_QueryServiceObjectSecurity_state {
601	struct svcctl_QueryServiceObjectSecurity orig;
602	struct svcctl_QueryServiceObjectSecurity tmp;
603	TALLOC_CTX *out_mem_ctx;
604	NTSTATUS (*dispatch_recv)(struct tevent_req *req, TALLOC_CTX *mem_ctx);
605};
606
607static void rpccli_svcctl_QueryServiceObjectSecurity_done(struct tevent_req *subreq);
608
609struct tevent_req *rpccli_svcctl_QueryServiceObjectSecurity_send(TALLOC_CTX *mem_ctx,
610								 struct tevent_context *ev,
611								 struct rpc_pipe_client *cli,
612								 struct policy_handle *_handle /* [in] [ref] */,
613								 uint32_t _security_flags /* [in]  */,
614								 uint8_t *_buffer /* [out] [ref,size_is(offered)] */,
615								 uint32_t _offered /* [in] [range(0,0x40000)] */,
616								 uint32_t *_needed /* [out] [ref,range(0,0x40000)] */)
617{
618	struct tevent_req *req;
619	struct rpccli_svcctl_QueryServiceObjectSecurity_state *state;
620	struct tevent_req *subreq;
621
622	req = tevent_req_create(mem_ctx, &state,
623				struct rpccli_svcctl_QueryServiceObjectSecurity_state);
624	if (req == NULL) {
625		return NULL;
626	}
627	state->out_mem_ctx = NULL;
628	state->dispatch_recv = cli->dispatch_recv;
629
630	/* In parameters */
631	state->orig.in.handle = _handle;
632	state->orig.in.security_flags = _security_flags;
633	state->orig.in.offered = _offered;
634
635	/* Out parameters */
636	state->orig.out.buffer = _buffer;
637	state->orig.out.needed = _needed;
638
639	/* Result */
640	ZERO_STRUCT(state->orig.out.result);
641
642	state->out_mem_ctx = talloc_named_const(state, 0,
643			     "rpccli_svcctl_QueryServiceObjectSecurity_out_memory");
644	if (tevent_req_nomem(state->out_mem_ctx, req)) {
645		return tevent_req_post(req, ev);
646	}
647
648	/* make a temporary copy, that we pass to the dispatch function */
649	state->tmp = state->orig;
650
651	subreq = cli->dispatch_send(state, ev, cli,
652				    &ndr_table_svcctl,
653				    NDR_SVCCTL_QUERYSERVICEOBJECTSECURITY,
654				    &state->tmp);
655	if (tevent_req_nomem(subreq, req)) {
656		return tevent_req_post(req, ev);
657	}
658	tevent_req_set_callback(subreq, rpccli_svcctl_QueryServiceObjectSecurity_done, req);
659	return req;
660}
661
662static void rpccli_svcctl_QueryServiceObjectSecurity_done(struct tevent_req *subreq)
663{
664	struct tevent_req *req = tevent_req_callback_data(
665		subreq, struct tevent_req);
666	struct rpccli_svcctl_QueryServiceObjectSecurity_state *state = tevent_req_data(
667		req, struct rpccli_svcctl_QueryServiceObjectSecurity_state);
668	NTSTATUS status;
669	TALLOC_CTX *mem_ctx;
670
671	if (state->out_mem_ctx) {
672		mem_ctx = state->out_mem_ctx;
673	} else {
674		mem_ctx = state;
675	}
676
677	status = state->dispatch_recv(subreq, mem_ctx);
678	TALLOC_FREE(subreq);
679	if (!NT_STATUS_IS_OK(status)) {
680		tevent_req_nterror(req, status);
681		return;
682	}
683
684	/* Copy out parameters */
685	memcpy(state->orig.out.buffer, state->tmp.out.buffer, (state->tmp.in.offered) * sizeof(*state->orig.out.buffer));
686	*state->orig.out.needed = *state->tmp.out.needed;
687
688	/* Copy result */
689	state->orig.out.result = state->tmp.out.result;
690
691	/* Reset temporary structure */
692	ZERO_STRUCT(state->tmp);
693
694	tevent_req_done(req);
695}
696
697NTSTATUS rpccli_svcctl_QueryServiceObjectSecurity_recv(struct tevent_req *req,
698						       TALLOC_CTX *mem_ctx,
699						       WERROR *result)
700{
701	struct rpccli_svcctl_QueryServiceObjectSecurity_state *state = tevent_req_data(
702		req, struct rpccli_svcctl_QueryServiceObjectSecurity_state);
703	NTSTATUS status;
704
705	if (tevent_req_is_nterror(req, &status)) {
706		tevent_req_received(req);
707		return status;
708	}
709
710	/* Steal possbile out parameters to the callers context */
711	talloc_steal(mem_ctx, state->out_mem_ctx);
712
713	/* Return result */
714	*result = state->orig.out.result;
715
716	tevent_req_received(req);
717	return NT_STATUS_OK;
718}
719
720NTSTATUS rpccli_svcctl_QueryServiceObjectSecurity(struct rpc_pipe_client *cli,
721						  TALLOC_CTX *mem_ctx,
722						  struct policy_handle *handle /* [in] [ref] */,
723						  uint32_t security_flags /* [in]  */,
724						  uint8_t *buffer /* [out] [ref,size_is(offered)] */,
725						  uint32_t offered /* [in] [range(0,0x40000)] */,
726						  uint32_t *needed /* [out] [ref,range(0,0x40000)] */,
727						  WERROR *werror)
728{
729	struct svcctl_QueryServiceObjectSecurity r;
730	NTSTATUS status;
731
732	/* In parameters */
733	r.in.handle = handle;
734	r.in.security_flags = security_flags;
735	r.in.offered = offered;
736
737	status = cli->dispatch(cli,
738				mem_ctx,
739				&ndr_table_svcctl,
740				NDR_SVCCTL_QUERYSERVICEOBJECTSECURITY,
741				&r);
742
743	if (!NT_STATUS_IS_OK(status)) {
744		return status;
745	}
746
747	if (NT_STATUS_IS_ERR(status)) {
748		return status;
749	}
750
751	/* Return variables */
752	memcpy(buffer, r.out.buffer, (r.in.offered) * sizeof(*buffer));
753	*needed = *r.out.needed;
754
755	/* Return result */
756	if (werror) {
757		*werror = r.out.result;
758	}
759
760	return werror_to_ntstatus(r.out.result);
761}
762
763struct rpccli_svcctl_SetServiceObjectSecurity_state {
764	struct svcctl_SetServiceObjectSecurity orig;
765	struct svcctl_SetServiceObjectSecurity tmp;
766	TALLOC_CTX *out_mem_ctx;
767	NTSTATUS (*dispatch_recv)(struct tevent_req *req, TALLOC_CTX *mem_ctx);
768};
769
770static void rpccli_svcctl_SetServiceObjectSecurity_done(struct tevent_req *subreq);
771
772struct tevent_req *rpccli_svcctl_SetServiceObjectSecurity_send(TALLOC_CTX *mem_ctx,
773							       struct tevent_context *ev,
774							       struct rpc_pipe_client *cli,
775							       struct policy_handle *_handle /* [in] [ref] */,
776							       uint32_t _security_flags /* [in]  */,
777							       uint8_t *_buffer /* [in] [ref,size_is(offered)] */,
778							       uint32_t _offered /* [in]  */)
779{
780	struct tevent_req *req;
781	struct rpccli_svcctl_SetServiceObjectSecurity_state *state;
782	struct tevent_req *subreq;
783
784	req = tevent_req_create(mem_ctx, &state,
785				struct rpccli_svcctl_SetServiceObjectSecurity_state);
786	if (req == NULL) {
787		return NULL;
788	}
789	state->out_mem_ctx = NULL;
790	state->dispatch_recv = cli->dispatch_recv;
791
792	/* In parameters */
793	state->orig.in.handle = _handle;
794	state->orig.in.security_flags = _security_flags;
795	state->orig.in.buffer = _buffer;
796	state->orig.in.offered = _offered;
797
798	/* Out parameters */
799
800	/* Result */
801	ZERO_STRUCT(state->orig.out.result);
802
803	/* make a temporary copy, that we pass to the dispatch function */
804	state->tmp = state->orig;
805
806	subreq = cli->dispatch_send(state, ev, cli,
807				    &ndr_table_svcctl,
808				    NDR_SVCCTL_SETSERVICEOBJECTSECURITY,
809				    &state->tmp);
810	if (tevent_req_nomem(subreq, req)) {
811		return tevent_req_post(req, ev);
812	}
813	tevent_req_set_callback(subreq, rpccli_svcctl_SetServiceObjectSecurity_done, req);
814	return req;
815}
816
817static void rpccli_svcctl_SetServiceObjectSecurity_done(struct tevent_req *subreq)
818{
819	struct tevent_req *req = tevent_req_callback_data(
820		subreq, struct tevent_req);
821	struct rpccli_svcctl_SetServiceObjectSecurity_state *state = tevent_req_data(
822		req, struct rpccli_svcctl_SetServiceObjectSecurity_state);
823	NTSTATUS status;
824	TALLOC_CTX *mem_ctx;
825
826	if (state->out_mem_ctx) {
827		mem_ctx = state->out_mem_ctx;
828	} else {
829		mem_ctx = state;
830	}
831
832	status = state->dispatch_recv(subreq, mem_ctx);
833	TALLOC_FREE(subreq);
834	if (!NT_STATUS_IS_OK(status)) {
835		tevent_req_nterror(req, status);
836		return;
837	}
838
839	/* Copy out parameters */
840
841	/* Copy result */
842	state->orig.out.result = state->tmp.out.result;
843
844	/* Reset temporary structure */
845	ZERO_STRUCT(state->tmp);
846
847	tevent_req_done(req);
848}
849
850NTSTATUS rpccli_svcctl_SetServiceObjectSecurity_recv(struct tevent_req *req,
851						     TALLOC_CTX *mem_ctx,
852						     WERROR *result)
853{
854	struct rpccli_svcctl_SetServiceObjectSecurity_state *state = tevent_req_data(
855		req, struct rpccli_svcctl_SetServiceObjectSecurity_state);
856	NTSTATUS status;
857
858	if (tevent_req_is_nterror(req, &status)) {
859		tevent_req_received(req);
860		return status;
861	}
862
863	/* Steal possbile out parameters to the callers context */
864	talloc_steal(mem_ctx, state->out_mem_ctx);
865
866	/* Return result */
867	*result = state->orig.out.result;
868
869	tevent_req_received(req);
870	return NT_STATUS_OK;
871}
872
873NTSTATUS rpccli_svcctl_SetServiceObjectSecurity(struct rpc_pipe_client *cli,
874						TALLOC_CTX *mem_ctx,
875						struct policy_handle *handle /* [in] [ref] */,
876						uint32_t security_flags /* [in]  */,
877						uint8_t *buffer /* [in] [ref,size_is(offered)] */,
878						uint32_t offered /* [in]  */,
879						WERROR *werror)
880{
881	struct svcctl_SetServiceObjectSecurity r;
882	NTSTATUS status;
883
884	/* In parameters */
885	r.in.handle = handle;
886	r.in.security_flags = security_flags;
887	r.in.buffer = buffer;
888	r.in.offered = offered;
889
890	status = cli->dispatch(cli,
891				mem_ctx,
892				&ndr_table_svcctl,
893				NDR_SVCCTL_SETSERVICEOBJECTSECURITY,
894				&r);
895
896	if (!NT_STATUS_IS_OK(status)) {
897		return status;
898	}
899
900	if (NT_STATUS_IS_ERR(status)) {
901		return status;
902	}
903
904	/* Return variables */
905
906	/* Return result */
907	if (werror) {
908		*werror = r.out.result;
909	}
910
911	return werror_to_ntstatus(r.out.result);
912}
913
914struct rpccli_svcctl_QueryServiceStatus_state {
915	struct svcctl_QueryServiceStatus orig;
916	struct svcctl_QueryServiceStatus tmp;
917	TALLOC_CTX *out_mem_ctx;
918	NTSTATUS (*dispatch_recv)(struct tevent_req *req, TALLOC_CTX *mem_ctx);
919};
920
921static void rpccli_svcctl_QueryServiceStatus_done(struct tevent_req *subreq);
922
923struct tevent_req *rpccli_svcctl_QueryServiceStatus_send(TALLOC_CTX *mem_ctx,
924							 struct tevent_context *ev,
925							 struct rpc_pipe_client *cli,
926							 struct policy_handle *_handle /* [in] [ref] */,
927							 struct SERVICE_STATUS *_service_status /* [out] [ref] */)
928{
929	struct tevent_req *req;
930	struct rpccli_svcctl_QueryServiceStatus_state *state;
931	struct tevent_req *subreq;
932
933	req = tevent_req_create(mem_ctx, &state,
934				struct rpccli_svcctl_QueryServiceStatus_state);
935	if (req == NULL) {
936		return NULL;
937	}
938	state->out_mem_ctx = NULL;
939	state->dispatch_recv = cli->dispatch_recv;
940
941	/* In parameters */
942	state->orig.in.handle = _handle;
943
944	/* Out parameters */
945	state->orig.out.service_status = _service_status;
946
947	/* Result */
948	ZERO_STRUCT(state->orig.out.result);
949
950	state->out_mem_ctx = talloc_named_const(state, 0,
951			     "rpccli_svcctl_QueryServiceStatus_out_memory");
952	if (tevent_req_nomem(state->out_mem_ctx, req)) {
953		return tevent_req_post(req, ev);
954	}
955
956	/* make a temporary copy, that we pass to the dispatch function */
957	state->tmp = state->orig;
958
959	subreq = cli->dispatch_send(state, ev, cli,
960				    &ndr_table_svcctl,
961				    NDR_SVCCTL_QUERYSERVICESTATUS,
962				    &state->tmp);
963	if (tevent_req_nomem(subreq, req)) {
964		return tevent_req_post(req, ev);
965	}
966	tevent_req_set_callback(subreq, rpccli_svcctl_QueryServiceStatus_done, req);
967	return req;
968}
969
970static void rpccli_svcctl_QueryServiceStatus_done(struct tevent_req *subreq)
971{
972	struct tevent_req *req = tevent_req_callback_data(
973		subreq, struct tevent_req);
974	struct rpccli_svcctl_QueryServiceStatus_state *state = tevent_req_data(
975		req, struct rpccli_svcctl_QueryServiceStatus_state);
976	NTSTATUS status;
977	TALLOC_CTX *mem_ctx;
978
979	if (state->out_mem_ctx) {
980		mem_ctx = state->out_mem_ctx;
981	} else {
982		mem_ctx = state;
983	}
984
985	status = state->dispatch_recv(subreq, mem_ctx);
986	TALLOC_FREE(subreq);
987	if (!NT_STATUS_IS_OK(status)) {
988		tevent_req_nterror(req, status);
989		return;
990	}
991
992	/* Copy out parameters */
993	*state->orig.out.service_status = *state->tmp.out.service_status;
994
995	/* Copy result */
996	state->orig.out.result = state->tmp.out.result;
997
998	/* Reset temporary structure */
999	ZERO_STRUCT(state->tmp);
1000
1001	tevent_req_done(req);
1002}
1003
1004NTSTATUS rpccli_svcctl_QueryServiceStatus_recv(struct tevent_req *req,
1005					       TALLOC_CTX *mem_ctx,
1006					       WERROR *result)
1007{
1008	struct rpccli_svcctl_QueryServiceStatus_state *state = tevent_req_data(
1009		req, struct rpccli_svcctl_QueryServiceStatus_state);
1010	NTSTATUS status;
1011
1012	if (tevent_req_is_nterror(req, &status)) {
1013		tevent_req_received(req);
1014		return status;
1015	}
1016
1017	/* Steal possbile out parameters to the callers context */
1018	talloc_steal(mem_ctx, state->out_mem_ctx);
1019
1020	/* Return result */
1021	*result = state->orig.out.result;
1022
1023	tevent_req_received(req);
1024	return NT_STATUS_OK;
1025}
1026
1027NTSTATUS rpccli_svcctl_QueryServiceStatus(struct rpc_pipe_client *cli,
1028					  TALLOC_CTX *mem_ctx,
1029					  struct policy_handle *handle /* [in] [ref] */,
1030					  struct SERVICE_STATUS *service_status /* [out] [ref] */,
1031					  WERROR *werror)
1032{
1033	struct svcctl_QueryServiceStatus r;
1034	NTSTATUS status;
1035
1036	/* In parameters */
1037	r.in.handle = handle;
1038
1039	status = cli->dispatch(cli,
1040				mem_ctx,
1041				&ndr_table_svcctl,
1042				NDR_SVCCTL_QUERYSERVICESTATUS,
1043				&r);
1044
1045	if (!NT_STATUS_IS_OK(status)) {
1046		return status;
1047	}
1048
1049	if (NT_STATUS_IS_ERR(status)) {
1050		return status;
1051	}
1052
1053	/* Return variables */
1054	*service_status = *r.out.service_status;
1055
1056	/* Return result */
1057	if (werror) {
1058		*werror = r.out.result;
1059	}
1060
1061	return werror_to_ntstatus(r.out.result);
1062}
1063
1064struct rpccli_svcctl_SetServiceStatus_state {
1065	struct svcctl_SetServiceStatus orig;
1066	struct svcctl_SetServiceStatus tmp;
1067	TALLOC_CTX *out_mem_ctx;
1068	NTSTATUS (*dispatch_recv)(struct tevent_req *req, TALLOC_CTX *mem_ctx);
1069};
1070
1071static void rpccli_svcctl_SetServiceStatus_done(struct tevent_req *subreq);
1072
1073struct tevent_req *rpccli_svcctl_SetServiceStatus_send(TALLOC_CTX *mem_ctx,
1074						       struct tevent_context *ev,
1075						       struct rpc_pipe_client *cli)
1076{
1077	struct tevent_req *req;
1078	struct rpccli_svcctl_SetServiceStatus_state *state;
1079	struct tevent_req *subreq;
1080
1081	req = tevent_req_create(mem_ctx, &state,
1082				struct rpccli_svcctl_SetServiceStatus_state);
1083	if (req == NULL) {
1084		return NULL;
1085	}
1086	state->out_mem_ctx = NULL;
1087	state->dispatch_recv = cli->dispatch_recv;
1088
1089	/* In parameters */
1090
1091	/* Out parameters */
1092
1093	/* Result */
1094	ZERO_STRUCT(state->orig.out.result);
1095
1096	/* make a temporary copy, that we pass to the dispatch function */
1097	state->tmp = state->orig;
1098
1099	subreq = cli->dispatch_send(state, ev, cli,
1100				    &ndr_table_svcctl,
1101				    NDR_SVCCTL_SETSERVICESTATUS,
1102				    &state->tmp);
1103	if (tevent_req_nomem(subreq, req)) {
1104		return tevent_req_post(req, ev);
1105	}
1106	tevent_req_set_callback(subreq, rpccli_svcctl_SetServiceStatus_done, req);
1107	return req;
1108}
1109
1110static void rpccli_svcctl_SetServiceStatus_done(struct tevent_req *subreq)
1111{
1112	struct tevent_req *req = tevent_req_callback_data(
1113		subreq, struct tevent_req);
1114	struct rpccli_svcctl_SetServiceStatus_state *state = tevent_req_data(
1115		req, struct rpccli_svcctl_SetServiceStatus_state);
1116	NTSTATUS status;
1117	TALLOC_CTX *mem_ctx;
1118
1119	if (state->out_mem_ctx) {
1120		mem_ctx = state->out_mem_ctx;
1121	} else {
1122		mem_ctx = state;
1123	}
1124
1125	status = state->dispatch_recv(subreq, mem_ctx);
1126	TALLOC_FREE(subreq);
1127	if (!NT_STATUS_IS_OK(status)) {
1128		tevent_req_nterror(req, status);
1129		return;
1130	}
1131
1132	/* Copy out parameters */
1133
1134	/* Copy result */
1135	state->orig.out.result = state->tmp.out.result;
1136
1137	/* Reset temporary structure */
1138	ZERO_STRUCT(state->tmp);
1139
1140	tevent_req_done(req);
1141}
1142
1143NTSTATUS rpccli_svcctl_SetServiceStatus_recv(struct tevent_req *req,
1144					     TALLOC_CTX *mem_ctx,
1145					     WERROR *result)
1146{
1147	struct rpccli_svcctl_SetServiceStatus_state *state = tevent_req_data(
1148		req, struct rpccli_svcctl_SetServiceStatus_state);
1149	NTSTATUS status;
1150
1151	if (tevent_req_is_nterror(req, &status)) {
1152		tevent_req_received(req);
1153		return status;
1154	}
1155
1156	/* Steal possbile out parameters to the callers context */
1157	talloc_steal(mem_ctx, state->out_mem_ctx);
1158
1159	/* Return result */
1160	*result = state->orig.out.result;
1161
1162	tevent_req_received(req);
1163	return NT_STATUS_OK;
1164}
1165
1166NTSTATUS rpccli_svcctl_SetServiceStatus(struct rpc_pipe_client *cli,
1167					TALLOC_CTX *mem_ctx,
1168					WERROR *werror)
1169{
1170	struct svcctl_SetServiceStatus r;
1171	NTSTATUS status;
1172
1173	/* In parameters */
1174
1175	status = cli->dispatch(cli,
1176				mem_ctx,
1177				&ndr_table_svcctl,
1178				NDR_SVCCTL_SETSERVICESTATUS,
1179				&r);
1180
1181	if (!NT_STATUS_IS_OK(status)) {
1182		return status;
1183	}
1184
1185	if (NT_STATUS_IS_ERR(status)) {
1186		return status;
1187	}
1188
1189	/* Return variables */
1190
1191	/* Return result */
1192	if (werror) {
1193		*werror = r.out.result;
1194	}
1195
1196	return werror_to_ntstatus(r.out.result);
1197}
1198
1199struct rpccli_svcctl_UnlockServiceDatabase_state {
1200	struct svcctl_UnlockServiceDatabase orig;
1201	struct svcctl_UnlockServiceDatabase tmp;
1202	TALLOC_CTX *out_mem_ctx;
1203	NTSTATUS (*dispatch_recv)(struct tevent_req *req, TALLOC_CTX *mem_ctx);
1204};
1205
1206static void rpccli_svcctl_UnlockServiceDatabase_done(struct tevent_req *subreq);
1207
1208struct tevent_req *rpccli_svcctl_UnlockServiceDatabase_send(TALLOC_CTX *mem_ctx,
1209							    struct tevent_context *ev,
1210							    struct rpc_pipe_client *cli,
1211							    struct policy_handle *_lock /* [in,out] [ref] */)
1212{
1213	struct tevent_req *req;
1214	struct rpccli_svcctl_UnlockServiceDatabase_state *state;
1215	struct tevent_req *subreq;
1216
1217	req = tevent_req_create(mem_ctx, &state,
1218				struct rpccli_svcctl_UnlockServiceDatabase_state);
1219	if (req == NULL) {
1220		return NULL;
1221	}
1222	state->out_mem_ctx = NULL;
1223	state->dispatch_recv = cli->dispatch_recv;
1224
1225	/* In parameters */
1226	state->orig.in.lock = _lock;
1227
1228	/* Out parameters */
1229	state->orig.out.lock = _lock;
1230
1231	/* Result */
1232	ZERO_STRUCT(state->orig.out.result);
1233
1234	state->out_mem_ctx = talloc_named_const(state, 0,
1235			     "rpccli_svcctl_UnlockServiceDatabase_out_memory");
1236	if (tevent_req_nomem(state->out_mem_ctx, req)) {
1237		return tevent_req_post(req, ev);
1238	}
1239
1240	/* make a temporary copy, that we pass to the dispatch function */
1241	state->tmp = state->orig;
1242
1243	subreq = cli->dispatch_send(state, ev, cli,
1244				    &ndr_table_svcctl,
1245				    NDR_SVCCTL_UNLOCKSERVICEDATABASE,
1246				    &state->tmp);
1247	if (tevent_req_nomem(subreq, req)) {
1248		return tevent_req_post(req, ev);
1249	}
1250	tevent_req_set_callback(subreq, rpccli_svcctl_UnlockServiceDatabase_done, req);
1251	return req;
1252}
1253
1254static void rpccli_svcctl_UnlockServiceDatabase_done(struct tevent_req *subreq)
1255{
1256	struct tevent_req *req = tevent_req_callback_data(
1257		subreq, struct tevent_req);
1258	struct rpccli_svcctl_UnlockServiceDatabase_state *state = tevent_req_data(
1259		req, struct rpccli_svcctl_UnlockServiceDatabase_state);
1260	NTSTATUS status;
1261	TALLOC_CTX *mem_ctx;
1262
1263	if (state->out_mem_ctx) {
1264		mem_ctx = state->out_mem_ctx;
1265	} else {
1266		mem_ctx = state;
1267	}
1268
1269	status = state->dispatch_recv(subreq, mem_ctx);
1270	TALLOC_FREE(subreq);
1271	if (!NT_STATUS_IS_OK(status)) {
1272		tevent_req_nterror(req, status);
1273		return;
1274	}
1275
1276	/* Copy out parameters */
1277	*state->orig.out.lock = *state->tmp.out.lock;
1278
1279	/* Copy result */
1280	state->orig.out.result = state->tmp.out.result;
1281
1282	/* Reset temporary structure */
1283	ZERO_STRUCT(state->tmp);
1284
1285	tevent_req_done(req);
1286}
1287
1288NTSTATUS rpccli_svcctl_UnlockServiceDatabase_recv(struct tevent_req *req,
1289						  TALLOC_CTX *mem_ctx,
1290						  WERROR *result)
1291{
1292	struct rpccli_svcctl_UnlockServiceDatabase_state *state = tevent_req_data(
1293		req, struct rpccli_svcctl_UnlockServiceDatabase_state);
1294	NTSTATUS status;
1295
1296	if (tevent_req_is_nterror(req, &status)) {
1297		tevent_req_received(req);
1298		return status;
1299	}
1300
1301	/* Steal possbile out parameters to the callers context */
1302	talloc_steal(mem_ctx, state->out_mem_ctx);
1303
1304	/* Return result */
1305	*result = state->orig.out.result;
1306
1307	tevent_req_received(req);
1308	return NT_STATUS_OK;
1309}
1310
1311NTSTATUS rpccli_svcctl_UnlockServiceDatabase(struct rpc_pipe_client *cli,
1312					     TALLOC_CTX *mem_ctx,
1313					     struct policy_handle *lock /* [in,out] [ref] */,
1314					     WERROR *werror)
1315{
1316	struct svcctl_UnlockServiceDatabase r;
1317	NTSTATUS status;
1318
1319	/* In parameters */
1320	r.in.lock = lock;
1321
1322	status = cli->dispatch(cli,
1323				mem_ctx,
1324				&ndr_table_svcctl,
1325				NDR_SVCCTL_UNLOCKSERVICEDATABASE,
1326				&r);
1327
1328	if (!NT_STATUS_IS_OK(status)) {
1329		return status;
1330	}
1331
1332	if (NT_STATUS_IS_ERR(status)) {
1333		return status;
1334	}
1335
1336	/* Return variables */
1337	*lock = *r.out.lock;
1338
1339	/* Return result */
1340	if (werror) {
1341		*werror = r.out.result;
1342	}
1343
1344	return werror_to_ntstatus(r.out.result);
1345}
1346
1347struct rpccli_svcctl_NotifyBootConfigStatus_state {
1348	struct svcctl_NotifyBootConfigStatus orig;
1349	struct svcctl_NotifyBootConfigStatus tmp;
1350	TALLOC_CTX *out_mem_ctx;
1351	NTSTATUS (*dispatch_recv)(struct tevent_req *req, TALLOC_CTX *mem_ctx);
1352};
1353
1354static void rpccli_svcctl_NotifyBootConfigStatus_done(struct tevent_req *subreq);
1355
1356struct tevent_req *rpccli_svcctl_NotifyBootConfigStatus_send(TALLOC_CTX *mem_ctx,
1357							     struct tevent_context *ev,
1358							     struct rpc_pipe_client *cli)
1359{
1360	struct tevent_req *req;
1361	struct rpccli_svcctl_NotifyBootConfigStatus_state *state;
1362	struct tevent_req *subreq;
1363
1364	req = tevent_req_create(mem_ctx, &state,
1365				struct rpccli_svcctl_NotifyBootConfigStatus_state);
1366	if (req == NULL) {
1367		return NULL;
1368	}
1369	state->out_mem_ctx = NULL;
1370	state->dispatch_recv = cli->dispatch_recv;
1371
1372	/* In parameters */
1373
1374	/* Out parameters */
1375
1376	/* Result */
1377	ZERO_STRUCT(state->orig.out.result);
1378
1379	/* make a temporary copy, that we pass to the dispatch function */
1380	state->tmp = state->orig;
1381
1382	subreq = cli->dispatch_send(state, ev, cli,
1383				    &ndr_table_svcctl,
1384				    NDR_SVCCTL_NOTIFYBOOTCONFIGSTATUS,
1385				    &state->tmp);
1386	if (tevent_req_nomem(subreq, req)) {
1387		return tevent_req_post(req, ev);
1388	}
1389	tevent_req_set_callback(subreq, rpccli_svcctl_NotifyBootConfigStatus_done, req);
1390	return req;
1391}
1392
1393static void rpccli_svcctl_NotifyBootConfigStatus_done(struct tevent_req *subreq)
1394{
1395	struct tevent_req *req = tevent_req_callback_data(
1396		subreq, struct tevent_req);
1397	struct rpccli_svcctl_NotifyBootConfigStatus_state *state = tevent_req_data(
1398		req, struct rpccli_svcctl_NotifyBootConfigStatus_state);
1399	NTSTATUS status;
1400	TALLOC_CTX *mem_ctx;
1401
1402	if (state->out_mem_ctx) {
1403		mem_ctx = state->out_mem_ctx;
1404	} else {
1405		mem_ctx = state;
1406	}
1407
1408	status = state->dispatch_recv(subreq, mem_ctx);
1409	TALLOC_FREE(subreq);
1410	if (!NT_STATUS_IS_OK(status)) {
1411		tevent_req_nterror(req, status);
1412		return;
1413	}
1414
1415	/* Copy out parameters */
1416
1417	/* Copy result */
1418	state->orig.out.result = state->tmp.out.result;
1419
1420	/* Reset temporary structure */
1421	ZERO_STRUCT(state->tmp);
1422
1423	tevent_req_done(req);
1424}
1425
1426NTSTATUS rpccli_svcctl_NotifyBootConfigStatus_recv(struct tevent_req *req,
1427						   TALLOC_CTX *mem_ctx,
1428						   WERROR *result)
1429{
1430	struct rpccli_svcctl_NotifyBootConfigStatus_state *state = tevent_req_data(
1431		req, struct rpccli_svcctl_NotifyBootConfigStatus_state);
1432	NTSTATUS status;
1433
1434	if (tevent_req_is_nterror(req, &status)) {
1435		tevent_req_received(req);
1436		return status;
1437	}
1438
1439	/* Steal possbile out parameters to the callers context */
1440	talloc_steal(mem_ctx, state->out_mem_ctx);
1441
1442	/* Return result */
1443	*result = state->orig.out.result;
1444
1445	tevent_req_received(req);
1446	return NT_STATUS_OK;
1447}
1448
1449NTSTATUS rpccli_svcctl_NotifyBootConfigStatus(struct rpc_pipe_client *cli,
1450					      TALLOC_CTX *mem_ctx,
1451					      WERROR *werror)
1452{
1453	struct svcctl_NotifyBootConfigStatus r;
1454	NTSTATUS status;
1455
1456	/* In parameters */
1457
1458	status = cli->dispatch(cli,
1459				mem_ctx,
1460				&ndr_table_svcctl,
1461				NDR_SVCCTL_NOTIFYBOOTCONFIGSTATUS,
1462				&r);
1463
1464	if (!NT_STATUS_IS_OK(status)) {
1465		return status;
1466	}
1467
1468	if (NT_STATUS_IS_ERR(status)) {
1469		return status;
1470	}
1471
1472	/* Return variables */
1473
1474	/* Return result */
1475	if (werror) {
1476		*werror = r.out.result;
1477	}
1478
1479	return werror_to_ntstatus(r.out.result);
1480}
1481
1482struct rpccli_svcctl_SCSetServiceBitsW_state {
1483	struct svcctl_SCSetServiceBitsW orig;
1484	struct svcctl_SCSetServiceBitsW tmp;
1485	TALLOC_CTX *out_mem_ctx;
1486	NTSTATUS (*dispatch_recv)(struct tevent_req *req, TALLOC_CTX *mem_ctx);
1487};
1488
1489static void rpccli_svcctl_SCSetServiceBitsW_done(struct tevent_req *subreq);
1490
1491struct tevent_req *rpccli_svcctl_SCSetServiceBitsW_send(TALLOC_CTX *mem_ctx,
1492							struct tevent_context *ev,
1493							struct rpc_pipe_client *cli,
1494							struct policy_handle *_handle /* [in] [ref] */,
1495							uint32_t _bits /* [in]  */,
1496							uint32_t _bitson /* [in]  */,
1497							uint32_t _immediate /* [in]  */)
1498{
1499	struct tevent_req *req;
1500	struct rpccli_svcctl_SCSetServiceBitsW_state *state;
1501	struct tevent_req *subreq;
1502
1503	req = tevent_req_create(mem_ctx, &state,
1504				struct rpccli_svcctl_SCSetServiceBitsW_state);
1505	if (req == NULL) {
1506		return NULL;
1507	}
1508	state->out_mem_ctx = NULL;
1509	state->dispatch_recv = cli->dispatch_recv;
1510
1511	/* In parameters */
1512	state->orig.in.handle = _handle;
1513	state->orig.in.bits = _bits;
1514	state->orig.in.bitson = _bitson;
1515	state->orig.in.immediate = _immediate;
1516
1517	/* Out parameters */
1518
1519	/* Result */
1520	ZERO_STRUCT(state->orig.out.result);
1521
1522	/* make a temporary copy, that we pass to the dispatch function */
1523	state->tmp = state->orig;
1524
1525	subreq = cli->dispatch_send(state, ev, cli,
1526				    &ndr_table_svcctl,
1527				    NDR_SVCCTL_SCSETSERVICEBITSW,
1528				    &state->tmp);
1529	if (tevent_req_nomem(subreq, req)) {
1530		return tevent_req_post(req, ev);
1531	}
1532	tevent_req_set_callback(subreq, rpccli_svcctl_SCSetServiceBitsW_done, req);
1533	return req;
1534}
1535
1536static void rpccli_svcctl_SCSetServiceBitsW_done(struct tevent_req *subreq)
1537{
1538	struct tevent_req *req = tevent_req_callback_data(
1539		subreq, struct tevent_req);
1540	struct rpccli_svcctl_SCSetServiceBitsW_state *state = tevent_req_data(
1541		req, struct rpccli_svcctl_SCSetServiceBitsW_state);
1542	NTSTATUS status;
1543	TALLOC_CTX *mem_ctx;
1544
1545	if (state->out_mem_ctx) {
1546		mem_ctx = state->out_mem_ctx;
1547	} else {
1548		mem_ctx = state;
1549	}
1550
1551	status = state->dispatch_recv(subreq, mem_ctx);
1552	TALLOC_FREE(subreq);
1553	if (!NT_STATUS_IS_OK(status)) {
1554		tevent_req_nterror(req, status);
1555		return;
1556	}
1557
1558	/* Copy out parameters */
1559
1560	/* Copy result */
1561	state->orig.out.result = state->tmp.out.result;
1562
1563	/* Reset temporary structure */
1564	ZERO_STRUCT(state->tmp);
1565
1566	tevent_req_done(req);
1567}
1568
1569NTSTATUS rpccli_svcctl_SCSetServiceBitsW_recv(struct tevent_req *req,
1570					      TALLOC_CTX *mem_ctx,
1571					      WERROR *result)
1572{
1573	struct rpccli_svcctl_SCSetServiceBitsW_state *state = tevent_req_data(
1574		req, struct rpccli_svcctl_SCSetServiceBitsW_state);
1575	NTSTATUS status;
1576
1577	if (tevent_req_is_nterror(req, &status)) {
1578		tevent_req_received(req);
1579		return status;
1580	}
1581
1582	/* Steal possbile out parameters to the callers context */
1583	talloc_steal(mem_ctx, state->out_mem_ctx);
1584
1585	/* Return result */
1586	*result = state->orig.out.result;
1587
1588	tevent_req_received(req);
1589	return NT_STATUS_OK;
1590}
1591
1592NTSTATUS rpccli_svcctl_SCSetServiceBitsW(struct rpc_pipe_client *cli,
1593					 TALLOC_CTX *mem_ctx,
1594					 struct policy_handle *handle /* [in] [ref] */,
1595					 uint32_t bits /* [in]  */,
1596					 uint32_t bitson /* [in]  */,
1597					 uint32_t immediate /* [in]  */,
1598					 WERROR *werror)
1599{
1600	struct svcctl_SCSetServiceBitsW r;
1601	NTSTATUS status;
1602
1603	/* In parameters */
1604	r.in.handle = handle;
1605	r.in.bits = bits;
1606	r.in.bitson = bitson;
1607	r.in.immediate = immediate;
1608
1609	status = cli->dispatch(cli,
1610				mem_ctx,
1611				&ndr_table_svcctl,
1612				NDR_SVCCTL_SCSETSERVICEBITSW,
1613				&r);
1614
1615	if (!NT_STATUS_IS_OK(status)) {
1616		return status;
1617	}
1618
1619	if (NT_STATUS_IS_ERR(status)) {
1620		return status;
1621	}
1622
1623	/* Return variables */
1624
1625	/* Return result */
1626	if (werror) {
1627		*werror = r.out.result;
1628	}
1629
1630	return werror_to_ntstatus(r.out.result);
1631}
1632
1633struct rpccli_svcctl_ChangeServiceConfigW_state {
1634	struct svcctl_ChangeServiceConfigW orig;
1635	struct svcctl_ChangeServiceConfigW tmp;
1636	TALLOC_CTX *out_mem_ctx;
1637	NTSTATUS (*dispatch_recv)(struct tevent_req *req, TALLOC_CTX *mem_ctx);
1638};
1639
1640static void rpccli_svcctl_ChangeServiceConfigW_done(struct tevent_req *subreq);
1641
1642struct tevent_req *rpccli_svcctl_ChangeServiceConfigW_send(TALLOC_CTX *mem_ctx,
1643							   struct tevent_context *ev,
1644							   struct rpc_pipe_client *cli,
1645							   struct policy_handle *_handle /* [in] [ref] */,
1646							   uint32_t _type /* [in]  */,
1647							   enum svcctl_StartType _start_type /* [in]  */,
1648							   enum svcctl_ErrorControl _error_control /* [in]  */,
1649							   const char *_binary_path /* [in] [unique,charset(UTF16)] */,
1650							   const char *_load_order_group /* [in] [unique,charset(UTF16)] */,
1651							   uint32_t *_tag_id /* [out] [ref] */,
1652							   const char *_dependencies /* [in] [unique,charset(UTF16)] */,
1653							   const char *_service_start_name /* [in] [unique,charset(UTF16)] */,
1654							   const char *_password /* [in] [unique,charset(UTF16)] */,
1655							   const char *_display_name /* [in] [unique,charset(UTF16)] */)
1656{
1657	struct tevent_req *req;
1658	struct rpccli_svcctl_ChangeServiceConfigW_state *state;
1659	struct tevent_req *subreq;
1660
1661	req = tevent_req_create(mem_ctx, &state,
1662				struct rpccli_svcctl_ChangeServiceConfigW_state);
1663	if (req == NULL) {
1664		return NULL;
1665	}
1666	state->out_mem_ctx = NULL;
1667	state->dispatch_recv = cli->dispatch_recv;
1668
1669	/* In parameters */
1670	state->orig.in.handle = _handle;
1671	state->orig.in.type = _type;
1672	state->orig.in.start_type = _start_type;
1673	state->orig.in.error_control = _error_control;
1674	state->orig.in.binary_path = _binary_path;
1675	state->orig.in.load_order_group = _load_order_group;
1676	state->orig.in.dependencies = _dependencies;
1677	state->orig.in.service_start_name = _service_start_name;
1678	state->orig.in.password = _password;
1679	state->orig.in.display_name = _display_name;
1680
1681	/* Out parameters */
1682	state->orig.out.tag_id = _tag_id;
1683
1684	/* Result */
1685	ZERO_STRUCT(state->orig.out.result);
1686
1687	state->out_mem_ctx = talloc_named_const(state, 0,
1688			     "rpccli_svcctl_ChangeServiceConfigW_out_memory");
1689	if (tevent_req_nomem(state->out_mem_ctx, req)) {
1690		return tevent_req_post(req, ev);
1691	}
1692
1693	/* make a temporary copy, that we pass to the dispatch function */
1694	state->tmp = state->orig;
1695
1696	subreq = cli->dispatch_send(state, ev, cli,
1697				    &ndr_table_svcctl,
1698				    NDR_SVCCTL_CHANGESERVICECONFIGW,
1699				    &state->tmp);
1700	if (tevent_req_nomem(subreq, req)) {
1701		return tevent_req_post(req, ev);
1702	}
1703	tevent_req_set_callback(subreq, rpccli_svcctl_ChangeServiceConfigW_done, req);
1704	return req;
1705}
1706
1707static void rpccli_svcctl_ChangeServiceConfigW_done(struct tevent_req *subreq)
1708{
1709	struct tevent_req *req = tevent_req_callback_data(
1710		subreq, struct tevent_req);
1711	struct rpccli_svcctl_ChangeServiceConfigW_state *state = tevent_req_data(
1712		req, struct rpccli_svcctl_ChangeServiceConfigW_state);
1713	NTSTATUS status;
1714	TALLOC_CTX *mem_ctx;
1715
1716	if (state->out_mem_ctx) {
1717		mem_ctx = state->out_mem_ctx;
1718	} else {
1719		mem_ctx = state;
1720	}
1721
1722	status = state->dispatch_recv(subreq, mem_ctx);
1723	TALLOC_FREE(subreq);
1724	if (!NT_STATUS_IS_OK(status)) {
1725		tevent_req_nterror(req, status);
1726		return;
1727	}
1728
1729	/* Copy out parameters */
1730	*state->orig.out.tag_id = *state->tmp.out.tag_id;
1731
1732	/* Copy result */
1733	state->orig.out.result = state->tmp.out.result;
1734
1735	/* Reset temporary structure */
1736	ZERO_STRUCT(state->tmp);
1737
1738	tevent_req_done(req);
1739}
1740
1741NTSTATUS rpccli_svcctl_ChangeServiceConfigW_recv(struct tevent_req *req,
1742						 TALLOC_CTX *mem_ctx,
1743						 WERROR *result)
1744{
1745	struct rpccli_svcctl_ChangeServiceConfigW_state *state = tevent_req_data(
1746		req, struct rpccli_svcctl_ChangeServiceConfigW_state);
1747	NTSTATUS status;
1748
1749	if (tevent_req_is_nterror(req, &status)) {
1750		tevent_req_received(req);
1751		return status;
1752	}
1753
1754	/* Steal possbile out parameters to the callers context */
1755	talloc_steal(mem_ctx, state->out_mem_ctx);
1756
1757	/* Return result */
1758	*result = state->orig.out.result;
1759
1760	tevent_req_received(req);
1761	return NT_STATUS_OK;
1762}
1763
1764NTSTATUS rpccli_svcctl_ChangeServiceConfigW(struct rpc_pipe_client *cli,
1765					    TALLOC_CTX *mem_ctx,
1766					    struct policy_handle *handle /* [in] [ref] */,
1767					    uint32_t type /* [in]  */,
1768					    enum svcctl_StartType start_type /* [in]  */,
1769					    enum svcctl_ErrorControl error_control /* [in]  */,
1770					    const char *binary_path /* [in] [unique,charset(UTF16)] */,
1771					    const char *load_order_group /* [in] [unique,charset(UTF16)] */,
1772					    uint32_t *tag_id /* [out] [ref] */,
1773					    const char *dependencies /* [in] [unique,charset(UTF16)] */,
1774					    const char *service_start_name /* [in] [unique,charset(UTF16)] */,
1775					    const char *password /* [in] [unique,charset(UTF16)] */,
1776					    const char *display_name /* [in] [unique,charset(UTF16)] */,
1777					    WERROR *werror)
1778{
1779	struct svcctl_ChangeServiceConfigW r;
1780	NTSTATUS status;
1781
1782	/* In parameters */
1783	r.in.handle = handle;
1784	r.in.type = type;
1785	r.in.start_type = start_type;
1786	r.in.error_control = error_control;
1787	r.in.binary_path = binary_path;
1788	r.in.load_order_group = load_order_group;
1789	r.in.dependencies = dependencies;
1790	r.in.service_start_name = service_start_name;
1791	r.in.password = password;
1792	r.in.display_name = display_name;
1793
1794	status = cli->dispatch(cli,
1795				mem_ctx,
1796				&ndr_table_svcctl,
1797				NDR_SVCCTL_CHANGESERVICECONFIGW,
1798				&r);
1799
1800	if (!NT_STATUS_IS_OK(status)) {
1801		return status;
1802	}
1803
1804	if (NT_STATUS_IS_ERR(status)) {
1805		return status;
1806	}
1807
1808	/* Return variables */
1809	*tag_id = *r.out.tag_id;
1810
1811	/* Return result */
1812	if (werror) {
1813		*werror = r.out.result;
1814	}
1815
1816	return werror_to_ntstatus(r.out.result);
1817}
1818
1819struct rpccli_svcctl_CreateServiceW_state {
1820	struct svcctl_CreateServiceW orig;
1821	struct svcctl_CreateServiceW tmp;
1822	TALLOC_CTX *out_mem_ctx;
1823	NTSTATUS (*dispatch_recv)(struct tevent_req *req, TALLOC_CTX *mem_ctx);
1824};
1825
1826static void rpccli_svcctl_CreateServiceW_done(struct tevent_req *subreq);
1827
1828struct tevent_req *rpccli_svcctl_CreateServiceW_send(TALLOC_CTX *mem_ctx,
1829						     struct tevent_context *ev,
1830						     struct rpc_pipe_client *cli,
1831						     struct policy_handle *_scmanager_handle /* [in] [ref] */,
1832						     const char *_ServiceName /* [in] [charset(UTF16)] */,
1833						     const char *_DisplayName /* [in] [unique,charset(UTF16)] */,
1834						     uint32_t _desired_access /* [in]  */,
1835						     uint32_t _type /* [in]  */,
1836						     enum svcctl_StartType _start_type /* [in]  */,
1837						     enum svcctl_ErrorControl _error_control /* [in]  */,
1838						     const char *_binary_path /* [in] [charset(UTF16)] */,
1839						     const char *_LoadOrderGroupKey /* [in] [unique,charset(UTF16)] */,
1840						     uint32_t *_TagId /* [in,out] [unique] */,
1841						     uint8_t *_dependencies /* [in] [unique,size_is(dependencies_size)] */,
1842						     uint32_t _dependencies_size /* [in]  */,
1843						     const char *_service_start_name /* [in] [unique,charset(UTF16)] */,
1844						     uint8_t *_password /* [in] [unique,size_is(password_size)] */,
1845						     uint32_t _password_size /* [in]  */,
1846						     struct policy_handle *_handle /* [out] [ref] */)
1847{
1848	struct tevent_req *req;
1849	struct rpccli_svcctl_CreateServiceW_state *state;
1850	struct tevent_req *subreq;
1851
1852	req = tevent_req_create(mem_ctx, &state,
1853				struct rpccli_svcctl_CreateServiceW_state);
1854	if (req == NULL) {
1855		return NULL;
1856	}
1857	state->out_mem_ctx = NULL;
1858	state->dispatch_recv = cli->dispatch_recv;
1859
1860	/* In parameters */
1861	state->orig.in.scmanager_handle = _scmanager_handle;
1862	state->orig.in.ServiceName = _ServiceName;
1863	state->orig.in.DisplayName = _DisplayName;
1864	state->orig.in.desired_access = _desired_access;
1865	state->orig.in.type = _type;
1866	state->orig.in.start_type = _start_type;
1867	state->orig.in.error_control = _error_control;
1868	state->orig.in.binary_path = _binary_path;
1869	state->orig.in.LoadOrderGroupKey = _LoadOrderGroupKey;
1870	state->orig.in.TagId = _TagId;
1871	state->orig.in.dependencies = _dependencies;
1872	state->orig.in.dependencies_size = _dependencies_size;
1873	state->orig.in.service_start_name = _service_start_name;
1874	state->orig.in.password = _password;
1875	state->orig.in.password_size = _password_size;
1876
1877	/* Out parameters */
1878	state->orig.out.TagId = _TagId;
1879	state->orig.out.handle = _handle;
1880
1881	/* Result */
1882	ZERO_STRUCT(state->orig.out.result);
1883
1884	state->out_mem_ctx = talloc_named_const(state, 0,
1885			     "rpccli_svcctl_CreateServiceW_out_memory");
1886	if (tevent_req_nomem(state->out_mem_ctx, req)) {
1887		return tevent_req_post(req, ev);
1888	}
1889
1890	/* make a temporary copy, that we pass to the dispatch function */
1891	state->tmp = state->orig;
1892
1893	subreq = cli->dispatch_send(state, ev, cli,
1894				    &ndr_table_svcctl,
1895				    NDR_SVCCTL_CREATESERVICEW,
1896				    &state->tmp);
1897	if (tevent_req_nomem(subreq, req)) {
1898		return tevent_req_post(req, ev);
1899	}
1900	tevent_req_set_callback(subreq, rpccli_svcctl_CreateServiceW_done, req);
1901	return req;
1902}
1903
1904static void rpccli_svcctl_CreateServiceW_done(struct tevent_req *subreq)
1905{
1906	struct tevent_req *req = tevent_req_callback_data(
1907		subreq, struct tevent_req);
1908	struct rpccli_svcctl_CreateServiceW_state *state = tevent_req_data(
1909		req, struct rpccli_svcctl_CreateServiceW_state);
1910	NTSTATUS status;
1911	TALLOC_CTX *mem_ctx;
1912
1913	if (state->out_mem_ctx) {
1914		mem_ctx = state->out_mem_ctx;
1915	} else {
1916		mem_ctx = state;
1917	}
1918
1919	status = state->dispatch_recv(subreq, mem_ctx);
1920	TALLOC_FREE(subreq);
1921	if (!NT_STATUS_IS_OK(status)) {
1922		tevent_req_nterror(req, status);
1923		return;
1924	}
1925
1926	/* Copy out parameters */
1927	if (state->orig.out.TagId && state->tmp.out.TagId) {
1928		*state->orig.out.TagId = *state->tmp.out.TagId;
1929	}
1930	*state->orig.out.handle = *state->tmp.out.handle;
1931
1932	/* Copy result */
1933	state->orig.out.result = state->tmp.out.result;
1934
1935	/* Reset temporary structure */
1936	ZERO_STRUCT(state->tmp);
1937
1938	tevent_req_done(req);
1939}
1940
1941NTSTATUS rpccli_svcctl_CreateServiceW_recv(struct tevent_req *req,
1942					   TALLOC_CTX *mem_ctx,
1943					   WERROR *result)
1944{
1945	struct rpccli_svcctl_CreateServiceW_state *state = tevent_req_data(
1946		req, struct rpccli_svcctl_CreateServiceW_state);
1947	NTSTATUS status;
1948
1949	if (tevent_req_is_nterror(req, &status)) {
1950		tevent_req_received(req);
1951		return status;
1952	}
1953
1954	/* Steal possbile out parameters to the callers context */
1955	talloc_steal(mem_ctx, state->out_mem_ctx);
1956
1957	/* Return result */
1958	*result = state->orig.out.result;
1959
1960	tevent_req_received(req);
1961	return NT_STATUS_OK;
1962}
1963
1964NTSTATUS rpccli_svcctl_CreateServiceW(struct rpc_pipe_client *cli,
1965				      TALLOC_CTX *mem_ctx,
1966				      struct policy_handle *scmanager_handle /* [in] [ref] */,
1967				      const char *ServiceName /* [in] [charset(UTF16)] */,
1968				      const char *DisplayName /* [in] [unique,charset(UTF16)] */,
1969				      uint32_t desired_access /* [in]  */,
1970				      uint32_t type /* [in]  */,
1971				      enum svcctl_StartType start_type /* [in]  */,
1972				      enum svcctl_ErrorControl error_control /* [in]  */,
1973				      const char *binary_path /* [in] [charset(UTF16)] */,
1974				      const char *LoadOrderGroupKey /* [in] [unique,charset(UTF16)] */,
1975				      uint32_t *TagId /* [in,out] [unique] */,
1976				      uint8_t *dependencies /* [in] [unique,size_is(dependencies_size)] */,
1977				      uint32_t dependencies_size /* [in]  */,
1978				      const char *service_start_name /* [in] [unique,charset(UTF16)] */,
1979				      uint8_t *password /* [in] [unique,size_is(password_size)] */,
1980				      uint32_t password_size /* [in]  */,
1981				      struct policy_handle *handle /* [out] [ref] */,
1982				      WERROR *werror)
1983{
1984	struct svcctl_CreateServiceW r;
1985	NTSTATUS status;
1986
1987	/* In parameters */
1988	r.in.scmanager_handle = scmanager_handle;
1989	r.in.ServiceName = ServiceName;
1990	r.in.DisplayName = DisplayName;
1991	r.in.desired_access = desired_access;
1992	r.in.type = type;
1993	r.in.start_type = start_type;
1994	r.in.error_control = error_control;
1995	r.in.binary_path = binary_path;
1996	r.in.LoadOrderGroupKey = LoadOrderGroupKey;
1997	r.in.TagId = TagId;
1998	r.in.dependencies = dependencies;
1999	r.in.dependencies_size = dependencies_size;
2000	r.in.service_start_name = service_start_name;
2001	r.in.password = password;
2002	r.in.password_size = password_size;
2003
2004	status = cli->dispatch(cli,
2005				mem_ctx,
2006				&ndr_table_svcctl,
2007				NDR_SVCCTL_CREATESERVICEW,
2008				&r);
2009
2010	if (!NT_STATUS_IS_OK(status)) {
2011		return status;
2012	}
2013
2014	if (NT_STATUS_IS_ERR(status)) {
2015		return status;
2016	}
2017
2018	/* Return variables */
2019	if (TagId && r.out.TagId) {
2020		*TagId = *r.out.TagId;
2021	}
2022	*handle = *r.out.handle;
2023
2024	/* Return result */
2025	if (werror) {
2026		*werror = r.out.result;
2027	}
2028
2029	return werror_to_ntstatus(r.out.result);
2030}
2031
2032struct rpccli_svcctl_EnumDependentServicesW_state {
2033	struct svcctl_EnumDependentServicesW orig;
2034	struct svcctl_EnumDependentServicesW tmp;
2035	TALLOC_CTX *out_mem_ctx;
2036	NTSTATUS (*dispatch_recv)(struct tevent_req *req, TALLOC_CTX *mem_ctx);
2037};
2038
2039static void rpccli_svcctl_EnumDependentServicesW_done(struct tevent_req *subreq);
2040
2041struct tevent_req *rpccli_svcctl_EnumDependentServicesW_send(TALLOC_CTX *mem_ctx,
2042							     struct tevent_context *ev,
2043							     struct rpc_pipe_client *cli,
2044							     struct policy_handle *_service /* [in] [ref] */,
2045							     enum svcctl_ServiceState _state /* [in]  */,
2046							     uint8_t *_service_status /* [out] [ref,size_is(offered)] */,
2047							     uint32_t _offered /* [in] [range(0,0x40000)] */,
2048							     uint32_t *_needed /* [out] [ref,range(0,0x40000)] */,
2049							     uint32_t *_services_returned /* [out] [ref,range(0,0x40000)] */)
2050{
2051	struct tevent_req *req;
2052	struct rpccli_svcctl_EnumDependentServicesW_state *state;
2053	struct tevent_req *subreq;
2054
2055	req = tevent_req_create(mem_ctx, &state,
2056				struct rpccli_svcctl_EnumDependentServicesW_state);
2057	if (req == NULL) {
2058		return NULL;
2059	}
2060	state->out_mem_ctx = NULL;
2061	state->dispatch_recv = cli->dispatch_recv;
2062
2063	/* In parameters */
2064	state->orig.in.service = _service;
2065	state->orig.in.state = _state;
2066	state->orig.in.offered = _offered;
2067
2068	/* Out parameters */
2069	state->orig.out.service_status = _service_status;
2070	state->orig.out.needed = _needed;
2071	state->orig.out.services_returned = _services_returned;
2072
2073	/* Result */
2074	ZERO_STRUCT(state->orig.out.result);
2075
2076	state->out_mem_ctx = talloc_named_const(state, 0,
2077			     "rpccli_svcctl_EnumDependentServicesW_out_memory");
2078	if (tevent_req_nomem(state->out_mem_ctx, req)) {
2079		return tevent_req_post(req, ev);
2080	}
2081
2082	/* make a temporary copy, that we pass to the dispatch function */
2083	state->tmp = state->orig;
2084
2085	subreq = cli->dispatch_send(state, ev, cli,
2086				    &ndr_table_svcctl,
2087				    NDR_SVCCTL_ENUMDEPENDENTSERVICESW,
2088				    &state->tmp);
2089	if (tevent_req_nomem(subreq, req)) {
2090		return tevent_req_post(req, ev);
2091	}
2092	tevent_req_set_callback(subreq, rpccli_svcctl_EnumDependentServicesW_done, req);
2093	return req;
2094}
2095
2096static void rpccli_svcctl_EnumDependentServicesW_done(struct tevent_req *subreq)
2097{
2098	struct tevent_req *req = tevent_req_callback_data(
2099		subreq, struct tevent_req);
2100	struct rpccli_svcctl_EnumDependentServicesW_state *state = tevent_req_data(
2101		req, struct rpccli_svcctl_EnumDependentServicesW_state);
2102	NTSTATUS status;
2103	TALLOC_CTX *mem_ctx;
2104
2105	if (state->out_mem_ctx) {
2106		mem_ctx = state->out_mem_ctx;
2107	} else {
2108		mem_ctx = state;
2109	}
2110
2111	status = state->dispatch_recv(subreq, mem_ctx);
2112	TALLOC_FREE(subreq);
2113	if (!NT_STATUS_IS_OK(status)) {
2114		tevent_req_nterror(req, status);
2115		return;
2116	}
2117
2118	/* Copy out parameters */
2119	memcpy(state->orig.out.service_status, state->tmp.out.service_status, (state->tmp.in.offered) * sizeof(*state->orig.out.service_status));
2120	*state->orig.out.needed = *state->tmp.out.needed;
2121	*state->orig.out.services_returned = *state->tmp.out.services_returned;
2122
2123	/* Copy result */
2124	state->orig.out.result = state->tmp.out.result;
2125
2126	/* Reset temporary structure */
2127	ZERO_STRUCT(state->tmp);
2128
2129	tevent_req_done(req);
2130}
2131
2132NTSTATUS rpccli_svcctl_EnumDependentServicesW_recv(struct tevent_req *req,
2133						   TALLOC_CTX *mem_ctx,
2134						   WERROR *result)
2135{
2136	struct rpccli_svcctl_EnumDependentServicesW_state *state = tevent_req_data(
2137		req, struct rpccli_svcctl_EnumDependentServicesW_state);
2138	NTSTATUS status;
2139
2140	if (tevent_req_is_nterror(req, &status)) {
2141		tevent_req_received(req);
2142		return status;
2143	}
2144
2145	/* Steal possbile out parameters to the callers context */
2146	talloc_steal(mem_ctx, state->out_mem_ctx);
2147
2148	/* Return result */
2149	*result = state->orig.out.result;
2150
2151	tevent_req_received(req);
2152	return NT_STATUS_OK;
2153}
2154
2155NTSTATUS rpccli_svcctl_EnumDependentServicesW(struct rpc_pipe_client *cli,
2156					      TALLOC_CTX *mem_ctx,
2157					      struct policy_handle *service /* [in] [ref] */,
2158					      enum svcctl_ServiceState state /* [in]  */,
2159					      uint8_t *service_status /* [out] [ref,size_is(offered)] */,
2160					      uint32_t offered /* [in] [range(0,0x40000)] */,
2161					      uint32_t *needed /* [out] [ref,range(0,0x40000)] */,
2162					      uint32_t *services_returned /* [out] [ref,range(0,0x40000)] */,
2163					      WERROR *werror)
2164{
2165	struct svcctl_EnumDependentServicesW r;
2166	NTSTATUS status;
2167
2168	/* In parameters */
2169	r.in.service = service;
2170	r.in.state = state;
2171	r.in.offered = offered;
2172
2173	status = cli->dispatch(cli,
2174				mem_ctx,
2175				&ndr_table_svcctl,
2176				NDR_SVCCTL_ENUMDEPENDENTSERVICESW,
2177				&r);
2178
2179	if (!NT_STATUS_IS_OK(status)) {
2180		return status;
2181	}
2182
2183	if (NT_STATUS_IS_ERR(status)) {
2184		return status;
2185	}
2186
2187	/* Return variables */
2188	memcpy(service_status, r.out.service_status, (r.in.offered) * sizeof(*service_status));
2189	*needed = *r.out.needed;
2190	*services_returned = *r.out.services_returned;
2191
2192	/* Return result */
2193	if (werror) {
2194		*werror = r.out.result;
2195	}
2196
2197	return werror_to_ntstatus(r.out.result);
2198}
2199
2200struct rpccli_svcctl_EnumServicesStatusW_state {
2201	struct svcctl_EnumServicesStatusW orig;
2202	struct svcctl_EnumServicesStatusW tmp;
2203	TALLOC_CTX *out_mem_ctx;
2204	NTSTATUS (*dispatch_recv)(struct tevent_req *req, TALLOC_CTX *mem_ctx);
2205};
2206
2207static void rpccli_svcctl_EnumServicesStatusW_done(struct tevent_req *subreq);
2208
2209struct tevent_req *rpccli_svcctl_EnumServicesStatusW_send(TALLOC_CTX *mem_ctx,
2210							  struct tevent_context *ev,
2211							  struct rpc_pipe_client *cli,
2212							  struct policy_handle *_handle /* [in] [ref] */,
2213							  uint32_t _type /* [in]  */,
2214							  enum svcctl_ServiceState _state /* [in]  */,
2215							  uint8_t *_service /* [out] [ref,size_is(offered)] */,
2216							  uint32_t _offered /* [in] [range(0,0x40000)] */,
2217							  uint32_t *_needed /* [out] [ref,range(0,0x40000)] */,
2218							  uint32_t *_services_returned /* [out] [ref,range(0,0x40000)] */,
2219							  uint32_t *_resume_handle /* [in,out] [unique] */)
2220{
2221	struct tevent_req *req;
2222	struct rpccli_svcctl_EnumServicesStatusW_state *state;
2223	struct tevent_req *subreq;
2224
2225	req = tevent_req_create(mem_ctx, &state,
2226				struct rpccli_svcctl_EnumServicesStatusW_state);
2227	if (req == NULL) {
2228		return NULL;
2229	}
2230	state->out_mem_ctx = NULL;
2231	state->dispatch_recv = cli->dispatch_recv;
2232
2233	/* In parameters */
2234	state->orig.in.handle = _handle;
2235	state->orig.in.type = _type;
2236	state->orig.in.state = _state;
2237	state->orig.in.offered = _offered;
2238	state->orig.in.resume_handle = _resume_handle;
2239
2240	/* Out parameters */
2241	state->orig.out.service = _service;
2242	state->orig.out.needed = _needed;
2243	state->orig.out.services_returned = _services_returned;
2244	state->orig.out.resume_handle = _resume_handle;
2245
2246	/* Result */
2247	ZERO_STRUCT(state->orig.out.result);
2248
2249	state->out_mem_ctx = talloc_named_const(state, 0,
2250			     "rpccli_svcctl_EnumServicesStatusW_out_memory");
2251	if (tevent_req_nomem(state->out_mem_ctx, req)) {
2252		return tevent_req_post(req, ev);
2253	}
2254
2255	/* make a temporary copy, that we pass to the dispatch function */
2256	state->tmp = state->orig;
2257
2258	subreq = cli->dispatch_send(state, ev, cli,
2259				    &ndr_table_svcctl,
2260				    NDR_SVCCTL_ENUMSERVICESSTATUSW,
2261				    &state->tmp);
2262	if (tevent_req_nomem(subreq, req)) {
2263		return tevent_req_post(req, ev);
2264	}
2265	tevent_req_set_callback(subreq, rpccli_svcctl_EnumServicesStatusW_done, req);
2266	return req;
2267}
2268
2269static void rpccli_svcctl_EnumServicesStatusW_done(struct tevent_req *subreq)
2270{
2271	struct tevent_req *req = tevent_req_callback_data(
2272		subreq, struct tevent_req);
2273	struct rpccli_svcctl_EnumServicesStatusW_state *state = tevent_req_data(
2274		req, struct rpccli_svcctl_EnumServicesStatusW_state);
2275	NTSTATUS status;
2276	TALLOC_CTX *mem_ctx;
2277
2278	if (state->out_mem_ctx) {
2279		mem_ctx = state->out_mem_ctx;
2280	} else {
2281		mem_ctx = state;
2282	}
2283
2284	status = state->dispatch_recv(subreq, mem_ctx);
2285	TALLOC_FREE(subreq);
2286	if (!NT_STATUS_IS_OK(status)) {
2287		tevent_req_nterror(req, status);
2288		return;
2289	}
2290
2291	/* Copy out parameters */
2292	memcpy(state->orig.out.service, state->tmp.out.service, (state->tmp.in.offered) * sizeof(*state->orig.out.service));
2293	*state->orig.out.needed = *state->tmp.out.needed;
2294	*state->orig.out.services_returned = *state->tmp.out.services_returned;
2295	if (state->orig.out.resume_handle && state->tmp.out.resume_handle) {
2296		*state->orig.out.resume_handle = *state->tmp.out.resume_handle;
2297	}
2298
2299	/* Copy result */
2300	state->orig.out.result = state->tmp.out.result;
2301
2302	/* Reset temporary structure */
2303	ZERO_STRUCT(state->tmp);
2304
2305	tevent_req_done(req);
2306}
2307
2308NTSTATUS rpccli_svcctl_EnumServicesStatusW_recv(struct tevent_req *req,
2309						TALLOC_CTX *mem_ctx,
2310						WERROR *result)
2311{
2312	struct rpccli_svcctl_EnumServicesStatusW_state *state = tevent_req_data(
2313		req, struct rpccli_svcctl_EnumServicesStatusW_state);
2314	NTSTATUS status;
2315
2316	if (tevent_req_is_nterror(req, &status)) {
2317		tevent_req_received(req);
2318		return status;
2319	}
2320
2321	/* Steal possbile out parameters to the callers context */
2322	talloc_steal(mem_ctx, state->out_mem_ctx);
2323
2324	/* Return result */
2325	*result = state->orig.out.result;
2326
2327	tevent_req_received(req);
2328	return NT_STATUS_OK;
2329}
2330
2331NTSTATUS rpccli_svcctl_EnumServicesStatusW(struct rpc_pipe_client *cli,
2332					   TALLOC_CTX *mem_ctx,
2333					   struct policy_handle *handle /* [in] [ref] */,
2334					   uint32_t type /* [in]  */,
2335					   enum svcctl_ServiceState state /* [in]  */,
2336					   uint8_t *service /* [out] [ref,size_is(offered)] */,
2337					   uint32_t offered /* [in] [range(0,0x40000)] */,
2338					   uint32_t *needed /* [out] [ref,range(0,0x40000)] */,
2339					   uint32_t *services_returned /* [out] [ref,range(0,0x40000)] */,
2340					   uint32_t *resume_handle /* [in,out] [unique] */,
2341					   WERROR *werror)
2342{
2343	struct svcctl_EnumServicesStatusW r;
2344	NTSTATUS status;
2345
2346	/* In parameters */
2347	r.in.handle = handle;
2348	r.in.type = type;
2349	r.in.state = state;
2350	r.in.offered = offered;
2351	r.in.resume_handle = resume_handle;
2352
2353	status = cli->dispatch(cli,
2354				mem_ctx,
2355				&ndr_table_svcctl,
2356				NDR_SVCCTL_ENUMSERVICESSTATUSW,
2357				&r);
2358
2359	if (!NT_STATUS_IS_OK(status)) {
2360		return status;
2361	}
2362
2363	if (NT_STATUS_IS_ERR(status)) {
2364		return status;
2365	}
2366
2367	/* Return variables */
2368	memcpy(service, r.out.service, (r.in.offered) * sizeof(*service));
2369	*needed = *r.out.needed;
2370	*services_returned = *r.out.services_returned;
2371	if (resume_handle && r.out.resume_handle) {
2372		*resume_handle = *r.out.resume_handle;
2373	}
2374
2375	/* Return result */
2376	if (werror) {
2377		*werror = r.out.result;
2378	}
2379
2380	return werror_to_ntstatus(r.out.result);
2381}
2382
2383struct rpccli_svcctl_OpenSCManagerW_state {
2384	struct svcctl_OpenSCManagerW orig;
2385	struct svcctl_OpenSCManagerW tmp;
2386	TALLOC_CTX *out_mem_ctx;
2387	NTSTATUS (*dispatch_recv)(struct tevent_req *req, TALLOC_CTX *mem_ctx);
2388};
2389
2390static void rpccli_svcctl_OpenSCManagerW_done(struct tevent_req *subreq);
2391
2392struct tevent_req *rpccli_svcctl_OpenSCManagerW_send(TALLOC_CTX *mem_ctx,
2393						     struct tevent_context *ev,
2394						     struct rpc_pipe_client *cli,
2395						     const char *_MachineName /* [in] [unique,charset(UTF16)] */,
2396						     const char *_DatabaseName /* [in] [unique,charset(UTF16)] */,
2397						     uint32_t _access_mask /* [in]  */,
2398						     struct policy_handle *_handle /* [out] [ref] */)
2399{
2400	struct tevent_req *req;
2401	struct rpccli_svcctl_OpenSCManagerW_state *state;
2402	struct tevent_req *subreq;
2403
2404	req = tevent_req_create(mem_ctx, &state,
2405				struct rpccli_svcctl_OpenSCManagerW_state);
2406	if (req == NULL) {
2407		return NULL;
2408	}
2409	state->out_mem_ctx = NULL;
2410	state->dispatch_recv = cli->dispatch_recv;
2411
2412	/* In parameters */
2413	state->orig.in.MachineName = _MachineName;
2414	state->orig.in.DatabaseName = _DatabaseName;
2415	state->orig.in.access_mask = _access_mask;
2416
2417	/* Out parameters */
2418	state->orig.out.handle = _handle;
2419
2420	/* Result */
2421	ZERO_STRUCT(state->orig.out.result);
2422
2423	state->out_mem_ctx = talloc_named_const(state, 0,
2424			     "rpccli_svcctl_OpenSCManagerW_out_memory");
2425	if (tevent_req_nomem(state->out_mem_ctx, req)) {
2426		return tevent_req_post(req, ev);
2427	}
2428
2429	/* make a temporary copy, that we pass to the dispatch function */
2430	state->tmp = state->orig;
2431
2432	subreq = cli->dispatch_send(state, ev, cli,
2433				    &ndr_table_svcctl,
2434				    NDR_SVCCTL_OPENSCMANAGERW,
2435				    &state->tmp);
2436	if (tevent_req_nomem(subreq, req)) {
2437		return tevent_req_post(req, ev);
2438	}
2439	tevent_req_set_callback(subreq, rpccli_svcctl_OpenSCManagerW_done, req);
2440	return req;
2441}
2442
2443static void rpccli_svcctl_OpenSCManagerW_done(struct tevent_req *subreq)
2444{
2445	struct tevent_req *req = tevent_req_callback_data(
2446		subreq, struct tevent_req);
2447	struct rpccli_svcctl_OpenSCManagerW_state *state = tevent_req_data(
2448		req, struct rpccli_svcctl_OpenSCManagerW_state);
2449	NTSTATUS status;
2450	TALLOC_CTX *mem_ctx;
2451
2452	if (state->out_mem_ctx) {
2453		mem_ctx = state->out_mem_ctx;
2454	} else {
2455		mem_ctx = state;
2456	}
2457
2458	status = state->dispatch_recv(subreq, mem_ctx);
2459	TALLOC_FREE(subreq);
2460	if (!NT_STATUS_IS_OK(status)) {
2461		tevent_req_nterror(req, status);
2462		return;
2463	}
2464
2465	/* Copy out parameters */
2466	*state->orig.out.handle = *state->tmp.out.handle;
2467
2468	/* Copy result */
2469	state->orig.out.result = state->tmp.out.result;
2470
2471	/* Reset temporary structure */
2472	ZERO_STRUCT(state->tmp);
2473
2474	tevent_req_done(req);
2475}
2476
2477NTSTATUS rpccli_svcctl_OpenSCManagerW_recv(struct tevent_req *req,
2478					   TALLOC_CTX *mem_ctx,
2479					   WERROR *result)
2480{
2481	struct rpccli_svcctl_OpenSCManagerW_state *state = tevent_req_data(
2482		req, struct rpccli_svcctl_OpenSCManagerW_state);
2483	NTSTATUS status;
2484
2485	if (tevent_req_is_nterror(req, &status)) {
2486		tevent_req_received(req);
2487		return status;
2488	}
2489
2490	/* Steal possbile out parameters to the callers context */
2491	talloc_steal(mem_ctx, state->out_mem_ctx);
2492
2493	/* Return result */
2494	*result = state->orig.out.result;
2495
2496	tevent_req_received(req);
2497	return NT_STATUS_OK;
2498}
2499
2500NTSTATUS rpccli_svcctl_OpenSCManagerW(struct rpc_pipe_client *cli,
2501				      TALLOC_CTX *mem_ctx,
2502				      const char *MachineName /* [in] [unique,charset(UTF16)] */,
2503				      const char *DatabaseName /* [in] [unique,charset(UTF16)] */,
2504				      uint32_t access_mask /* [in]  */,
2505				      struct policy_handle *handle /* [out] [ref] */,
2506				      WERROR *werror)
2507{
2508	struct svcctl_OpenSCManagerW r;
2509	NTSTATUS status;
2510
2511	/* In parameters */
2512	r.in.MachineName = MachineName;
2513	r.in.DatabaseName = DatabaseName;
2514	r.in.access_mask = access_mask;
2515
2516	status = cli->dispatch(cli,
2517				mem_ctx,
2518				&ndr_table_svcctl,
2519				NDR_SVCCTL_OPENSCMANAGERW,
2520				&r);
2521
2522	if (!NT_STATUS_IS_OK(status)) {
2523		return status;
2524	}
2525
2526	if (NT_STATUS_IS_ERR(status)) {
2527		return status;
2528	}
2529
2530	/* Return variables */
2531	*handle = *r.out.handle;
2532
2533	/* Return result */
2534	if (werror) {
2535		*werror = r.out.result;
2536	}
2537
2538	return werror_to_ntstatus(r.out.result);
2539}
2540
2541struct rpccli_svcctl_OpenServiceW_state {
2542	struct svcctl_OpenServiceW orig;
2543	struct svcctl_OpenServiceW tmp;
2544	TALLOC_CTX *out_mem_ctx;
2545	NTSTATUS (*dispatch_recv)(struct tevent_req *req, TALLOC_CTX *mem_ctx);
2546};
2547
2548static void rpccli_svcctl_OpenServiceW_done(struct tevent_req *subreq);
2549
2550struct tevent_req *rpccli_svcctl_OpenServiceW_send(TALLOC_CTX *mem_ctx,
2551						   struct tevent_context *ev,
2552						   struct rpc_pipe_client *cli,
2553						   struct policy_handle *_scmanager_handle /* [in] [ref] */,
2554						   const char *_ServiceName /* [in] [charset(UTF16)] */,
2555						   uint32_t _access_mask /* [in]  */,
2556						   struct policy_handle *_handle /* [out] [ref] */)
2557{
2558	struct tevent_req *req;
2559	struct rpccli_svcctl_OpenServiceW_state *state;
2560	struct tevent_req *subreq;
2561
2562	req = tevent_req_create(mem_ctx, &state,
2563				struct rpccli_svcctl_OpenServiceW_state);
2564	if (req == NULL) {
2565		return NULL;
2566	}
2567	state->out_mem_ctx = NULL;
2568	state->dispatch_recv = cli->dispatch_recv;
2569
2570	/* In parameters */
2571	state->orig.in.scmanager_handle = _scmanager_handle;
2572	state->orig.in.ServiceName = _ServiceName;
2573	state->orig.in.access_mask = _access_mask;
2574
2575	/* Out parameters */
2576	state->orig.out.handle = _handle;
2577
2578	/* Result */
2579	ZERO_STRUCT(state->orig.out.result);
2580
2581	state->out_mem_ctx = talloc_named_const(state, 0,
2582			     "rpccli_svcctl_OpenServiceW_out_memory");
2583	if (tevent_req_nomem(state->out_mem_ctx, req)) {
2584		return tevent_req_post(req, ev);
2585	}
2586
2587	/* make a temporary copy, that we pass to the dispatch function */
2588	state->tmp = state->orig;
2589
2590	subreq = cli->dispatch_send(state, ev, cli,
2591				    &ndr_table_svcctl,
2592				    NDR_SVCCTL_OPENSERVICEW,
2593				    &state->tmp);
2594	if (tevent_req_nomem(subreq, req)) {
2595		return tevent_req_post(req, ev);
2596	}
2597	tevent_req_set_callback(subreq, rpccli_svcctl_OpenServiceW_done, req);
2598	return req;
2599}
2600
2601static void rpccli_svcctl_OpenServiceW_done(struct tevent_req *subreq)
2602{
2603	struct tevent_req *req = tevent_req_callback_data(
2604		subreq, struct tevent_req);
2605	struct rpccli_svcctl_OpenServiceW_state *state = tevent_req_data(
2606		req, struct rpccli_svcctl_OpenServiceW_state);
2607	NTSTATUS status;
2608	TALLOC_CTX *mem_ctx;
2609
2610	if (state->out_mem_ctx) {
2611		mem_ctx = state->out_mem_ctx;
2612	} else {
2613		mem_ctx = state;
2614	}
2615
2616	status = state->dispatch_recv(subreq, mem_ctx);
2617	TALLOC_FREE(subreq);
2618	if (!NT_STATUS_IS_OK(status)) {
2619		tevent_req_nterror(req, status);
2620		return;
2621	}
2622
2623	/* Copy out parameters */
2624	*state->orig.out.handle = *state->tmp.out.handle;
2625
2626	/* Copy result */
2627	state->orig.out.result = state->tmp.out.result;
2628
2629	/* Reset temporary structure */
2630	ZERO_STRUCT(state->tmp);
2631
2632	tevent_req_done(req);
2633}
2634
2635NTSTATUS rpccli_svcctl_OpenServiceW_recv(struct tevent_req *req,
2636					 TALLOC_CTX *mem_ctx,
2637					 WERROR *result)
2638{
2639	struct rpccli_svcctl_OpenServiceW_state *state = tevent_req_data(
2640		req, struct rpccli_svcctl_OpenServiceW_state);
2641	NTSTATUS status;
2642
2643	if (tevent_req_is_nterror(req, &status)) {
2644		tevent_req_received(req);
2645		return status;
2646	}
2647
2648	/* Steal possbile out parameters to the callers context */
2649	talloc_steal(mem_ctx, state->out_mem_ctx);
2650
2651	/* Return result */
2652	*result = state->orig.out.result;
2653
2654	tevent_req_received(req);
2655	return NT_STATUS_OK;
2656}
2657
2658NTSTATUS rpccli_svcctl_OpenServiceW(struct rpc_pipe_client *cli,
2659				    TALLOC_CTX *mem_ctx,
2660				    struct policy_handle *scmanager_handle /* [in] [ref] */,
2661				    const char *ServiceName /* [in] [charset(UTF16)] */,
2662				    uint32_t access_mask /* [in]  */,
2663				    struct policy_handle *handle /* [out] [ref] */,
2664				    WERROR *werror)
2665{
2666	struct svcctl_OpenServiceW r;
2667	NTSTATUS status;
2668
2669	/* In parameters */
2670	r.in.scmanager_handle = scmanager_handle;
2671	r.in.ServiceName = ServiceName;
2672	r.in.access_mask = access_mask;
2673
2674	status = cli->dispatch(cli,
2675				mem_ctx,
2676				&ndr_table_svcctl,
2677				NDR_SVCCTL_OPENSERVICEW,
2678				&r);
2679
2680	if (!NT_STATUS_IS_OK(status)) {
2681		return status;
2682	}
2683
2684	if (NT_STATUS_IS_ERR(status)) {
2685		return status;
2686	}
2687
2688	/* Return variables */
2689	*handle = *r.out.handle;
2690
2691	/* Return result */
2692	if (werror) {
2693		*werror = r.out.result;
2694	}
2695
2696	return werror_to_ntstatus(r.out.result);
2697}
2698
2699struct rpccli_svcctl_QueryServiceConfigW_state {
2700	struct svcctl_QueryServiceConfigW orig;
2701	struct svcctl_QueryServiceConfigW tmp;
2702	TALLOC_CTX *out_mem_ctx;
2703	NTSTATUS (*dispatch_recv)(struct tevent_req *req, TALLOC_CTX *mem_ctx);
2704};
2705
2706static void rpccli_svcctl_QueryServiceConfigW_done(struct tevent_req *subreq);
2707
2708struct tevent_req *rpccli_svcctl_QueryServiceConfigW_send(TALLOC_CTX *mem_ctx,
2709							  struct tevent_context *ev,
2710							  struct rpc_pipe_client *cli,
2711							  struct policy_handle *_handle /* [in] [ref] */,
2712							  struct QUERY_SERVICE_CONFIG *_query /* [out] [ref] */,
2713							  uint32_t _offered /* [in] [range(0,8192)] */,
2714							  uint32_t *_needed /* [out] [ref,range(0,8192)] */)
2715{
2716	struct tevent_req *req;
2717	struct rpccli_svcctl_QueryServiceConfigW_state *state;
2718	struct tevent_req *subreq;
2719
2720	req = tevent_req_create(mem_ctx, &state,
2721				struct rpccli_svcctl_QueryServiceConfigW_state);
2722	if (req == NULL) {
2723		return NULL;
2724	}
2725	state->out_mem_ctx = NULL;
2726	state->dispatch_recv = cli->dispatch_recv;
2727
2728	/* In parameters */
2729	state->orig.in.handle = _handle;
2730	state->orig.in.offered = _offered;
2731
2732	/* Out parameters */
2733	state->orig.out.query = _query;
2734	state->orig.out.needed = _needed;
2735
2736	/* Result */
2737	ZERO_STRUCT(state->orig.out.result);
2738
2739	state->out_mem_ctx = talloc_named_const(state, 0,
2740			     "rpccli_svcctl_QueryServiceConfigW_out_memory");
2741	if (tevent_req_nomem(state->out_mem_ctx, req)) {
2742		return tevent_req_post(req, ev);
2743	}
2744
2745	/* make a temporary copy, that we pass to the dispatch function */
2746	state->tmp = state->orig;
2747
2748	subreq = cli->dispatch_send(state, ev, cli,
2749				    &ndr_table_svcctl,
2750				    NDR_SVCCTL_QUERYSERVICECONFIGW,
2751				    &state->tmp);
2752	if (tevent_req_nomem(subreq, req)) {
2753		return tevent_req_post(req, ev);
2754	}
2755	tevent_req_set_callback(subreq, rpccli_svcctl_QueryServiceConfigW_done, req);
2756	return req;
2757}
2758
2759static void rpccli_svcctl_QueryServiceConfigW_done(struct tevent_req *subreq)
2760{
2761	struct tevent_req *req = tevent_req_callback_data(
2762		subreq, struct tevent_req);
2763	struct rpccli_svcctl_QueryServiceConfigW_state *state = tevent_req_data(
2764		req, struct rpccli_svcctl_QueryServiceConfigW_state);
2765	NTSTATUS status;
2766	TALLOC_CTX *mem_ctx;
2767
2768	if (state->out_mem_ctx) {
2769		mem_ctx = state->out_mem_ctx;
2770	} else {
2771		mem_ctx = state;
2772	}
2773
2774	status = state->dispatch_recv(subreq, mem_ctx);
2775	TALLOC_FREE(subreq);
2776	if (!NT_STATUS_IS_OK(status)) {
2777		tevent_req_nterror(req, status);
2778		return;
2779	}
2780
2781	/* Copy out parameters */
2782	*state->orig.out.query = *state->tmp.out.query;
2783	*state->orig.out.needed = *state->tmp.out.needed;
2784
2785	/* Copy result */
2786	state->orig.out.result = state->tmp.out.result;
2787
2788	/* Reset temporary structure */
2789	ZERO_STRUCT(state->tmp);
2790
2791	tevent_req_done(req);
2792}
2793
2794NTSTATUS rpccli_svcctl_QueryServiceConfigW_recv(struct tevent_req *req,
2795						TALLOC_CTX *mem_ctx,
2796						WERROR *result)
2797{
2798	struct rpccli_svcctl_QueryServiceConfigW_state *state = tevent_req_data(
2799		req, struct rpccli_svcctl_QueryServiceConfigW_state);
2800	NTSTATUS status;
2801
2802	if (tevent_req_is_nterror(req, &status)) {
2803		tevent_req_received(req);
2804		return status;
2805	}
2806
2807	/* Steal possbile out parameters to the callers context */
2808	talloc_steal(mem_ctx, state->out_mem_ctx);
2809
2810	/* Return result */
2811	*result = state->orig.out.result;
2812
2813	tevent_req_received(req);
2814	return NT_STATUS_OK;
2815}
2816
2817NTSTATUS rpccli_svcctl_QueryServiceConfigW(struct rpc_pipe_client *cli,
2818					   TALLOC_CTX *mem_ctx,
2819					   struct policy_handle *handle /* [in] [ref] */,
2820					   struct QUERY_SERVICE_CONFIG *query /* [out] [ref] */,
2821					   uint32_t offered /* [in] [range(0,8192)] */,
2822					   uint32_t *needed /* [out] [ref,range(0,8192)] */,
2823					   WERROR *werror)
2824{
2825	struct svcctl_QueryServiceConfigW r;
2826	NTSTATUS status;
2827
2828	/* In parameters */
2829	r.in.handle = handle;
2830	r.in.offered = offered;
2831
2832	status = cli->dispatch(cli,
2833				mem_ctx,
2834				&ndr_table_svcctl,
2835				NDR_SVCCTL_QUERYSERVICECONFIGW,
2836				&r);
2837
2838	if (!NT_STATUS_IS_OK(status)) {
2839		return status;
2840	}
2841
2842	if (NT_STATUS_IS_ERR(status)) {
2843		return status;
2844	}
2845
2846	/* Return variables */
2847	*query = *r.out.query;
2848	*needed = *r.out.needed;
2849
2850	/* Return result */
2851	if (werror) {
2852		*werror = r.out.result;
2853	}
2854
2855	return werror_to_ntstatus(r.out.result);
2856}
2857
2858struct rpccli_svcctl_QueryServiceLockStatusW_state {
2859	struct svcctl_QueryServiceLockStatusW orig;
2860	struct svcctl_QueryServiceLockStatusW tmp;
2861	TALLOC_CTX *out_mem_ctx;
2862	NTSTATUS (*dispatch_recv)(struct tevent_req *req, TALLOC_CTX *mem_ctx);
2863};
2864
2865static void rpccli_svcctl_QueryServiceLockStatusW_done(struct tevent_req *subreq);
2866
2867struct tevent_req *rpccli_svcctl_QueryServiceLockStatusW_send(TALLOC_CTX *mem_ctx,
2868							      struct tevent_context *ev,
2869							      struct rpc_pipe_client *cli,
2870							      struct policy_handle *_handle /* [in] [ref] */,
2871							      uint32_t _offered /* [in]  */,
2872							      struct SERVICE_LOCK_STATUS *_lock_status /* [out] [ref] */,
2873							      uint32_t *_needed /* [out] [ref] */)
2874{
2875	struct tevent_req *req;
2876	struct rpccli_svcctl_QueryServiceLockStatusW_state *state;
2877	struct tevent_req *subreq;
2878
2879	req = tevent_req_create(mem_ctx, &state,
2880				struct rpccli_svcctl_QueryServiceLockStatusW_state);
2881	if (req == NULL) {
2882		return NULL;
2883	}
2884	state->out_mem_ctx = NULL;
2885	state->dispatch_recv = cli->dispatch_recv;
2886
2887	/* In parameters */
2888	state->orig.in.handle = _handle;
2889	state->orig.in.offered = _offered;
2890
2891	/* Out parameters */
2892	state->orig.out.lock_status = _lock_status;
2893	state->orig.out.needed = _needed;
2894
2895	/* Result */
2896	ZERO_STRUCT(state->orig.out.result);
2897
2898	state->out_mem_ctx = talloc_named_const(state, 0,
2899			     "rpccli_svcctl_QueryServiceLockStatusW_out_memory");
2900	if (tevent_req_nomem(state->out_mem_ctx, req)) {
2901		return tevent_req_post(req, ev);
2902	}
2903
2904	/* make a temporary copy, that we pass to the dispatch function */
2905	state->tmp = state->orig;
2906
2907	subreq = cli->dispatch_send(state, ev, cli,
2908				    &ndr_table_svcctl,
2909				    NDR_SVCCTL_QUERYSERVICELOCKSTATUSW,
2910				    &state->tmp);
2911	if (tevent_req_nomem(subreq, req)) {
2912		return tevent_req_post(req, ev);
2913	}
2914	tevent_req_set_callback(subreq, rpccli_svcctl_QueryServiceLockStatusW_done, req);
2915	return req;
2916}
2917
2918static void rpccli_svcctl_QueryServiceLockStatusW_done(struct tevent_req *subreq)
2919{
2920	struct tevent_req *req = tevent_req_callback_data(
2921		subreq, struct tevent_req);
2922	struct rpccli_svcctl_QueryServiceLockStatusW_state *state = tevent_req_data(
2923		req, struct rpccli_svcctl_QueryServiceLockStatusW_state);
2924	NTSTATUS status;
2925	TALLOC_CTX *mem_ctx;
2926
2927	if (state->out_mem_ctx) {
2928		mem_ctx = state->out_mem_ctx;
2929	} else {
2930		mem_ctx = state;
2931	}
2932
2933	status = state->dispatch_recv(subreq, mem_ctx);
2934	TALLOC_FREE(subreq);
2935	if (!NT_STATUS_IS_OK(status)) {
2936		tevent_req_nterror(req, status);
2937		return;
2938	}
2939
2940	/* Copy out parameters */
2941	*state->orig.out.lock_status = *state->tmp.out.lock_status;
2942	*state->orig.out.needed = *state->tmp.out.needed;
2943
2944	/* Copy result */
2945	state->orig.out.result = state->tmp.out.result;
2946
2947	/* Reset temporary structure */
2948	ZERO_STRUCT(state->tmp);
2949
2950	tevent_req_done(req);
2951}
2952
2953NTSTATUS rpccli_svcctl_QueryServiceLockStatusW_recv(struct tevent_req *req,
2954						    TALLOC_CTX *mem_ctx,
2955						    WERROR *result)
2956{
2957	struct rpccli_svcctl_QueryServiceLockStatusW_state *state = tevent_req_data(
2958		req, struct rpccli_svcctl_QueryServiceLockStatusW_state);
2959	NTSTATUS status;
2960
2961	if (tevent_req_is_nterror(req, &status)) {
2962		tevent_req_received(req);
2963		return status;
2964	}
2965
2966	/* Steal possbile out parameters to the callers context */
2967	talloc_steal(mem_ctx, state->out_mem_ctx);
2968
2969	/* Return result */
2970	*result = state->orig.out.result;
2971
2972	tevent_req_received(req);
2973	return NT_STATUS_OK;
2974}
2975
2976NTSTATUS rpccli_svcctl_QueryServiceLockStatusW(struct rpc_pipe_client *cli,
2977					       TALLOC_CTX *mem_ctx,
2978					       struct policy_handle *handle /* [in] [ref] */,
2979					       uint32_t offered /* [in]  */,
2980					       struct SERVICE_LOCK_STATUS *lock_status /* [out] [ref] */,
2981					       uint32_t *needed /* [out] [ref] */,
2982					       WERROR *werror)
2983{
2984	struct svcctl_QueryServiceLockStatusW r;
2985	NTSTATUS status;
2986
2987	/* In parameters */
2988	r.in.handle = handle;
2989	r.in.offered = offered;
2990
2991	status = cli->dispatch(cli,
2992				mem_ctx,
2993				&ndr_table_svcctl,
2994				NDR_SVCCTL_QUERYSERVICELOCKSTATUSW,
2995				&r);
2996
2997	if (!NT_STATUS_IS_OK(status)) {
2998		return status;
2999	}
3000
3001	if (NT_STATUS_IS_ERR(status)) {
3002		return status;
3003	}
3004
3005	/* Return variables */
3006	*lock_status = *r.out.lock_status;
3007	*needed = *r.out.needed;
3008
3009	/* Return result */
3010	if (werror) {
3011		*werror = r.out.result;
3012	}
3013
3014	return werror_to_ntstatus(r.out.result);
3015}
3016
3017struct rpccli_svcctl_StartServiceW_state {
3018	struct svcctl_StartServiceW orig;
3019	struct svcctl_StartServiceW tmp;
3020	TALLOC_CTX *out_mem_ctx;
3021	NTSTATUS (*dispatch_recv)(struct tevent_req *req, TALLOC_CTX *mem_ctx);
3022};
3023
3024static void rpccli_svcctl_StartServiceW_done(struct tevent_req *subreq);
3025
3026struct tevent_req *rpccli_svcctl_StartServiceW_send(TALLOC_CTX *mem_ctx,
3027						    struct tevent_context *ev,
3028						    struct rpc_pipe_client *cli,
3029						    struct policy_handle *_handle /* [in] [ref] */,
3030						    uint32_t _NumArgs /* [in] [range(0,SC_MAX_ARGUMENTS)] */,
3031						    struct svcctl_ArgumentString *_Arguments /* [in] [unique,size_is(NumArgs)] */)
3032{
3033	struct tevent_req *req;
3034	struct rpccli_svcctl_StartServiceW_state *state;
3035	struct tevent_req *subreq;
3036
3037	req = tevent_req_create(mem_ctx, &state,
3038				struct rpccli_svcctl_StartServiceW_state);
3039	if (req == NULL) {
3040		return NULL;
3041	}
3042	state->out_mem_ctx = NULL;
3043	state->dispatch_recv = cli->dispatch_recv;
3044
3045	/* In parameters */
3046	state->orig.in.handle = _handle;
3047	state->orig.in.NumArgs = _NumArgs;
3048	state->orig.in.Arguments = _Arguments;
3049
3050	/* Out parameters */
3051
3052	/* Result */
3053	ZERO_STRUCT(state->orig.out.result);
3054
3055	/* make a temporary copy, that we pass to the dispatch function */
3056	state->tmp = state->orig;
3057
3058	subreq = cli->dispatch_send(state, ev, cli,
3059				    &ndr_table_svcctl,
3060				    NDR_SVCCTL_STARTSERVICEW,
3061				    &state->tmp);
3062	if (tevent_req_nomem(subreq, req)) {
3063		return tevent_req_post(req, ev);
3064	}
3065	tevent_req_set_callback(subreq, rpccli_svcctl_StartServiceW_done, req);
3066	return req;
3067}
3068
3069static void rpccli_svcctl_StartServiceW_done(struct tevent_req *subreq)
3070{
3071	struct tevent_req *req = tevent_req_callback_data(
3072		subreq, struct tevent_req);
3073	struct rpccli_svcctl_StartServiceW_state *state = tevent_req_data(
3074		req, struct rpccli_svcctl_StartServiceW_state);
3075	NTSTATUS status;
3076	TALLOC_CTX *mem_ctx;
3077
3078	if (state->out_mem_ctx) {
3079		mem_ctx = state->out_mem_ctx;
3080	} else {
3081		mem_ctx = state;
3082	}
3083
3084	status = state->dispatch_recv(subreq, mem_ctx);
3085	TALLOC_FREE(subreq);
3086	if (!NT_STATUS_IS_OK(status)) {
3087		tevent_req_nterror(req, status);
3088		return;
3089	}
3090
3091	/* Copy out parameters */
3092
3093	/* Copy result */
3094	state->orig.out.result = state->tmp.out.result;
3095
3096	/* Reset temporary structure */
3097	ZERO_STRUCT(state->tmp);
3098
3099	tevent_req_done(req);
3100}
3101
3102NTSTATUS rpccli_svcctl_StartServiceW_recv(struct tevent_req *req,
3103					  TALLOC_CTX *mem_ctx,
3104					  WERROR *result)
3105{
3106	struct rpccli_svcctl_StartServiceW_state *state = tevent_req_data(
3107		req, struct rpccli_svcctl_StartServiceW_state);
3108	NTSTATUS status;
3109
3110	if (tevent_req_is_nterror(req, &status)) {
3111		tevent_req_received(req);
3112		return status;
3113	}
3114
3115	/* Steal possbile out parameters to the callers context */
3116	talloc_steal(mem_ctx, state->out_mem_ctx);
3117
3118	/* Return result */
3119	*result = state->orig.out.result;
3120
3121	tevent_req_received(req);
3122	return NT_STATUS_OK;
3123}
3124
3125NTSTATUS rpccli_svcctl_StartServiceW(struct rpc_pipe_client *cli,
3126				     TALLOC_CTX *mem_ctx,
3127				     struct policy_handle *handle /* [in] [ref] */,
3128				     uint32_t NumArgs /* [in] [range(0,SC_MAX_ARGUMENTS)] */,
3129				     struct svcctl_ArgumentString *Arguments /* [in] [unique,size_is(NumArgs)] */,
3130				     WERROR *werror)
3131{
3132	struct svcctl_StartServiceW r;
3133	NTSTATUS status;
3134
3135	/* In parameters */
3136	r.in.handle = handle;
3137	r.in.NumArgs = NumArgs;
3138	r.in.Arguments = Arguments;
3139
3140	status = cli->dispatch(cli,
3141				mem_ctx,
3142				&ndr_table_svcctl,
3143				NDR_SVCCTL_STARTSERVICEW,
3144				&r);
3145
3146	if (!NT_STATUS_IS_OK(status)) {
3147		return status;
3148	}
3149
3150	if (NT_STATUS_IS_ERR(status)) {
3151		return status;
3152	}
3153
3154	/* Return variables */
3155
3156	/* Return result */
3157	if (werror) {
3158		*werror = r.out.result;
3159	}
3160
3161	return werror_to_ntstatus(r.out.result);
3162}
3163
3164struct rpccli_svcctl_GetServiceDisplayNameW_state {
3165	struct svcctl_GetServiceDisplayNameW orig;
3166	struct svcctl_GetServiceDisplayNameW tmp;
3167	TALLOC_CTX *out_mem_ctx;
3168	NTSTATUS (*dispatch_recv)(struct tevent_req *req, TALLOC_CTX *mem_ctx);
3169};
3170
3171static void rpccli_svcctl_GetServiceDisplayNameW_done(struct tevent_req *subreq);
3172
3173struct tevent_req *rpccli_svcctl_GetServiceDisplayNameW_send(TALLOC_CTX *mem_ctx,
3174							     struct tevent_context *ev,
3175							     struct rpc_pipe_client *cli,
3176							     struct policy_handle *_handle /* [in] [ref] */,
3177							     const char *_service_name /* [in] [unique,charset(UTF16)] */,
3178							     const char **_display_name /* [out] [ref,charset(UTF16)] */,
3179							     uint32_t *_display_name_length /* [in,out] [unique] */)
3180{
3181	struct tevent_req *req;
3182	struct rpccli_svcctl_GetServiceDisplayNameW_state *state;
3183	struct tevent_req *subreq;
3184
3185	req = tevent_req_create(mem_ctx, &state,
3186				struct rpccli_svcctl_GetServiceDisplayNameW_state);
3187	if (req == NULL) {
3188		return NULL;
3189	}
3190	state->out_mem_ctx = NULL;
3191	state->dispatch_recv = cli->dispatch_recv;
3192
3193	/* In parameters */
3194	state->orig.in.handle = _handle;
3195	state->orig.in.service_name = _service_name;
3196	state->orig.in.display_name_length = _display_name_length;
3197
3198	/* Out parameters */
3199	state->orig.out.display_name = _display_name;
3200	state->orig.out.display_name_length = _display_name_length;
3201
3202	/* Result */
3203	ZERO_STRUCT(state->orig.out.result);
3204
3205	state->out_mem_ctx = talloc_named_const(state, 0,
3206			     "rpccli_svcctl_GetServiceDisplayNameW_out_memory");
3207	if (tevent_req_nomem(state->out_mem_ctx, req)) {
3208		return tevent_req_post(req, ev);
3209	}
3210
3211	/* make a temporary copy, that we pass to the dispatch function */
3212	state->tmp = state->orig;
3213
3214	subreq = cli->dispatch_send(state, ev, cli,
3215				    &ndr_table_svcctl,
3216				    NDR_SVCCTL_GETSERVICEDISPLAYNAMEW,
3217				    &state->tmp);
3218	if (tevent_req_nomem(subreq, req)) {
3219		return tevent_req_post(req, ev);
3220	}
3221	tevent_req_set_callback(subreq, rpccli_svcctl_GetServiceDisplayNameW_done, req);
3222	return req;
3223}
3224
3225static void rpccli_svcctl_GetServiceDisplayNameW_done(struct tevent_req *subreq)
3226{
3227	struct tevent_req *req = tevent_req_callback_data(
3228		subreq, struct tevent_req);
3229	struct rpccli_svcctl_GetServiceDisplayNameW_state *state = tevent_req_data(
3230		req, struct rpccli_svcctl_GetServiceDisplayNameW_state);
3231	NTSTATUS status;
3232	TALLOC_CTX *mem_ctx;
3233
3234	if (state->out_mem_ctx) {
3235		mem_ctx = state->out_mem_ctx;
3236	} else {
3237		mem_ctx = state;
3238	}
3239
3240	status = state->dispatch_recv(subreq, mem_ctx);
3241	TALLOC_FREE(subreq);
3242	if (!NT_STATUS_IS_OK(status)) {
3243		tevent_req_nterror(req, status);
3244		return;
3245	}
3246
3247	/* Copy out parameters */
3248	*state->orig.out.display_name = *state->tmp.out.display_name;
3249	if (state->orig.out.display_name_length && state->tmp.out.display_name_length) {
3250		*state->orig.out.display_name_length = *state->tmp.out.display_name_length;
3251	}
3252
3253	/* Copy result */
3254	state->orig.out.result = state->tmp.out.result;
3255
3256	/* Reset temporary structure */
3257	ZERO_STRUCT(state->tmp);
3258
3259	tevent_req_done(req);
3260}
3261
3262NTSTATUS rpccli_svcctl_GetServiceDisplayNameW_recv(struct tevent_req *req,
3263						   TALLOC_CTX *mem_ctx,
3264						   WERROR *result)
3265{
3266	struct rpccli_svcctl_GetServiceDisplayNameW_state *state = tevent_req_data(
3267		req, struct rpccli_svcctl_GetServiceDisplayNameW_state);
3268	NTSTATUS status;
3269
3270	if (tevent_req_is_nterror(req, &status)) {
3271		tevent_req_received(req);
3272		return status;
3273	}
3274
3275	/* Steal possbile out parameters to the callers context */
3276	talloc_steal(mem_ctx, state->out_mem_ctx);
3277
3278	/* Return result */
3279	*result = state->orig.out.result;
3280
3281	tevent_req_received(req);
3282	return NT_STATUS_OK;
3283}
3284
3285NTSTATUS rpccli_svcctl_GetServiceDisplayNameW(struct rpc_pipe_client *cli,
3286					      TALLOC_CTX *mem_ctx,
3287					      struct policy_handle *handle /* [in] [ref] */,
3288					      const char *service_name /* [in] [unique,charset(UTF16)] */,
3289					      const char **display_name /* [out] [ref,charset(UTF16)] */,
3290					      uint32_t *display_name_length /* [in,out] [unique] */,
3291					      WERROR *werror)
3292{
3293	struct svcctl_GetServiceDisplayNameW r;
3294	NTSTATUS status;
3295
3296	/* In parameters */
3297	r.in.handle = handle;
3298	r.in.service_name = service_name;
3299	r.in.display_name_length = display_name_length;
3300
3301	status = cli->dispatch(cli,
3302				mem_ctx,
3303				&ndr_table_svcctl,
3304				NDR_SVCCTL_GETSERVICEDISPLAYNAMEW,
3305				&r);
3306
3307	if (!NT_STATUS_IS_OK(status)) {
3308		return status;
3309	}
3310
3311	if (NT_STATUS_IS_ERR(status)) {
3312		return status;
3313	}
3314
3315	/* Return variables */
3316	*display_name = *r.out.display_name;
3317	if (display_name_length && r.out.display_name_length) {
3318		*display_name_length = *r.out.display_name_length;
3319	}
3320
3321	/* Return result */
3322	if (werror) {
3323		*werror = r.out.result;
3324	}
3325
3326	return werror_to_ntstatus(r.out.result);
3327}
3328
3329struct rpccli_svcctl_GetServiceKeyNameW_state {
3330	struct svcctl_GetServiceKeyNameW orig;
3331	struct svcctl_GetServiceKeyNameW tmp;
3332	TALLOC_CTX *out_mem_ctx;
3333	NTSTATUS (*dispatch_recv)(struct tevent_req *req, TALLOC_CTX *mem_ctx);
3334};
3335
3336static void rpccli_svcctl_GetServiceKeyNameW_done(struct tevent_req *subreq);
3337
3338struct tevent_req *rpccli_svcctl_GetServiceKeyNameW_send(TALLOC_CTX *mem_ctx,
3339							 struct tevent_context *ev,
3340							 struct rpc_pipe_client *cli,
3341							 struct policy_handle *_handle /* [in] [ref] */,
3342							 const char *_service_name /* [in] [unique,charset(UTF16)] */,
3343							 const char **_key_name /* [out] [ref,charset(UTF16)] */,
3344							 uint32_t *_display_name_length /* [in,out] [unique] */)
3345{
3346	struct tevent_req *req;
3347	struct rpccli_svcctl_GetServiceKeyNameW_state *state;
3348	struct tevent_req *subreq;
3349
3350	req = tevent_req_create(mem_ctx, &state,
3351				struct rpccli_svcctl_GetServiceKeyNameW_state);
3352	if (req == NULL) {
3353		return NULL;
3354	}
3355	state->out_mem_ctx = NULL;
3356	state->dispatch_recv = cli->dispatch_recv;
3357
3358	/* In parameters */
3359	state->orig.in.handle = _handle;
3360	state->orig.in.service_name = _service_name;
3361	state->orig.in.display_name_length = _display_name_length;
3362
3363	/* Out parameters */
3364	state->orig.out.key_name = _key_name;
3365	state->orig.out.display_name_length = _display_name_length;
3366
3367	/* Result */
3368	ZERO_STRUCT(state->orig.out.result);
3369
3370	state->out_mem_ctx = talloc_named_const(state, 0,
3371			     "rpccli_svcctl_GetServiceKeyNameW_out_memory");
3372	if (tevent_req_nomem(state->out_mem_ctx, req)) {
3373		return tevent_req_post(req, ev);
3374	}
3375
3376	/* make a temporary copy, that we pass to the dispatch function */
3377	state->tmp = state->orig;
3378
3379	subreq = cli->dispatch_send(state, ev, cli,
3380				    &ndr_table_svcctl,
3381				    NDR_SVCCTL_GETSERVICEKEYNAMEW,
3382				    &state->tmp);
3383	if (tevent_req_nomem(subreq, req)) {
3384		return tevent_req_post(req, ev);
3385	}
3386	tevent_req_set_callback(subreq, rpccli_svcctl_GetServiceKeyNameW_done, req);
3387	return req;
3388}
3389
3390static void rpccli_svcctl_GetServiceKeyNameW_done(struct tevent_req *subreq)
3391{
3392	struct tevent_req *req = tevent_req_callback_data(
3393		subreq, struct tevent_req);
3394	struct rpccli_svcctl_GetServiceKeyNameW_state *state = tevent_req_data(
3395		req, struct rpccli_svcctl_GetServiceKeyNameW_state);
3396	NTSTATUS status;
3397	TALLOC_CTX *mem_ctx;
3398
3399	if (state->out_mem_ctx) {
3400		mem_ctx = state->out_mem_ctx;
3401	} else {
3402		mem_ctx = state;
3403	}
3404
3405	status = state->dispatch_recv(subreq, mem_ctx);
3406	TALLOC_FREE(subreq);
3407	if (!NT_STATUS_IS_OK(status)) {
3408		tevent_req_nterror(req, status);
3409		return;
3410	}
3411
3412	/* Copy out parameters */
3413	*state->orig.out.key_name = *state->tmp.out.key_name;
3414	if (state->orig.out.display_name_length && state->tmp.out.display_name_length) {
3415		*state->orig.out.display_name_length = *state->tmp.out.display_name_length;
3416	}
3417
3418	/* Copy result */
3419	state->orig.out.result = state->tmp.out.result;
3420
3421	/* Reset temporary structure */
3422	ZERO_STRUCT(state->tmp);
3423
3424	tevent_req_done(req);
3425}
3426
3427NTSTATUS rpccli_svcctl_GetServiceKeyNameW_recv(struct tevent_req *req,
3428					       TALLOC_CTX *mem_ctx,
3429					       WERROR *result)
3430{
3431	struct rpccli_svcctl_GetServiceKeyNameW_state *state = tevent_req_data(
3432		req, struct rpccli_svcctl_GetServiceKeyNameW_state);
3433	NTSTATUS status;
3434
3435	if (tevent_req_is_nterror(req, &status)) {
3436		tevent_req_received(req);
3437		return status;
3438	}
3439
3440	/* Steal possbile out parameters to the callers context */
3441	talloc_steal(mem_ctx, state->out_mem_ctx);
3442
3443	/* Return result */
3444	*result = state->orig.out.result;
3445
3446	tevent_req_received(req);
3447	return NT_STATUS_OK;
3448}
3449
3450NTSTATUS rpccli_svcctl_GetServiceKeyNameW(struct rpc_pipe_client *cli,
3451					  TALLOC_CTX *mem_ctx,
3452					  struct policy_handle *handle /* [in] [ref] */,
3453					  const char *service_name /* [in] [unique,charset(UTF16)] */,
3454					  const char **key_name /* [out] [ref,charset(UTF16)] */,
3455					  uint32_t *display_name_length /* [in,out] [unique] */,
3456					  WERROR *werror)
3457{
3458	struct svcctl_GetServiceKeyNameW r;
3459	NTSTATUS status;
3460
3461	/* In parameters */
3462	r.in.handle = handle;
3463	r.in.service_name = service_name;
3464	r.in.display_name_length = display_name_length;
3465
3466	status = cli->dispatch(cli,
3467				mem_ctx,
3468				&ndr_table_svcctl,
3469				NDR_SVCCTL_GETSERVICEKEYNAMEW,
3470				&r);
3471
3472	if (!NT_STATUS_IS_OK(status)) {
3473		return status;
3474	}
3475
3476	if (NT_STATUS_IS_ERR(status)) {
3477		return status;
3478	}
3479
3480	/* Return variables */
3481	*key_name = *r.out.key_name;
3482	if (display_name_length && r.out.display_name_length) {
3483		*display_name_length = *r.out.display_name_length;
3484	}
3485
3486	/* Return result */
3487	if (werror) {
3488		*werror = r.out.result;
3489	}
3490
3491	return werror_to_ntstatus(r.out.result);
3492}
3493
3494struct rpccli_svcctl_SCSetServiceBitsA_state {
3495	struct svcctl_SCSetServiceBitsA orig;
3496	struct svcctl_SCSetServiceBitsA tmp;
3497	TALLOC_CTX *out_mem_ctx;
3498	NTSTATUS (*dispatch_recv)(struct tevent_req *req, TALLOC_CTX *mem_ctx);
3499};
3500
3501static void rpccli_svcctl_SCSetServiceBitsA_done(struct tevent_req *subreq);
3502
3503struct tevent_req *rpccli_svcctl_SCSetServiceBitsA_send(TALLOC_CTX *mem_ctx,
3504							struct tevent_context *ev,
3505							struct rpc_pipe_client *cli,
3506							struct policy_handle *_handle /* [in] [ref] */,
3507							uint32_t _bits /* [in]  */,
3508							uint32_t _bitson /* [in]  */,
3509							uint32_t _immediate /* [in]  */)
3510{
3511	struct tevent_req *req;
3512	struct rpccli_svcctl_SCSetServiceBitsA_state *state;
3513	struct tevent_req *subreq;
3514
3515	req = tevent_req_create(mem_ctx, &state,
3516				struct rpccli_svcctl_SCSetServiceBitsA_state);
3517	if (req == NULL) {
3518		return NULL;
3519	}
3520	state->out_mem_ctx = NULL;
3521	state->dispatch_recv = cli->dispatch_recv;
3522
3523	/* In parameters */
3524	state->orig.in.handle = _handle;
3525	state->orig.in.bits = _bits;
3526	state->orig.in.bitson = _bitson;
3527	state->orig.in.immediate = _immediate;
3528
3529	/* Out parameters */
3530
3531	/* Result */
3532	ZERO_STRUCT(state->orig.out.result);
3533
3534	/* make a temporary copy, that we pass to the dispatch function */
3535	state->tmp = state->orig;
3536
3537	subreq = cli->dispatch_send(state, ev, cli,
3538				    &ndr_table_svcctl,
3539				    NDR_SVCCTL_SCSETSERVICEBITSA,
3540				    &state->tmp);
3541	if (tevent_req_nomem(subreq, req)) {
3542		return tevent_req_post(req, ev);
3543	}
3544	tevent_req_set_callback(subreq, rpccli_svcctl_SCSetServiceBitsA_done, req);
3545	return req;
3546}
3547
3548static void rpccli_svcctl_SCSetServiceBitsA_done(struct tevent_req *subreq)
3549{
3550	struct tevent_req *req = tevent_req_callback_data(
3551		subreq, struct tevent_req);
3552	struct rpccli_svcctl_SCSetServiceBitsA_state *state = tevent_req_data(
3553		req, struct rpccli_svcctl_SCSetServiceBitsA_state);
3554	NTSTATUS status;
3555	TALLOC_CTX *mem_ctx;
3556
3557	if (state->out_mem_ctx) {
3558		mem_ctx = state->out_mem_ctx;
3559	} else {
3560		mem_ctx = state;
3561	}
3562
3563	status = state->dispatch_recv(subreq, mem_ctx);
3564	TALLOC_FREE(subreq);
3565	if (!NT_STATUS_IS_OK(status)) {
3566		tevent_req_nterror(req, status);
3567		return;
3568	}
3569
3570	/* Copy out parameters */
3571
3572	/* Copy result */
3573	state->orig.out.result = state->tmp.out.result;
3574
3575	/* Reset temporary structure */
3576	ZERO_STRUCT(state->tmp);
3577
3578	tevent_req_done(req);
3579}
3580
3581NTSTATUS rpccli_svcctl_SCSetServiceBitsA_recv(struct tevent_req *req,
3582					      TALLOC_CTX *mem_ctx,
3583					      WERROR *result)
3584{
3585	struct rpccli_svcctl_SCSetServiceBitsA_state *state = tevent_req_data(
3586		req, struct rpccli_svcctl_SCSetServiceBitsA_state);
3587	NTSTATUS status;
3588
3589	if (tevent_req_is_nterror(req, &status)) {
3590		tevent_req_received(req);
3591		return status;
3592	}
3593
3594	/* Steal possbile out parameters to the callers context */
3595	talloc_steal(mem_ctx, state->out_mem_ctx);
3596
3597	/* Return result */
3598	*result = state->orig.out.result;
3599
3600	tevent_req_received(req);
3601	return NT_STATUS_OK;
3602}
3603
3604NTSTATUS rpccli_svcctl_SCSetServiceBitsA(struct rpc_pipe_client *cli,
3605					 TALLOC_CTX *mem_ctx,
3606					 struct policy_handle *handle /* [in] [ref] */,
3607					 uint32_t bits /* [in]  */,
3608					 uint32_t bitson /* [in]  */,
3609					 uint32_t immediate /* [in]  */,
3610					 WERROR *werror)
3611{
3612	struct svcctl_SCSetServiceBitsA r;
3613	NTSTATUS status;
3614
3615	/* In parameters */
3616	r.in.handle = handle;
3617	r.in.bits = bits;
3618	r.in.bitson = bitson;
3619	r.in.immediate = immediate;
3620
3621	status = cli->dispatch(cli,
3622				mem_ctx,
3623				&ndr_table_svcctl,
3624				NDR_SVCCTL_SCSETSERVICEBITSA,
3625				&r);
3626
3627	if (!NT_STATUS_IS_OK(status)) {
3628		return status;
3629	}
3630
3631	if (NT_STATUS_IS_ERR(status)) {
3632		return status;
3633	}
3634
3635	/* Return variables */
3636
3637	/* Return result */
3638	if (werror) {
3639		*werror = r.out.result;
3640	}
3641
3642	return werror_to_ntstatus(r.out.result);
3643}
3644
3645struct rpccli_svcctl_ChangeServiceConfigA_state {
3646	struct svcctl_ChangeServiceConfigA orig;
3647	struct svcctl_ChangeServiceConfigA tmp;
3648	TALLOC_CTX *out_mem_ctx;
3649	NTSTATUS (*dispatch_recv)(struct tevent_req *req, TALLOC_CTX *mem_ctx);
3650};
3651
3652static void rpccli_svcctl_ChangeServiceConfigA_done(struct tevent_req *subreq);
3653
3654struct tevent_req *rpccli_svcctl_ChangeServiceConfigA_send(TALLOC_CTX *mem_ctx,
3655							   struct tevent_context *ev,
3656							   struct rpc_pipe_client *cli,
3657							   struct policy_handle *_handle /* [in] [ref] */,
3658							   uint32_t _type /* [in]  */,
3659							   enum svcctl_StartType _start_type /* [in]  */,
3660							   enum svcctl_ErrorControl _error_control /* [in]  */,
3661							   const char *_binary_path /* [in] [unique,charset(UTF16)] */,
3662							   const char *_load_order_group /* [in] [unique,charset(UTF16)] */,
3663							   uint32_t *_tag_id /* [out] [ref] */,
3664							   const char *_dependencies /* [in] [unique,charset(UTF16)] */,
3665							   const char *_service_start_name /* [in] [unique,charset(UTF16)] */,
3666							   const char *_password /* [in] [unique,charset(UTF16)] */,
3667							   const char *_display_name /* [in] [unique,charset(UTF16)] */)
3668{
3669	struct tevent_req *req;
3670	struct rpccli_svcctl_ChangeServiceConfigA_state *state;
3671	struct tevent_req *subreq;
3672
3673	req = tevent_req_create(mem_ctx, &state,
3674				struct rpccli_svcctl_ChangeServiceConfigA_state);
3675	if (req == NULL) {
3676		return NULL;
3677	}
3678	state->out_mem_ctx = NULL;
3679	state->dispatch_recv = cli->dispatch_recv;
3680
3681	/* In parameters */
3682	state->orig.in.handle = _handle;
3683	state->orig.in.type = _type;
3684	state->orig.in.start_type = _start_type;
3685	state->orig.in.error_control = _error_control;
3686	state->orig.in.binary_path = _binary_path;
3687	state->orig.in.load_order_group = _load_order_group;
3688	state->orig.in.dependencies = _dependencies;
3689	state->orig.in.service_start_name = _service_start_name;
3690	state->orig.in.password = _password;
3691	state->orig.in.display_name = _display_name;
3692
3693	/* Out parameters */
3694	state->orig.out.tag_id = _tag_id;
3695
3696	/* Result */
3697	ZERO_STRUCT(state->orig.out.result);
3698
3699	state->out_mem_ctx = talloc_named_const(state, 0,
3700			     "rpccli_svcctl_ChangeServiceConfigA_out_memory");
3701	if (tevent_req_nomem(state->out_mem_ctx, req)) {
3702		return tevent_req_post(req, ev);
3703	}
3704
3705	/* make a temporary copy, that we pass to the dispatch function */
3706	state->tmp = state->orig;
3707
3708	subreq = cli->dispatch_send(state, ev, cli,
3709				    &ndr_table_svcctl,
3710				    NDR_SVCCTL_CHANGESERVICECONFIGA,
3711				    &state->tmp);
3712	if (tevent_req_nomem(subreq, req)) {
3713		return tevent_req_post(req, ev);
3714	}
3715	tevent_req_set_callback(subreq, rpccli_svcctl_ChangeServiceConfigA_done, req);
3716	return req;
3717}
3718
3719static void rpccli_svcctl_ChangeServiceConfigA_done(struct tevent_req *subreq)
3720{
3721	struct tevent_req *req = tevent_req_callback_data(
3722		subreq, struct tevent_req);
3723	struct rpccli_svcctl_ChangeServiceConfigA_state *state = tevent_req_data(
3724		req, struct rpccli_svcctl_ChangeServiceConfigA_state);
3725	NTSTATUS status;
3726	TALLOC_CTX *mem_ctx;
3727
3728	if (state->out_mem_ctx) {
3729		mem_ctx = state->out_mem_ctx;
3730	} else {
3731		mem_ctx = state;
3732	}
3733
3734	status = state->dispatch_recv(subreq, mem_ctx);
3735	TALLOC_FREE(subreq);
3736	if (!NT_STATUS_IS_OK(status)) {
3737		tevent_req_nterror(req, status);
3738		return;
3739	}
3740
3741	/* Copy out parameters */
3742	*state->orig.out.tag_id = *state->tmp.out.tag_id;
3743
3744	/* Copy result */
3745	state->orig.out.result = state->tmp.out.result;
3746
3747	/* Reset temporary structure */
3748	ZERO_STRUCT(state->tmp);
3749
3750	tevent_req_done(req);
3751}
3752
3753NTSTATUS rpccli_svcctl_ChangeServiceConfigA_recv(struct tevent_req *req,
3754						 TALLOC_CTX *mem_ctx,
3755						 WERROR *result)
3756{
3757	struct rpccli_svcctl_ChangeServiceConfigA_state *state = tevent_req_data(
3758		req, struct rpccli_svcctl_ChangeServiceConfigA_state);
3759	NTSTATUS status;
3760
3761	if (tevent_req_is_nterror(req, &status)) {
3762		tevent_req_received(req);
3763		return status;
3764	}
3765
3766	/* Steal possbile out parameters to the callers context */
3767	talloc_steal(mem_ctx, state->out_mem_ctx);
3768
3769	/* Return result */
3770	*result = state->orig.out.result;
3771
3772	tevent_req_received(req);
3773	return NT_STATUS_OK;
3774}
3775
3776NTSTATUS rpccli_svcctl_ChangeServiceConfigA(struct rpc_pipe_client *cli,
3777					    TALLOC_CTX *mem_ctx,
3778					    struct policy_handle *handle /* [in] [ref] */,
3779					    uint32_t type /* [in]  */,
3780					    enum svcctl_StartType start_type /* [in]  */,
3781					    enum svcctl_ErrorControl error_control /* [in]  */,
3782					    const char *binary_path /* [in] [unique,charset(UTF16)] */,
3783					    const char *load_order_group /* [in] [unique,charset(UTF16)] */,
3784					    uint32_t *tag_id /* [out] [ref] */,
3785					    const char *dependencies /* [in] [unique,charset(UTF16)] */,
3786					    const char *service_start_name /* [in] [unique,charset(UTF16)] */,
3787					    const char *password /* [in] [unique,charset(UTF16)] */,
3788					    const char *display_name /* [in] [unique,charset(UTF16)] */,
3789					    WERROR *werror)
3790{
3791	struct svcctl_ChangeServiceConfigA r;
3792	NTSTATUS status;
3793
3794	/* In parameters */
3795	r.in.handle = handle;
3796	r.in.type = type;
3797	r.in.start_type = start_type;
3798	r.in.error_control = error_control;
3799	r.in.binary_path = binary_path;
3800	r.in.load_order_group = load_order_group;
3801	r.in.dependencies = dependencies;
3802	r.in.service_start_name = service_start_name;
3803	r.in.password = password;
3804	r.in.display_name = display_name;
3805
3806	status = cli->dispatch(cli,
3807				mem_ctx,
3808				&ndr_table_svcctl,
3809				NDR_SVCCTL_CHANGESERVICECONFIGA,
3810				&r);
3811
3812	if (!NT_STATUS_IS_OK(status)) {
3813		return status;
3814	}
3815
3816	if (NT_STATUS_IS_ERR(status)) {
3817		return status;
3818	}
3819
3820	/* Return variables */
3821	*tag_id = *r.out.tag_id;
3822
3823	/* Return result */
3824	if (werror) {
3825		*werror = r.out.result;
3826	}
3827
3828	return werror_to_ntstatus(r.out.result);
3829}
3830
3831struct rpccli_svcctl_CreateServiceA_state {
3832	struct svcctl_CreateServiceA orig;
3833	struct svcctl_CreateServiceA tmp;
3834	TALLOC_CTX *out_mem_ctx;
3835	NTSTATUS (*dispatch_recv)(struct tevent_req *req, TALLOC_CTX *mem_ctx);
3836};
3837
3838static void rpccli_svcctl_CreateServiceA_done(struct tevent_req *subreq);
3839
3840struct tevent_req *rpccli_svcctl_CreateServiceA_send(TALLOC_CTX *mem_ctx,
3841						     struct tevent_context *ev,
3842						     struct rpc_pipe_client *cli,
3843						     struct policy_handle *_handle /* [in] [ref] */,
3844						     const char *_ServiceName /* [in] [unique,charset(UTF16)] */,
3845						     const char *_DisplayName /* [in] [unique,charset(UTF16)] */,
3846						     uint32_t _desired_access /* [in]  */,
3847						     uint32_t _type /* [in]  */,
3848						     enum svcctl_StartType _start_type /* [in]  */,
3849						     enum svcctl_ErrorControl _error_control /* [in]  */,
3850						     const char *_binary_path /* [in] [unique,charset(UTF16)] */,
3851						     const char *_LoadOrderGroupKey /* [in] [unique,charset(UTF16)] */,
3852						     uint32_t *_TagId /* [out] [unique] */,
3853						     const char *_dependencies /* [in] [unique,charset(UTF16)] */,
3854						     const char *_service_start_name /* [in] [unique,charset(UTF16)] */,
3855						     const char *_password /* [in] [unique,charset(UTF16)] */)
3856{
3857	struct tevent_req *req;
3858	struct rpccli_svcctl_CreateServiceA_state *state;
3859	struct tevent_req *subreq;
3860
3861	req = tevent_req_create(mem_ctx, &state,
3862				struct rpccli_svcctl_CreateServiceA_state);
3863	if (req == NULL) {
3864		return NULL;
3865	}
3866	state->out_mem_ctx = NULL;
3867	state->dispatch_recv = cli->dispatch_recv;
3868
3869	/* In parameters */
3870	state->orig.in.handle = _handle;
3871	state->orig.in.ServiceName = _ServiceName;
3872	state->orig.in.DisplayName = _DisplayName;
3873	state->orig.in.desired_access = _desired_access;
3874	state->orig.in.type = _type;
3875	state->orig.in.start_type = _start_type;
3876	state->orig.in.error_control = _error_control;
3877	state->orig.in.binary_path = _binary_path;
3878	state->orig.in.LoadOrderGroupKey = _LoadOrderGroupKey;
3879	state->orig.in.dependencies = _dependencies;
3880	state->orig.in.service_start_name = _service_start_name;
3881	state->orig.in.password = _password;
3882
3883	/* Out parameters */
3884	state->orig.out.TagId = _TagId;
3885
3886	/* Result */
3887	ZERO_STRUCT(state->orig.out.result);
3888
3889	state->out_mem_ctx = talloc_named_const(state, 0,
3890			     "rpccli_svcctl_CreateServiceA_out_memory");
3891	if (tevent_req_nomem(state->out_mem_ctx, req)) {
3892		return tevent_req_post(req, ev);
3893	}
3894
3895	/* make a temporary copy, that we pass to the dispatch function */
3896	state->tmp = state->orig;
3897
3898	subreq = cli->dispatch_send(state, ev, cli,
3899				    &ndr_table_svcctl,
3900				    NDR_SVCCTL_CREATESERVICEA,
3901				    &state->tmp);
3902	if (tevent_req_nomem(subreq, req)) {
3903		return tevent_req_post(req, ev);
3904	}
3905	tevent_req_set_callback(subreq, rpccli_svcctl_CreateServiceA_done, req);
3906	return req;
3907}
3908
3909static void rpccli_svcctl_CreateServiceA_done(struct tevent_req *subreq)
3910{
3911	struct tevent_req *req = tevent_req_callback_data(
3912		subreq, struct tevent_req);
3913	struct rpccli_svcctl_CreateServiceA_state *state = tevent_req_data(
3914		req, struct rpccli_svcctl_CreateServiceA_state);
3915	NTSTATUS status;
3916	TALLOC_CTX *mem_ctx;
3917
3918	if (state->out_mem_ctx) {
3919		mem_ctx = state->out_mem_ctx;
3920	} else {
3921		mem_ctx = state;
3922	}
3923
3924	status = state->dispatch_recv(subreq, mem_ctx);
3925	TALLOC_FREE(subreq);
3926	if (!NT_STATUS_IS_OK(status)) {
3927		tevent_req_nterror(req, status);
3928		return;
3929	}
3930
3931	/* Copy out parameters */
3932	if (state->orig.out.TagId && state->tmp.out.TagId) {
3933		*state->orig.out.TagId = *state->tmp.out.TagId;
3934	}
3935
3936	/* Copy result */
3937	state->orig.out.result = state->tmp.out.result;
3938
3939	/* Reset temporary structure */
3940	ZERO_STRUCT(state->tmp);
3941
3942	tevent_req_done(req);
3943}
3944
3945NTSTATUS rpccli_svcctl_CreateServiceA_recv(struct tevent_req *req,
3946					   TALLOC_CTX *mem_ctx,
3947					   WERROR *result)
3948{
3949	struct rpccli_svcctl_CreateServiceA_state *state = tevent_req_data(
3950		req, struct rpccli_svcctl_CreateServiceA_state);
3951	NTSTATUS status;
3952
3953	if (tevent_req_is_nterror(req, &status)) {
3954		tevent_req_received(req);
3955		return status;
3956	}
3957
3958	/* Steal possbile out parameters to the callers context */
3959	talloc_steal(mem_ctx, state->out_mem_ctx);
3960
3961	/* Return result */
3962	*result = state->orig.out.result;
3963
3964	tevent_req_received(req);
3965	return NT_STATUS_OK;
3966}
3967
3968NTSTATUS rpccli_svcctl_CreateServiceA(struct rpc_pipe_client *cli,
3969				      TALLOC_CTX *mem_ctx,
3970				      struct policy_handle *handle /* [in] [ref] */,
3971				      const char *ServiceName /* [in] [unique,charset(UTF16)] */,
3972				      const char *DisplayName /* [in] [unique,charset(UTF16)] */,
3973				      uint32_t desired_access /* [in]  */,
3974				      uint32_t type /* [in]  */,
3975				      enum svcctl_StartType start_type /* [in]  */,
3976				      enum svcctl_ErrorControl error_control /* [in]  */,
3977				      const char *binary_path /* [in] [unique,charset(UTF16)] */,
3978				      const char *LoadOrderGroupKey /* [in] [unique,charset(UTF16)] */,
3979				      uint32_t *TagId /* [out] [unique] */,
3980				      const char *dependencies /* [in] [unique,charset(UTF16)] */,
3981				      const char *service_start_name /* [in] [unique,charset(UTF16)] */,
3982				      const char *password /* [in] [unique,charset(UTF16)] */,
3983				      WERROR *werror)
3984{
3985	struct svcctl_CreateServiceA r;
3986	NTSTATUS status;
3987
3988	/* In parameters */
3989	r.in.handle = handle;
3990	r.in.ServiceName = ServiceName;
3991	r.in.DisplayName = DisplayName;
3992	r.in.desired_access = desired_access;
3993	r.in.type = type;
3994	r.in.start_type = start_type;
3995	r.in.error_control = error_control;
3996	r.in.binary_path = binary_path;
3997	r.in.LoadOrderGroupKey = LoadOrderGroupKey;
3998	r.in.dependencies = dependencies;
3999	r.in.service_start_name = service_start_name;
4000	r.in.password = password;
4001
4002	status = cli->dispatch(cli,
4003				mem_ctx,
4004				&ndr_table_svcctl,
4005				NDR_SVCCTL_CREATESERVICEA,
4006				&r);
4007
4008	if (!NT_STATUS_IS_OK(status)) {
4009		return status;
4010	}
4011
4012	if (NT_STATUS_IS_ERR(status)) {
4013		return status;
4014	}
4015
4016	/* Return variables */
4017	if (TagId && r.out.TagId) {
4018		*TagId = *r.out.TagId;
4019	}
4020
4021	/* Return result */
4022	if (werror) {
4023		*werror = r.out.result;
4024	}
4025
4026	return werror_to_ntstatus(r.out.result);
4027}
4028
4029struct rpccli_svcctl_EnumDependentServicesA_state {
4030	struct svcctl_EnumDependentServicesA orig;
4031	struct svcctl_EnumDependentServicesA tmp;
4032	TALLOC_CTX *out_mem_ctx;
4033	NTSTATUS (*dispatch_recv)(struct tevent_req *req, TALLOC_CTX *mem_ctx);
4034};
4035
4036static void rpccli_svcctl_EnumDependentServicesA_done(struct tevent_req *subreq);
4037
4038struct tevent_req *rpccli_svcctl_EnumDependentServicesA_send(TALLOC_CTX *mem_ctx,
4039							     struct tevent_context *ev,
4040							     struct rpc_pipe_client *cli,
4041							     struct policy_handle *_service /* [in] [ref] */,
4042							     enum svcctl_ServiceState _state /* [in]  */,
4043							     struct ENUM_SERVICE_STATUSA *_service_status /* [out] [unique] */,
4044							     uint32_t _offered /* [in]  */,
4045							     uint32_t *_needed /* [out] [ref] */,
4046							     uint32_t *_services_returned /* [out] [ref] */)
4047{
4048	struct tevent_req *req;
4049	struct rpccli_svcctl_EnumDependentServicesA_state *state;
4050	struct tevent_req *subreq;
4051
4052	req = tevent_req_create(mem_ctx, &state,
4053				struct rpccli_svcctl_EnumDependentServicesA_state);
4054	if (req == NULL) {
4055		return NULL;
4056	}
4057	state->out_mem_ctx = NULL;
4058	state->dispatch_recv = cli->dispatch_recv;
4059
4060	/* In parameters */
4061	state->orig.in.service = _service;
4062	state->orig.in.state = _state;
4063	state->orig.in.offered = _offered;
4064
4065	/* Out parameters */
4066	state->orig.out.service_status = _service_status;
4067	state->orig.out.needed = _needed;
4068	state->orig.out.services_returned = _services_returned;
4069
4070	/* Result */
4071	ZERO_STRUCT(state->orig.out.result);
4072
4073	state->out_mem_ctx = talloc_named_const(state, 0,
4074			     "rpccli_svcctl_EnumDependentServicesA_out_memory");
4075	if (tevent_req_nomem(state->out_mem_ctx, req)) {
4076		return tevent_req_post(req, ev);
4077	}
4078
4079	/* make a temporary copy, that we pass to the dispatch function */
4080	state->tmp = state->orig;
4081
4082	subreq = cli->dispatch_send(state, ev, cli,
4083				    &ndr_table_svcctl,
4084				    NDR_SVCCTL_ENUMDEPENDENTSERVICESA,
4085				    &state->tmp);
4086	if (tevent_req_nomem(subreq, req)) {
4087		return tevent_req_post(req, ev);
4088	}
4089	tevent_req_set_callback(subreq, rpccli_svcctl_EnumDependentServicesA_done, req);
4090	return req;
4091}
4092
4093static void rpccli_svcctl_EnumDependentServicesA_done(struct tevent_req *subreq)
4094{
4095	struct tevent_req *req = tevent_req_callback_data(
4096		subreq, struct tevent_req);
4097	struct rpccli_svcctl_EnumDependentServicesA_state *state = tevent_req_data(
4098		req, struct rpccli_svcctl_EnumDependentServicesA_state);
4099	NTSTATUS status;
4100	TALLOC_CTX *mem_ctx;
4101
4102	if (state->out_mem_ctx) {
4103		mem_ctx = state->out_mem_ctx;
4104	} else {
4105		mem_ctx = state;
4106	}
4107
4108	status = state->dispatch_recv(subreq, mem_ctx);
4109	TALLOC_FREE(subreq);
4110	if (!NT_STATUS_IS_OK(status)) {
4111		tevent_req_nterror(req, status);
4112		return;
4113	}
4114
4115	/* Copy out parameters */
4116	if (state->orig.out.service_status && state->tmp.out.service_status) {
4117		*state->orig.out.service_status = *state->tmp.out.service_status;
4118	}
4119	*state->orig.out.needed = *state->tmp.out.needed;
4120	*state->orig.out.services_returned = *state->tmp.out.services_returned;
4121
4122	/* Copy result */
4123	state->orig.out.result = state->tmp.out.result;
4124
4125	/* Reset temporary structure */
4126	ZERO_STRUCT(state->tmp);
4127
4128	tevent_req_done(req);
4129}
4130
4131NTSTATUS rpccli_svcctl_EnumDependentServicesA_recv(struct tevent_req *req,
4132						   TALLOC_CTX *mem_ctx,
4133						   WERROR *result)
4134{
4135	struct rpccli_svcctl_EnumDependentServicesA_state *state = tevent_req_data(
4136		req, struct rpccli_svcctl_EnumDependentServicesA_state);
4137	NTSTATUS status;
4138
4139	if (tevent_req_is_nterror(req, &status)) {
4140		tevent_req_received(req);
4141		return status;
4142	}
4143
4144	/* Steal possbile out parameters to the callers context */
4145	talloc_steal(mem_ctx, state->out_mem_ctx);
4146
4147	/* Return result */
4148	*result = state->orig.out.result;
4149
4150	tevent_req_received(req);
4151	return NT_STATUS_OK;
4152}
4153
4154NTSTATUS rpccli_svcctl_EnumDependentServicesA(struct rpc_pipe_client *cli,
4155					      TALLOC_CTX *mem_ctx,
4156					      struct policy_handle *service /* [in] [ref] */,
4157					      enum svcctl_ServiceState state /* [in]  */,
4158					      struct ENUM_SERVICE_STATUSA *service_status /* [out] [unique] */,
4159					      uint32_t offered /* [in]  */,
4160					      uint32_t *needed /* [out] [ref] */,
4161					      uint32_t *services_returned /* [out] [ref] */,
4162					      WERROR *werror)
4163{
4164	struct svcctl_EnumDependentServicesA r;
4165	NTSTATUS status;
4166
4167	/* In parameters */
4168	r.in.service = service;
4169	r.in.state = state;
4170	r.in.offered = offered;
4171
4172	status = cli->dispatch(cli,
4173				mem_ctx,
4174				&ndr_table_svcctl,
4175				NDR_SVCCTL_ENUMDEPENDENTSERVICESA,
4176				&r);
4177
4178	if (!NT_STATUS_IS_OK(status)) {
4179		return status;
4180	}
4181
4182	if (NT_STATUS_IS_ERR(status)) {
4183		return status;
4184	}
4185
4186	/* Return variables */
4187	if (service_status && r.out.service_status) {
4188		*service_status = *r.out.service_status;
4189	}
4190	*needed = *r.out.needed;
4191	*services_returned = *r.out.services_returned;
4192
4193	/* Return result */
4194	if (werror) {
4195		*werror = r.out.result;
4196	}
4197
4198	return werror_to_ntstatus(r.out.result);
4199}
4200
4201struct rpccli_svcctl_EnumServicesStatusA_state {
4202	struct svcctl_EnumServicesStatusA orig;
4203	struct svcctl_EnumServicesStatusA tmp;
4204	TALLOC_CTX *out_mem_ctx;
4205	NTSTATUS (*dispatch_recv)(struct tevent_req *req, TALLOC_CTX *mem_ctx);
4206};
4207
4208static void rpccli_svcctl_EnumServicesStatusA_done(struct tevent_req *subreq);
4209
4210struct tevent_req *rpccli_svcctl_EnumServicesStatusA_send(TALLOC_CTX *mem_ctx,
4211							  struct tevent_context *ev,
4212							  struct rpc_pipe_client *cli,
4213							  struct policy_handle *_handle /* [in] [ref] */,
4214							  uint32_t _type /* [in]  */,
4215							  enum svcctl_ServiceState _state /* [in]  */,
4216							  uint32_t _offered /* [in]  */,
4217							  uint8_t *_service /* [out] [size_is(offered)] */,
4218							  uint32_t *_needed /* [out] [ref] */,
4219							  uint32_t *_services_returned /* [out] [ref] */,
4220							  uint32_t *_resume_handle /* [in,out] [unique] */)
4221{
4222	struct tevent_req *req;
4223	struct rpccli_svcctl_EnumServicesStatusA_state *state;
4224	struct tevent_req *subreq;
4225
4226	req = tevent_req_create(mem_ctx, &state,
4227				struct rpccli_svcctl_EnumServicesStatusA_state);
4228	if (req == NULL) {
4229		return NULL;
4230	}
4231	state->out_mem_ctx = NULL;
4232	state->dispatch_recv = cli->dispatch_recv;
4233
4234	/* In parameters */
4235	state->orig.in.handle = _handle;
4236	state->orig.in.type = _type;
4237	state->orig.in.state = _state;
4238	state->orig.in.offered = _offered;
4239	state->orig.in.resume_handle = _resume_handle;
4240
4241	/* Out parameters */
4242	state->orig.out.service = _service;
4243	state->orig.out.needed = _needed;
4244	state->orig.out.services_returned = _services_returned;
4245	state->orig.out.resume_handle = _resume_handle;
4246
4247	/* Result */
4248	ZERO_STRUCT(state->orig.out.result);
4249
4250	state->out_mem_ctx = talloc_named_const(state, 0,
4251			     "rpccli_svcctl_EnumServicesStatusA_out_memory");
4252	if (tevent_req_nomem(state->out_mem_ctx, req)) {
4253		return tevent_req_post(req, ev);
4254	}
4255
4256	/* make a temporary copy, that we pass to the dispatch function */
4257	state->tmp = state->orig;
4258
4259	subreq = cli->dispatch_send(state, ev, cli,
4260				    &ndr_table_svcctl,
4261				    NDR_SVCCTL_ENUMSERVICESSTATUSA,
4262				    &state->tmp);
4263	if (tevent_req_nomem(subreq, req)) {
4264		return tevent_req_post(req, ev);
4265	}
4266	tevent_req_set_callback(subreq, rpccli_svcctl_EnumServicesStatusA_done, req);
4267	return req;
4268}
4269
4270static void rpccli_svcctl_EnumServicesStatusA_done(struct tevent_req *subreq)
4271{
4272	struct tevent_req *req = tevent_req_callback_data(
4273		subreq, struct tevent_req);
4274	struct rpccli_svcctl_EnumServicesStatusA_state *state = tevent_req_data(
4275		req, struct rpccli_svcctl_EnumServicesStatusA_state);
4276	NTSTATUS status;
4277	TALLOC_CTX *mem_ctx;
4278
4279	if (state->out_mem_ctx) {
4280		mem_ctx = state->out_mem_ctx;
4281	} else {
4282		mem_ctx = state;
4283	}
4284
4285	status = state->dispatch_recv(subreq, mem_ctx);
4286	TALLOC_FREE(subreq);
4287	if (!NT_STATUS_IS_OK(status)) {
4288		tevent_req_nterror(req, status);
4289		return;
4290	}
4291
4292	/* Copy out parameters */
4293	memcpy(state->orig.out.service, state->tmp.out.service, (state->tmp.in.offered) * sizeof(*state->orig.out.service));
4294	*state->orig.out.needed = *state->tmp.out.needed;
4295	*state->orig.out.services_returned = *state->tmp.out.services_returned;
4296	if (state->orig.out.resume_handle && state->tmp.out.resume_handle) {
4297		*state->orig.out.resume_handle = *state->tmp.out.resume_handle;
4298	}
4299
4300	/* Copy result */
4301	state->orig.out.result = state->tmp.out.result;
4302
4303	/* Reset temporary structure */
4304	ZERO_STRUCT(state->tmp);
4305
4306	tevent_req_done(req);
4307}
4308
4309NTSTATUS rpccli_svcctl_EnumServicesStatusA_recv(struct tevent_req *req,
4310						TALLOC_CTX *mem_ctx,
4311						WERROR *result)
4312{
4313	struct rpccli_svcctl_EnumServicesStatusA_state *state = tevent_req_data(
4314		req, struct rpccli_svcctl_EnumServicesStatusA_state);
4315	NTSTATUS status;
4316
4317	if (tevent_req_is_nterror(req, &status)) {
4318		tevent_req_received(req);
4319		return status;
4320	}
4321
4322	/* Steal possbile out parameters to the callers context */
4323	talloc_steal(mem_ctx, state->out_mem_ctx);
4324
4325	/* Return result */
4326	*result = state->orig.out.result;
4327
4328	tevent_req_received(req);
4329	return NT_STATUS_OK;
4330}
4331
4332NTSTATUS rpccli_svcctl_EnumServicesStatusA(struct rpc_pipe_client *cli,
4333					   TALLOC_CTX *mem_ctx,
4334					   struct policy_handle *handle /* [in] [ref] */,
4335					   uint32_t type /* [in]  */,
4336					   enum svcctl_ServiceState state /* [in]  */,
4337					   uint32_t offered /* [in]  */,
4338					   uint8_t *service /* [out] [size_is(offered)] */,
4339					   uint32_t *needed /* [out] [ref] */,
4340					   uint32_t *services_returned /* [out] [ref] */,
4341					   uint32_t *resume_handle /* [in,out] [unique] */,
4342					   WERROR *werror)
4343{
4344	struct svcctl_EnumServicesStatusA r;
4345	NTSTATUS status;
4346
4347	/* In parameters */
4348	r.in.handle = handle;
4349	r.in.type = type;
4350	r.in.state = state;
4351	r.in.offered = offered;
4352	r.in.resume_handle = resume_handle;
4353
4354	status = cli->dispatch(cli,
4355				mem_ctx,
4356				&ndr_table_svcctl,
4357				NDR_SVCCTL_ENUMSERVICESSTATUSA,
4358				&r);
4359
4360	if (!NT_STATUS_IS_OK(status)) {
4361		return status;
4362	}
4363
4364	if (NT_STATUS_IS_ERR(status)) {
4365		return status;
4366	}
4367
4368	/* Return variables */
4369	memcpy(service, r.out.service, (r.in.offered) * sizeof(*service));
4370	*needed = *r.out.needed;
4371	*services_returned = *r.out.services_returned;
4372	if (resume_handle && r.out.resume_handle) {
4373		*resume_handle = *r.out.resume_handle;
4374	}
4375
4376	/* Return result */
4377	if (werror) {
4378		*werror = r.out.result;
4379	}
4380
4381	return werror_to_ntstatus(r.out.result);
4382}
4383
4384struct rpccli_svcctl_OpenSCManagerA_state {
4385	struct svcctl_OpenSCManagerA orig;
4386	struct svcctl_OpenSCManagerA tmp;
4387	TALLOC_CTX *out_mem_ctx;
4388	NTSTATUS (*dispatch_recv)(struct tevent_req *req, TALLOC_CTX *mem_ctx);
4389};
4390
4391static void rpccli_svcctl_OpenSCManagerA_done(struct tevent_req *subreq);
4392
4393struct tevent_req *rpccli_svcctl_OpenSCManagerA_send(TALLOC_CTX *mem_ctx,
4394						     struct tevent_context *ev,
4395						     struct rpc_pipe_client *cli,
4396						     const char *_MachineName /* [in] [unique,charset(UTF16)] */,
4397						     const char *_DatabaseName /* [in] [unique,charset(UTF16)] */,
4398						     uint32_t _access_mask /* [in]  */,
4399						     struct policy_handle *_handle /* [out] [ref] */)
4400{
4401	struct tevent_req *req;
4402	struct rpccli_svcctl_OpenSCManagerA_state *state;
4403	struct tevent_req *subreq;
4404
4405	req = tevent_req_create(mem_ctx, &state,
4406				struct rpccli_svcctl_OpenSCManagerA_state);
4407	if (req == NULL) {
4408		return NULL;
4409	}
4410	state->out_mem_ctx = NULL;
4411	state->dispatch_recv = cli->dispatch_recv;
4412
4413	/* In parameters */
4414	state->orig.in.MachineName = _MachineName;
4415	state->orig.in.DatabaseName = _DatabaseName;
4416	state->orig.in.access_mask = _access_mask;
4417
4418	/* Out parameters */
4419	state->orig.out.handle = _handle;
4420
4421	/* Result */
4422	ZERO_STRUCT(state->orig.out.result);
4423
4424	state->out_mem_ctx = talloc_named_const(state, 0,
4425			     "rpccli_svcctl_OpenSCManagerA_out_memory");
4426	if (tevent_req_nomem(state->out_mem_ctx, req)) {
4427		return tevent_req_post(req, ev);
4428	}
4429
4430	/* make a temporary copy, that we pass to the dispatch function */
4431	state->tmp = state->orig;
4432
4433	subreq = cli->dispatch_send(state, ev, cli,
4434				    &ndr_table_svcctl,
4435				    NDR_SVCCTL_OPENSCMANAGERA,
4436				    &state->tmp);
4437	if (tevent_req_nomem(subreq, req)) {
4438		return tevent_req_post(req, ev);
4439	}
4440	tevent_req_set_callback(subreq, rpccli_svcctl_OpenSCManagerA_done, req);
4441	return req;
4442}
4443
4444static void rpccli_svcctl_OpenSCManagerA_done(struct tevent_req *subreq)
4445{
4446	struct tevent_req *req = tevent_req_callback_data(
4447		subreq, struct tevent_req);
4448	struct rpccli_svcctl_OpenSCManagerA_state *state = tevent_req_data(
4449		req, struct rpccli_svcctl_OpenSCManagerA_state);
4450	NTSTATUS status;
4451	TALLOC_CTX *mem_ctx;
4452
4453	if (state->out_mem_ctx) {
4454		mem_ctx = state->out_mem_ctx;
4455	} else {
4456		mem_ctx = state;
4457	}
4458
4459	status = state->dispatch_recv(subreq, mem_ctx);
4460	TALLOC_FREE(subreq);
4461	if (!NT_STATUS_IS_OK(status)) {
4462		tevent_req_nterror(req, status);
4463		return;
4464	}
4465
4466	/* Copy out parameters */
4467	*state->orig.out.handle = *state->tmp.out.handle;
4468
4469	/* Copy result */
4470	state->orig.out.result = state->tmp.out.result;
4471
4472	/* Reset temporary structure */
4473	ZERO_STRUCT(state->tmp);
4474
4475	tevent_req_done(req);
4476}
4477
4478NTSTATUS rpccli_svcctl_OpenSCManagerA_recv(struct tevent_req *req,
4479					   TALLOC_CTX *mem_ctx,
4480					   WERROR *result)
4481{
4482	struct rpccli_svcctl_OpenSCManagerA_state *state = tevent_req_data(
4483		req, struct rpccli_svcctl_OpenSCManagerA_state);
4484	NTSTATUS status;
4485
4486	if (tevent_req_is_nterror(req, &status)) {
4487		tevent_req_received(req);
4488		return status;
4489	}
4490
4491	/* Steal possbile out parameters to the callers context */
4492	talloc_steal(mem_ctx, state->out_mem_ctx);
4493
4494	/* Return result */
4495	*result = state->orig.out.result;
4496
4497	tevent_req_received(req);
4498	return NT_STATUS_OK;
4499}
4500
4501NTSTATUS rpccli_svcctl_OpenSCManagerA(struct rpc_pipe_client *cli,
4502				      TALLOC_CTX *mem_ctx,
4503				      const char *MachineName /* [in] [unique,charset(UTF16)] */,
4504				      const char *DatabaseName /* [in] [unique,charset(UTF16)] */,
4505				      uint32_t access_mask /* [in]  */,
4506				      struct policy_handle *handle /* [out] [ref] */,
4507				      WERROR *werror)
4508{
4509	struct svcctl_OpenSCManagerA r;
4510	NTSTATUS status;
4511
4512	/* In parameters */
4513	r.in.MachineName = MachineName;
4514	r.in.DatabaseName = DatabaseName;
4515	r.in.access_mask = access_mask;
4516
4517	status = cli->dispatch(cli,
4518				mem_ctx,
4519				&ndr_table_svcctl,
4520				NDR_SVCCTL_OPENSCMANAGERA,
4521				&r);
4522
4523	if (!NT_STATUS_IS_OK(status)) {
4524		return status;
4525	}
4526
4527	if (NT_STATUS_IS_ERR(status)) {
4528		return status;
4529	}
4530
4531	/* Return variables */
4532	*handle = *r.out.handle;
4533
4534	/* Return result */
4535	if (werror) {
4536		*werror = r.out.result;
4537	}
4538
4539	return werror_to_ntstatus(r.out.result);
4540}
4541
4542struct rpccli_svcctl_OpenServiceA_state {
4543	struct svcctl_OpenServiceA orig;
4544	struct svcctl_OpenServiceA tmp;
4545	TALLOC_CTX *out_mem_ctx;
4546	NTSTATUS (*dispatch_recv)(struct tevent_req *req, TALLOC_CTX *mem_ctx);
4547};
4548
4549static void rpccli_svcctl_OpenServiceA_done(struct tevent_req *subreq);
4550
4551struct tevent_req *rpccli_svcctl_OpenServiceA_send(TALLOC_CTX *mem_ctx,
4552						   struct tevent_context *ev,
4553						   struct rpc_pipe_client *cli,
4554						   struct policy_handle *_scmanager_handle /* [in] [ref] */,
4555						   const char *_ServiceName /* [in] [unique,charset(UTF16)] */,
4556						   uint32_t _access_mask /* [in]  */)
4557{
4558	struct tevent_req *req;
4559	struct rpccli_svcctl_OpenServiceA_state *state;
4560	struct tevent_req *subreq;
4561
4562	req = tevent_req_create(mem_ctx, &state,
4563				struct rpccli_svcctl_OpenServiceA_state);
4564	if (req == NULL) {
4565		return NULL;
4566	}
4567	state->out_mem_ctx = NULL;
4568	state->dispatch_recv = cli->dispatch_recv;
4569
4570	/* In parameters */
4571	state->orig.in.scmanager_handle = _scmanager_handle;
4572	state->orig.in.ServiceName = _ServiceName;
4573	state->orig.in.access_mask = _access_mask;
4574
4575	/* Out parameters */
4576
4577	/* Result */
4578	ZERO_STRUCT(state->orig.out.result);
4579
4580	/* make a temporary copy, that we pass to the dispatch function */
4581	state->tmp = state->orig;
4582
4583	subreq = cli->dispatch_send(state, ev, cli,
4584				    &ndr_table_svcctl,
4585				    NDR_SVCCTL_OPENSERVICEA,
4586				    &state->tmp);
4587	if (tevent_req_nomem(subreq, req)) {
4588		return tevent_req_post(req, ev);
4589	}
4590	tevent_req_set_callback(subreq, rpccli_svcctl_OpenServiceA_done, req);
4591	return req;
4592}
4593
4594static void rpccli_svcctl_OpenServiceA_done(struct tevent_req *subreq)
4595{
4596	struct tevent_req *req = tevent_req_callback_data(
4597		subreq, struct tevent_req);
4598	struct rpccli_svcctl_OpenServiceA_state *state = tevent_req_data(
4599		req, struct rpccli_svcctl_OpenServiceA_state);
4600	NTSTATUS status;
4601	TALLOC_CTX *mem_ctx;
4602
4603	if (state->out_mem_ctx) {
4604		mem_ctx = state->out_mem_ctx;
4605	} else {
4606		mem_ctx = state;
4607	}
4608
4609	status = state->dispatch_recv(subreq, mem_ctx);
4610	TALLOC_FREE(subreq);
4611	if (!NT_STATUS_IS_OK(status)) {
4612		tevent_req_nterror(req, status);
4613		return;
4614	}
4615
4616	/* Copy out parameters */
4617
4618	/* Copy result */
4619	state->orig.out.result = state->tmp.out.result;
4620
4621	/* Reset temporary structure */
4622	ZERO_STRUCT(state->tmp);
4623
4624	tevent_req_done(req);
4625}
4626
4627NTSTATUS rpccli_svcctl_OpenServiceA_recv(struct tevent_req *req,
4628					 TALLOC_CTX *mem_ctx,
4629					 WERROR *result)
4630{
4631	struct rpccli_svcctl_OpenServiceA_state *state = tevent_req_data(
4632		req, struct rpccli_svcctl_OpenServiceA_state);
4633	NTSTATUS status;
4634
4635	if (tevent_req_is_nterror(req, &status)) {
4636		tevent_req_received(req);
4637		return status;
4638	}
4639
4640	/* Steal possbile out parameters to the callers context */
4641	talloc_steal(mem_ctx, state->out_mem_ctx);
4642
4643	/* Return result */
4644	*result = state->orig.out.result;
4645
4646	tevent_req_received(req);
4647	return NT_STATUS_OK;
4648}
4649
4650NTSTATUS rpccli_svcctl_OpenServiceA(struct rpc_pipe_client *cli,
4651				    TALLOC_CTX *mem_ctx,
4652				    struct policy_handle *scmanager_handle /* [in] [ref] */,
4653				    const char *ServiceName /* [in] [unique,charset(UTF16)] */,
4654				    uint32_t access_mask /* [in]  */,
4655				    WERROR *werror)
4656{
4657	struct svcctl_OpenServiceA r;
4658	NTSTATUS status;
4659
4660	/* In parameters */
4661	r.in.scmanager_handle = scmanager_handle;
4662	r.in.ServiceName = ServiceName;
4663	r.in.access_mask = access_mask;
4664
4665	status = cli->dispatch(cli,
4666				mem_ctx,
4667				&ndr_table_svcctl,
4668				NDR_SVCCTL_OPENSERVICEA,
4669				&r);
4670
4671	if (!NT_STATUS_IS_OK(status)) {
4672		return status;
4673	}
4674
4675	if (NT_STATUS_IS_ERR(status)) {
4676		return status;
4677	}
4678
4679	/* Return variables */
4680
4681	/* Return result */
4682	if (werror) {
4683		*werror = r.out.result;
4684	}
4685
4686	return werror_to_ntstatus(r.out.result);
4687}
4688
4689struct rpccli_svcctl_QueryServiceConfigA_state {
4690	struct svcctl_QueryServiceConfigA orig;
4691	struct svcctl_QueryServiceConfigA tmp;
4692	TALLOC_CTX *out_mem_ctx;
4693	NTSTATUS (*dispatch_recv)(struct tevent_req *req, TALLOC_CTX *mem_ctx);
4694};
4695
4696static void rpccli_svcctl_QueryServiceConfigA_done(struct tevent_req *subreq);
4697
4698struct tevent_req *rpccli_svcctl_QueryServiceConfigA_send(TALLOC_CTX *mem_ctx,
4699							  struct tevent_context *ev,
4700							  struct rpc_pipe_client *cli,
4701							  struct policy_handle *_handle /* [in] [ref] */,
4702							  uint8_t *_query /* [out]  */,
4703							  uint32_t _offered /* [in]  */,
4704							  uint32_t *_needed /* [out] [ref] */)
4705{
4706	struct tevent_req *req;
4707	struct rpccli_svcctl_QueryServiceConfigA_state *state;
4708	struct tevent_req *subreq;
4709
4710	req = tevent_req_create(mem_ctx, &state,
4711				struct rpccli_svcctl_QueryServiceConfigA_state);
4712	if (req == NULL) {
4713		return NULL;
4714	}
4715	state->out_mem_ctx = NULL;
4716	state->dispatch_recv = cli->dispatch_recv;
4717
4718	/* In parameters */
4719	state->orig.in.handle = _handle;
4720	state->orig.in.offered = _offered;
4721
4722	/* Out parameters */
4723	state->orig.out.query = _query;
4724	state->orig.out.needed = _needed;
4725
4726	/* Result */
4727	ZERO_STRUCT(state->orig.out.result);
4728
4729	state->out_mem_ctx = talloc_named_const(state, 0,
4730			     "rpccli_svcctl_QueryServiceConfigA_out_memory");
4731	if (tevent_req_nomem(state->out_mem_ctx, req)) {
4732		return tevent_req_post(req, ev);
4733	}
4734
4735	/* make a temporary copy, that we pass to the dispatch function */
4736	state->tmp = state->orig;
4737
4738	subreq = cli->dispatch_send(state, ev, cli,
4739				    &ndr_table_svcctl,
4740				    NDR_SVCCTL_QUERYSERVICECONFIGA,
4741				    &state->tmp);
4742	if (tevent_req_nomem(subreq, req)) {
4743		return tevent_req_post(req, ev);
4744	}
4745	tevent_req_set_callback(subreq, rpccli_svcctl_QueryServiceConfigA_done, req);
4746	return req;
4747}
4748
4749static void rpccli_svcctl_QueryServiceConfigA_done(struct tevent_req *subreq)
4750{
4751	struct tevent_req *req = tevent_req_callback_data(
4752		subreq, struct tevent_req);
4753	struct rpccli_svcctl_QueryServiceConfigA_state *state = tevent_req_data(
4754		req, struct rpccli_svcctl_QueryServiceConfigA_state);
4755	NTSTATUS status;
4756	TALLOC_CTX *mem_ctx;
4757
4758	if (state->out_mem_ctx) {
4759		mem_ctx = state->out_mem_ctx;
4760	} else {
4761		mem_ctx = state;
4762	}
4763
4764	status = state->dispatch_recv(subreq, mem_ctx);
4765	TALLOC_FREE(subreq);
4766	if (!NT_STATUS_IS_OK(status)) {
4767		tevent_req_nterror(req, status);
4768		return;
4769	}
4770
4771	/* Copy out parameters */
4772	memcpy(state->orig.out.query, state->tmp.out.query, (state->tmp.in.offered) * sizeof(*state->orig.out.query));
4773	*state->orig.out.needed = *state->tmp.out.needed;
4774
4775	/* Copy result */
4776	state->orig.out.result = state->tmp.out.result;
4777
4778	/* Reset temporary structure */
4779	ZERO_STRUCT(state->tmp);
4780
4781	tevent_req_done(req);
4782}
4783
4784NTSTATUS rpccli_svcctl_QueryServiceConfigA_recv(struct tevent_req *req,
4785						TALLOC_CTX *mem_ctx,
4786						WERROR *result)
4787{
4788	struct rpccli_svcctl_QueryServiceConfigA_state *state = tevent_req_data(
4789		req, struct rpccli_svcctl_QueryServiceConfigA_state);
4790	NTSTATUS status;
4791
4792	if (tevent_req_is_nterror(req, &status)) {
4793		tevent_req_received(req);
4794		return status;
4795	}
4796
4797	/* Steal possbile out parameters to the callers context */
4798	talloc_steal(mem_ctx, state->out_mem_ctx);
4799
4800	/* Return result */
4801	*result = state->orig.out.result;
4802
4803	tevent_req_received(req);
4804	return NT_STATUS_OK;
4805}
4806
4807NTSTATUS rpccli_svcctl_QueryServiceConfigA(struct rpc_pipe_client *cli,
4808					   TALLOC_CTX *mem_ctx,
4809					   struct policy_handle *handle /* [in] [ref] */,
4810					   uint8_t *query /* [out]  */,
4811					   uint32_t offered /* [in]  */,
4812					   uint32_t *needed /* [out] [ref] */,
4813					   WERROR *werror)
4814{
4815	struct svcctl_QueryServiceConfigA r;
4816	NTSTATUS status;
4817
4818	/* In parameters */
4819	r.in.handle = handle;
4820	r.in.offered = offered;
4821
4822	status = cli->dispatch(cli,
4823				mem_ctx,
4824				&ndr_table_svcctl,
4825				NDR_SVCCTL_QUERYSERVICECONFIGA,
4826				&r);
4827
4828	if (!NT_STATUS_IS_OK(status)) {
4829		return status;
4830	}
4831
4832	if (NT_STATUS_IS_ERR(status)) {
4833		return status;
4834	}
4835
4836	/* Return variables */
4837	memcpy(query, r.out.query, (r.in.offered) * sizeof(*query));
4838	*needed = *r.out.needed;
4839
4840	/* Return result */
4841	if (werror) {
4842		*werror = r.out.result;
4843	}
4844
4845	return werror_to_ntstatus(r.out.result);
4846}
4847
4848struct rpccli_svcctl_QueryServiceLockStatusA_state {
4849	struct svcctl_QueryServiceLockStatusA orig;
4850	struct svcctl_QueryServiceLockStatusA tmp;
4851	TALLOC_CTX *out_mem_ctx;
4852	NTSTATUS (*dispatch_recv)(struct tevent_req *req, TALLOC_CTX *mem_ctx);
4853};
4854
4855static void rpccli_svcctl_QueryServiceLockStatusA_done(struct tevent_req *subreq);
4856
4857struct tevent_req *rpccli_svcctl_QueryServiceLockStatusA_send(TALLOC_CTX *mem_ctx,
4858							      struct tevent_context *ev,
4859							      struct rpc_pipe_client *cli,
4860							      struct policy_handle *_handle /* [in] [ref] */,
4861							      uint32_t _offered /* [in]  */,
4862							      struct SERVICE_LOCK_STATUS *_lock_status /* [out] [ref] */,
4863							      uint32_t *_needed /* [out] [ref] */)
4864{
4865	struct tevent_req *req;
4866	struct rpccli_svcctl_QueryServiceLockStatusA_state *state;
4867	struct tevent_req *subreq;
4868
4869	req = tevent_req_create(mem_ctx, &state,
4870				struct rpccli_svcctl_QueryServiceLockStatusA_state);
4871	if (req == NULL) {
4872		return NULL;
4873	}
4874	state->out_mem_ctx = NULL;
4875	state->dispatch_recv = cli->dispatch_recv;
4876
4877	/* In parameters */
4878	state->orig.in.handle = _handle;
4879	state->orig.in.offered = _offered;
4880
4881	/* Out parameters */
4882	state->orig.out.lock_status = _lock_status;
4883	state->orig.out.needed = _needed;
4884
4885	/* Result */
4886	ZERO_STRUCT(state->orig.out.result);
4887
4888	state->out_mem_ctx = talloc_named_const(state, 0,
4889			     "rpccli_svcctl_QueryServiceLockStatusA_out_memory");
4890	if (tevent_req_nomem(state->out_mem_ctx, req)) {
4891		return tevent_req_post(req, ev);
4892	}
4893
4894	/* make a temporary copy, that we pass to the dispatch function */
4895	state->tmp = state->orig;
4896
4897	subreq = cli->dispatch_send(state, ev, cli,
4898				    &ndr_table_svcctl,
4899				    NDR_SVCCTL_QUERYSERVICELOCKSTATUSA,
4900				    &state->tmp);
4901	if (tevent_req_nomem(subreq, req)) {
4902		return tevent_req_post(req, ev);
4903	}
4904	tevent_req_set_callback(subreq, rpccli_svcctl_QueryServiceLockStatusA_done, req);
4905	return req;
4906}
4907
4908static void rpccli_svcctl_QueryServiceLockStatusA_done(struct tevent_req *subreq)
4909{
4910	struct tevent_req *req = tevent_req_callback_data(
4911		subreq, struct tevent_req);
4912	struct rpccli_svcctl_QueryServiceLockStatusA_state *state = tevent_req_data(
4913		req, struct rpccli_svcctl_QueryServiceLockStatusA_state);
4914	NTSTATUS status;
4915	TALLOC_CTX *mem_ctx;
4916
4917	if (state->out_mem_ctx) {
4918		mem_ctx = state->out_mem_ctx;
4919	} else {
4920		mem_ctx = state;
4921	}
4922
4923	status = state->dispatch_recv(subreq, mem_ctx);
4924	TALLOC_FREE(subreq);
4925	if (!NT_STATUS_IS_OK(status)) {
4926		tevent_req_nterror(req, status);
4927		return;
4928	}
4929
4930	/* Copy out parameters */
4931	*state->orig.out.lock_status = *state->tmp.out.lock_status;
4932	*state->orig.out.needed = *state->tmp.out.needed;
4933
4934	/* Copy result */
4935	state->orig.out.result = state->tmp.out.result;
4936
4937	/* Reset temporary structure */
4938	ZERO_STRUCT(state->tmp);
4939
4940	tevent_req_done(req);
4941}
4942
4943NTSTATUS rpccli_svcctl_QueryServiceLockStatusA_recv(struct tevent_req *req,
4944						    TALLOC_CTX *mem_ctx,
4945						    WERROR *result)
4946{
4947	struct rpccli_svcctl_QueryServiceLockStatusA_state *state = tevent_req_data(
4948		req, struct rpccli_svcctl_QueryServiceLockStatusA_state);
4949	NTSTATUS status;
4950
4951	if (tevent_req_is_nterror(req, &status)) {
4952		tevent_req_received(req);
4953		return status;
4954	}
4955
4956	/* Steal possbile out parameters to the callers context */
4957	talloc_steal(mem_ctx, state->out_mem_ctx);
4958
4959	/* Return result */
4960	*result = state->orig.out.result;
4961
4962	tevent_req_received(req);
4963	return NT_STATUS_OK;
4964}
4965
4966NTSTATUS rpccli_svcctl_QueryServiceLockStatusA(struct rpc_pipe_client *cli,
4967					       TALLOC_CTX *mem_ctx,
4968					       struct policy_handle *handle /* [in] [ref] */,
4969					       uint32_t offered /* [in]  */,
4970					       struct SERVICE_LOCK_STATUS *lock_status /* [out] [ref] */,
4971					       uint32_t *needed /* [out] [ref] */,
4972					       WERROR *werror)
4973{
4974	struct svcctl_QueryServiceLockStatusA r;
4975	NTSTATUS status;
4976
4977	/* In parameters */
4978	r.in.handle = handle;
4979	r.in.offered = offered;
4980
4981	status = cli->dispatch(cli,
4982				mem_ctx,
4983				&ndr_table_svcctl,
4984				NDR_SVCCTL_QUERYSERVICELOCKSTATUSA,
4985				&r);
4986
4987	if (!NT_STATUS_IS_OK(status)) {
4988		return status;
4989	}
4990
4991	if (NT_STATUS_IS_ERR(status)) {
4992		return status;
4993	}
4994
4995	/* Return variables */
4996	*lock_status = *r.out.lock_status;
4997	*needed = *r.out.needed;
4998
4999	/* Return result */
5000	if (werror) {
5001		*werror = r.out.result;
5002	}
5003
5004	return werror_to_ntstatus(r.out.result);
5005}
5006
5007struct rpccli_svcctl_StartServiceA_state {
5008	struct svcctl_StartServiceA orig;
5009	struct svcctl_StartServiceA tmp;
5010	TALLOC_CTX *out_mem_ctx;
5011	NTSTATUS (*dispatch_recv)(struct tevent_req *req, TALLOC_CTX *mem_ctx);
5012};
5013
5014static void rpccli_svcctl_StartServiceA_done(struct tevent_req *subreq);
5015
5016struct tevent_req *rpccli_svcctl_StartServiceA_send(TALLOC_CTX *mem_ctx,
5017						    struct tevent_context *ev,
5018						    struct rpc_pipe_client *cli,
5019						    struct policy_handle *_handle /* [in] [ref] */,
5020						    uint32_t _NumArgs /* [in]  */,
5021						    const char *_Arguments /* [in] [unique,charset(UTF16)] */)
5022{
5023	struct tevent_req *req;
5024	struct rpccli_svcctl_StartServiceA_state *state;
5025	struct tevent_req *subreq;
5026
5027	req = tevent_req_create(mem_ctx, &state,
5028				struct rpccli_svcctl_StartServiceA_state);
5029	if (req == NULL) {
5030		return NULL;
5031	}
5032	state->out_mem_ctx = NULL;
5033	state->dispatch_recv = cli->dispatch_recv;
5034
5035	/* In parameters */
5036	state->orig.in.handle = _handle;
5037	state->orig.in.NumArgs = _NumArgs;
5038	state->orig.in.Arguments = _Arguments;
5039
5040	/* Out parameters */
5041
5042	/* Result */
5043	ZERO_STRUCT(state->orig.out.result);
5044
5045	/* make a temporary copy, that we pass to the dispatch function */
5046	state->tmp = state->orig;
5047
5048	subreq = cli->dispatch_send(state, ev, cli,
5049				    &ndr_table_svcctl,
5050				    NDR_SVCCTL_STARTSERVICEA,
5051				    &state->tmp);
5052	if (tevent_req_nomem(subreq, req)) {
5053		return tevent_req_post(req, ev);
5054	}
5055	tevent_req_set_callback(subreq, rpccli_svcctl_StartServiceA_done, req);
5056	return req;
5057}
5058
5059static void rpccli_svcctl_StartServiceA_done(struct tevent_req *subreq)
5060{
5061	struct tevent_req *req = tevent_req_callback_data(
5062		subreq, struct tevent_req);
5063	struct rpccli_svcctl_StartServiceA_state *state = tevent_req_data(
5064		req, struct rpccli_svcctl_StartServiceA_state);
5065	NTSTATUS status;
5066	TALLOC_CTX *mem_ctx;
5067
5068	if (state->out_mem_ctx) {
5069		mem_ctx = state->out_mem_ctx;
5070	} else {
5071		mem_ctx = state;
5072	}
5073
5074	status = state->dispatch_recv(subreq, mem_ctx);
5075	TALLOC_FREE(subreq);
5076	if (!NT_STATUS_IS_OK(status)) {
5077		tevent_req_nterror(req, status);
5078		return;
5079	}
5080
5081	/* Copy out parameters */
5082
5083	/* Copy result */
5084	state->orig.out.result = state->tmp.out.result;
5085
5086	/* Reset temporary structure */
5087	ZERO_STRUCT(state->tmp);
5088
5089	tevent_req_done(req);
5090}
5091
5092NTSTATUS rpccli_svcctl_StartServiceA_recv(struct tevent_req *req,
5093					  TALLOC_CTX *mem_ctx,
5094					  WERROR *result)
5095{
5096	struct rpccli_svcctl_StartServiceA_state *state = tevent_req_data(
5097		req, struct rpccli_svcctl_StartServiceA_state);
5098	NTSTATUS status;
5099
5100	if (tevent_req_is_nterror(req, &status)) {
5101		tevent_req_received(req);
5102		return status;
5103	}
5104
5105	/* Steal possbile out parameters to the callers context */
5106	talloc_steal(mem_ctx, state->out_mem_ctx);
5107
5108	/* Return result */
5109	*result = state->orig.out.result;
5110
5111	tevent_req_received(req);
5112	return NT_STATUS_OK;
5113}
5114
5115NTSTATUS rpccli_svcctl_StartServiceA(struct rpc_pipe_client *cli,
5116				     TALLOC_CTX *mem_ctx,
5117				     struct policy_handle *handle /* [in] [ref] */,
5118				     uint32_t NumArgs /* [in]  */,
5119				     const char *Arguments /* [in] [unique,charset(UTF16)] */,
5120				     WERROR *werror)
5121{
5122	struct svcctl_StartServiceA r;
5123	NTSTATUS status;
5124
5125	/* In parameters */
5126	r.in.handle = handle;
5127	r.in.NumArgs = NumArgs;
5128	r.in.Arguments = Arguments;
5129
5130	status = cli->dispatch(cli,
5131				mem_ctx,
5132				&ndr_table_svcctl,
5133				NDR_SVCCTL_STARTSERVICEA,
5134				&r);
5135
5136	if (!NT_STATUS_IS_OK(status)) {
5137		return status;
5138	}
5139
5140	if (NT_STATUS_IS_ERR(status)) {
5141		return status;
5142	}
5143
5144	/* Return variables */
5145
5146	/* Return result */
5147	if (werror) {
5148		*werror = r.out.result;
5149	}
5150
5151	return werror_to_ntstatus(r.out.result);
5152}
5153
5154struct rpccli_svcctl_GetServiceDisplayNameA_state {
5155	struct svcctl_GetServiceDisplayNameA orig;
5156	struct svcctl_GetServiceDisplayNameA tmp;
5157	TALLOC_CTX *out_mem_ctx;
5158	NTSTATUS (*dispatch_recv)(struct tevent_req *req, TALLOC_CTX *mem_ctx);
5159};
5160
5161static void rpccli_svcctl_GetServiceDisplayNameA_done(struct tevent_req *subreq);
5162
5163struct tevent_req *rpccli_svcctl_GetServiceDisplayNameA_send(TALLOC_CTX *mem_ctx,
5164							     struct tevent_context *ev,
5165							     struct rpc_pipe_client *cli,
5166							     struct policy_handle *_handle /* [in] [ref] */,
5167							     const char *_service_name /* [in] [unique,charset(UTF16)] */,
5168							     const char **_display_name /* [out] [ref,charset(UTF16)] */,
5169							     uint32_t *_display_name_length /* [in,out] [unique] */)
5170{
5171	struct tevent_req *req;
5172	struct rpccli_svcctl_GetServiceDisplayNameA_state *state;
5173	struct tevent_req *subreq;
5174
5175	req = tevent_req_create(mem_ctx, &state,
5176				struct rpccli_svcctl_GetServiceDisplayNameA_state);
5177	if (req == NULL) {
5178		return NULL;
5179	}
5180	state->out_mem_ctx = NULL;
5181	state->dispatch_recv = cli->dispatch_recv;
5182
5183	/* In parameters */
5184	state->orig.in.handle = _handle;
5185	state->orig.in.service_name = _service_name;
5186	state->orig.in.display_name_length = _display_name_length;
5187
5188	/* Out parameters */
5189	state->orig.out.display_name = _display_name;
5190	state->orig.out.display_name_length = _display_name_length;
5191
5192	/* Result */
5193	ZERO_STRUCT(state->orig.out.result);
5194
5195	state->out_mem_ctx = talloc_named_const(state, 0,
5196			     "rpccli_svcctl_GetServiceDisplayNameA_out_memory");
5197	if (tevent_req_nomem(state->out_mem_ctx, req)) {
5198		return tevent_req_post(req, ev);
5199	}
5200
5201	/* make a temporary copy, that we pass to the dispatch function */
5202	state->tmp = state->orig;
5203
5204	subreq = cli->dispatch_send(state, ev, cli,
5205				    &ndr_table_svcctl,
5206				    NDR_SVCCTL_GETSERVICEDISPLAYNAMEA,
5207				    &state->tmp);
5208	if (tevent_req_nomem(subreq, req)) {
5209		return tevent_req_post(req, ev);
5210	}
5211	tevent_req_set_callback(subreq, rpccli_svcctl_GetServiceDisplayNameA_done, req);
5212	return req;
5213}
5214
5215static void rpccli_svcctl_GetServiceDisplayNameA_done(struct tevent_req *subreq)
5216{
5217	struct tevent_req *req = tevent_req_callback_data(
5218		subreq, struct tevent_req);
5219	struct rpccli_svcctl_GetServiceDisplayNameA_state *state = tevent_req_data(
5220		req, struct rpccli_svcctl_GetServiceDisplayNameA_state);
5221	NTSTATUS status;
5222	TALLOC_CTX *mem_ctx;
5223
5224	if (state->out_mem_ctx) {
5225		mem_ctx = state->out_mem_ctx;
5226	} else {
5227		mem_ctx = state;
5228	}
5229
5230	status = state->dispatch_recv(subreq, mem_ctx);
5231	TALLOC_FREE(subreq);
5232	if (!NT_STATUS_IS_OK(status)) {
5233		tevent_req_nterror(req, status);
5234		return;
5235	}
5236
5237	/* Copy out parameters */
5238	*state->orig.out.display_name = *state->tmp.out.display_name;
5239	if (state->orig.out.display_name_length && state->tmp.out.display_name_length) {
5240		*state->orig.out.display_name_length = *state->tmp.out.display_name_length;
5241	}
5242
5243	/* Copy result */
5244	state->orig.out.result = state->tmp.out.result;
5245
5246	/* Reset temporary structure */
5247	ZERO_STRUCT(state->tmp);
5248
5249	tevent_req_done(req);
5250}
5251
5252NTSTATUS rpccli_svcctl_GetServiceDisplayNameA_recv(struct tevent_req *req,
5253						   TALLOC_CTX *mem_ctx,
5254						   WERROR *result)
5255{
5256	struct rpccli_svcctl_GetServiceDisplayNameA_state *state = tevent_req_data(
5257		req, struct rpccli_svcctl_GetServiceDisplayNameA_state);
5258	NTSTATUS status;
5259
5260	if (tevent_req_is_nterror(req, &status)) {
5261		tevent_req_received(req);
5262		return status;
5263	}
5264
5265	/* Steal possbile out parameters to the callers context */
5266	talloc_steal(mem_ctx, state->out_mem_ctx);
5267
5268	/* Return result */
5269	*result = state->orig.out.result;
5270
5271	tevent_req_received(req);
5272	return NT_STATUS_OK;
5273}
5274
5275NTSTATUS rpccli_svcctl_GetServiceDisplayNameA(struct rpc_pipe_client *cli,
5276					      TALLOC_CTX *mem_ctx,
5277					      struct policy_handle *handle /* [in] [ref] */,
5278					      const char *service_name /* [in] [unique,charset(UTF16)] */,
5279					      const char **display_name /* [out] [ref,charset(UTF16)] */,
5280					      uint32_t *display_name_length /* [in,out] [unique] */,
5281					      WERROR *werror)
5282{
5283	struct svcctl_GetServiceDisplayNameA r;
5284	NTSTATUS status;
5285
5286	/* In parameters */
5287	r.in.handle = handle;
5288	r.in.service_name = service_name;
5289	r.in.display_name_length = display_name_length;
5290
5291	status = cli->dispatch(cli,
5292				mem_ctx,
5293				&ndr_table_svcctl,
5294				NDR_SVCCTL_GETSERVICEDISPLAYNAMEA,
5295				&r);
5296
5297	if (!NT_STATUS_IS_OK(status)) {
5298		return status;
5299	}
5300
5301	if (NT_STATUS_IS_ERR(status)) {
5302		return status;
5303	}
5304
5305	/* Return variables */
5306	*display_name = *r.out.display_name;
5307	if (display_name_length && r.out.display_name_length) {
5308		*display_name_length = *r.out.display_name_length;
5309	}
5310
5311	/* Return result */
5312	if (werror) {
5313		*werror = r.out.result;
5314	}
5315
5316	return werror_to_ntstatus(r.out.result);
5317}
5318
5319struct rpccli_svcctl_GetServiceKeyNameA_state {
5320	struct svcctl_GetServiceKeyNameA orig;
5321	struct svcctl_GetServiceKeyNameA tmp;
5322	TALLOC_CTX *out_mem_ctx;
5323	NTSTATUS (*dispatch_recv)(struct tevent_req *req, TALLOC_CTX *mem_ctx);
5324};
5325
5326static void rpccli_svcctl_GetServiceKeyNameA_done(struct tevent_req *subreq);
5327
5328struct tevent_req *rpccli_svcctl_GetServiceKeyNameA_send(TALLOC_CTX *mem_ctx,
5329							 struct tevent_context *ev,
5330							 struct rpc_pipe_client *cli,
5331							 struct policy_handle *_handle /* [in] [ref] */,
5332							 const char *_service_name /* [in] [unique,charset(UTF16)] */,
5333							 const char **_key_name /* [out] [ref,charset(UTF16)] */,
5334							 uint32_t *_display_name_length /* [in,out] [unique] */)
5335{
5336	struct tevent_req *req;
5337	struct rpccli_svcctl_GetServiceKeyNameA_state *state;
5338	struct tevent_req *subreq;
5339
5340	req = tevent_req_create(mem_ctx, &state,
5341				struct rpccli_svcctl_GetServiceKeyNameA_state);
5342	if (req == NULL) {
5343		return NULL;
5344	}
5345	state->out_mem_ctx = NULL;
5346	state->dispatch_recv = cli->dispatch_recv;
5347
5348	/* In parameters */
5349	state->orig.in.handle = _handle;
5350	state->orig.in.service_name = _service_name;
5351	state->orig.in.display_name_length = _display_name_length;
5352
5353	/* Out parameters */
5354	state->orig.out.key_name = _key_name;
5355	state->orig.out.display_name_length = _display_name_length;
5356
5357	/* Result */
5358	ZERO_STRUCT(state->orig.out.result);
5359
5360	state->out_mem_ctx = talloc_named_const(state, 0,
5361			     "rpccli_svcctl_GetServiceKeyNameA_out_memory");
5362	if (tevent_req_nomem(state->out_mem_ctx, req)) {
5363		return tevent_req_post(req, ev);
5364	}
5365
5366	/* make a temporary copy, that we pass to the dispatch function */
5367	state->tmp = state->orig;
5368
5369	subreq = cli->dispatch_send(state, ev, cli,
5370				    &ndr_table_svcctl,
5371				    NDR_SVCCTL_GETSERVICEKEYNAMEA,
5372				    &state->tmp);
5373	if (tevent_req_nomem(subreq, req)) {
5374		return tevent_req_post(req, ev);
5375	}
5376	tevent_req_set_callback(subreq, rpccli_svcctl_GetServiceKeyNameA_done, req);
5377	return req;
5378}
5379
5380static void rpccli_svcctl_GetServiceKeyNameA_done(struct tevent_req *subreq)
5381{
5382	struct tevent_req *req = tevent_req_callback_data(
5383		subreq, struct tevent_req);
5384	struct rpccli_svcctl_GetServiceKeyNameA_state *state = tevent_req_data(
5385		req, struct rpccli_svcctl_GetServiceKeyNameA_state);
5386	NTSTATUS status;
5387	TALLOC_CTX *mem_ctx;
5388
5389	if (state->out_mem_ctx) {
5390		mem_ctx = state->out_mem_ctx;
5391	} else {
5392		mem_ctx = state;
5393	}
5394
5395	status = state->dispatch_recv(subreq, mem_ctx);
5396	TALLOC_FREE(subreq);
5397	if (!NT_STATUS_IS_OK(status)) {
5398		tevent_req_nterror(req, status);
5399		return;
5400	}
5401
5402	/* Copy out parameters */
5403	*state->orig.out.key_name = *state->tmp.out.key_name;
5404	if (state->orig.out.display_name_length && state->tmp.out.display_name_length) {
5405		*state->orig.out.display_name_length = *state->tmp.out.display_name_length;
5406	}
5407
5408	/* Copy result */
5409	state->orig.out.result = state->tmp.out.result;
5410
5411	/* Reset temporary structure */
5412	ZERO_STRUCT(state->tmp);
5413
5414	tevent_req_done(req);
5415}
5416
5417NTSTATUS rpccli_svcctl_GetServiceKeyNameA_recv(struct tevent_req *req,
5418					       TALLOC_CTX *mem_ctx,
5419					       WERROR *result)
5420{
5421	struct rpccli_svcctl_GetServiceKeyNameA_state *state = tevent_req_data(
5422		req, struct rpccli_svcctl_GetServiceKeyNameA_state);
5423	NTSTATUS status;
5424
5425	if (tevent_req_is_nterror(req, &status)) {
5426		tevent_req_received(req);
5427		return status;
5428	}
5429
5430	/* Steal possbile out parameters to the callers context */
5431	talloc_steal(mem_ctx, state->out_mem_ctx);
5432
5433	/* Return result */
5434	*result = state->orig.out.result;
5435
5436	tevent_req_received(req);
5437	return NT_STATUS_OK;
5438}
5439
5440NTSTATUS rpccli_svcctl_GetServiceKeyNameA(struct rpc_pipe_client *cli,
5441					  TALLOC_CTX *mem_ctx,
5442					  struct policy_handle *handle /* [in] [ref] */,
5443					  const char *service_name /* [in] [unique,charset(UTF16)] */,
5444					  const char **key_name /* [out] [ref,charset(UTF16)] */,
5445					  uint32_t *display_name_length /* [in,out] [unique] */,
5446					  WERROR *werror)
5447{
5448	struct svcctl_GetServiceKeyNameA r;
5449	NTSTATUS status;
5450
5451	/* In parameters */
5452	r.in.handle = handle;
5453	r.in.service_name = service_name;
5454	r.in.display_name_length = display_name_length;
5455
5456	status = cli->dispatch(cli,
5457				mem_ctx,
5458				&ndr_table_svcctl,
5459				NDR_SVCCTL_GETSERVICEKEYNAMEA,
5460				&r);
5461
5462	if (!NT_STATUS_IS_OK(status)) {
5463		return status;
5464	}
5465
5466	if (NT_STATUS_IS_ERR(status)) {
5467		return status;
5468	}
5469
5470	/* Return variables */
5471	*key_name = *r.out.key_name;
5472	if (display_name_length && r.out.display_name_length) {
5473		*display_name_length = *r.out.display_name_length;
5474	}
5475
5476	/* Return result */
5477	if (werror) {
5478		*werror = r.out.result;
5479	}
5480
5481	return werror_to_ntstatus(r.out.result);
5482}
5483
5484struct rpccli_svcctl_GetCurrentGroupeStateW_state {
5485	struct svcctl_GetCurrentGroupeStateW orig;
5486	struct svcctl_GetCurrentGroupeStateW tmp;
5487	TALLOC_CTX *out_mem_ctx;
5488	NTSTATUS (*dispatch_recv)(struct tevent_req *req, TALLOC_CTX *mem_ctx);
5489};
5490
5491static void rpccli_svcctl_GetCurrentGroupeStateW_done(struct tevent_req *subreq);
5492
5493struct tevent_req *rpccli_svcctl_GetCurrentGroupeStateW_send(TALLOC_CTX *mem_ctx,
5494							     struct tevent_context *ev,
5495							     struct rpc_pipe_client *cli)
5496{
5497	struct tevent_req *req;
5498	struct rpccli_svcctl_GetCurrentGroupeStateW_state *state;
5499	struct tevent_req *subreq;
5500
5501	req = tevent_req_create(mem_ctx, &state,
5502				struct rpccli_svcctl_GetCurrentGroupeStateW_state);
5503	if (req == NULL) {
5504		return NULL;
5505	}
5506	state->out_mem_ctx = NULL;
5507	state->dispatch_recv = cli->dispatch_recv;
5508
5509	/* In parameters */
5510
5511	/* Out parameters */
5512
5513	/* Result */
5514	ZERO_STRUCT(state->orig.out.result);
5515
5516	/* make a temporary copy, that we pass to the dispatch function */
5517	state->tmp = state->orig;
5518
5519	subreq = cli->dispatch_send(state, ev, cli,
5520				    &ndr_table_svcctl,
5521				    NDR_SVCCTL_GETCURRENTGROUPESTATEW,
5522				    &state->tmp);
5523	if (tevent_req_nomem(subreq, req)) {
5524		return tevent_req_post(req, ev);
5525	}
5526	tevent_req_set_callback(subreq, rpccli_svcctl_GetCurrentGroupeStateW_done, req);
5527	return req;
5528}
5529
5530static void rpccli_svcctl_GetCurrentGroupeStateW_done(struct tevent_req *subreq)
5531{
5532	struct tevent_req *req = tevent_req_callback_data(
5533		subreq, struct tevent_req);
5534	struct rpccli_svcctl_GetCurrentGroupeStateW_state *state = tevent_req_data(
5535		req, struct rpccli_svcctl_GetCurrentGroupeStateW_state);
5536	NTSTATUS status;
5537	TALLOC_CTX *mem_ctx;
5538
5539	if (state->out_mem_ctx) {
5540		mem_ctx = state->out_mem_ctx;
5541	} else {
5542		mem_ctx = state;
5543	}
5544
5545	status = state->dispatch_recv(subreq, mem_ctx);
5546	TALLOC_FREE(subreq);
5547	if (!NT_STATUS_IS_OK(status)) {
5548		tevent_req_nterror(req, status);
5549		return;
5550	}
5551
5552	/* Copy out parameters */
5553
5554	/* Copy result */
5555	state->orig.out.result = state->tmp.out.result;
5556
5557	/* Reset temporary structure */
5558	ZERO_STRUCT(state->tmp);
5559
5560	tevent_req_done(req);
5561}
5562
5563NTSTATUS rpccli_svcctl_GetCurrentGroupeStateW_recv(struct tevent_req *req,
5564						   TALLOC_CTX *mem_ctx,
5565						   WERROR *result)
5566{
5567	struct rpccli_svcctl_GetCurrentGroupeStateW_state *state = tevent_req_data(
5568		req, struct rpccli_svcctl_GetCurrentGroupeStateW_state);
5569	NTSTATUS status;
5570
5571	if (tevent_req_is_nterror(req, &status)) {
5572		tevent_req_received(req);
5573		return status;
5574	}
5575
5576	/* Steal possbile out parameters to the callers context */
5577	talloc_steal(mem_ctx, state->out_mem_ctx);
5578
5579	/* Return result */
5580	*result = state->orig.out.result;
5581
5582	tevent_req_received(req);
5583	return NT_STATUS_OK;
5584}
5585
5586NTSTATUS rpccli_svcctl_GetCurrentGroupeStateW(struct rpc_pipe_client *cli,
5587					      TALLOC_CTX *mem_ctx,
5588					      WERROR *werror)
5589{
5590	struct svcctl_GetCurrentGroupeStateW r;
5591	NTSTATUS status;
5592
5593	/* In parameters */
5594
5595	status = cli->dispatch(cli,
5596				mem_ctx,
5597				&ndr_table_svcctl,
5598				NDR_SVCCTL_GETCURRENTGROUPESTATEW,
5599				&r);
5600
5601	if (!NT_STATUS_IS_OK(status)) {
5602		return status;
5603	}
5604
5605	if (NT_STATUS_IS_ERR(status)) {
5606		return status;
5607	}
5608
5609	/* Return variables */
5610
5611	/* Return result */
5612	if (werror) {
5613		*werror = r.out.result;
5614	}
5615
5616	return werror_to_ntstatus(r.out.result);
5617}
5618
5619struct rpccli_svcctl_EnumServiceGroupW_state {
5620	struct svcctl_EnumServiceGroupW orig;
5621	struct svcctl_EnumServiceGroupW tmp;
5622	TALLOC_CTX *out_mem_ctx;
5623	NTSTATUS (*dispatch_recv)(struct tevent_req *req, TALLOC_CTX *mem_ctx);
5624};
5625
5626static void rpccli_svcctl_EnumServiceGroupW_done(struct tevent_req *subreq);
5627
5628struct tevent_req *rpccli_svcctl_EnumServiceGroupW_send(TALLOC_CTX *mem_ctx,
5629							struct tevent_context *ev,
5630							struct rpc_pipe_client *cli)
5631{
5632	struct tevent_req *req;
5633	struct rpccli_svcctl_EnumServiceGroupW_state *state;
5634	struct tevent_req *subreq;
5635
5636	req = tevent_req_create(mem_ctx, &state,
5637				struct rpccli_svcctl_EnumServiceGroupW_state);
5638	if (req == NULL) {
5639		return NULL;
5640	}
5641	state->out_mem_ctx = NULL;
5642	state->dispatch_recv = cli->dispatch_recv;
5643
5644	/* In parameters */
5645
5646	/* Out parameters */
5647
5648	/* Result */
5649	ZERO_STRUCT(state->orig.out.result);
5650
5651	/* make a temporary copy, that we pass to the dispatch function */
5652	state->tmp = state->orig;
5653
5654	subreq = cli->dispatch_send(state, ev, cli,
5655				    &ndr_table_svcctl,
5656				    NDR_SVCCTL_ENUMSERVICEGROUPW,
5657				    &state->tmp);
5658	if (tevent_req_nomem(subreq, req)) {
5659		return tevent_req_post(req, ev);
5660	}
5661	tevent_req_set_callback(subreq, rpccli_svcctl_EnumServiceGroupW_done, req);
5662	return req;
5663}
5664
5665static void rpccli_svcctl_EnumServiceGroupW_done(struct tevent_req *subreq)
5666{
5667	struct tevent_req *req = tevent_req_callback_data(
5668		subreq, struct tevent_req);
5669	struct rpccli_svcctl_EnumServiceGroupW_state *state = tevent_req_data(
5670		req, struct rpccli_svcctl_EnumServiceGroupW_state);
5671	NTSTATUS status;
5672	TALLOC_CTX *mem_ctx;
5673
5674	if (state->out_mem_ctx) {
5675		mem_ctx = state->out_mem_ctx;
5676	} else {
5677		mem_ctx = state;
5678	}
5679
5680	status = state->dispatch_recv(subreq, mem_ctx);
5681	TALLOC_FREE(subreq);
5682	if (!NT_STATUS_IS_OK(status)) {
5683		tevent_req_nterror(req, status);
5684		return;
5685	}
5686
5687	/* Copy out parameters */
5688
5689	/* Copy result */
5690	state->orig.out.result = state->tmp.out.result;
5691
5692	/* Reset temporary structure */
5693	ZERO_STRUCT(state->tmp);
5694
5695	tevent_req_done(req);
5696}
5697
5698NTSTATUS rpccli_svcctl_EnumServiceGroupW_recv(struct tevent_req *req,
5699					      TALLOC_CTX *mem_ctx,
5700					      WERROR *result)
5701{
5702	struct rpccli_svcctl_EnumServiceGroupW_state *state = tevent_req_data(
5703		req, struct rpccli_svcctl_EnumServiceGroupW_state);
5704	NTSTATUS status;
5705
5706	if (tevent_req_is_nterror(req, &status)) {
5707		tevent_req_received(req);
5708		return status;
5709	}
5710
5711	/* Steal possbile out parameters to the callers context */
5712	talloc_steal(mem_ctx, state->out_mem_ctx);
5713
5714	/* Return result */
5715	*result = state->orig.out.result;
5716
5717	tevent_req_received(req);
5718	return NT_STATUS_OK;
5719}
5720
5721NTSTATUS rpccli_svcctl_EnumServiceGroupW(struct rpc_pipe_client *cli,
5722					 TALLOC_CTX *mem_ctx,
5723					 WERROR *werror)
5724{
5725	struct svcctl_EnumServiceGroupW r;
5726	NTSTATUS status;
5727
5728	/* In parameters */
5729
5730	status = cli->dispatch(cli,
5731				mem_ctx,
5732				&ndr_table_svcctl,
5733				NDR_SVCCTL_ENUMSERVICEGROUPW,
5734				&r);
5735
5736	if (!NT_STATUS_IS_OK(status)) {
5737		return status;
5738	}
5739
5740	if (NT_STATUS_IS_ERR(status)) {
5741		return status;
5742	}
5743
5744	/* Return variables */
5745
5746	/* Return result */
5747	if (werror) {
5748		*werror = r.out.result;
5749	}
5750
5751	return werror_to_ntstatus(r.out.result);
5752}
5753
5754struct rpccli_svcctl_ChangeServiceConfig2A_state {
5755	struct svcctl_ChangeServiceConfig2A orig;
5756	struct svcctl_ChangeServiceConfig2A tmp;
5757	TALLOC_CTX *out_mem_ctx;
5758	NTSTATUS (*dispatch_recv)(struct tevent_req *req, TALLOC_CTX *mem_ctx);
5759};
5760
5761static void rpccli_svcctl_ChangeServiceConfig2A_done(struct tevent_req *subreq);
5762
5763struct tevent_req *rpccli_svcctl_ChangeServiceConfig2A_send(TALLOC_CTX *mem_ctx,
5764							    struct tevent_context *ev,
5765							    struct rpc_pipe_client *cli,
5766							    struct policy_handle *_handle /* [in] [ref] */,
5767							    uint32_t _info_level /* [in]  */,
5768							    uint8_t *_info /* [in] [unique] */)
5769{
5770	struct tevent_req *req;
5771	struct rpccli_svcctl_ChangeServiceConfig2A_state *state;
5772	struct tevent_req *subreq;
5773
5774	req = tevent_req_create(mem_ctx, &state,
5775				struct rpccli_svcctl_ChangeServiceConfig2A_state);
5776	if (req == NULL) {
5777		return NULL;
5778	}
5779	state->out_mem_ctx = NULL;
5780	state->dispatch_recv = cli->dispatch_recv;
5781
5782	/* In parameters */
5783	state->orig.in.handle = _handle;
5784	state->orig.in.info_level = _info_level;
5785	state->orig.in.info = _info;
5786
5787	/* Out parameters */
5788
5789	/* Result */
5790	ZERO_STRUCT(state->orig.out.result);
5791
5792	/* make a temporary copy, that we pass to the dispatch function */
5793	state->tmp = state->orig;
5794
5795	subreq = cli->dispatch_send(state, ev, cli,
5796				    &ndr_table_svcctl,
5797				    NDR_SVCCTL_CHANGESERVICECONFIG2A,
5798				    &state->tmp);
5799	if (tevent_req_nomem(subreq, req)) {
5800		return tevent_req_post(req, ev);
5801	}
5802	tevent_req_set_callback(subreq, rpccli_svcctl_ChangeServiceConfig2A_done, req);
5803	return req;
5804}
5805
5806static void rpccli_svcctl_ChangeServiceConfig2A_done(struct tevent_req *subreq)
5807{
5808	struct tevent_req *req = tevent_req_callback_data(
5809		subreq, struct tevent_req);
5810	struct rpccli_svcctl_ChangeServiceConfig2A_state *state = tevent_req_data(
5811		req, struct rpccli_svcctl_ChangeServiceConfig2A_state);
5812	NTSTATUS status;
5813	TALLOC_CTX *mem_ctx;
5814
5815	if (state->out_mem_ctx) {
5816		mem_ctx = state->out_mem_ctx;
5817	} else {
5818		mem_ctx = state;
5819	}
5820
5821	status = state->dispatch_recv(subreq, mem_ctx);
5822	TALLOC_FREE(subreq);
5823	if (!NT_STATUS_IS_OK(status)) {
5824		tevent_req_nterror(req, status);
5825		return;
5826	}
5827
5828	/* Copy out parameters */
5829
5830	/* Copy result */
5831	state->orig.out.result = state->tmp.out.result;
5832
5833	/* Reset temporary structure */
5834	ZERO_STRUCT(state->tmp);
5835
5836	tevent_req_done(req);
5837}
5838
5839NTSTATUS rpccli_svcctl_ChangeServiceConfig2A_recv(struct tevent_req *req,
5840						  TALLOC_CTX *mem_ctx,
5841						  WERROR *result)
5842{
5843	struct rpccli_svcctl_ChangeServiceConfig2A_state *state = tevent_req_data(
5844		req, struct rpccli_svcctl_ChangeServiceConfig2A_state);
5845	NTSTATUS status;
5846
5847	if (tevent_req_is_nterror(req, &status)) {
5848		tevent_req_received(req);
5849		return status;
5850	}
5851
5852	/* Steal possbile out parameters to the callers context */
5853	talloc_steal(mem_ctx, state->out_mem_ctx);
5854
5855	/* Return result */
5856	*result = state->orig.out.result;
5857
5858	tevent_req_received(req);
5859	return NT_STATUS_OK;
5860}
5861
5862NTSTATUS rpccli_svcctl_ChangeServiceConfig2A(struct rpc_pipe_client *cli,
5863					     TALLOC_CTX *mem_ctx,
5864					     struct policy_handle *handle /* [in] [ref] */,
5865					     uint32_t info_level /* [in]  */,
5866					     uint8_t *info /* [in] [unique] */,
5867					     WERROR *werror)
5868{
5869	struct svcctl_ChangeServiceConfig2A r;
5870	NTSTATUS status;
5871
5872	/* In parameters */
5873	r.in.handle = handle;
5874	r.in.info_level = info_level;
5875	r.in.info = info;
5876
5877	status = cli->dispatch(cli,
5878				mem_ctx,
5879				&ndr_table_svcctl,
5880				NDR_SVCCTL_CHANGESERVICECONFIG2A,
5881				&r);
5882
5883	if (!NT_STATUS_IS_OK(status)) {
5884		return status;
5885	}
5886
5887	if (NT_STATUS_IS_ERR(status)) {
5888		return status;
5889	}
5890
5891	/* Return variables */
5892
5893	/* Return result */
5894	if (werror) {
5895		*werror = r.out.result;
5896	}
5897
5898	return werror_to_ntstatus(r.out.result);
5899}
5900
5901struct rpccli_svcctl_ChangeServiceConfig2W_state {
5902	struct svcctl_ChangeServiceConfig2W orig;
5903	struct svcctl_ChangeServiceConfig2W tmp;
5904	TALLOC_CTX *out_mem_ctx;
5905	NTSTATUS (*dispatch_recv)(struct tevent_req *req, TALLOC_CTX *mem_ctx);
5906};
5907
5908static void rpccli_svcctl_ChangeServiceConfig2W_done(struct tevent_req *subreq);
5909
5910struct tevent_req *rpccli_svcctl_ChangeServiceConfig2W_send(TALLOC_CTX *mem_ctx,
5911							    struct tevent_context *ev,
5912							    struct rpc_pipe_client *cli,
5913							    struct policy_handle *_handle /* [in] [ref] */,
5914							    uint32_t _info_level /* [in]  */,
5915							    uint8_t *_info /* [in] [unique] */)
5916{
5917	struct tevent_req *req;
5918	struct rpccli_svcctl_ChangeServiceConfig2W_state *state;
5919	struct tevent_req *subreq;
5920
5921	req = tevent_req_create(mem_ctx, &state,
5922				struct rpccli_svcctl_ChangeServiceConfig2W_state);
5923	if (req == NULL) {
5924		return NULL;
5925	}
5926	state->out_mem_ctx = NULL;
5927	state->dispatch_recv = cli->dispatch_recv;
5928
5929	/* In parameters */
5930	state->orig.in.handle = _handle;
5931	state->orig.in.info_level = _info_level;
5932	state->orig.in.info = _info;
5933
5934	/* Out parameters */
5935
5936	/* Result */
5937	ZERO_STRUCT(state->orig.out.result);
5938
5939	/* make a temporary copy, that we pass to the dispatch function */
5940	state->tmp = state->orig;
5941
5942	subreq = cli->dispatch_send(state, ev, cli,
5943				    &ndr_table_svcctl,
5944				    NDR_SVCCTL_CHANGESERVICECONFIG2W,
5945				    &state->tmp);
5946	if (tevent_req_nomem(subreq, req)) {
5947		return tevent_req_post(req, ev);
5948	}
5949	tevent_req_set_callback(subreq, rpccli_svcctl_ChangeServiceConfig2W_done, req);
5950	return req;
5951}
5952
5953static void rpccli_svcctl_ChangeServiceConfig2W_done(struct tevent_req *subreq)
5954{
5955	struct tevent_req *req = tevent_req_callback_data(
5956		subreq, struct tevent_req);
5957	struct rpccli_svcctl_ChangeServiceConfig2W_state *state = tevent_req_data(
5958		req, struct rpccli_svcctl_ChangeServiceConfig2W_state);
5959	NTSTATUS status;
5960	TALLOC_CTX *mem_ctx;
5961
5962	if (state->out_mem_ctx) {
5963		mem_ctx = state->out_mem_ctx;
5964	} else {
5965		mem_ctx = state;
5966	}
5967
5968	status = state->dispatch_recv(subreq, mem_ctx);
5969	TALLOC_FREE(subreq);
5970	if (!NT_STATUS_IS_OK(status)) {
5971		tevent_req_nterror(req, status);
5972		return;
5973	}
5974
5975	/* Copy out parameters */
5976
5977	/* Copy result */
5978	state->orig.out.result = state->tmp.out.result;
5979
5980	/* Reset temporary structure */
5981	ZERO_STRUCT(state->tmp);
5982
5983	tevent_req_done(req);
5984}
5985
5986NTSTATUS rpccli_svcctl_ChangeServiceConfig2W_recv(struct tevent_req *req,
5987						  TALLOC_CTX *mem_ctx,
5988						  WERROR *result)
5989{
5990	struct rpccli_svcctl_ChangeServiceConfig2W_state *state = tevent_req_data(
5991		req, struct rpccli_svcctl_ChangeServiceConfig2W_state);
5992	NTSTATUS status;
5993
5994	if (tevent_req_is_nterror(req, &status)) {
5995		tevent_req_received(req);
5996		return status;
5997	}
5998
5999	/* Steal possbile out parameters to the callers context */
6000	talloc_steal(mem_ctx, state->out_mem_ctx);
6001
6002	/* Return result */
6003	*result = state->orig.out.result;
6004
6005	tevent_req_received(req);
6006	return NT_STATUS_OK;
6007}
6008
6009NTSTATUS rpccli_svcctl_ChangeServiceConfig2W(struct rpc_pipe_client *cli,
6010					     TALLOC_CTX *mem_ctx,
6011					     struct policy_handle *handle /* [in] [ref] */,
6012					     uint32_t info_level /* [in]  */,
6013					     uint8_t *info /* [in] [unique] */,
6014					     WERROR *werror)
6015{
6016	struct svcctl_ChangeServiceConfig2W r;
6017	NTSTATUS status;
6018
6019	/* In parameters */
6020	r.in.handle = handle;
6021	r.in.info_level = info_level;
6022	r.in.info = info;
6023
6024	status = cli->dispatch(cli,
6025				mem_ctx,
6026				&ndr_table_svcctl,
6027				NDR_SVCCTL_CHANGESERVICECONFIG2W,
6028				&r);
6029
6030	if (!NT_STATUS_IS_OK(status)) {
6031		return status;
6032	}
6033
6034	if (NT_STATUS_IS_ERR(status)) {
6035		return status;
6036	}
6037
6038	/* Return variables */
6039
6040	/* Return result */
6041	if (werror) {
6042		*werror = r.out.result;
6043	}
6044
6045	return werror_to_ntstatus(r.out.result);
6046}
6047
6048struct rpccli_svcctl_QueryServiceConfig2A_state {
6049	struct svcctl_QueryServiceConfig2A orig;
6050	struct svcctl_QueryServiceConfig2A tmp;
6051	TALLOC_CTX *out_mem_ctx;
6052	NTSTATUS (*dispatch_recv)(struct tevent_req *req, TALLOC_CTX *mem_ctx);
6053};
6054
6055static void rpccli_svcctl_QueryServiceConfig2A_done(struct tevent_req *subreq);
6056
6057struct tevent_req *rpccli_svcctl_QueryServiceConfig2A_send(TALLOC_CTX *mem_ctx,
6058							   struct tevent_context *ev,
6059							   struct rpc_pipe_client *cli,
6060							   struct policy_handle *_handle /* [in] [ref] */,
6061							   enum svcctl_ConfigLevel _info_level /* [in]  */,
6062							   uint8_t *_buffer /* [out]  */,
6063							   uint32_t _offered /* [in]  */,
6064							   uint32_t *_needed /* [out] [ref] */)
6065{
6066	struct tevent_req *req;
6067	struct rpccli_svcctl_QueryServiceConfig2A_state *state;
6068	struct tevent_req *subreq;
6069
6070	req = tevent_req_create(mem_ctx, &state,
6071				struct rpccli_svcctl_QueryServiceConfig2A_state);
6072	if (req == NULL) {
6073		return NULL;
6074	}
6075	state->out_mem_ctx = NULL;
6076	state->dispatch_recv = cli->dispatch_recv;
6077
6078	/* In parameters */
6079	state->orig.in.handle = _handle;
6080	state->orig.in.info_level = _info_level;
6081	state->orig.in.offered = _offered;
6082
6083	/* Out parameters */
6084	state->orig.out.buffer = _buffer;
6085	state->orig.out.needed = _needed;
6086
6087	/* Result */
6088	ZERO_STRUCT(state->orig.out.result);
6089
6090	state->out_mem_ctx = talloc_named_const(state, 0,
6091			     "rpccli_svcctl_QueryServiceConfig2A_out_memory");
6092	if (tevent_req_nomem(state->out_mem_ctx, req)) {
6093		return tevent_req_post(req, ev);
6094	}
6095
6096	/* make a temporary copy, that we pass to the dispatch function */
6097	state->tmp = state->orig;
6098
6099	subreq = cli->dispatch_send(state, ev, cli,
6100				    &ndr_table_svcctl,
6101				    NDR_SVCCTL_QUERYSERVICECONFIG2A,
6102				    &state->tmp);
6103	if (tevent_req_nomem(subreq, req)) {
6104		return tevent_req_post(req, ev);
6105	}
6106	tevent_req_set_callback(subreq, rpccli_svcctl_QueryServiceConfig2A_done, req);
6107	return req;
6108}
6109
6110static void rpccli_svcctl_QueryServiceConfig2A_done(struct tevent_req *subreq)
6111{
6112	struct tevent_req *req = tevent_req_callback_data(
6113		subreq, struct tevent_req);
6114	struct rpccli_svcctl_QueryServiceConfig2A_state *state = tevent_req_data(
6115		req, struct rpccli_svcctl_QueryServiceConfig2A_state);
6116	NTSTATUS status;
6117	TALLOC_CTX *mem_ctx;
6118
6119	if (state->out_mem_ctx) {
6120		mem_ctx = state->out_mem_ctx;
6121	} else {
6122		mem_ctx = state;
6123	}
6124
6125	status = state->dispatch_recv(subreq, mem_ctx);
6126	TALLOC_FREE(subreq);
6127	if (!NT_STATUS_IS_OK(status)) {
6128		tevent_req_nterror(req, status);
6129		return;
6130	}
6131
6132	/* Copy out parameters */
6133	memcpy(state->orig.out.buffer, state->tmp.out.buffer, (state->tmp.in.offered) * sizeof(*state->orig.out.buffer));
6134	*state->orig.out.needed = *state->tmp.out.needed;
6135
6136	/* Copy result */
6137	state->orig.out.result = state->tmp.out.result;
6138
6139	/* Reset temporary structure */
6140	ZERO_STRUCT(state->tmp);
6141
6142	tevent_req_done(req);
6143}
6144
6145NTSTATUS rpccli_svcctl_QueryServiceConfig2A_recv(struct tevent_req *req,
6146						 TALLOC_CTX *mem_ctx,
6147						 WERROR *result)
6148{
6149	struct rpccli_svcctl_QueryServiceConfig2A_state *state = tevent_req_data(
6150		req, struct rpccli_svcctl_QueryServiceConfig2A_state);
6151	NTSTATUS status;
6152
6153	if (tevent_req_is_nterror(req, &status)) {
6154		tevent_req_received(req);
6155		return status;
6156	}
6157
6158	/* Steal possbile out parameters to the callers context */
6159	talloc_steal(mem_ctx, state->out_mem_ctx);
6160
6161	/* Return result */
6162	*result = state->orig.out.result;
6163
6164	tevent_req_received(req);
6165	return NT_STATUS_OK;
6166}
6167
6168NTSTATUS rpccli_svcctl_QueryServiceConfig2A(struct rpc_pipe_client *cli,
6169					    TALLOC_CTX *mem_ctx,
6170					    struct policy_handle *handle /* [in] [ref] */,
6171					    enum svcctl_ConfigLevel info_level /* [in]  */,
6172					    uint8_t *buffer /* [out]  */,
6173					    uint32_t offered /* [in]  */,
6174					    uint32_t *needed /* [out] [ref] */,
6175					    WERROR *werror)
6176{
6177	struct svcctl_QueryServiceConfig2A r;
6178	NTSTATUS status;
6179
6180	/* In parameters */
6181	r.in.handle = handle;
6182	r.in.info_level = info_level;
6183	r.in.offered = offered;
6184
6185	status = cli->dispatch(cli,
6186				mem_ctx,
6187				&ndr_table_svcctl,
6188				NDR_SVCCTL_QUERYSERVICECONFIG2A,
6189				&r);
6190
6191	if (!NT_STATUS_IS_OK(status)) {
6192		return status;
6193	}
6194
6195	if (NT_STATUS_IS_ERR(status)) {
6196		return status;
6197	}
6198
6199	/* Return variables */
6200	memcpy(buffer, r.out.buffer, (r.in.offered) * sizeof(*buffer));
6201	*needed = *r.out.needed;
6202
6203	/* Return result */
6204	if (werror) {
6205		*werror = r.out.result;
6206	}
6207
6208	return werror_to_ntstatus(r.out.result);
6209}
6210
6211struct rpccli_svcctl_QueryServiceConfig2W_state {
6212	struct svcctl_QueryServiceConfig2W orig;
6213	struct svcctl_QueryServiceConfig2W tmp;
6214	TALLOC_CTX *out_mem_ctx;
6215	NTSTATUS (*dispatch_recv)(struct tevent_req *req, TALLOC_CTX *mem_ctx);
6216};
6217
6218static void rpccli_svcctl_QueryServiceConfig2W_done(struct tevent_req *subreq);
6219
6220struct tevent_req *rpccli_svcctl_QueryServiceConfig2W_send(TALLOC_CTX *mem_ctx,
6221							   struct tevent_context *ev,
6222							   struct rpc_pipe_client *cli,
6223							   struct policy_handle *_handle /* [in] [ref] */,
6224							   enum svcctl_ConfigLevel _info_level /* [in]  */,
6225							   uint8_t *_buffer /* [out] [ref,size_is(offered)] */,
6226							   uint32_t _offered /* [in] [range(0,8192)] */,
6227							   uint32_t *_needed /* [out] [ref,range(0,8192)] */)
6228{
6229	struct tevent_req *req;
6230	struct rpccli_svcctl_QueryServiceConfig2W_state *state;
6231	struct tevent_req *subreq;
6232
6233	req = tevent_req_create(mem_ctx, &state,
6234				struct rpccli_svcctl_QueryServiceConfig2W_state);
6235	if (req == NULL) {
6236		return NULL;
6237	}
6238	state->out_mem_ctx = NULL;
6239	state->dispatch_recv = cli->dispatch_recv;
6240
6241	/* In parameters */
6242	state->orig.in.handle = _handle;
6243	state->orig.in.info_level = _info_level;
6244	state->orig.in.offered = _offered;
6245
6246	/* Out parameters */
6247	state->orig.out.buffer = _buffer;
6248	state->orig.out.needed = _needed;
6249
6250	/* Result */
6251	ZERO_STRUCT(state->orig.out.result);
6252
6253	state->out_mem_ctx = talloc_named_const(state, 0,
6254			     "rpccli_svcctl_QueryServiceConfig2W_out_memory");
6255	if (tevent_req_nomem(state->out_mem_ctx, req)) {
6256		return tevent_req_post(req, ev);
6257	}
6258
6259	/* make a temporary copy, that we pass to the dispatch function */
6260	state->tmp = state->orig;
6261
6262	subreq = cli->dispatch_send(state, ev, cli,
6263				    &ndr_table_svcctl,
6264				    NDR_SVCCTL_QUERYSERVICECONFIG2W,
6265				    &state->tmp);
6266	if (tevent_req_nomem(subreq, req)) {
6267		return tevent_req_post(req, ev);
6268	}
6269	tevent_req_set_callback(subreq, rpccli_svcctl_QueryServiceConfig2W_done, req);
6270	return req;
6271}
6272
6273static void rpccli_svcctl_QueryServiceConfig2W_done(struct tevent_req *subreq)
6274{
6275	struct tevent_req *req = tevent_req_callback_data(
6276		subreq, struct tevent_req);
6277	struct rpccli_svcctl_QueryServiceConfig2W_state *state = tevent_req_data(
6278		req, struct rpccli_svcctl_QueryServiceConfig2W_state);
6279	NTSTATUS status;
6280	TALLOC_CTX *mem_ctx;
6281
6282	if (state->out_mem_ctx) {
6283		mem_ctx = state->out_mem_ctx;
6284	} else {
6285		mem_ctx = state;
6286	}
6287
6288	status = state->dispatch_recv(subreq, mem_ctx);
6289	TALLOC_FREE(subreq);
6290	if (!NT_STATUS_IS_OK(status)) {
6291		tevent_req_nterror(req, status);
6292		return;
6293	}
6294
6295	/* Copy out parameters */
6296	memcpy(state->orig.out.buffer, state->tmp.out.buffer, (state->tmp.in.offered) * sizeof(*state->orig.out.buffer));
6297	*state->orig.out.needed = *state->tmp.out.needed;
6298
6299	/* Copy result */
6300	state->orig.out.result = state->tmp.out.result;
6301
6302	/* Reset temporary structure */
6303	ZERO_STRUCT(state->tmp);
6304
6305	tevent_req_done(req);
6306}
6307
6308NTSTATUS rpccli_svcctl_QueryServiceConfig2W_recv(struct tevent_req *req,
6309						 TALLOC_CTX *mem_ctx,
6310						 WERROR *result)
6311{
6312	struct rpccli_svcctl_QueryServiceConfig2W_state *state = tevent_req_data(
6313		req, struct rpccli_svcctl_QueryServiceConfig2W_state);
6314	NTSTATUS status;
6315
6316	if (tevent_req_is_nterror(req, &status)) {
6317		tevent_req_received(req);
6318		return status;
6319	}
6320
6321	/* Steal possbile out parameters to the callers context */
6322	talloc_steal(mem_ctx, state->out_mem_ctx);
6323
6324	/* Return result */
6325	*result = state->orig.out.result;
6326
6327	tevent_req_received(req);
6328	return NT_STATUS_OK;
6329}
6330
6331NTSTATUS rpccli_svcctl_QueryServiceConfig2W(struct rpc_pipe_client *cli,
6332					    TALLOC_CTX *mem_ctx,
6333					    struct policy_handle *handle /* [in] [ref] */,
6334					    enum svcctl_ConfigLevel info_level /* [in]  */,
6335					    uint8_t *buffer /* [out] [ref,size_is(offered)] */,
6336					    uint32_t offered /* [in] [range(0,8192)] */,
6337					    uint32_t *needed /* [out] [ref,range(0,8192)] */,
6338					    WERROR *werror)
6339{
6340	struct svcctl_QueryServiceConfig2W r;
6341	NTSTATUS status;
6342
6343	/* In parameters */
6344	r.in.handle = handle;
6345	r.in.info_level = info_level;
6346	r.in.offered = offered;
6347
6348	status = cli->dispatch(cli,
6349				mem_ctx,
6350				&ndr_table_svcctl,
6351				NDR_SVCCTL_QUERYSERVICECONFIG2W,
6352				&r);
6353
6354	if (!NT_STATUS_IS_OK(status)) {
6355		return status;
6356	}
6357
6358	if (NT_STATUS_IS_ERR(status)) {
6359		return status;
6360	}
6361
6362	/* Return variables */
6363	memcpy(buffer, r.out.buffer, (r.in.offered) * sizeof(*buffer));
6364	*needed = *r.out.needed;
6365
6366	/* Return result */
6367	if (werror) {
6368		*werror = r.out.result;
6369	}
6370
6371	return werror_to_ntstatus(r.out.result);
6372}
6373
6374struct rpccli_svcctl_QueryServiceStatusEx_state {
6375	struct svcctl_QueryServiceStatusEx orig;
6376	struct svcctl_QueryServiceStatusEx tmp;
6377	TALLOC_CTX *out_mem_ctx;
6378	NTSTATUS (*dispatch_recv)(struct tevent_req *req, TALLOC_CTX *mem_ctx);
6379};
6380
6381static void rpccli_svcctl_QueryServiceStatusEx_done(struct tevent_req *subreq);
6382
6383struct tevent_req *rpccli_svcctl_QueryServiceStatusEx_send(TALLOC_CTX *mem_ctx,
6384							   struct tevent_context *ev,
6385							   struct rpc_pipe_client *cli,
6386							   struct policy_handle *_handle /* [in] [ref] */,
6387							   enum svcctl_StatusLevel _info_level /* [in]  */,
6388							   uint8_t *_buffer /* [out] [ref,size_is(offered)] */,
6389							   uint32_t _offered /* [in] [range(0,8192)] */,
6390							   uint32_t *_needed /* [out] [ref,range(0,8192)] */)
6391{
6392	struct tevent_req *req;
6393	struct rpccli_svcctl_QueryServiceStatusEx_state *state;
6394	struct tevent_req *subreq;
6395
6396	req = tevent_req_create(mem_ctx, &state,
6397				struct rpccli_svcctl_QueryServiceStatusEx_state);
6398	if (req == NULL) {
6399		return NULL;
6400	}
6401	state->out_mem_ctx = NULL;
6402	state->dispatch_recv = cli->dispatch_recv;
6403
6404	/* In parameters */
6405	state->orig.in.handle = _handle;
6406	state->orig.in.info_level = _info_level;
6407	state->orig.in.offered = _offered;
6408
6409	/* Out parameters */
6410	state->orig.out.buffer = _buffer;
6411	state->orig.out.needed = _needed;
6412
6413	/* Result */
6414	ZERO_STRUCT(state->orig.out.result);
6415
6416	state->out_mem_ctx = talloc_named_const(state, 0,
6417			     "rpccli_svcctl_QueryServiceStatusEx_out_memory");
6418	if (tevent_req_nomem(state->out_mem_ctx, req)) {
6419		return tevent_req_post(req, ev);
6420	}
6421
6422	/* make a temporary copy, that we pass to the dispatch function */
6423	state->tmp = state->orig;
6424
6425	subreq = cli->dispatch_send(state, ev, cli,
6426				    &ndr_table_svcctl,
6427				    NDR_SVCCTL_QUERYSERVICESTATUSEX,
6428				    &state->tmp);
6429	if (tevent_req_nomem(subreq, req)) {
6430		return tevent_req_post(req, ev);
6431	}
6432	tevent_req_set_callback(subreq, rpccli_svcctl_QueryServiceStatusEx_done, req);
6433	return req;
6434}
6435
6436static void rpccli_svcctl_QueryServiceStatusEx_done(struct tevent_req *subreq)
6437{
6438	struct tevent_req *req = tevent_req_callback_data(
6439		subreq, struct tevent_req);
6440	struct rpccli_svcctl_QueryServiceStatusEx_state *state = tevent_req_data(
6441		req, struct rpccli_svcctl_QueryServiceStatusEx_state);
6442	NTSTATUS status;
6443	TALLOC_CTX *mem_ctx;
6444
6445	if (state->out_mem_ctx) {
6446		mem_ctx = state->out_mem_ctx;
6447	} else {
6448		mem_ctx = state;
6449	}
6450
6451	status = state->dispatch_recv(subreq, mem_ctx);
6452	TALLOC_FREE(subreq);
6453	if (!NT_STATUS_IS_OK(status)) {
6454		tevent_req_nterror(req, status);
6455		return;
6456	}
6457
6458	/* Copy out parameters */
6459	memcpy(state->orig.out.buffer, state->tmp.out.buffer, (state->tmp.in.offered) * sizeof(*state->orig.out.buffer));
6460	*state->orig.out.needed = *state->tmp.out.needed;
6461
6462	/* Copy result */
6463	state->orig.out.result = state->tmp.out.result;
6464
6465	/* Reset temporary structure */
6466	ZERO_STRUCT(state->tmp);
6467
6468	tevent_req_done(req);
6469}
6470
6471NTSTATUS rpccli_svcctl_QueryServiceStatusEx_recv(struct tevent_req *req,
6472						 TALLOC_CTX *mem_ctx,
6473						 WERROR *result)
6474{
6475	struct rpccli_svcctl_QueryServiceStatusEx_state *state = tevent_req_data(
6476		req, struct rpccli_svcctl_QueryServiceStatusEx_state);
6477	NTSTATUS status;
6478
6479	if (tevent_req_is_nterror(req, &status)) {
6480		tevent_req_received(req);
6481		return status;
6482	}
6483
6484	/* Steal possbile out parameters to the callers context */
6485	talloc_steal(mem_ctx, state->out_mem_ctx);
6486
6487	/* Return result */
6488	*result = state->orig.out.result;
6489
6490	tevent_req_received(req);
6491	return NT_STATUS_OK;
6492}
6493
6494NTSTATUS rpccli_svcctl_QueryServiceStatusEx(struct rpc_pipe_client *cli,
6495					    TALLOC_CTX *mem_ctx,
6496					    struct policy_handle *handle /* [in] [ref] */,
6497					    enum svcctl_StatusLevel info_level /* [in]  */,
6498					    uint8_t *buffer /* [out] [ref,size_is(offered)] */,
6499					    uint32_t offered /* [in] [range(0,8192)] */,
6500					    uint32_t *needed /* [out] [ref,range(0,8192)] */,
6501					    WERROR *werror)
6502{
6503	struct svcctl_QueryServiceStatusEx r;
6504	NTSTATUS status;
6505
6506	/* In parameters */
6507	r.in.handle = handle;
6508	r.in.info_level = info_level;
6509	r.in.offered = offered;
6510
6511	status = cli->dispatch(cli,
6512				mem_ctx,
6513				&ndr_table_svcctl,
6514				NDR_SVCCTL_QUERYSERVICESTATUSEX,
6515				&r);
6516
6517	if (!NT_STATUS_IS_OK(status)) {
6518		return status;
6519	}
6520
6521	if (NT_STATUS_IS_ERR(status)) {
6522		return status;
6523	}
6524
6525	/* Return variables */
6526	memcpy(buffer, r.out.buffer, (r.in.offered) * sizeof(*buffer));
6527	*needed = *r.out.needed;
6528
6529	/* Return result */
6530	if (werror) {
6531		*werror = r.out.result;
6532	}
6533
6534	return werror_to_ntstatus(r.out.result);
6535}
6536
6537struct rpccli_EnumServicesStatusExA_state {
6538	struct EnumServicesStatusExA orig;
6539	struct EnumServicesStatusExA tmp;
6540	TALLOC_CTX *out_mem_ctx;
6541	NTSTATUS (*dispatch_recv)(struct tevent_req *req, TALLOC_CTX *mem_ctx);
6542};
6543
6544static void rpccli_EnumServicesStatusExA_done(struct tevent_req *subreq);
6545
6546struct tevent_req *rpccli_EnumServicesStatusExA_send(TALLOC_CTX *mem_ctx,
6547						     struct tevent_context *ev,
6548						     struct rpc_pipe_client *cli,
6549						     struct policy_handle *_scmanager /* [in] [ref] */,
6550						     uint32_t _info_level /* [in]  */,
6551						     uint32_t _type /* [in]  */,
6552						     enum svcctl_ServiceState _state /* [in]  */,
6553						     uint8_t *_services /* [out]  */,
6554						     uint32_t _offered /* [in]  */,
6555						     uint32_t *_needed /* [out] [ref] */,
6556						     uint32_t *_service_returned /* [out] [ref] */,
6557						     uint32_t *_resume_handle /* [in,out] [unique] */,
6558						     const char **_group_name /* [out] [ref,charset(UTF16)] */)
6559{
6560	struct tevent_req *req;
6561	struct rpccli_EnumServicesStatusExA_state *state;
6562	struct tevent_req *subreq;
6563
6564	req = tevent_req_create(mem_ctx, &state,
6565				struct rpccli_EnumServicesStatusExA_state);
6566	if (req == NULL) {
6567		return NULL;
6568	}
6569	state->out_mem_ctx = NULL;
6570	state->dispatch_recv = cli->dispatch_recv;
6571
6572	/* In parameters */
6573	state->orig.in.scmanager = _scmanager;
6574	state->orig.in.info_level = _info_level;
6575	state->orig.in.type = _type;
6576	state->orig.in.state = _state;
6577	state->orig.in.offered = _offered;
6578	state->orig.in.resume_handle = _resume_handle;
6579
6580	/* Out parameters */
6581	state->orig.out.services = _services;
6582	state->orig.out.needed = _needed;
6583	state->orig.out.service_returned = _service_returned;
6584	state->orig.out.resume_handle = _resume_handle;
6585	state->orig.out.group_name = _group_name;
6586
6587	/* Result */
6588	ZERO_STRUCT(state->orig.out.result);
6589
6590	state->out_mem_ctx = talloc_named_const(state, 0,
6591			     "rpccli_EnumServicesStatusExA_out_memory");
6592	if (tevent_req_nomem(state->out_mem_ctx, req)) {
6593		return tevent_req_post(req, ev);
6594	}
6595
6596	/* make a temporary copy, that we pass to the dispatch function */
6597	state->tmp = state->orig;
6598
6599	subreq = cli->dispatch_send(state, ev, cli,
6600				    &ndr_table_svcctl,
6601				    NDR_ENUMSERVICESSTATUSEXA,
6602				    &state->tmp);
6603	if (tevent_req_nomem(subreq, req)) {
6604		return tevent_req_post(req, ev);
6605	}
6606	tevent_req_set_callback(subreq, rpccli_EnumServicesStatusExA_done, req);
6607	return req;
6608}
6609
6610static void rpccli_EnumServicesStatusExA_done(struct tevent_req *subreq)
6611{
6612	struct tevent_req *req = tevent_req_callback_data(
6613		subreq, struct tevent_req);
6614	struct rpccli_EnumServicesStatusExA_state *state = tevent_req_data(
6615		req, struct rpccli_EnumServicesStatusExA_state);
6616	NTSTATUS status;
6617	TALLOC_CTX *mem_ctx;
6618
6619	if (state->out_mem_ctx) {
6620		mem_ctx = state->out_mem_ctx;
6621	} else {
6622		mem_ctx = state;
6623	}
6624
6625	status = state->dispatch_recv(subreq, mem_ctx);
6626	TALLOC_FREE(subreq);
6627	if (!NT_STATUS_IS_OK(status)) {
6628		tevent_req_nterror(req, status);
6629		return;
6630	}
6631
6632	/* Copy out parameters */
6633	memcpy(state->orig.out.services, state->tmp.out.services, (state->tmp.in.offered) * sizeof(*state->orig.out.services));
6634	*state->orig.out.needed = *state->tmp.out.needed;
6635	*state->orig.out.service_returned = *state->tmp.out.service_returned;
6636	if (state->orig.out.resume_handle && state->tmp.out.resume_handle) {
6637		*state->orig.out.resume_handle = *state->tmp.out.resume_handle;
6638	}
6639	*state->orig.out.group_name = *state->tmp.out.group_name;
6640
6641	/* Copy result */
6642	state->orig.out.result = state->tmp.out.result;
6643
6644	/* Reset temporary structure */
6645	ZERO_STRUCT(state->tmp);
6646
6647	tevent_req_done(req);
6648}
6649
6650NTSTATUS rpccli_EnumServicesStatusExA_recv(struct tevent_req *req,
6651					   TALLOC_CTX *mem_ctx,
6652					   WERROR *result)
6653{
6654	struct rpccli_EnumServicesStatusExA_state *state = tevent_req_data(
6655		req, struct rpccli_EnumServicesStatusExA_state);
6656	NTSTATUS status;
6657
6658	if (tevent_req_is_nterror(req, &status)) {
6659		tevent_req_received(req);
6660		return status;
6661	}
6662
6663	/* Steal possbile out parameters to the callers context */
6664	talloc_steal(mem_ctx, state->out_mem_ctx);
6665
6666	/* Return result */
6667	*result = state->orig.out.result;
6668
6669	tevent_req_received(req);
6670	return NT_STATUS_OK;
6671}
6672
6673NTSTATUS rpccli_EnumServicesStatusExA(struct rpc_pipe_client *cli,
6674				      TALLOC_CTX *mem_ctx,
6675				      struct policy_handle *scmanager /* [in] [ref] */,
6676				      uint32_t info_level /* [in]  */,
6677				      uint32_t type /* [in]  */,
6678				      enum svcctl_ServiceState state /* [in]  */,
6679				      uint8_t *services /* [out]  */,
6680				      uint32_t offered /* [in]  */,
6681				      uint32_t *needed /* [out] [ref] */,
6682				      uint32_t *service_returned /* [out] [ref] */,
6683				      uint32_t *resume_handle /* [in,out] [unique] */,
6684				      const char **group_name /* [out] [ref,charset(UTF16)] */,
6685				      WERROR *werror)
6686{
6687	struct EnumServicesStatusExA r;
6688	NTSTATUS status;
6689
6690	/* In parameters */
6691	r.in.scmanager = scmanager;
6692	r.in.info_level = info_level;
6693	r.in.type = type;
6694	r.in.state = state;
6695	r.in.offered = offered;
6696	r.in.resume_handle = resume_handle;
6697
6698	status = cli->dispatch(cli,
6699				mem_ctx,
6700				&ndr_table_svcctl,
6701				NDR_ENUMSERVICESSTATUSEXA,
6702				&r);
6703
6704	if (!NT_STATUS_IS_OK(status)) {
6705		return status;
6706	}
6707
6708	if (NT_STATUS_IS_ERR(status)) {
6709		return status;
6710	}
6711
6712	/* Return variables */
6713	memcpy(services, r.out.services, (r.in.offered) * sizeof(*services));
6714	*needed = *r.out.needed;
6715	*service_returned = *r.out.service_returned;
6716	if (resume_handle && r.out.resume_handle) {
6717		*resume_handle = *r.out.resume_handle;
6718	}
6719	*group_name = *r.out.group_name;
6720
6721	/* Return result */
6722	if (werror) {
6723		*werror = r.out.result;
6724	}
6725
6726	return werror_to_ntstatus(r.out.result);
6727}
6728
6729struct rpccli_EnumServicesStatusExW_state {
6730	struct EnumServicesStatusExW orig;
6731	struct EnumServicesStatusExW tmp;
6732	TALLOC_CTX *out_mem_ctx;
6733	NTSTATUS (*dispatch_recv)(struct tevent_req *req, TALLOC_CTX *mem_ctx);
6734};
6735
6736static void rpccli_EnumServicesStatusExW_done(struct tevent_req *subreq);
6737
6738struct tevent_req *rpccli_EnumServicesStatusExW_send(TALLOC_CTX *mem_ctx,
6739						     struct tevent_context *ev,
6740						     struct rpc_pipe_client *cli,
6741						     struct policy_handle *_scmanager /* [in] [ref] */,
6742						     uint32_t _info_level /* [in]  */,
6743						     uint32_t _type /* [in]  */,
6744						     enum svcctl_ServiceState _state /* [in]  */,
6745						     uint8_t *_services /* [out] [ref,size_is(offered)] */,
6746						     uint32_t _offered /* [in] [range(0,0x40000)] */,
6747						     uint32_t *_needed /* [out] [ref,range(0,0x40000)] */,
6748						     uint32_t *_service_returned /* [out] [ref,range(0,0x40000)] */,
6749						     uint32_t *_resume_handle /* [in,out] [unique,range(0,0x40000)] */,
6750						     const char *_group_name /* [in] [unique,charset(UTF16)] */)
6751{
6752	struct tevent_req *req;
6753	struct rpccli_EnumServicesStatusExW_state *state;
6754	struct tevent_req *subreq;
6755
6756	req = tevent_req_create(mem_ctx, &state,
6757				struct rpccli_EnumServicesStatusExW_state);
6758	if (req == NULL) {
6759		return NULL;
6760	}
6761	state->out_mem_ctx = NULL;
6762	state->dispatch_recv = cli->dispatch_recv;
6763
6764	/* In parameters */
6765	state->orig.in.scmanager = _scmanager;
6766	state->orig.in.info_level = _info_level;
6767	state->orig.in.type = _type;
6768	state->orig.in.state = _state;
6769	state->orig.in.offered = _offered;
6770	state->orig.in.resume_handle = _resume_handle;
6771	state->orig.in.group_name = _group_name;
6772
6773	/* Out parameters */
6774	state->orig.out.services = _services;
6775	state->orig.out.needed = _needed;
6776	state->orig.out.service_returned = _service_returned;
6777	state->orig.out.resume_handle = _resume_handle;
6778
6779	/* Result */
6780	ZERO_STRUCT(state->orig.out.result);
6781
6782	state->out_mem_ctx = talloc_named_const(state, 0,
6783			     "rpccli_EnumServicesStatusExW_out_memory");
6784	if (tevent_req_nomem(state->out_mem_ctx, req)) {
6785		return tevent_req_post(req, ev);
6786	}
6787
6788	/* make a temporary copy, that we pass to the dispatch function */
6789	state->tmp = state->orig;
6790
6791	subreq = cli->dispatch_send(state, ev, cli,
6792				    &ndr_table_svcctl,
6793				    NDR_ENUMSERVICESSTATUSEXW,
6794				    &state->tmp);
6795	if (tevent_req_nomem(subreq, req)) {
6796		return tevent_req_post(req, ev);
6797	}
6798	tevent_req_set_callback(subreq, rpccli_EnumServicesStatusExW_done, req);
6799	return req;
6800}
6801
6802static void rpccli_EnumServicesStatusExW_done(struct tevent_req *subreq)
6803{
6804	struct tevent_req *req = tevent_req_callback_data(
6805		subreq, struct tevent_req);
6806	struct rpccli_EnumServicesStatusExW_state *state = tevent_req_data(
6807		req, struct rpccli_EnumServicesStatusExW_state);
6808	NTSTATUS status;
6809	TALLOC_CTX *mem_ctx;
6810
6811	if (state->out_mem_ctx) {
6812		mem_ctx = state->out_mem_ctx;
6813	} else {
6814		mem_ctx = state;
6815	}
6816
6817	status = state->dispatch_recv(subreq, mem_ctx);
6818	TALLOC_FREE(subreq);
6819	if (!NT_STATUS_IS_OK(status)) {
6820		tevent_req_nterror(req, status);
6821		return;
6822	}
6823
6824	/* Copy out parameters */
6825	memcpy(state->orig.out.services, state->tmp.out.services, (state->tmp.in.offered) * sizeof(*state->orig.out.services));
6826	*state->orig.out.needed = *state->tmp.out.needed;
6827	*state->orig.out.service_returned = *state->tmp.out.service_returned;
6828	if (state->orig.out.resume_handle && state->tmp.out.resume_handle) {
6829		*state->orig.out.resume_handle = *state->tmp.out.resume_handle;
6830	}
6831
6832	/* Copy result */
6833	state->orig.out.result = state->tmp.out.result;
6834
6835	/* Reset temporary structure */
6836	ZERO_STRUCT(state->tmp);
6837
6838	tevent_req_done(req);
6839}
6840
6841NTSTATUS rpccli_EnumServicesStatusExW_recv(struct tevent_req *req,
6842					   TALLOC_CTX *mem_ctx,
6843					   WERROR *result)
6844{
6845	struct rpccli_EnumServicesStatusExW_state *state = tevent_req_data(
6846		req, struct rpccli_EnumServicesStatusExW_state);
6847	NTSTATUS status;
6848
6849	if (tevent_req_is_nterror(req, &status)) {
6850		tevent_req_received(req);
6851		return status;
6852	}
6853
6854	/* Steal possbile out parameters to the callers context */
6855	talloc_steal(mem_ctx, state->out_mem_ctx);
6856
6857	/* Return result */
6858	*result = state->orig.out.result;
6859
6860	tevent_req_received(req);
6861	return NT_STATUS_OK;
6862}
6863
6864NTSTATUS rpccli_EnumServicesStatusExW(struct rpc_pipe_client *cli,
6865				      TALLOC_CTX *mem_ctx,
6866				      struct policy_handle *scmanager /* [in] [ref] */,
6867				      uint32_t info_level /* [in]  */,
6868				      uint32_t type /* [in]  */,
6869				      enum svcctl_ServiceState state /* [in]  */,
6870				      uint8_t *services /* [out] [ref,size_is(offered)] */,
6871				      uint32_t offered /* [in] [range(0,0x40000)] */,
6872				      uint32_t *needed /* [out] [ref,range(0,0x40000)] */,
6873				      uint32_t *service_returned /* [out] [ref,range(0,0x40000)] */,
6874				      uint32_t *resume_handle /* [in,out] [unique,range(0,0x40000)] */,
6875				      const char *group_name /* [in] [unique,charset(UTF16)] */,
6876				      WERROR *werror)
6877{
6878	struct EnumServicesStatusExW r;
6879	NTSTATUS status;
6880
6881	/* In parameters */
6882	r.in.scmanager = scmanager;
6883	r.in.info_level = info_level;
6884	r.in.type = type;
6885	r.in.state = state;
6886	r.in.offered = offered;
6887	r.in.resume_handle = resume_handle;
6888	r.in.group_name = group_name;
6889
6890	status = cli->dispatch(cli,
6891				mem_ctx,
6892				&ndr_table_svcctl,
6893				NDR_ENUMSERVICESSTATUSEXW,
6894				&r);
6895
6896	if (!NT_STATUS_IS_OK(status)) {
6897		return status;
6898	}
6899
6900	if (NT_STATUS_IS_ERR(status)) {
6901		return status;
6902	}
6903
6904	/* Return variables */
6905	memcpy(services, r.out.services, (r.in.offered) * sizeof(*services));
6906	*needed = *r.out.needed;
6907	*service_returned = *r.out.service_returned;
6908	if (resume_handle && r.out.resume_handle) {
6909		*resume_handle = *r.out.resume_handle;
6910	}
6911
6912	/* Return result */
6913	if (werror) {
6914		*werror = r.out.result;
6915	}
6916
6917	return werror_to_ntstatus(r.out.result);
6918}
6919
6920struct rpccli_svcctl_SCSendTSMessage_state {
6921	struct svcctl_SCSendTSMessage orig;
6922	struct svcctl_SCSendTSMessage tmp;
6923	TALLOC_CTX *out_mem_ctx;
6924	NTSTATUS (*dispatch_recv)(struct tevent_req *req, TALLOC_CTX *mem_ctx);
6925};
6926
6927static void rpccli_svcctl_SCSendTSMessage_done(struct tevent_req *subreq);
6928
6929struct tevent_req *rpccli_svcctl_SCSendTSMessage_send(TALLOC_CTX *mem_ctx,
6930						      struct tevent_context *ev,
6931						      struct rpc_pipe_client *cli)
6932{
6933	struct tevent_req *req;
6934	struct rpccli_svcctl_SCSendTSMessage_state *state;
6935	struct tevent_req *subreq;
6936
6937	req = tevent_req_create(mem_ctx, &state,
6938				struct rpccli_svcctl_SCSendTSMessage_state);
6939	if (req == NULL) {
6940		return NULL;
6941	}
6942	state->out_mem_ctx = NULL;
6943	state->dispatch_recv = cli->dispatch_recv;
6944
6945	/* In parameters */
6946
6947	/* Out parameters */
6948
6949	/* Result */
6950	ZERO_STRUCT(state->orig.out.result);
6951
6952	/* make a temporary copy, that we pass to the dispatch function */
6953	state->tmp = state->orig;
6954
6955	subreq = cli->dispatch_send(state, ev, cli,
6956				    &ndr_table_svcctl,
6957				    NDR_SVCCTL_SCSENDTSMESSAGE,
6958				    &state->tmp);
6959	if (tevent_req_nomem(subreq, req)) {
6960		return tevent_req_post(req, ev);
6961	}
6962	tevent_req_set_callback(subreq, rpccli_svcctl_SCSendTSMessage_done, req);
6963	return req;
6964}
6965
6966static void rpccli_svcctl_SCSendTSMessage_done(struct tevent_req *subreq)
6967{
6968	struct tevent_req *req = tevent_req_callback_data(
6969		subreq, struct tevent_req);
6970	struct rpccli_svcctl_SCSendTSMessage_state *state = tevent_req_data(
6971		req, struct rpccli_svcctl_SCSendTSMessage_state);
6972	NTSTATUS status;
6973	TALLOC_CTX *mem_ctx;
6974
6975	if (state->out_mem_ctx) {
6976		mem_ctx = state->out_mem_ctx;
6977	} else {
6978		mem_ctx = state;
6979	}
6980
6981	status = state->dispatch_recv(subreq, mem_ctx);
6982	TALLOC_FREE(subreq);
6983	if (!NT_STATUS_IS_OK(status)) {
6984		tevent_req_nterror(req, status);
6985		return;
6986	}
6987
6988	/* Copy out parameters */
6989
6990	/* Copy result */
6991	state->orig.out.result = state->tmp.out.result;
6992
6993	/* Reset temporary structure */
6994	ZERO_STRUCT(state->tmp);
6995
6996	tevent_req_done(req);
6997}
6998
6999NTSTATUS rpccli_svcctl_SCSendTSMessage_recv(struct tevent_req *req,
7000					    TALLOC_CTX *mem_ctx,
7001					    WERROR *result)
7002{
7003	struct rpccli_svcctl_SCSendTSMessage_state *state = tevent_req_data(
7004		req, struct rpccli_svcctl_SCSendTSMessage_state);
7005	NTSTATUS status;
7006
7007	if (tevent_req_is_nterror(req, &status)) {
7008		tevent_req_received(req);
7009		return status;
7010	}
7011
7012	/* Steal possbile out parameters to the callers context */
7013	talloc_steal(mem_ctx, state->out_mem_ctx);
7014
7015	/* Return result */
7016	*result = state->orig.out.result;
7017
7018	tevent_req_received(req);
7019	return NT_STATUS_OK;
7020}
7021
7022NTSTATUS rpccli_svcctl_SCSendTSMessage(struct rpc_pipe_client *cli,
7023				       TALLOC_CTX *mem_ctx,
7024				       WERROR *werror)
7025{
7026	struct svcctl_SCSendTSMessage r;
7027	NTSTATUS status;
7028
7029	/* In parameters */
7030
7031	status = cli->dispatch(cli,
7032				mem_ctx,
7033				&ndr_table_svcctl,
7034				NDR_SVCCTL_SCSENDTSMESSAGE,
7035				&r);
7036
7037	if (!NT_STATUS_IS_OK(status)) {
7038		return status;
7039	}
7040
7041	if (NT_STATUS_IS_ERR(status)) {
7042		return status;
7043	}
7044
7045	/* Return variables */
7046
7047	/* Return result */
7048	if (werror) {
7049		*werror = r.out.result;
7050	}
7051
7052	return werror_to_ntstatus(r.out.result);
7053}
7054
7055