2 * Unix SMB/CIFS implementation.
3 * server auto-generated by pidl. DO NOT MODIFY!
8 #include "bin/default/librpc/gen_ndr/srv_svcctl.h"
10 static bool api_svcctl_CloseServiceHandle(struct pipes_struct *p)
12 const struct ndr_interface_call *call;
13 struct ndr_pull *pull;
14 struct ndr_push *push;
15 enum ndr_err_code ndr_err;
16 struct svcctl_CloseServiceHandle *r;
18 call = &ndr_table_svcctl.calls[NDR_SVCCTL_CLOSESERVICEHANDLE];
20 r = talloc(talloc_tos(), struct svcctl_CloseServiceHandle);
25 pull = ndr_pull_init_blob(&p->in_data.data, r);
31 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
33 pull->flags |= LIBNDR_FLAG_BIGENDIAN;
35 ndr_err = call->ndr_pull(pull, NDR_IN, r);
36 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
41 if (DEBUGLEVEL >= 10) {
42 NDR_PRINT_FUNCTION_DEBUG(svcctl_CloseServiceHandle, NDR_IN, r);
46 r->out.handle = r->in.handle;
47 r->out.result = _svcctl_CloseServiceHandle(p, r);
51 /* Return true here, srv_pipe_hnd.c will take care */
55 if (DEBUGLEVEL >= 10) {
56 NDR_PRINT_FUNCTION_DEBUG(svcctl_CloseServiceHandle, NDR_OUT | NDR_SET_VALUES, r);
59 push = ndr_push_init_ctx(r);
66 * carry over the pointer count to the reply in case we are
67 * using full pointer. See NDR specification for full pointers
69 push->ptr_count = pull->ptr_count;
71 ndr_err = call->ndr_push(push, NDR_OUT, r);
72 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
77 p->out_data.rdata = ndr_push_blob(push);
78 talloc_steal(p->mem_ctx, p->out_data.rdata.data);
85 static bool api_svcctl_ControlService(struct pipes_struct *p)
87 const struct ndr_interface_call *call;
88 struct ndr_pull *pull;
89 struct ndr_push *push;
90 enum ndr_err_code ndr_err;
91 struct svcctl_ControlService *r;
93 call = &ndr_table_svcctl.calls[NDR_SVCCTL_CONTROLSERVICE];
95 r = talloc(talloc_tos(), struct svcctl_ControlService);
100 pull = ndr_pull_init_blob(&p->in_data.data, r);
106 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
108 pull->flags |= LIBNDR_FLAG_BIGENDIAN;
110 ndr_err = call->ndr_pull(pull, NDR_IN, r);
111 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
116 if (DEBUGLEVEL >= 10) {
117 NDR_PRINT_FUNCTION_DEBUG(svcctl_ControlService, NDR_IN, r);
121 r->out.service_status = talloc_zero(r, struct SERVICE_STATUS);
122 if (r->out.service_status == NULL) {
127 r->out.result = _svcctl_ControlService(p, r);
129 if (p->fault_state) {
131 /* Return true here, srv_pipe_hnd.c will take care */
135 if (DEBUGLEVEL >= 10) {
136 NDR_PRINT_FUNCTION_DEBUG(svcctl_ControlService, NDR_OUT | NDR_SET_VALUES, r);
139 push = ndr_push_init_ctx(r);
146 * carry over the pointer count to the reply in case we are
147 * using full pointer. See NDR specification for full pointers
149 push->ptr_count = pull->ptr_count;
151 ndr_err = call->ndr_push(push, NDR_OUT, r);
152 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
157 p->out_data.rdata = ndr_push_blob(push);
158 talloc_steal(p->mem_ctx, p->out_data.rdata.data);
165 static bool api_svcctl_DeleteService(struct pipes_struct *p)
167 const struct ndr_interface_call *call;
168 struct ndr_pull *pull;
169 struct ndr_push *push;
170 enum ndr_err_code ndr_err;
171 struct svcctl_DeleteService *r;
173 call = &ndr_table_svcctl.calls[NDR_SVCCTL_DELETESERVICE];
175 r = talloc(talloc_tos(), struct svcctl_DeleteService);
180 pull = ndr_pull_init_blob(&p->in_data.data, r);
186 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
188 pull->flags |= LIBNDR_FLAG_BIGENDIAN;
190 ndr_err = call->ndr_pull(pull, NDR_IN, r);
191 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
196 if (DEBUGLEVEL >= 10) {
197 NDR_PRINT_FUNCTION_DEBUG(svcctl_DeleteService, NDR_IN, r);
200 r->out.result = _svcctl_DeleteService(p, r);
202 if (p->fault_state) {
204 /* Return true here, srv_pipe_hnd.c will take care */
208 if (DEBUGLEVEL >= 10) {
209 NDR_PRINT_FUNCTION_DEBUG(svcctl_DeleteService, NDR_OUT | NDR_SET_VALUES, r);
212 push = ndr_push_init_ctx(r);
219 * carry over the pointer count to the reply in case we are
220 * using full pointer. See NDR specification for full pointers
222 push->ptr_count = pull->ptr_count;
224 ndr_err = call->ndr_push(push, NDR_OUT, r);
225 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
230 p->out_data.rdata = ndr_push_blob(push);
231 talloc_steal(p->mem_ctx, p->out_data.rdata.data);
238 static bool api_svcctl_LockServiceDatabase(struct pipes_struct *p)
240 const struct ndr_interface_call *call;
241 struct ndr_pull *pull;
242 struct ndr_push *push;
243 enum ndr_err_code ndr_err;
244 struct svcctl_LockServiceDatabase *r;
246 call = &ndr_table_svcctl.calls[NDR_SVCCTL_LOCKSERVICEDATABASE];
248 r = talloc(talloc_tos(), struct svcctl_LockServiceDatabase);
253 pull = ndr_pull_init_blob(&p->in_data.data, r);
259 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
261 pull->flags |= LIBNDR_FLAG_BIGENDIAN;
263 ndr_err = call->ndr_pull(pull, NDR_IN, r);
264 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
269 if (DEBUGLEVEL >= 10) {
270 NDR_PRINT_FUNCTION_DEBUG(svcctl_LockServiceDatabase, NDR_IN, r);
274 r->out.lock = talloc_zero(r, struct policy_handle);
275 if (r->out.lock == NULL) {
280 r->out.result = _svcctl_LockServiceDatabase(p, r);
282 if (p->fault_state) {
284 /* Return true here, srv_pipe_hnd.c will take care */
288 if (DEBUGLEVEL >= 10) {
289 NDR_PRINT_FUNCTION_DEBUG(svcctl_LockServiceDatabase, NDR_OUT | NDR_SET_VALUES, r);
292 push = ndr_push_init_ctx(r);
299 * carry over the pointer count to the reply in case we are
300 * using full pointer. See NDR specification for full pointers
302 push->ptr_count = pull->ptr_count;
304 ndr_err = call->ndr_push(push, NDR_OUT, r);
305 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
310 p->out_data.rdata = ndr_push_blob(push);
311 talloc_steal(p->mem_ctx, p->out_data.rdata.data);
318 static bool api_svcctl_QueryServiceObjectSecurity(struct pipes_struct *p)
320 const struct ndr_interface_call *call;
321 struct ndr_pull *pull;
322 struct ndr_push *push;
323 enum ndr_err_code ndr_err;
324 struct svcctl_QueryServiceObjectSecurity *r;
326 call = &ndr_table_svcctl.calls[NDR_SVCCTL_QUERYSERVICEOBJECTSECURITY];
328 r = talloc(talloc_tos(), struct svcctl_QueryServiceObjectSecurity);
333 pull = ndr_pull_init_blob(&p->in_data.data, r);
339 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
341 pull->flags |= LIBNDR_FLAG_BIGENDIAN;
343 ndr_err = call->ndr_pull(pull, NDR_IN, r);
344 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
349 if (DEBUGLEVEL >= 10) {
350 NDR_PRINT_FUNCTION_DEBUG(svcctl_QueryServiceObjectSecurity, NDR_IN, r);
354 r->out.buffer = talloc_zero_array(r, uint8_t, r->in.offered);
355 if (r->out.buffer == NULL) {
360 r->out.needed = talloc_zero(r, uint32_t);
361 if (r->out.needed == NULL) {
366 r->out.result = _svcctl_QueryServiceObjectSecurity(p, r);
368 if (p->fault_state) {
370 /* Return true here, srv_pipe_hnd.c will take care */
374 if (DEBUGLEVEL >= 10) {
375 NDR_PRINT_FUNCTION_DEBUG(svcctl_QueryServiceObjectSecurity, NDR_OUT | NDR_SET_VALUES, r);
378 push = ndr_push_init_ctx(r);
385 * carry over the pointer count to the reply in case we are
386 * using full pointer. See NDR specification for full pointers
388 push->ptr_count = pull->ptr_count;
390 ndr_err = call->ndr_push(push, NDR_OUT, r);
391 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
396 p->out_data.rdata = ndr_push_blob(push);
397 talloc_steal(p->mem_ctx, p->out_data.rdata.data);
404 static bool api_svcctl_SetServiceObjectSecurity(struct pipes_struct *p)
406 const struct ndr_interface_call *call;
407 struct ndr_pull *pull;
408 struct ndr_push *push;
409 enum ndr_err_code ndr_err;
410 struct svcctl_SetServiceObjectSecurity *r;
412 call = &ndr_table_svcctl.calls[NDR_SVCCTL_SETSERVICEOBJECTSECURITY];
414 r = talloc(talloc_tos(), struct svcctl_SetServiceObjectSecurity);
419 pull = ndr_pull_init_blob(&p->in_data.data, r);
425 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
427 pull->flags |= LIBNDR_FLAG_BIGENDIAN;
429 ndr_err = call->ndr_pull(pull, NDR_IN, r);
430 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
435 if (DEBUGLEVEL >= 10) {
436 NDR_PRINT_FUNCTION_DEBUG(svcctl_SetServiceObjectSecurity, NDR_IN, r);
439 r->out.result = _svcctl_SetServiceObjectSecurity(p, r);
441 if (p->fault_state) {
443 /* Return true here, srv_pipe_hnd.c will take care */
447 if (DEBUGLEVEL >= 10) {
448 NDR_PRINT_FUNCTION_DEBUG(svcctl_SetServiceObjectSecurity, NDR_OUT | NDR_SET_VALUES, r);
451 push = ndr_push_init_ctx(r);
458 * carry over the pointer count to the reply in case we are
459 * using full pointer. See NDR specification for full pointers
461 push->ptr_count = pull->ptr_count;
463 ndr_err = call->ndr_push(push, NDR_OUT, r);
464 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
469 p->out_data.rdata = ndr_push_blob(push);
470 talloc_steal(p->mem_ctx, p->out_data.rdata.data);
477 static bool api_svcctl_QueryServiceStatus(struct pipes_struct *p)
479 const struct ndr_interface_call *call;
480 struct ndr_pull *pull;
481 struct ndr_push *push;
482 enum ndr_err_code ndr_err;
483 struct svcctl_QueryServiceStatus *r;
485 call = &ndr_table_svcctl.calls[NDR_SVCCTL_QUERYSERVICESTATUS];
487 r = talloc(talloc_tos(), struct svcctl_QueryServiceStatus);
492 pull = ndr_pull_init_blob(&p->in_data.data, r);
498 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
500 pull->flags |= LIBNDR_FLAG_BIGENDIAN;
502 ndr_err = call->ndr_pull(pull, NDR_IN, r);
503 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
508 if (DEBUGLEVEL >= 10) {
509 NDR_PRINT_FUNCTION_DEBUG(svcctl_QueryServiceStatus, NDR_IN, r);
513 r->out.service_status = talloc_zero(r, struct SERVICE_STATUS);
514 if (r->out.service_status == NULL) {
519 r->out.result = _svcctl_QueryServiceStatus(p, r);
521 if (p->fault_state) {
523 /* Return true here, srv_pipe_hnd.c will take care */
527 if (DEBUGLEVEL >= 10) {
528 NDR_PRINT_FUNCTION_DEBUG(svcctl_QueryServiceStatus, NDR_OUT | NDR_SET_VALUES, r);
531 push = ndr_push_init_ctx(r);
538 * carry over the pointer count to the reply in case we are
539 * using full pointer. See NDR specification for full pointers
541 push->ptr_count = pull->ptr_count;
543 ndr_err = call->ndr_push(push, NDR_OUT, r);
544 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
549 p->out_data.rdata = ndr_push_blob(push);
550 talloc_steal(p->mem_ctx, p->out_data.rdata.data);
557 static bool api_svcctl_SetServiceStatus(struct pipes_struct *p)
559 const struct ndr_interface_call *call;
560 struct ndr_pull *pull;
561 struct ndr_push *push;
562 enum ndr_err_code ndr_err;
563 struct svcctl_SetServiceStatus *r;
565 call = &ndr_table_svcctl.calls[NDR_SVCCTL_SETSERVICESTATUS];
567 r = talloc(talloc_tos(), struct svcctl_SetServiceStatus);
572 pull = ndr_pull_init_blob(&p->in_data.data, r);
578 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
580 pull->flags |= LIBNDR_FLAG_BIGENDIAN;
582 ndr_err = call->ndr_pull(pull, NDR_IN, r);
583 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
588 if (DEBUGLEVEL >= 10) {
589 NDR_PRINT_FUNCTION_DEBUG(svcctl_SetServiceStatus, NDR_IN, r);
592 r->out.result = _svcctl_SetServiceStatus(p, r);
594 if (p->fault_state) {
596 /* Return true here, srv_pipe_hnd.c will take care */
600 if (DEBUGLEVEL >= 10) {
601 NDR_PRINT_FUNCTION_DEBUG(svcctl_SetServiceStatus, NDR_OUT | NDR_SET_VALUES, r);
604 push = ndr_push_init_ctx(r);
611 * carry over the pointer count to the reply in case we are
612 * using full pointer. See NDR specification for full pointers
614 push->ptr_count = pull->ptr_count;
616 ndr_err = call->ndr_push(push, NDR_OUT, r);
617 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
622 p->out_data.rdata = ndr_push_blob(push);
623 talloc_steal(p->mem_ctx, p->out_data.rdata.data);
630 static bool api_svcctl_UnlockServiceDatabase(struct pipes_struct *p)
632 const struct ndr_interface_call *call;
633 struct ndr_pull *pull;
634 struct ndr_push *push;
635 enum ndr_err_code ndr_err;
636 struct svcctl_UnlockServiceDatabase *r;
638 call = &ndr_table_svcctl.calls[NDR_SVCCTL_UNLOCKSERVICEDATABASE];
640 r = talloc(talloc_tos(), struct svcctl_UnlockServiceDatabase);
645 pull = ndr_pull_init_blob(&p->in_data.data, r);
651 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
653 pull->flags |= LIBNDR_FLAG_BIGENDIAN;
655 ndr_err = call->ndr_pull(pull, NDR_IN, r);
656 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
661 if (DEBUGLEVEL >= 10) {
662 NDR_PRINT_FUNCTION_DEBUG(svcctl_UnlockServiceDatabase, NDR_IN, r);
666 r->out.lock = r->in.lock;
667 r->out.result = _svcctl_UnlockServiceDatabase(p, r);
669 if (p->fault_state) {
671 /* Return true here, srv_pipe_hnd.c will take care */
675 if (DEBUGLEVEL >= 10) {
676 NDR_PRINT_FUNCTION_DEBUG(svcctl_UnlockServiceDatabase, NDR_OUT | NDR_SET_VALUES, r);
679 push = ndr_push_init_ctx(r);
686 * carry over the pointer count to the reply in case we are
687 * using full pointer. See NDR specification for full pointers
689 push->ptr_count = pull->ptr_count;
691 ndr_err = call->ndr_push(push, NDR_OUT, r);
692 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
697 p->out_data.rdata = ndr_push_blob(push);
698 talloc_steal(p->mem_ctx, p->out_data.rdata.data);
705 static bool api_svcctl_NotifyBootConfigStatus(struct pipes_struct *p)
707 const struct ndr_interface_call *call;
708 struct ndr_pull *pull;
709 struct ndr_push *push;
710 enum ndr_err_code ndr_err;
711 struct svcctl_NotifyBootConfigStatus *r;
713 call = &ndr_table_svcctl.calls[NDR_SVCCTL_NOTIFYBOOTCONFIGSTATUS];
715 r = talloc(talloc_tos(), struct svcctl_NotifyBootConfigStatus);
720 pull = ndr_pull_init_blob(&p->in_data.data, r);
726 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
728 pull->flags |= LIBNDR_FLAG_BIGENDIAN;
730 ndr_err = call->ndr_pull(pull, NDR_IN, r);
731 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
736 if (DEBUGLEVEL >= 10) {
737 NDR_PRINT_FUNCTION_DEBUG(svcctl_NotifyBootConfigStatus, NDR_IN, r);
740 r->out.result = _svcctl_NotifyBootConfigStatus(p, r);
742 if (p->fault_state) {
744 /* Return true here, srv_pipe_hnd.c will take care */
748 if (DEBUGLEVEL >= 10) {
749 NDR_PRINT_FUNCTION_DEBUG(svcctl_NotifyBootConfigStatus, NDR_OUT | NDR_SET_VALUES, r);
752 push = ndr_push_init_ctx(r);
759 * carry over the pointer count to the reply in case we are
760 * using full pointer. See NDR specification for full pointers
762 push->ptr_count = pull->ptr_count;
764 ndr_err = call->ndr_push(push, NDR_OUT, r);
765 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
770 p->out_data.rdata = ndr_push_blob(push);
771 talloc_steal(p->mem_ctx, p->out_data.rdata.data);
778 static bool api_svcctl_SCSetServiceBitsW(struct pipes_struct *p)
780 const struct ndr_interface_call *call;
781 struct ndr_pull *pull;
782 struct ndr_push *push;
783 enum ndr_err_code ndr_err;
784 struct svcctl_SCSetServiceBitsW *r;
786 call = &ndr_table_svcctl.calls[NDR_SVCCTL_SCSETSERVICEBITSW];
788 r = talloc(talloc_tos(), struct svcctl_SCSetServiceBitsW);
793 pull = ndr_pull_init_blob(&p->in_data.data, r);
799 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
801 pull->flags |= LIBNDR_FLAG_BIGENDIAN;
803 ndr_err = call->ndr_pull(pull, NDR_IN, r);
804 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
809 if (DEBUGLEVEL >= 10) {
810 NDR_PRINT_FUNCTION_DEBUG(svcctl_SCSetServiceBitsW, NDR_IN, r);
813 r->out.result = _svcctl_SCSetServiceBitsW(p, r);
815 if (p->fault_state) {
817 /* Return true here, srv_pipe_hnd.c will take care */
821 if (DEBUGLEVEL >= 10) {
822 NDR_PRINT_FUNCTION_DEBUG(svcctl_SCSetServiceBitsW, NDR_OUT | NDR_SET_VALUES, r);
825 push = ndr_push_init_ctx(r);
832 * carry over the pointer count to the reply in case we are
833 * using full pointer. See NDR specification for full pointers
835 push->ptr_count = pull->ptr_count;
837 ndr_err = call->ndr_push(push, NDR_OUT, r);
838 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
843 p->out_data.rdata = ndr_push_blob(push);
844 talloc_steal(p->mem_ctx, p->out_data.rdata.data);
851 static bool api_svcctl_ChangeServiceConfigW(struct pipes_struct *p)
853 const struct ndr_interface_call *call;
854 struct ndr_pull *pull;
855 struct ndr_push *push;
856 enum ndr_err_code ndr_err;
857 struct svcctl_ChangeServiceConfigW *r;
859 call = &ndr_table_svcctl.calls[NDR_SVCCTL_CHANGESERVICECONFIGW];
861 r = talloc(talloc_tos(), struct svcctl_ChangeServiceConfigW);
866 pull = ndr_pull_init_blob(&p->in_data.data, r);
872 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
874 pull->flags |= LIBNDR_FLAG_BIGENDIAN;
876 ndr_err = call->ndr_pull(pull, NDR_IN, r);
877 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
882 if (DEBUGLEVEL >= 10) {
883 NDR_PRINT_FUNCTION_DEBUG(svcctl_ChangeServiceConfigW, NDR_IN, r);
887 r->out.tag_id = talloc_zero(r, uint32_t);
888 if (r->out.tag_id == NULL) {
893 r->out.result = _svcctl_ChangeServiceConfigW(p, r);
895 if (p->fault_state) {
897 /* Return true here, srv_pipe_hnd.c will take care */
901 if (DEBUGLEVEL >= 10) {
902 NDR_PRINT_FUNCTION_DEBUG(svcctl_ChangeServiceConfigW, NDR_OUT | NDR_SET_VALUES, r);
905 push = ndr_push_init_ctx(r);
912 * carry over the pointer count to the reply in case we are
913 * using full pointer. See NDR specification for full pointers
915 push->ptr_count = pull->ptr_count;
917 ndr_err = call->ndr_push(push, NDR_OUT, r);
918 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
923 p->out_data.rdata = ndr_push_blob(push);
924 talloc_steal(p->mem_ctx, p->out_data.rdata.data);
931 static bool api_svcctl_CreateServiceW(struct pipes_struct *p)
933 const struct ndr_interface_call *call;
934 struct ndr_pull *pull;
935 struct ndr_push *push;
936 enum ndr_err_code ndr_err;
937 struct svcctl_CreateServiceW *r;
939 call = &ndr_table_svcctl.calls[NDR_SVCCTL_CREATESERVICEW];
941 r = talloc(talloc_tos(), struct svcctl_CreateServiceW);
946 pull = ndr_pull_init_blob(&p->in_data.data, r);
952 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
954 pull->flags |= LIBNDR_FLAG_BIGENDIAN;
956 ndr_err = call->ndr_pull(pull, NDR_IN, r);
957 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
962 if (DEBUGLEVEL >= 10) {
963 NDR_PRINT_FUNCTION_DEBUG(svcctl_CreateServiceW, NDR_IN, r);
967 r->out.TagId = r->in.TagId;
968 r->out.handle = talloc_zero(r, struct policy_handle);
969 if (r->out.handle == NULL) {
974 r->out.result = _svcctl_CreateServiceW(p, r);
976 if (p->fault_state) {
978 /* Return true here, srv_pipe_hnd.c will take care */
982 if (DEBUGLEVEL >= 10) {
983 NDR_PRINT_FUNCTION_DEBUG(svcctl_CreateServiceW, NDR_OUT | NDR_SET_VALUES, r);
986 push = ndr_push_init_ctx(r);
993 * carry over the pointer count to the reply in case we are
994 * using full pointer. See NDR specification for full pointers
996 push->ptr_count = pull->ptr_count;
998 ndr_err = call->ndr_push(push, NDR_OUT, r);
999 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
1004 p->out_data.rdata = ndr_push_blob(push);
1005 talloc_steal(p->mem_ctx, p->out_data.rdata.data);
1012 static bool api_svcctl_EnumDependentServicesW(struct pipes_struct *p)
1014 const struct ndr_interface_call *call;
1015 struct ndr_pull *pull;
1016 struct ndr_push *push;
1017 enum ndr_err_code ndr_err;
1018 struct svcctl_EnumDependentServicesW *r;
1020 call = &ndr_table_svcctl.calls[NDR_SVCCTL_ENUMDEPENDENTSERVICESW];
1022 r = talloc(talloc_tos(), struct svcctl_EnumDependentServicesW);
1027 pull = ndr_pull_init_blob(&p->in_data.data, r);
1033 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
1035 pull->flags |= LIBNDR_FLAG_BIGENDIAN;
1037 ndr_err = call->ndr_pull(pull, NDR_IN, r);
1038 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
1043 if (DEBUGLEVEL >= 10) {
1044 NDR_PRINT_FUNCTION_DEBUG(svcctl_EnumDependentServicesW, NDR_IN, r);
1047 ZERO_STRUCT(r->out);
1048 r->out.service_status = talloc_zero_array(r, uint8_t, r->in.offered);
1049 if (r->out.service_status == NULL) {
1054 r->out.needed = talloc_zero(r, uint32_t);
1055 if (r->out.needed == NULL) {
1060 r->out.services_returned = talloc_zero(r, uint32_t);
1061 if (r->out.services_returned == NULL) {
1066 r->out.result = _svcctl_EnumDependentServicesW(p, r);
1068 if (p->fault_state) {
1070 /* Return true here, srv_pipe_hnd.c will take care */
1074 if (DEBUGLEVEL >= 10) {
1075 NDR_PRINT_FUNCTION_DEBUG(svcctl_EnumDependentServicesW, NDR_OUT | NDR_SET_VALUES, r);
1078 push = ndr_push_init_ctx(r);
1085 * carry over the pointer count to the reply in case we are
1086 * using full pointer. See NDR specification for full pointers
1088 push->ptr_count = pull->ptr_count;
1090 ndr_err = call->ndr_push(push, NDR_OUT, r);
1091 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
1096 p->out_data.rdata = ndr_push_blob(push);
1097 talloc_steal(p->mem_ctx, p->out_data.rdata.data);
1104 static bool api_svcctl_EnumServicesStatusW(struct pipes_struct *p)
1106 const struct ndr_interface_call *call;
1107 struct ndr_pull *pull;
1108 struct ndr_push *push;
1109 enum ndr_err_code ndr_err;
1110 struct svcctl_EnumServicesStatusW *r;
1112 call = &ndr_table_svcctl.calls[NDR_SVCCTL_ENUMSERVICESSTATUSW];
1114 r = talloc(talloc_tos(), struct svcctl_EnumServicesStatusW);
1119 pull = ndr_pull_init_blob(&p->in_data.data, r);
1125 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
1127 pull->flags |= LIBNDR_FLAG_BIGENDIAN;
1129 ndr_err = call->ndr_pull(pull, NDR_IN, r);
1130 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
1135 if (DEBUGLEVEL >= 10) {
1136 NDR_PRINT_FUNCTION_DEBUG(svcctl_EnumServicesStatusW, NDR_IN, r);
1139 ZERO_STRUCT(r->out);
1140 r->out.resume_handle = r->in.resume_handle;
1141 r->out.service = talloc_zero_array(r, uint8_t, r->in.offered);
1142 if (r->out.service == NULL) {
1147 r->out.needed = talloc_zero(r, uint32_t);
1148 if (r->out.needed == NULL) {
1153 r->out.services_returned = talloc_zero(r, uint32_t);
1154 if (r->out.services_returned == NULL) {
1159 r->out.result = _svcctl_EnumServicesStatusW(p, r);
1161 if (p->fault_state) {
1163 /* Return true here, srv_pipe_hnd.c will take care */
1167 if (DEBUGLEVEL >= 10) {
1168 NDR_PRINT_FUNCTION_DEBUG(svcctl_EnumServicesStatusW, NDR_OUT | NDR_SET_VALUES, r);
1171 push = ndr_push_init_ctx(r);
1178 * carry over the pointer count to the reply in case we are
1179 * using full pointer. See NDR specification for full pointers
1181 push->ptr_count = pull->ptr_count;
1183 ndr_err = call->ndr_push(push, NDR_OUT, r);
1184 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
1189 p->out_data.rdata = ndr_push_blob(push);
1190 talloc_steal(p->mem_ctx, p->out_data.rdata.data);
1197 static bool api_svcctl_OpenSCManagerW(struct pipes_struct *p)
1199 const struct ndr_interface_call *call;
1200 struct ndr_pull *pull;
1201 struct ndr_push *push;
1202 enum ndr_err_code ndr_err;
1203 struct svcctl_OpenSCManagerW *r;
1205 call = &ndr_table_svcctl.calls[NDR_SVCCTL_OPENSCMANAGERW];
1207 r = talloc(talloc_tos(), struct svcctl_OpenSCManagerW);
1212 pull = ndr_pull_init_blob(&p->in_data.data, r);
1218 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
1220 pull->flags |= LIBNDR_FLAG_BIGENDIAN;
1222 ndr_err = call->ndr_pull(pull, NDR_IN, r);
1223 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
1228 if (DEBUGLEVEL >= 10) {
1229 NDR_PRINT_FUNCTION_DEBUG(svcctl_OpenSCManagerW, NDR_IN, r);
1232 ZERO_STRUCT(r->out);
1233 r->out.handle = talloc_zero(r, struct policy_handle);
1234 if (r->out.handle == NULL) {
1239 r->out.result = _svcctl_OpenSCManagerW(p, r);
1241 if (p->fault_state) {
1243 /* Return true here, srv_pipe_hnd.c will take care */
1247 if (DEBUGLEVEL >= 10) {
1248 NDR_PRINT_FUNCTION_DEBUG(svcctl_OpenSCManagerW, NDR_OUT | NDR_SET_VALUES, r);
1251 push = ndr_push_init_ctx(r);
1258 * carry over the pointer count to the reply in case we are
1259 * using full pointer. See NDR specification for full pointers
1261 push->ptr_count = pull->ptr_count;
1263 ndr_err = call->ndr_push(push, NDR_OUT, r);
1264 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
1269 p->out_data.rdata = ndr_push_blob(push);
1270 talloc_steal(p->mem_ctx, p->out_data.rdata.data);
1277 static bool api_svcctl_OpenServiceW(struct pipes_struct *p)
1279 const struct ndr_interface_call *call;
1280 struct ndr_pull *pull;
1281 struct ndr_push *push;
1282 enum ndr_err_code ndr_err;
1283 struct svcctl_OpenServiceW *r;
1285 call = &ndr_table_svcctl.calls[NDR_SVCCTL_OPENSERVICEW];
1287 r = talloc(talloc_tos(), struct svcctl_OpenServiceW);
1292 pull = ndr_pull_init_blob(&p->in_data.data, r);
1298 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
1300 pull->flags |= LIBNDR_FLAG_BIGENDIAN;
1302 ndr_err = call->ndr_pull(pull, NDR_IN, r);
1303 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
1308 if (DEBUGLEVEL >= 10) {
1309 NDR_PRINT_FUNCTION_DEBUG(svcctl_OpenServiceW, NDR_IN, r);
1312 ZERO_STRUCT(r->out);
1313 r->out.handle = talloc_zero(r, struct policy_handle);
1314 if (r->out.handle == NULL) {
1319 r->out.result = _svcctl_OpenServiceW(p, r);
1321 if (p->fault_state) {
1323 /* Return true here, srv_pipe_hnd.c will take care */
1327 if (DEBUGLEVEL >= 10) {
1328 NDR_PRINT_FUNCTION_DEBUG(svcctl_OpenServiceW, NDR_OUT | NDR_SET_VALUES, r);
1331 push = ndr_push_init_ctx(r);
1338 * carry over the pointer count to the reply in case we are
1339 * using full pointer. See NDR specification for full pointers
1341 push->ptr_count = pull->ptr_count;
1343 ndr_err = call->ndr_push(push, NDR_OUT, r);
1344 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
1349 p->out_data.rdata = ndr_push_blob(push);
1350 talloc_steal(p->mem_ctx, p->out_data.rdata.data);
1357 static bool api_svcctl_QueryServiceConfigW(struct pipes_struct *p)
1359 const struct ndr_interface_call *call;
1360 struct ndr_pull *pull;
1361 struct ndr_push *push;
1362 enum ndr_err_code ndr_err;
1363 struct svcctl_QueryServiceConfigW *r;
1365 call = &ndr_table_svcctl.calls[NDR_SVCCTL_QUERYSERVICECONFIGW];
1367 r = talloc(talloc_tos(), struct svcctl_QueryServiceConfigW);
1372 pull = ndr_pull_init_blob(&p->in_data.data, r);
1378 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
1380 pull->flags |= LIBNDR_FLAG_BIGENDIAN;
1382 ndr_err = call->ndr_pull(pull, NDR_IN, r);
1383 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
1388 if (DEBUGLEVEL >= 10) {
1389 NDR_PRINT_FUNCTION_DEBUG(svcctl_QueryServiceConfigW, NDR_IN, r);
1392 ZERO_STRUCT(r->out);
1393 r->out.query = talloc_zero(r, struct QUERY_SERVICE_CONFIG);
1394 if (r->out.query == NULL) {
1399 r->out.needed = talloc_zero(r, uint32_t);
1400 if (r->out.needed == NULL) {
1405 r->out.result = _svcctl_QueryServiceConfigW(p, r);
1407 if (p->fault_state) {
1409 /* Return true here, srv_pipe_hnd.c will take care */
1413 if (DEBUGLEVEL >= 10) {
1414 NDR_PRINT_FUNCTION_DEBUG(svcctl_QueryServiceConfigW, NDR_OUT | NDR_SET_VALUES, r);
1417 push = ndr_push_init_ctx(r);
1424 * carry over the pointer count to the reply in case we are
1425 * using full pointer. See NDR specification for full pointers
1427 push->ptr_count = pull->ptr_count;
1429 ndr_err = call->ndr_push(push, NDR_OUT, r);
1430 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
1435 p->out_data.rdata = ndr_push_blob(push);
1436 talloc_steal(p->mem_ctx, p->out_data.rdata.data);
1443 static bool api_svcctl_QueryServiceLockStatusW(struct pipes_struct *p)
1445 const struct ndr_interface_call *call;
1446 struct ndr_pull *pull;
1447 struct ndr_push *push;
1448 enum ndr_err_code ndr_err;
1449 struct svcctl_QueryServiceLockStatusW *r;
1451 call = &ndr_table_svcctl.calls[NDR_SVCCTL_QUERYSERVICELOCKSTATUSW];
1453 r = talloc(talloc_tos(), struct svcctl_QueryServiceLockStatusW);
1458 pull = ndr_pull_init_blob(&p->in_data.data, r);
1464 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
1466 pull->flags |= LIBNDR_FLAG_BIGENDIAN;
1468 ndr_err = call->ndr_pull(pull, NDR_IN, r);
1469 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
1474 if (DEBUGLEVEL >= 10) {
1475 NDR_PRINT_FUNCTION_DEBUG(svcctl_QueryServiceLockStatusW, NDR_IN, r);
1478 ZERO_STRUCT(r->out);
1479 r->out.lock_status = talloc_zero(r, struct SERVICE_LOCK_STATUS);
1480 if (r->out.lock_status == NULL) {
1485 r->out.needed = talloc_zero(r, uint32_t);
1486 if (r->out.needed == NULL) {
1491 r->out.result = _svcctl_QueryServiceLockStatusW(p, r);
1493 if (p->fault_state) {
1495 /* Return true here, srv_pipe_hnd.c will take care */
1499 if (DEBUGLEVEL >= 10) {
1500 NDR_PRINT_FUNCTION_DEBUG(svcctl_QueryServiceLockStatusW, NDR_OUT | NDR_SET_VALUES, r);
1503 push = ndr_push_init_ctx(r);
1510 * carry over the pointer count to the reply in case we are
1511 * using full pointer. See NDR specification for full pointers
1513 push->ptr_count = pull->ptr_count;
1515 ndr_err = call->ndr_push(push, NDR_OUT, r);
1516 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
1521 p->out_data.rdata = ndr_push_blob(push);
1522 talloc_steal(p->mem_ctx, p->out_data.rdata.data);
1529 static bool api_svcctl_StartServiceW(struct pipes_struct *p)
1531 const struct ndr_interface_call *call;
1532 struct ndr_pull *pull;
1533 struct ndr_push *push;
1534 enum ndr_err_code ndr_err;
1535 struct svcctl_StartServiceW *r;
1537 call = &ndr_table_svcctl.calls[NDR_SVCCTL_STARTSERVICEW];
1539 r = talloc(talloc_tos(), struct svcctl_StartServiceW);
1544 pull = ndr_pull_init_blob(&p->in_data.data, r);
1550 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
1552 pull->flags |= LIBNDR_FLAG_BIGENDIAN;
1554 ndr_err = call->ndr_pull(pull, NDR_IN, r);
1555 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
1560 if (DEBUGLEVEL >= 10) {
1561 NDR_PRINT_FUNCTION_DEBUG(svcctl_StartServiceW, NDR_IN, r);
1564 r->out.result = _svcctl_StartServiceW(p, r);
1566 if (p->fault_state) {
1568 /* Return true here, srv_pipe_hnd.c will take care */
1572 if (DEBUGLEVEL >= 10) {
1573 NDR_PRINT_FUNCTION_DEBUG(svcctl_StartServiceW, NDR_OUT | NDR_SET_VALUES, r);
1576 push = ndr_push_init_ctx(r);
1583 * carry over the pointer count to the reply in case we are
1584 * using full pointer. See NDR specification for full pointers
1586 push->ptr_count = pull->ptr_count;
1588 ndr_err = call->ndr_push(push, NDR_OUT, r);
1589 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
1594 p->out_data.rdata = ndr_push_blob(push);
1595 talloc_steal(p->mem_ctx, p->out_data.rdata.data);
1602 static bool api_svcctl_GetServiceDisplayNameW(struct pipes_struct *p)
1604 const struct ndr_interface_call *call;
1605 struct ndr_pull *pull;
1606 struct ndr_push *push;
1607 enum ndr_err_code ndr_err;
1608 struct svcctl_GetServiceDisplayNameW *r;
1610 call = &ndr_table_svcctl.calls[NDR_SVCCTL_GETSERVICEDISPLAYNAMEW];
1612 r = talloc(talloc_tos(), struct svcctl_GetServiceDisplayNameW);
1617 pull = ndr_pull_init_blob(&p->in_data.data, r);
1623 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
1625 pull->flags |= LIBNDR_FLAG_BIGENDIAN;
1627 ndr_err = call->ndr_pull(pull, NDR_IN, r);
1628 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
1633 if (DEBUGLEVEL >= 10) {
1634 NDR_PRINT_FUNCTION_DEBUG(svcctl_GetServiceDisplayNameW, NDR_IN, r);
1637 ZERO_STRUCT(r->out);
1638 r->out.display_name_length = r->in.display_name_length;
1639 r->out.display_name = talloc_zero(r, const char *);
1640 if (r->out.display_name == NULL) {
1645 r->out.result = _svcctl_GetServiceDisplayNameW(p, r);
1647 if (p->fault_state) {
1649 /* Return true here, srv_pipe_hnd.c will take care */
1653 if (DEBUGLEVEL >= 10) {
1654 NDR_PRINT_FUNCTION_DEBUG(svcctl_GetServiceDisplayNameW, NDR_OUT | NDR_SET_VALUES, r);
1657 push = ndr_push_init_ctx(r);
1664 * carry over the pointer count to the reply in case we are
1665 * using full pointer. See NDR specification for full pointers
1667 push->ptr_count = pull->ptr_count;
1669 ndr_err = call->ndr_push(push, NDR_OUT, r);
1670 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
1675 p->out_data.rdata = ndr_push_blob(push);
1676 talloc_steal(p->mem_ctx, p->out_data.rdata.data);
1683 static bool api_svcctl_GetServiceKeyNameW(struct pipes_struct *p)
1685 const struct ndr_interface_call *call;
1686 struct ndr_pull *pull;
1687 struct ndr_push *push;
1688 enum ndr_err_code ndr_err;
1689 struct svcctl_GetServiceKeyNameW *r;
1691 call = &ndr_table_svcctl.calls[NDR_SVCCTL_GETSERVICEKEYNAMEW];
1693 r = talloc(talloc_tos(), struct svcctl_GetServiceKeyNameW);
1698 pull = ndr_pull_init_blob(&p->in_data.data, r);
1704 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
1706 pull->flags |= LIBNDR_FLAG_BIGENDIAN;
1708 ndr_err = call->ndr_pull(pull, NDR_IN, r);
1709 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
1714 if (DEBUGLEVEL >= 10) {
1715 NDR_PRINT_FUNCTION_DEBUG(svcctl_GetServiceKeyNameW, NDR_IN, r);
1718 ZERO_STRUCT(r->out);
1719 r->out.display_name_length = r->in.display_name_length;
1720 r->out.key_name = talloc_zero(r, const char *);
1721 if (r->out.key_name == NULL) {
1726 r->out.result = _svcctl_GetServiceKeyNameW(p, r);
1728 if (p->fault_state) {
1730 /* Return true here, srv_pipe_hnd.c will take care */
1734 if (DEBUGLEVEL >= 10) {
1735 NDR_PRINT_FUNCTION_DEBUG(svcctl_GetServiceKeyNameW, NDR_OUT | NDR_SET_VALUES, r);
1738 push = ndr_push_init_ctx(r);
1745 * carry over the pointer count to the reply in case we are
1746 * using full pointer. See NDR specification for full pointers
1748 push->ptr_count = pull->ptr_count;
1750 ndr_err = call->ndr_push(push, NDR_OUT, r);
1751 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
1756 p->out_data.rdata = ndr_push_blob(push);
1757 talloc_steal(p->mem_ctx, p->out_data.rdata.data);
1764 static bool api_svcctl_SCSetServiceBitsA(struct pipes_struct *p)
1766 const struct ndr_interface_call *call;
1767 struct ndr_pull *pull;
1768 struct ndr_push *push;
1769 enum ndr_err_code ndr_err;
1770 struct svcctl_SCSetServiceBitsA *r;
1772 call = &ndr_table_svcctl.calls[NDR_SVCCTL_SCSETSERVICEBITSA];
1774 r = talloc(talloc_tos(), struct svcctl_SCSetServiceBitsA);
1779 pull = ndr_pull_init_blob(&p->in_data.data, r);
1785 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
1787 pull->flags |= LIBNDR_FLAG_BIGENDIAN;
1789 ndr_err = call->ndr_pull(pull, NDR_IN, r);
1790 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
1795 if (DEBUGLEVEL >= 10) {
1796 NDR_PRINT_FUNCTION_DEBUG(svcctl_SCSetServiceBitsA, NDR_IN, r);
1799 r->out.result = _svcctl_SCSetServiceBitsA(p, r);
1801 if (p->fault_state) {
1803 /* Return true here, srv_pipe_hnd.c will take care */
1807 if (DEBUGLEVEL >= 10) {
1808 NDR_PRINT_FUNCTION_DEBUG(svcctl_SCSetServiceBitsA, NDR_OUT | NDR_SET_VALUES, r);
1811 push = ndr_push_init_ctx(r);
1818 * carry over the pointer count to the reply in case we are
1819 * using full pointer. See NDR specification for full pointers
1821 push->ptr_count = pull->ptr_count;
1823 ndr_err = call->ndr_push(push, NDR_OUT, r);
1824 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
1829 p->out_data.rdata = ndr_push_blob(push);
1830 talloc_steal(p->mem_ctx, p->out_data.rdata.data);
1837 static bool api_svcctl_ChangeServiceConfigA(struct pipes_struct *p)
1839 const struct ndr_interface_call *call;
1840 struct ndr_pull *pull;
1841 struct ndr_push *push;
1842 enum ndr_err_code ndr_err;
1843 struct svcctl_ChangeServiceConfigA *r;
1845 call = &ndr_table_svcctl.calls[NDR_SVCCTL_CHANGESERVICECONFIGA];
1847 r = talloc(talloc_tos(), struct svcctl_ChangeServiceConfigA);
1852 pull = ndr_pull_init_blob(&p->in_data.data, r);
1858 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
1860 pull->flags |= LIBNDR_FLAG_BIGENDIAN;
1862 ndr_err = call->ndr_pull(pull, NDR_IN, r);
1863 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
1868 if (DEBUGLEVEL >= 10) {
1869 NDR_PRINT_FUNCTION_DEBUG(svcctl_ChangeServiceConfigA, NDR_IN, r);
1872 ZERO_STRUCT(r->out);
1873 r->out.tag_id = talloc_zero(r, uint32_t);
1874 if (r->out.tag_id == NULL) {
1879 r->out.result = _svcctl_ChangeServiceConfigA(p, r);
1881 if (p->fault_state) {
1883 /* Return true here, srv_pipe_hnd.c will take care */
1887 if (DEBUGLEVEL >= 10) {
1888 NDR_PRINT_FUNCTION_DEBUG(svcctl_ChangeServiceConfigA, NDR_OUT | NDR_SET_VALUES, r);
1891 push = ndr_push_init_ctx(r);
1898 * carry over the pointer count to the reply in case we are
1899 * using full pointer. See NDR specification for full pointers
1901 push->ptr_count = pull->ptr_count;
1903 ndr_err = call->ndr_push(push, NDR_OUT, r);
1904 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
1909 p->out_data.rdata = ndr_push_blob(push);
1910 talloc_steal(p->mem_ctx, p->out_data.rdata.data);
1917 static bool api_svcctl_CreateServiceA(struct pipes_struct *p)
1919 const struct ndr_interface_call *call;
1920 struct ndr_pull *pull;
1921 struct ndr_push *push;
1922 enum ndr_err_code ndr_err;
1923 struct svcctl_CreateServiceA *r;
1925 call = &ndr_table_svcctl.calls[NDR_SVCCTL_CREATESERVICEA];
1927 r = talloc(talloc_tos(), struct svcctl_CreateServiceA);
1932 pull = ndr_pull_init_blob(&p->in_data.data, r);
1938 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
1940 pull->flags |= LIBNDR_FLAG_BIGENDIAN;
1942 ndr_err = call->ndr_pull(pull, NDR_IN, r);
1943 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
1948 if (DEBUGLEVEL >= 10) {
1949 NDR_PRINT_FUNCTION_DEBUG(svcctl_CreateServiceA, NDR_IN, r);
1952 ZERO_STRUCT(r->out);
1953 r->out.TagId = talloc_zero(r, uint32_t);
1954 if (r->out.TagId == NULL) {
1959 r->out.result = _svcctl_CreateServiceA(p, r);
1961 if (p->fault_state) {
1963 /* Return true here, srv_pipe_hnd.c will take care */
1967 if (DEBUGLEVEL >= 10) {
1968 NDR_PRINT_FUNCTION_DEBUG(svcctl_CreateServiceA, NDR_OUT | NDR_SET_VALUES, r);
1971 push = ndr_push_init_ctx(r);
1978 * carry over the pointer count to the reply in case we are
1979 * using full pointer. See NDR specification for full pointers
1981 push->ptr_count = pull->ptr_count;
1983 ndr_err = call->ndr_push(push, NDR_OUT, r);
1984 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
1989 p->out_data.rdata = ndr_push_blob(push);
1990 talloc_steal(p->mem_ctx, p->out_data.rdata.data);
1997 static bool api_svcctl_EnumDependentServicesA(struct pipes_struct *p)
1999 const struct ndr_interface_call *call;
2000 struct ndr_pull *pull;
2001 struct ndr_push *push;
2002 enum ndr_err_code ndr_err;
2003 struct svcctl_EnumDependentServicesA *r;
2005 call = &ndr_table_svcctl.calls[NDR_SVCCTL_ENUMDEPENDENTSERVICESA];
2007 r = talloc(talloc_tos(), struct svcctl_EnumDependentServicesA);
2012 pull = ndr_pull_init_blob(&p->in_data.data, r);
2018 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
2020 pull->flags |= LIBNDR_FLAG_BIGENDIAN;
2022 ndr_err = call->ndr_pull(pull, NDR_IN, r);
2023 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
2028 if (DEBUGLEVEL >= 10) {
2029 NDR_PRINT_FUNCTION_DEBUG(svcctl_EnumDependentServicesA, NDR_IN, r);
2032 ZERO_STRUCT(r->out);
2033 r->out.service_status = talloc_zero(r, struct ENUM_SERVICE_STATUSA);
2034 if (r->out.service_status == NULL) {
2039 r->out.needed = talloc_zero(r, uint32_t);
2040 if (r->out.needed == NULL) {
2045 r->out.services_returned = talloc_zero(r, uint32_t);
2046 if (r->out.services_returned == NULL) {
2051 r->out.result = _svcctl_EnumDependentServicesA(p, r);
2053 if (p->fault_state) {
2055 /* Return true here, srv_pipe_hnd.c will take care */
2059 if (DEBUGLEVEL >= 10) {
2060 NDR_PRINT_FUNCTION_DEBUG(svcctl_EnumDependentServicesA, NDR_OUT | NDR_SET_VALUES, r);
2063 push = ndr_push_init_ctx(r);
2070 * carry over the pointer count to the reply in case we are
2071 * using full pointer. See NDR specification for full pointers
2073 push->ptr_count = pull->ptr_count;
2075 ndr_err = call->ndr_push(push, NDR_OUT, r);
2076 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
2081 p->out_data.rdata = ndr_push_blob(push);
2082 talloc_steal(p->mem_ctx, p->out_data.rdata.data);
2089 static bool api_svcctl_EnumServicesStatusA(struct pipes_struct *p)
2091 const struct ndr_interface_call *call;
2092 struct ndr_pull *pull;
2093 struct ndr_push *push;
2094 enum ndr_err_code ndr_err;
2095 struct svcctl_EnumServicesStatusA *r;
2097 call = &ndr_table_svcctl.calls[NDR_SVCCTL_ENUMSERVICESSTATUSA];
2099 r = talloc(talloc_tos(), struct svcctl_EnumServicesStatusA);
2104 pull = ndr_pull_init_blob(&p->in_data.data, r);
2110 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
2112 pull->flags |= LIBNDR_FLAG_BIGENDIAN;
2114 ndr_err = call->ndr_pull(pull, NDR_IN, r);
2115 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
2120 if (DEBUGLEVEL >= 10) {
2121 NDR_PRINT_FUNCTION_DEBUG(svcctl_EnumServicesStatusA, NDR_IN, r);
2124 ZERO_STRUCT(r->out);
2125 r->out.resume_handle = r->in.resume_handle;
2126 r->out.service = talloc_zero_array(r, uint8_t, r->in.offered);
2127 if (r->out.service == NULL) {
2132 r->out.needed = talloc_zero(r, uint32_t);
2133 if (r->out.needed == NULL) {
2138 r->out.services_returned = talloc_zero(r, uint32_t);
2139 if (r->out.services_returned == NULL) {
2144 r->out.result = _svcctl_EnumServicesStatusA(p, r);
2146 if (p->fault_state) {
2148 /* Return true here, srv_pipe_hnd.c will take care */
2152 if (DEBUGLEVEL >= 10) {
2153 NDR_PRINT_FUNCTION_DEBUG(svcctl_EnumServicesStatusA, NDR_OUT | NDR_SET_VALUES, r);
2156 push = ndr_push_init_ctx(r);
2163 * carry over the pointer count to the reply in case we are
2164 * using full pointer. See NDR specification for full pointers
2166 push->ptr_count = pull->ptr_count;
2168 ndr_err = call->ndr_push(push, NDR_OUT, r);
2169 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
2174 p->out_data.rdata = ndr_push_blob(push);
2175 talloc_steal(p->mem_ctx, p->out_data.rdata.data);
2182 static bool api_svcctl_OpenSCManagerA(struct pipes_struct *p)
2184 const struct ndr_interface_call *call;
2185 struct ndr_pull *pull;
2186 struct ndr_push *push;
2187 enum ndr_err_code ndr_err;
2188 struct svcctl_OpenSCManagerA *r;
2190 call = &ndr_table_svcctl.calls[NDR_SVCCTL_OPENSCMANAGERA];
2192 r = talloc(talloc_tos(), struct svcctl_OpenSCManagerA);
2197 pull = ndr_pull_init_blob(&p->in_data.data, r);
2203 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
2205 pull->flags |= LIBNDR_FLAG_BIGENDIAN;
2207 ndr_err = call->ndr_pull(pull, NDR_IN, r);
2208 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
2213 if (DEBUGLEVEL >= 10) {
2214 NDR_PRINT_FUNCTION_DEBUG(svcctl_OpenSCManagerA, NDR_IN, r);
2217 ZERO_STRUCT(r->out);
2218 r->out.handle = talloc_zero(r, struct policy_handle);
2219 if (r->out.handle == NULL) {
2224 r->out.result = _svcctl_OpenSCManagerA(p, r);
2226 if (p->fault_state) {
2228 /* Return true here, srv_pipe_hnd.c will take care */
2232 if (DEBUGLEVEL >= 10) {
2233 NDR_PRINT_FUNCTION_DEBUG(svcctl_OpenSCManagerA, NDR_OUT | NDR_SET_VALUES, r);
2236 push = ndr_push_init_ctx(r);
2243 * carry over the pointer count to the reply in case we are
2244 * using full pointer. See NDR specification for full pointers
2246 push->ptr_count = pull->ptr_count;
2248 ndr_err = call->ndr_push(push, NDR_OUT, r);
2249 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
2254 p->out_data.rdata = ndr_push_blob(push);
2255 talloc_steal(p->mem_ctx, p->out_data.rdata.data);
2262 static bool api_svcctl_OpenServiceA(struct pipes_struct *p)
2264 const struct ndr_interface_call *call;
2265 struct ndr_pull *pull;
2266 struct ndr_push *push;
2267 enum ndr_err_code ndr_err;
2268 struct svcctl_OpenServiceA *r;
2270 call = &ndr_table_svcctl.calls[NDR_SVCCTL_OPENSERVICEA];
2272 r = talloc(talloc_tos(), struct svcctl_OpenServiceA);
2277 pull = ndr_pull_init_blob(&p->in_data.data, r);
2283 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
2285 pull->flags |= LIBNDR_FLAG_BIGENDIAN;
2287 ndr_err = call->ndr_pull(pull, NDR_IN, r);
2288 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
2293 if (DEBUGLEVEL >= 10) {
2294 NDR_PRINT_FUNCTION_DEBUG(svcctl_OpenServiceA, NDR_IN, r);
2297 r->out.result = _svcctl_OpenServiceA(p, r);
2299 if (p->fault_state) {
2301 /* Return true here, srv_pipe_hnd.c will take care */
2305 if (DEBUGLEVEL >= 10) {
2306 NDR_PRINT_FUNCTION_DEBUG(svcctl_OpenServiceA, NDR_OUT | NDR_SET_VALUES, r);
2309 push = ndr_push_init_ctx(r);
2316 * carry over the pointer count to the reply in case we are
2317 * using full pointer. See NDR specification for full pointers
2319 push->ptr_count = pull->ptr_count;
2321 ndr_err = call->ndr_push(push, NDR_OUT, r);
2322 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
2327 p->out_data.rdata = ndr_push_blob(push);
2328 talloc_steal(p->mem_ctx, p->out_data.rdata.data);
2335 static bool api_svcctl_QueryServiceConfigA(struct pipes_struct *p)
2337 const struct ndr_interface_call *call;
2338 struct ndr_pull *pull;
2339 struct ndr_push *push;
2340 enum ndr_err_code ndr_err;
2341 struct svcctl_QueryServiceConfigA *r;
2343 call = &ndr_table_svcctl.calls[NDR_SVCCTL_QUERYSERVICECONFIGA];
2345 r = talloc(talloc_tos(), struct svcctl_QueryServiceConfigA);
2350 pull = ndr_pull_init_blob(&p->in_data.data, r);
2356 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
2358 pull->flags |= LIBNDR_FLAG_BIGENDIAN;
2360 ndr_err = call->ndr_pull(pull, NDR_IN, r);
2361 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
2366 if (DEBUGLEVEL >= 10) {
2367 NDR_PRINT_FUNCTION_DEBUG(svcctl_QueryServiceConfigA, NDR_IN, r);
2370 ZERO_STRUCT(r->out);
2371 r->out.query = talloc_zero_array(r, uint8_t, r->in.offered);
2372 if (r->out.query == NULL) {
2377 r->out.needed = talloc_zero(r, uint32_t);
2378 if (r->out.needed == NULL) {
2383 r->out.result = _svcctl_QueryServiceConfigA(p, r);
2385 if (p->fault_state) {
2387 /* Return true here, srv_pipe_hnd.c will take care */
2391 if (DEBUGLEVEL >= 10) {
2392 NDR_PRINT_FUNCTION_DEBUG(svcctl_QueryServiceConfigA, NDR_OUT | NDR_SET_VALUES, r);
2395 push = ndr_push_init_ctx(r);
2402 * carry over the pointer count to the reply in case we are
2403 * using full pointer. See NDR specification for full pointers
2405 push->ptr_count = pull->ptr_count;
2407 ndr_err = call->ndr_push(push, NDR_OUT, r);
2408 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
2413 p->out_data.rdata = ndr_push_blob(push);
2414 talloc_steal(p->mem_ctx, p->out_data.rdata.data);
2421 static bool api_svcctl_QueryServiceLockStatusA(struct pipes_struct *p)
2423 const struct ndr_interface_call *call;
2424 struct ndr_pull *pull;
2425 struct ndr_push *push;
2426 enum ndr_err_code ndr_err;
2427 struct svcctl_QueryServiceLockStatusA *r;
2429 call = &ndr_table_svcctl.calls[NDR_SVCCTL_QUERYSERVICELOCKSTATUSA];
2431 r = talloc(talloc_tos(), struct svcctl_QueryServiceLockStatusA);
2436 pull = ndr_pull_init_blob(&p->in_data.data, r);
2442 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
2444 pull->flags |= LIBNDR_FLAG_BIGENDIAN;
2446 ndr_err = call->ndr_pull(pull, NDR_IN, r);
2447 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
2452 if (DEBUGLEVEL >= 10) {
2453 NDR_PRINT_FUNCTION_DEBUG(svcctl_QueryServiceLockStatusA, NDR_IN, r);
2456 ZERO_STRUCT(r->out);
2457 r->out.lock_status = talloc_zero(r, struct SERVICE_LOCK_STATUS);
2458 if (r->out.lock_status == NULL) {
2463 r->out.needed = talloc_zero(r, uint32_t);
2464 if (r->out.needed == NULL) {
2469 r->out.result = _svcctl_QueryServiceLockStatusA(p, r);
2471 if (p->fault_state) {
2473 /* Return true here, srv_pipe_hnd.c will take care */
2477 if (DEBUGLEVEL >= 10) {
2478 NDR_PRINT_FUNCTION_DEBUG(svcctl_QueryServiceLockStatusA, NDR_OUT | NDR_SET_VALUES, r);
2481 push = ndr_push_init_ctx(r);
2488 * carry over the pointer count to the reply in case we are
2489 * using full pointer. See NDR specification for full pointers
2491 push->ptr_count = pull->ptr_count;
2493 ndr_err = call->ndr_push(push, NDR_OUT, r);
2494 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
2499 p->out_data.rdata = ndr_push_blob(push);
2500 talloc_steal(p->mem_ctx, p->out_data.rdata.data);
2507 static bool api_svcctl_StartServiceA(struct pipes_struct *p)
2509 const struct ndr_interface_call *call;
2510 struct ndr_pull *pull;
2511 struct ndr_push *push;
2512 enum ndr_err_code ndr_err;
2513 struct svcctl_StartServiceA *r;
2515 call = &ndr_table_svcctl.calls[NDR_SVCCTL_STARTSERVICEA];
2517 r = talloc(talloc_tos(), struct svcctl_StartServiceA);
2522 pull = ndr_pull_init_blob(&p->in_data.data, r);
2528 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
2530 pull->flags |= LIBNDR_FLAG_BIGENDIAN;
2532 ndr_err = call->ndr_pull(pull, NDR_IN, r);
2533 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
2538 if (DEBUGLEVEL >= 10) {
2539 NDR_PRINT_FUNCTION_DEBUG(svcctl_StartServiceA, NDR_IN, r);
2542 r->out.result = _svcctl_StartServiceA(p, r);
2544 if (p->fault_state) {
2546 /* Return true here, srv_pipe_hnd.c will take care */
2550 if (DEBUGLEVEL >= 10) {
2551 NDR_PRINT_FUNCTION_DEBUG(svcctl_StartServiceA, NDR_OUT | NDR_SET_VALUES, r);
2554 push = ndr_push_init_ctx(r);
2561 * carry over the pointer count to the reply in case we are
2562 * using full pointer. See NDR specification for full pointers
2564 push->ptr_count = pull->ptr_count;
2566 ndr_err = call->ndr_push(push, NDR_OUT, r);
2567 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
2572 p->out_data.rdata = ndr_push_blob(push);
2573 talloc_steal(p->mem_ctx, p->out_data.rdata.data);
2580 static bool api_svcctl_GetServiceDisplayNameA(struct pipes_struct *p)
2582 const struct ndr_interface_call *call;
2583 struct ndr_pull *pull;
2584 struct ndr_push *push;
2585 enum ndr_err_code ndr_err;
2586 struct svcctl_GetServiceDisplayNameA *r;
2588 call = &ndr_table_svcctl.calls[NDR_SVCCTL_GETSERVICEDISPLAYNAMEA];
2590 r = talloc(talloc_tos(), struct svcctl_GetServiceDisplayNameA);
2595 pull = ndr_pull_init_blob(&p->in_data.data, r);
2601 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
2603 pull->flags |= LIBNDR_FLAG_BIGENDIAN;
2605 ndr_err = call->ndr_pull(pull, NDR_IN, r);
2606 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
2611 if (DEBUGLEVEL >= 10) {
2612 NDR_PRINT_FUNCTION_DEBUG(svcctl_GetServiceDisplayNameA, NDR_IN, r);
2615 ZERO_STRUCT(r->out);
2616 r->out.display_name_length = r->in.display_name_length;
2617 r->out.display_name = talloc_zero(r, const char *);
2618 if (r->out.display_name == NULL) {
2623 r->out.result = _svcctl_GetServiceDisplayNameA(p, r);
2625 if (p->fault_state) {
2627 /* Return true here, srv_pipe_hnd.c will take care */
2631 if (DEBUGLEVEL >= 10) {
2632 NDR_PRINT_FUNCTION_DEBUG(svcctl_GetServiceDisplayNameA, NDR_OUT | NDR_SET_VALUES, r);
2635 push = ndr_push_init_ctx(r);
2642 * carry over the pointer count to the reply in case we are
2643 * using full pointer. See NDR specification for full pointers
2645 push->ptr_count = pull->ptr_count;
2647 ndr_err = call->ndr_push(push, NDR_OUT, r);
2648 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
2653 p->out_data.rdata = ndr_push_blob(push);
2654 talloc_steal(p->mem_ctx, p->out_data.rdata.data);
2661 static bool api_svcctl_GetServiceKeyNameA(struct pipes_struct *p)
2663 const struct ndr_interface_call *call;
2664 struct ndr_pull *pull;
2665 struct ndr_push *push;
2666 enum ndr_err_code ndr_err;
2667 struct svcctl_GetServiceKeyNameA *r;
2669 call = &ndr_table_svcctl.calls[NDR_SVCCTL_GETSERVICEKEYNAMEA];
2671 r = talloc(talloc_tos(), struct svcctl_GetServiceKeyNameA);
2676 pull = ndr_pull_init_blob(&p->in_data.data, r);
2682 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
2684 pull->flags |= LIBNDR_FLAG_BIGENDIAN;
2686 ndr_err = call->ndr_pull(pull, NDR_IN, r);
2687 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
2692 if (DEBUGLEVEL >= 10) {
2693 NDR_PRINT_FUNCTION_DEBUG(svcctl_GetServiceKeyNameA, NDR_IN, r);
2696 ZERO_STRUCT(r->out);
2697 r->out.display_name_length = r->in.display_name_length;
2698 r->out.key_name = talloc_zero(r, const char *);
2699 if (r->out.key_name == NULL) {
2704 r->out.result = _svcctl_GetServiceKeyNameA(p, r);
2706 if (p->fault_state) {
2708 /* Return true here, srv_pipe_hnd.c will take care */
2712 if (DEBUGLEVEL >= 10) {
2713 NDR_PRINT_FUNCTION_DEBUG(svcctl_GetServiceKeyNameA, NDR_OUT | NDR_SET_VALUES, r);
2716 push = ndr_push_init_ctx(r);
2723 * carry over the pointer count to the reply in case we are
2724 * using full pointer. See NDR specification for full pointers
2726 push->ptr_count = pull->ptr_count;
2728 ndr_err = call->ndr_push(push, NDR_OUT, r);
2729 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
2734 p->out_data.rdata = ndr_push_blob(push);
2735 talloc_steal(p->mem_ctx, p->out_data.rdata.data);
2742 static bool api_svcctl_GetCurrentGroupeStateW(struct pipes_struct *p)
2744 const struct ndr_interface_call *call;
2745 struct ndr_pull *pull;
2746 struct ndr_push *push;
2747 enum ndr_err_code ndr_err;
2748 struct svcctl_GetCurrentGroupeStateW *r;
2750 call = &ndr_table_svcctl.calls[NDR_SVCCTL_GETCURRENTGROUPESTATEW];
2752 r = talloc(talloc_tos(), struct svcctl_GetCurrentGroupeStateW);
2757 pull = ndr_pull_init_blob(&p->in_data.data, r);
2763 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
2765 pull->flags |= LIBNDR_FLAG_BIGENDIAN;
2767 ndr_err = call->ndr_pull(pull, NDR_IN, r);
2768 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
2773 if (DEBUGLEVEL >= 10) {
2774 NDR_PRINT_FUNCTION_DEBUG(svcctl_GetCurrentGroupeStateW, NDR_IN, r);
2777 r->out.result = _svcctl_GetCurrentGroupeStateW(p, r);
2779 if (p->fault_state) {
2781 /* Return true here, srv_pipe_hnd.c will take care */
2785 if (DEBUGLEVEL >= 10) {
2786 NDR_PRINT_FUNCTION_DEBUG(svcctl_GetCurrentGroupeStateW, NDR_OUT | NDR_SET_VALUES, r);
2789 push = ndr_push_init_ctx(r);
2796 * carry over the pointer count to the reply in case we are
2797 * using full pointer. See NDR specification for full pointers
2799 push->ptr_count = pull->ptr_count;
2801 ndr_err = call->ndr_push(push, NDR_OUT, r);
2802 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
2807 p->out_data.rdata = ndr_push_blob(push);
2808 talloc_steal(p->mem_ctx, p->out_data.rdata.data);
2815 static bool api_svcctl_EnumServiceGroupW(struct pipes_struct *p)
2817 const struct ndr_interface_call *call;
2818 struct ndr_pull *pull;
2819 struct ndr_push *push;
2820 enum ndr_err_code ndr_err;
2821 struct svcctl_EnumServiceGroupW *r;
2823 call = &ndr_table_svcctl.calls[NDR_SVCCTL_ENUMSERVICEGROUPW];
2825 r = talloc(talloc_tos(), struct svcctl_EnumServiceGroupW);
2830 pull = ndr_pull_init_blob(&p->in_data.data, r);
2836 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
2838 pull->flags |= LIBNDR_FLAG_BIGENDIAN;
2840 ndr_err = call->ndr_pull(pull, NDR_IN, r);
2841 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
2846 if (DEBUGLEVEL >= 10) {
2847 NDR_PRINT_FUNCTION_DEBUG(svcctl_EnumServiceGroupW, NDR_IN, r);
2850 r->out.result = _svcctl_EnumServiceGroupW(p, r);
2852 if (p->fault_state) {
2854 /* Return true here, srv_pipe_hnd.c will take care */
2858 if (DEBUGLEVEL >= 10) {
2859 NDR_PRINT_FUNCTION_DEBUG(svcctl_EnumServiceGroupW, NDR_OUT | NDR_SET_VALUES, r);
2862 push = ndr_push_init_ctx(r);
2869 * carry over the pointer count to the reply in case we are
2870 * using full pointer. See NDR specification for full pointers
2872 push->ptr_count = pull->ptr_count;
2874 ndr_err = call->ndr_push(push, NDR_OUT, r);
2875 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
2880 p->out_data.rdata = ndr_push_blob(push);
2881 talloc_steal(p->mem_ctx, p->out_data.rdata.data);
2888 static bool api_svcctl_ChangeServiceConfig2A(struct pipes_struct *p)
2890 const struct ndr_interface_call *call;
2891 struct ndr_pull *pull;
2892 struct ndr_push *push;
2893 enum ndr_err_code ndr_err;
2894 struct svcctl_ChangeServiceConfig2A *r;
2896 call = &ndr_table_svcctl.calls[NDR_SVCCTL_CHANGESERVICECONFIG2A];
2898 r = talloc(talloc_tos(), struct svcctl_ChangeServiceConfig2A);
2903 pull = ndr_pull_init_blob(&p->in_data.data, r);
2909 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
2911 pull->flags |= LIBNDR_FLAG_BIGENDIAN;
2913 ndr_err = call->ndr_pull(pull, NDR_IN, r);
2914 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
2919 if (DEBUGLEVEL >= 10) {
2920 NDR_PRINT_FUNCTION_DEBUG(svcctl_ChangeServiceConfig2A, NDR_IN, r);
2923 r->out.result = _svcctl_ChangeServiceConfig2A(p, r);
2925 if (p->fault_state) {
2927 /* Return true here, srv_pipe_hnd.c will take care */
2931 if (DEBUGLEVEL >= 10) {
2932 NDR_PRINT_FUNCTION_DEBUG(svcctl_ChangeServiceConfig2A, NDR_OUT | NDR_SET_VALUES, r);
2935 push = ndr_push_init_ctx(r);
2942 * carry over the pointer count to the reply in case we are
2943 * using full pointer. See NDR specification for full pointers
2945 push->ptr_count = pull->ptr_count;
2947 ndr_err = call->ndr_push(push, NDR_OUT, r);
2948 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
2953 p->out_data.rdata = ndr_push_blob(push);
2954 talloc_steal(p->mem_ctx, p->out_data.rdata.data);
2961 static bool api_svcctl_ChangeServiceConfig2W(struct pipes_struct *p)
2963 const struct ndr_interface_call *call;
2964 struct ndr_pull *pull;
2965 struct ndr_push *push;
2966 enum ndr_err_code ndr_err;
2967 struct svcctl_ChangeServiceConfig2W *r;
2969 call = &ndr_table_svcctl.calls[NDR_SVCCTL_CHANGESERVICECONFIG2W];
2971 r = talloc(talloc_tos(), struct svcctl_ChangeServiceConfig2W);
2976 pull = ndr_pull_init_blob(&p->in_data.data, r);
2982 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
2984 pull->flags |= LIBNDR_FLAG_BIGENDIAN;
2986 ndr_err = call->ndr_pull(pull, NDR_IN, r);
2987 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
2992 if (DEBUGLEVEL >= 10) {
2993 NDR_PRINT_FUNCTION_DEBUG(svcctl_ChangeServiceConfig2W, NDR_IN, r);
2996 r->out.result = _svcctl_ChangeServiceConfig2W(p, r);
2998 if (p->fault_state) {
3000 /* Return true here, srv_pipe_hnd.c will take care */
3004 if (DEBUGLEVEL >= 10) {
3005 NDR_PRINT_FUNCTION_DEBUG(svcctl_ChangeServiceConfig2W, NDR_OUT | NDR_SET_VALUES, r);
3008 push = ndr_push_init_ctx(r);
3015 * carry over the pointer count to the reply in case we are
3016 * using full pointer. See NDR specification for full pointers
3018 push->ptr_count = pull->ptr_count;
3020 ndr_err = call->ndr_push(push, NDR_OUT, r);
3021 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
3026 p->out_data.rdata = ndr_push_blob(push);
3027 talloc_steal(p->mem_ctx, p->out_data.rdata.data);
3034 static bool api_svcctl_QueryServiceConfig2A(struct pipes_struct *p)
3036 const struct ndr_interface_call *call;
3037 struct ndr_pull *pull;
3038 struct ndr_push *push;
3039 enum ndr_err_code ndr_err;
3040 struct svcctl_QueryServiceConfig2A *r;
3042 call = &ndr_table_svcctl.calls[NDR_SVCCTL_QUERYSERVICECONFIG2A];
3044 r = talloc(talloc_tos(), struct svcctl_QueryServiceConfig2A);
3049 pull = ndr_pull_init_blob(&p->in_data.data, r);
3055 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
3057 pull->flags |= LIBNDR_FLAG_BIGENDIAN;
3059 ndr_err = call->ndr_pull(pull, NDR_IN, r);
3060 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
3065 if (DEBUGLEVEL >= 10) {
3066 NDR_PRINT_FUNCTION_DEBUG(svcctl_QueryServiceConfig2A, NDR_IN, r);
3069 ZERO_STRUCT(r->out);
3070 r->out.buffer = talloc_zero_array(r, uint8_t, r->in.offered);
3071 if (r->out.buffer == NULL) {
3076 r->out.needed = talloc_zero(r, uint32_t);
3077 if (r->out.needed == NULL) {
3082 r->out.result = _svcctl_QueryServiceConfig2A(p, r);
3084 if (p->fault_state) {
3086 /* Return true here, srv_pipe_hnd.c will take care */
3090 if (DEBUGLEVEL >= 10) {
3091 NDR_PRINT_FUNCTION_DEBUG(svcctl_QueryServiceConfig2A, NDR_OUT | NDR_SET_VALUES, r);
3094 push = ndr_push_init_ctx(r);
3101 * carry over the pointer count to the reply in case we are
3102 * using full pointer. See NDR specification for full pointers
3104 push->ptr_count = pull->ptr_count;
3106 ndr_err = call->ndr_push(push, NDR_OUT, r);
3107 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
3112 p->out_data.rdata = ndr_push_blob(push);
3113 talloc_steal(p->mem_ctx, p->out_data.rdata.data);
3120 static bool api_svcctl_QueryServiceConfig2W(struct pipes_struct *p)
3122 const struct ndr_interface_call *call;
3123 struct ndr_pull *pull;
3124 struct ndr_push *push;
3125 enum ndr_err_code ndr_err;
3126 struct svcctl_QueryServiceConfig2W *r;
3128 call = &ndr_table_svcctl.calls[NDR_SVCCTL_QUERYSERVICECONFIG2W];
3130 r = talloc(talloc_tos(), struct svcctl_QueryServiceConfig2W);
3135 pull = ndr_pull_init_blob(&p->in_data.data, r);
3141 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
3143 pull->flags |= LIBNDR_FLAG_BIGENDIAN;
3145 ndr_err = call->ndr_pull(pull, NDR_IN, r);
3146 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
3151 if (DEBUGLEVEL >= 10) {
3152 NDR_PRINT_FUNCTION_DEBUG(svcctl_QueryServiceConfig2W, NDR_IN, r);
3155 ZERO_STRUCT(r->out);
3156 r->out.buffer = talloc_zero_array(r, uint8_t, r->in.offered);
3157 if (r->out.buffer == NULL) {
3162 r->out.needed = talloc_zero(r, uint32_t);
3163 if (r->out.needed == NULL) {
3168 r->out.result = _svcctl_QueryServiceConfig2W(p, r);
3170 if (p->fault_state) {
3172 /* Return true here, srv_pipe_hnd.c will take care */
3176 if (DEBUGLEVEL >= 10) {
3177 NDR_PRINT_FUNCTION_DEBUG(svcctl_QueryServiceConfig2W, NDR_OUT | NDR_SET_VALUES, r);
3180 push = ndr_push_init_ctx(r);
3187 * carry over the pointer count to the reply in case we are
3188 * using full pointer. See NDR specification for full pointers
3190 push->ptr_count = pull->ptr_count;
3192 ndr_err = call->ndr_push(push, NDR_OUT, r);
3193 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
3198 p->out_data.rdata = ndr_push_blob(push);
3199 talloc_steal(p->mem_ctx, p->out_data.rdata.data);
3206 static bool api_svcctl_QueryServiceStatusEx(struct pipes_struct *p)
3208 const struct ndr_interface_call *call;
3209 struct ndr_pull *pull;
3210 struct ndr_push *push;
3211 enum ndr_err_code ndr_err;
3212 struct svcctl_QueryServiceStatusEx *r;
3214 call = &ndr_table_svcctl.calls[NDR_SVCCTL_QUERYSERVICESTATUSEX];
3216 r = talloc(talloc_tos(), struct svcctl_QueryServiceStatusEx);
3221 pull = ndr_pull_init_blob(&p->in_data.data, r);
3227 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
3229 pull->flags |= LIBNDR_FLAG_BIGENDIAN;
3231 ndr_err = call->ndr_pull(pull, NDR_IN, r);
3232 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
3237 if (DEBUGLEVEL >= 10) {
3238 NDR_PRINT_FUNCTION_DEBUG(svcctl_QueryServiceStatusEx, NDR_IN, r);
3241 ZERO_STRUCT(r->out);
3242 r->out.buffer = talloc_zero_array(r, uint8_t, r->in.offered);
3243 if (r->out.buffer == NULL) {
3248 r->out.needed = talloc_zero(r, uint32_t);
3249 if (r->out.needed == NULL) {
3254 r->out.result = _svcctl_QueryServiceStatusEx(p, r);
3256 if (p->fault_state) {
3258 /* Return true here, srv_pipe_hnd.c will take care */
3262 if (DEBUGLEVEL >= 10) {
3263 NDR_PRINT_FUNCTION_DEBUG(svcctl_QueryServiceStatusEx, NDR_OUT | NDR_SET_VALUES, r);
3266 push = ndr_push_init_ctx(r);
3273 * carry over the pointer count to the reply in case we are
3274 * using full pointer. See NDR specification for full pointers
3276 push->ptr_count = pull->ptr_count;
3278 ndr_err = call->ndr_push(push, NDR_OUT, r);
3279 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
3284 p->out_data.rdata = ndr_push_blob(push);
3285 talloc_steal(p->mem_ctx, p->out_data.rdata.data);
3292 static bool api_EnumServicesStatusExA(struct pipes_struct *p)
3294 const struct ndr_interface_call *call;
3295 struct ndr_pull *pull;
3296 struct ndr_push *push;
3297 enum ndr_err_code ndr_err;
3298 struct EnumServicesStatusExA *r;
3300 call = &ndr_table_svcctl.calls[NDR_ENUMSERVICESSTATUSEXA];
3302 r = talloc(talloc_tos(), struct EnumServicesStatusExA);
3307 pull = ndr_pull_init_blob(&p->in_data.data, r);
3313 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
3315 pull->flags |= LIBNDR_FLAG_BIGENDIAN;
3317 ndr_err = call->ndr_pull(pull, NDR_IN, r);
3318 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
3323 if (DEBUGLEVEL >= 10) {
3324 NDR_PRINT_FUNCTION_DEBUG(EnumServicesStatusExA, NDR_IN, r);
3327 ZERO_STRUCT(r->out);
3328 r->out.resume_handle = r->in.resume_handle;
3329 r->out.services = talloc_zero_array(r, uint8_t, r->in.offered);
3330 if (r->out.services == NULL) {
3335 r->out.needed = talloc_zero(r, uint32_t);
3336 if (r->out.needed == NULL) {
3341 r->out.service_returned = talloc_zero(r, uint32_t);
3342 if (r->out.service_returned == NULL) {
3347 r->out.group_name = talloc_zero(r, const char *);
3348 if (r->out.group_name == NULL) {
3353 r->out.result = _EnumServicesStatusExA(p, r);
3355 if (p->fault_state) {
3357 /* Return true here, srv_pipe_hnd.c will take care */
3361 if (DEBUGLEVEL >= 10) {
3362 NDR_PRINT_FUNCTION_DEBUG(EnumServicesStatusExA, NDR_OUT | NDR_SET_VALUES, r);
3365 push = ndr_push_init_ctx(r);
3372 * carry over the pointer count to the reply in case we are
3373 * using full pointer. See NDR specification for full pointers
3375 push->ptr_count = pull->ptr_count;
3377 ndr_err = call->ndr_push(push, NDR_OUT, r);
3378 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
3383 p->out_data.rdata = ndr_push_blob(push);
3384 talloc_steal(p->mem_ctx, p->out_data.rdata.data);
3391 static bool api_EnumServicesStatusExW(struct pipes_struct *p)
3393 const struct ndr_interface_call *call;
3394 struct ndr_pull *pull;
3395 struct ndr_push *push;
3396 enum ndr_err_code ndr_err;
3397 struct EnumServicesStatusExW *r;
3399 call = &ndr_table_svcctl.calls[NDR_ENUMSERVICESSTATUSEXW];
3401 r = talloc(talloc_tos(), struct EnumServicesStatusExW);
3406 pull = ndr_pull_init_blob(&p->in_data.data, r);
3412 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
3414 pull->flags |= LIBNDR_FLAG_BIGENDIAN;
3416 ndr_err = call->ndr_pull(pull, NDR_IN, r);
3417 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
3422 if (DEBUGLEVEL >= 10) {
3423 NDR_PRINT_FUNCTION_DEBUG(EnumServicesStatusExW, NDR_IN, r);
3426 ZERO_STRUCT(r->out);
3427 r->out.resume_handle = r->in.resume_handle;
3428 r->out.services = talloc_zero_array(r, uint8_t, r->in.offered);
3429 if (r->out.services == NULL) {
3434 r->out.needed = talloc_zero(r, uint32_t);
3435 if (r->out.needed == NULL) {
3440 r->out.service_returned = talloc_zero(r, uint32_t);
3441 if (r->out.service_returned == NULL) {
3446 r->out.result = _EnumServicesStatusExW(p, r);
3448 if (p->fault_state) {
3450 /* Return true here, srv_pipe_hnd.c will take care */
3454 if (DEBUGLEVEL >= 10) {
3455 NDR_PRINT_FUNCTION_DEBUG(EnumServicesStatusExW, NDR_OUT | NDR_SET_VALUES, r);
3458 push = ndr_push_init_ctx(r);
3465 * carry over the pointer count to the reply in case we are
3466 * using full pointer. See NDR specification for full pointers
3468 push->ptr_count = pull->ptr_count;
3470 ndr_err = call->ndr_push(push, NDR_OUT, r);
3471 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
3476 p->out_data.rdata = ndr_push_blob(push);
3477 talloc_steal(p->mem_ctx, p->out_data.rdata.data);
3484 static bool api_svcctl_SCSendTSMessage(struct pipes_struct *p)
3486 const struct ndr_interface_call *call;
3487 struct ndr_pull *pull;
3488 struct ndr_push *push;
3489 enum ndr_err_code ndr_err;
3490 struct svcctl_SCSendTSMessage *r;
3492 call = &ndr_table_svcctl.calls[NDR_SVCCTL_SCSENDTSMESSAGE];
3494 r = talloc(talloc_tos(), struct svcctl_SCSendTSMessage);
3499 pull = ndr_pull_init_blob(&p->in_data.data, r);
3505 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
3507 pull->flags |= LIBNDR_FLAG_BIGENDIAN;
3509 ndr_err = call->ndr_pull(pull, NDR_IN, r);
3510 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
3515 if (DEBUGLEVEL >= 10) {
3516 NDR_PRINT_FUNCTION_DEBUG(svcctl_SCSendTSMessage, NDR_IN, r);
3519 r->out.result = _svcctl_SCSendTSMessage(p, r);
3521 if (p->fault_state) {
3523 /* Return true here, srv_pipe_hnd.c will take care */
3527 if (DEBUGLEVEL >= 10) {
3528 NDR_PRINT_FUNCTION_DEBUG(svcctl_SCSendTSMessage, NDR_OUT | NDR_SET_VALUES, r);
3531 push = ndr_push_init_ctx(r);
3538 * carry over the pointer count to the reply in case we are
3539 * using full pointer. See NDR specification for full pointers
3541 push->ptr_count = pull->ptr_count;
3543 ndr_err = call->ndr_push(push, NDR_OUT, r);
3544 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
3549 p->out_data.rdata = ndr_push_blob(push);
3550 talloc_steal(p->mem_ctx, p->out_data.rdata.data);
3559 static struct api_struct api_svcctl_cmds[] =
3561 {"SVCCTL_CLOSESERVICEHANDLE", NDR_SVCCTL_CLOSESERVICEHANDLE, api_svcctl_CloseServiceHandle},
3562 {"SVCCTL_CONTROLSERVICE", NDR_SVCCTL_CONTROLSERVICE, api_svcctl_ControlService},
3563 {"SVCCTL_DELETESERVICE", NDR_SVCCTL_DELETESERVICE, api_svcctl_DeleteService},
3564 {"SVCCTL_LOCKSERVICEDATABASE", NDR_SVCCTL_LOCKSERVICEDATABASE, api_svcctl_LockServiceDatabase},
3565 {"SVCCTL_QUERYSERVICEOBJECTSECURITY", NDR_SVCCTL_QUERYSERVICEOBJECTSECURITY, api_svcctl_QueryServiceObjectSecurity},
3566 {"SVCCTL_SETSERVICEOBJECTSECURITY", NDR_SVCCTL_SETSERVICEOBJECTSECURITY, api_svcctl_SetServiceObjectSecurity},
3567 {"SVCCTL_QUERYSERVICESTATUS", NDR_SVCCTL_QUERYSERVICESTATUS, api_svcctl_QueryServiceStatus},
3568 {"SVCCTL_SETSERVICESTATUS", NDR_SVCCTL_SETSERVICESTATUS, api_svcctl_SetServiceStatus},
3569 {"SVCCTL_UNLOCKSERVICEDATABASE", NDR_SVCCTL_UNLOCKSERVICEDATABASE, api_svcctl_UnlockServiceDatabase},
3570 {"SVCCTL_NOTIFYBOOTCONFIGSTATUS", NDR_SVCCTL_NOTIFYBOOTCONFIGSTATUS, api_svcctl_NotifyBootConfigStatus},
3571 {"SVCCTL_SCSETSERVICEBITSW", NDR_SVCCTL_SCSETSERVICEBITSW, api_svcctl_SCSetServiceBitsW},
3572 {"SVCCTL_CHANGESERVICECONFIGW", NDR_SVCCTL_CHANGESERVICECONFIGW, api_svcctl_ChangeServiceConfigW},
3573 {"SVCCTL_CREATESERVICEW", NDR_SVCCTL_CREATESERVICEW, api_svcctl_CreateServiceW},
3574 {"SVCCTL_ENUMDEPENDENTSERVICESW", NDR_SVCCTL_ENUMDEPENDENTSERVICESW, api_svcctl_EnumDependentServicesW},
3575 {"SVCCTL_ENUMSERVICESSTATUSW", NDR_SVCCTL_ENUMSERVICESSTATUSW, api_svcctl_EnumServicesStatusW},
3576 {"SVCCTL_OPENSCMANAGERW", NDR_SVCCTL_OPENSCMANAGERW, api_svcctl_OpenSCManagerW},
3577 {"SVCCTL_OPENSERVICEW", NDR_SVCCTL_OPENSERVICEW, api_svcctl_OpenServiceW},
3578 {"SVCCTL_QUERYSERVICECONFIGW", NDR_SVCCTL_QUERYSERVICECONFIGW, api_svcctl_QueryServiceConfigW},
3579 {"SVCCTL_QUERYSERVICELOCKSTATUSW", NDR_SVCCTL_QUERYSERVICELOCKSTATUSW, api_svcctl_QueryServiceLockStatusW},
3580 {"SVCCTL_STARTSERVICEW", NDR_SVCCTL_STARTSERVICEW, api_svcctl_StartServiceW},
3581 {"SVCCTL_GETSERVICEDISPLAYNAMEW", NDR_SVCCTL_GETSERVICEDISPLAYNAMEW, api_svcctl_GetServiceDisplayNameW},
3582 {"SVCCTL_GETSERVICEKEYNAMEW", NDR_SVCCTL_GETSERVICEKEYNAMEW, api_svcctl_GetServiceKeyNameW},
3583 {"SVCCTL_SCSETSERVICEBITSA", NDR_SVCCTL_SCSETSERVICEBITSA, api_svcctl_SCSetServiceBitsA},
3584 {"SVCCTL_CHANGESERVICECONFIGA", NDR_SVCCTL_CHANGESERVICECONFIGA, api_svcctl_ChangeServiceConfigA},
3585 {"SVCCTL_CREATESERVICEA", NDR_SVCCTL_CREATESERVICEA, api_svcctl_CreateServiceA},
3586 {"SVCCTL_ENUMDEPENDENTSERVICESA", NDR_SVCCTL_ENUMDEPENDENTSERVICESA, api_svcctl_EnumDependentServicesA},
3587 {"SVCCTL_ENUMSERVICESSTATUSA", NDR_SVCCTL_ENUMSERVICESSTATUSA, api_svcctl_EnumServicesStatusA},
3588 {"SVCCTL_OPENSCMANAGERA", NDR_SVCCTL_OPENSCMANAGERA, api_svcctl_OpenSCManagerA},
3589 {"SVCCTL_OPENSERVICEA", NDR_SVCCTL_OPENSERVICEA, api_svcctl_OpenServiceA},
3590 {"SVCCTL_QUERYSERVICECONFIGA", NDR_SVCCTL_QUERYSERVICECONFIGA, api_svcctl_QueryServiceConfigA},
3591 {"SVCCTL_QUERYSERVICELOCKSTATUSA", NDR_SVCCTL_QUERYSERVICELOCKSTATUSA, api_svcctl_QueryServiceLockStatusA},
3592 {"SVCCTL_STARTSERVICEA", NDR_SVCCTL_STARTSERVICEA, api_svcctl_StartServiceA},
3593 {"SVCCTL_GETSERVICEDISPLAYNAMEA", NDR_SVCCTL_GETSERVICEDISPLAYNAMEA, api_svcctl_GetServiceDisplayNameA},
3594 {"SVCCTL_GETSERVICEKEYNAMEA", NDR_SVCCTL_GETSERVICEKEYNAMEA, api_svcctl_GetServiceKeyNameA},
3595 {"SVCCTL_GETCURRENTGROUPESTATEW", NDR_SVCCTL_GETCURRENTGROUPESTATEW, api_svcctl_GetCurrentGroupeStateW},
3596 {"SVCCTL_ENUMSERVICEGROUPW", NDR_SVCCTL_ENUMSERVICEGROUPW, api_svcctl_EnumServiceGroupW},
3597 {"SVCCTL_CHANGESERVICECONFIG2A", NDR_SVCCTL_CHANGESERVICECONFIG2A, api_svcctl_ChangeServiceConfig2A},
3598 {"SVCCTL_CHANGESERVICECONFIG2W", NDR_SVCCTL_CHANGESERVICECONFIG2W, api_svcctl_ChangeServiceConfig2W},
3599 {"SVCCTL_QUERYSERVICECONFIG2A", NDR_SVCCTL_QUERYSERVICECONFIG2A, api_svcctl_QueryServiceConfig2A},
3600 {"SVCCTL_QUERYSERVICECONFIG2W", NDR_SVCCTL_QUERYSERVICECONFIG2W, api_svcctl_QueryServiceConfig2W},
3601 {"SVCCTL_QUERYSERVICESTATUSEX", NDR_SVCCTL_QUERYSERVICESTATUSEX, api_svcctl_QueryServiceStatusEx},
3602 {"ENUMSERVICESSTATUSEXA", NDR_ENUMSERVICESSTATUSEXA, api_EnumServicesStatusExA},
3603 {"ENUMSERVICESSTATUSEXW", NDR_ENUMSERVICESSTATUSEXW, api_EnumServicesStatusExW},
3604 {"SVCCTL_SCSENDTSMESSAGE", NDR_SVCCTL_SCSENDTSMESSAGE, api_svcctl_SCSendTSMessage},
3607 void svcctl_get_pipe_fns(struct api_struct **fns, int *n_fns)
3609 *fns = api_svcctl_cmds;
3610 *n_fns = sizeof(api_svcctl_cmds) / sizeof(struct api_struct);
3613 NTSTATUS rpc_svcctl_init(const struct rpc_srv_callbacks *rpc_srv_cb)
3615 return rpc_srv_register(SMB_RPC_INTERFACE_VERSION, "svcctl", "svcctl", &ndr_table_svcctl, api_svcctl_cmds, sizeof(api_svcctl_cmds) / sizeof(struct api_struct), rpc_srv_cb);
3618 NTSTATUS rpc_svcctl_shutdown(void)
3620 return rpc_srv_unregister(&ndr_table_svcctl);