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