2 * Unix SMB/CIFS implementation.
3 * server auto-generated by pidl. DO NOT MODIFY!
7 #include "librpc/gen_ndr/srv_winreg.h"
9 static BOOL api_winreg_OpenHKCR(pipes_struct *p)
11 struct ndr_pull *pull;
12 struct ndr_push *push;
15 struct winreg_OpenHKCR r;
16 TALLOC_CTX *mem_ctx = talloc_init("api_winreg_OpenHKCR");
18 if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
23 pull = ndr_pull_init_blob(&blob, mem_ctx);
27 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
28 status = ndr_pull_winreg_OpenHKCR(pull, NDR_IN, &r);
29 if (NT_STATUS_IS_ERR(status)) {
34 r.out.handle = talloc_size(mem_ctx, sizeof(*r.out.handle));
35 if (r.out.handle == NULL) {
40 r.out.result = _winreg_OpenHKCR(p, r.in.system_name, r.in.access_mask, r.out.handle);
42 push = ndr_push_init_ctx(mem_ctx);
48 status = ndr_push_winreg_OpenHKCR(push, NDR_OUT, &r);
49 if (NT_STATUS_IS_ERR(status)) {
54 blob = ndr_push_blob(push);
55 if (!prs_init_data_blob(&p->out_data.rdata, &blob, p->mem_ctx)) {
65 static BOOL api_winreg_OpenHKCU(pipes_struct *p)
67 struct ndr_pull *pull;
68 struct ndr_push *push;
71 struct winreg_OpenHKCU r;
72 TALLOC_CTX *mem_ctx = talloc_init("api_winreg_OpenHKCU");
74 if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
79 pull = ndr_pull_init_blob(&blob, mem_ctx);
83 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
84 status = ndr_pull_winreg_OpenHKCU(pull, NDR_IN, &r);
85 if (NT_STATUS_IS_ERR(status)) {
90 r.out.handle = talloc_size(mem_ctx, sizeof(*r.out.handle));
91 if (r.out.handle == NULL) {
96 r.out.result = _winreg_OpenHKCU(p, r.in.system_name, r.in.access_mask, r.out.handle);
98 push = ndr_push_init_ctx(mem_ctx);
100 talloc_free(mem_ctx);
104 status = ndr_push_winreg_OpenHKCU(push, NDR_OUT, &r);
105 if (NT_STATUS_IS_ERR(status)) {
106 talloc_free(mem_ctx);
110 blob = ndr_push_blob(push);
111 if (!prs_init_data_blob(&p->out_data.rdata, &blob, p->mem_ctx)) {
112 talloc_free(mem_ctx);
116 talloc_free(mem_ctx);
121 static BOOL api_winreg_OpenHKLM(pipes_struct *p)
123 struct ndr_pull *pull;
124 struct ndr_push *push;
127 struct winreg_OpenHKLM r;
128 TALLOC_CTX *mem_ctx = talloc_init("api_winreg_OpenHKLM");
130 if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
131 talloc_free(mem_ctx);
135 pull = ndr_pull_init_blob(&blob, mem_ctx);
139 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
140 status = ndr_pull_winreg_OpenHKLM(pull, NDR_IN, &r);
141 if (NT_STATUS_IS_ERR(status)) {
142 talloc_free(mem_ctx);
146 r.out.handle = talloc_size(mem_ctx, sizeof(*r.out.handle));
147 if (r.out.handle == NULL) {
148 talloc_free(mem_ctx);
152 r.out.result = _winreg_OpenHKLM(p, r.in.system_name, r.in.access_mask, r.out.handle);
154 push = ndr_push_init_ctx(mem_ctx);
156 talloc_free(mem_ctx);
160 status = ndr_push_winreg_OpenHKLM(push, NDR_OUT, &r);
161 if (NT_STATUS_IS_ERR(status)) {
162 talloc_free(mem_ctx);
166 blob = ndr_push_blob(push);
167 if (!prs_init_data_blob(&p->out_data.rdata, &blob, p->mem_ctx)) {
168 talloc_free(mem_ctx);
172 talloc_free(mem_ctx);
177 static BOOL api_winreg_OpenHKPD(pipes_struct *p)
179 struct ndr_pull *pull;
180 struct ndr_push *push;
183 struct winreg_OpenHKPD r;
184 TALLOC_CTX *mem_ctx = talloc_init("api_winreg_OpenHKPD");
186 if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
187 talloc_free(mem_ctx);
191 pull = ndr_pull_init_blob(&blob, mem_ctx);
195 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
196 status = ndr_pull_winreg_OpenHKPD(pull, NDR_IN, &r);
197 if (NT_STATUS_IS_ERR(status)) {
198 talloc_free(mem_ctx);
202 r.out.handle = talloc_size(mem_ctx, sizeof(*r.out.handle));
203 if (r.out.handle == NULL) {
204 talloc_free(mem_ctx);
208 r.out.result = _winreg_OpenHKPD(p, r.in.system_name, r.in.access_mask, r.out.handle);
210 push = ndr_push_init_ctx(mem_ctx);
212 talloc_free(mem_ctx);
216 status = ndr_push_winreg_OpenHKPD(push, NDR_OUT, &r);
217 if (NT_STATUS_IS_ERR(status)) {
218 talloc_free(mem_ctx);
222 blob = ndr_push_blob(push);
223 if (!prs_init_data_blob(&p->out_data.rdata, &blob, p->mem_ctx)) {
224 talloc_free(mem_ctx);
228 talloc_free(mem_ctx);
233 static BOOL api_winreg_OpenHKU(pipes_struct *p)
235 struct ndr_pull *pull;
236 struct ndr_push *push;
239 struct winreg_OpenHKU r;
240 TALLOC_CTX *mem_ctx = talloc_init("api_winreg_OpenHKU");
242 if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
243 talloc_free(mem_ctx);
247 pull = ndr_pull_init_blob(&blob, mem_ctx);
251 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
252 status = ndr_pull_winreg_OpenHKU(pull, NDR_IN, &r);
253 if (NT_STATUS_IS_ERR(status)) {
254 talloc_free(mem_ctx);
258 r.out.handle = talloc_size(mem_ctx, sizeof(*r.out.handle));
259 if (r.out.handle == NULL) {
260 talloc_free(mem_ctx);
264 r.out.result = _winreg_OpenHKU(p, r.in.system_name, r.in.access_mask, r.out.handle);
266 push = ndr_push_init_ctx(mem_ctx);
268 talloc_free(mem_ctx);
272 status = ndr_push_winreg_OpenHKU(push, NDR_OUT, &r);
273 if (NT_STATUS_IS_ERR(status)) {
274 talloc_free(mem_ctx);
278 blob = ndr_push_blob(push);
279 if (!prs_init_data_blob(&p->out_data.rdata, &blob, p->mem_ctx)) {
280 talloc_free(mem_ctx);
284 talloc_free(mem_ctx);
289 static BOOL api_winreg_CloseKey(pipes_struct *p)
291 struct ndr_pull *pull;
292 struct ndr_push *push;
295 struct winreg_CloseKey r;
296 TALLOC_CTX *mem_ctx = talloc_init("api_winreg_CloseKey");
298 if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
299 talloc_free(mem_ctx);
303 pull = ndr_pull_init_blob(&blob, mem_ctx);
307 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
308 status = ndr_pull_winreg_CloseKey(pull, NDR_IN, &r);
309 if (NT_STATUS_IS_ERR(status)) {
310 talloc_free(mem_ctx);
314 r.out.handle = r.in.handle;
315 r.out.result = _winreg_CloseKey(p, r.in.handle);
317 push = ndr_push_init_ctx(mem_ctx);
319 talloc_free(mem_ctx);
323 status = ndr_push_winreg_CloseKey(push, NDR_OUT, &r);
324 if (NT_STATUS_IS_ERR(status)) {
325 talloc_free(mem_ctx);
329 blob = ndr_push_blob(push);
330 if (!prs_init_data_blob(&p->out_data.rdata, &blob, p->mem_ctx)) {
331 talloc_free(mem_ctx);
335 talloc_free(mem_ctx);
340 static BOOL api_winreg_CreateKey(pipes_struct *p)
342 struct ndr_pull *pull;
343 struct ndr_push *push;
346 struct winreg_CreateKey r;
347 TALLOC_CTX *mem_ctx = talloc_init("api_winreg_CreateKey");
349 if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
350 talloc_free(mem_ctx);
354 pull = ndr_pull_init_blob(&blob, mem_ctx);
358 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
359 status = ndr_pull_winreg_CreateKey(pull, NDR_IN, &r);
360 if (NT_STATUS_IS_ERR(status)) {
361 talloc_free(mem_ctx);
365 r.out.new_handle = talloc_size(mem_ctx, sizeof(*r.out.new_handle));
366 if (r.out.new_handle == NULL) {
367 talloc_free(mem_ctx);
371 r.out.action_taken = r.in.action_taken;
372 r.out.result = _winreg_CreateKey(p, r.in.handle, r.in.name, r.in.keyclass, r.in.options, r.in.access_mask, r.in.secdesc, r.out.new_handle, r.in.action_taken);
374 push = ndr_push_init_ctx(mem_ctx);
376 talloc_free(mem_ctx);
380 status = ndr_push_winreg_CreateKey(push, NDR_OUT, &r);
381 if (NT_STATUS_IS_ERR(status)) {
382 talloc_free(mem_ctx);
386 blob = ndr_push_blob(push);
387 if (!prs_init_data_blob(&p->out_data.rdata, &blob, p->mem_ctx)) {
388 talloc_free(mem_ctx);
392 talloc_free(mem_ctx);
397 static BOOL api_winreg_DeleteKey(pipes_struct *p)
399 struct ndr_pull *pull;
400 struct ndr_push *push;
403 struct winreg_DeleteKey r;
404 TALLOC_CTX *mem_ctx = talloc_init("api_winreg_DeleteKey");
406 if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
407 talloc_free(mem_ctx);
411 pull = ndr_pull_init_blob(&blob, mem_ctx);
415 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
416 status = ndr_pull_winreg_DeleteKey(pull, NDR_IN, &r);
417 if (NT_STATUS_IS_ERR(status)) {
418 talloc_free(mem_ctx);
422 r.out.result = _winreg_DeleteKey(p, r.in.handle, r.in.key);
424 push = ndr_push_init_ctx(mem_ctx);
426 talloc_free(mem_ctx);
430 status = ndr_push_winreg_DeleteKey(push, NDR_OUT, &r);
431 if (NT_STATUS_IS_ERR(status)) {
432 talloc_free(mem_ctx);
436 blob = ndr_push_blob(push);
437 if (!prs_init_data_blob(&p->out_data.rdata, &blob, p->mem_ctx)) {
438 talloc_free(mem_ctx);
442 talloc_free(mem_ctx);
447 static BOOL api_winreg_DeleteValue(pipes_struct *p)
449 struct ndr_pull *pull;
450 struct ndr_push *push;
453 struct winreg_DeleteValue r;
454 TALLOC_CTX *mem_ctx = talloc_init("api_winreg_DeleteValue");
456 if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
457 talloc_free(mem_ctx);
461 pull = ndr_pull_init_blob(&blob, mem_ctx);
465 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
466 status = ndr_pull_winreg_DeleteValue(pull, NDR_IN, &r);
467 if (NT_STATUS_IS_ERR(status)) {
468 talloc_free(mem_ctx);
472 r.out.result = _winreg_DeleteValue(p, r.in.handle, r.in.value);
474 push = ndr_push_init_ctx(mem_ctx);
476 talloc_free(mem_ctx);
480 status = ndr_push_winreg_DeleteValue(push, NDR_OUT, &r);
481 if (NT_STATUS_IS_ERR(status)) {
482 talloc_free(mem_ctx);
486 blob = ndr_push_blob(push);
487 if (!prs_init_data_blob(&p->out_data.rdata, &blob, p->mem_ctx)) {
488 talloc_free(mem_ctx);
492 talloc_free(mem_ctx);
497 static BOOL api_winreg_EnumKey(pipes_struct *p)
499 struct ndr_pull *pull;
500 struct ndr_push *push;
503 struct winreg_EnumKey r;
504 TALLOC_CTX *mem_ctx = talloc_init("api_winreg_EnumKey");
506 if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
507 talloc_free(mem_ctx);
511 pull = ndr_pull_init_blob(&blob, mem_ctx);
515 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
516 status = ndr_pull_winreg_EnumKey(pull, NDR_IN, &r);
517 if (NT_STATUS_IS_ERR(status)) {
518 talloc_free(mem_ctx);
522 r.out.name = r.in.name;
523 r.out.keyclass = r.in.keyclass;
524 r.out.last_changed_time = r.in.last_changed_time;
525 r.out.result = _winreg_EnumKey(p, r.in.handle, r.in.enum_index, r.in.name, r.in.keyclass, r.in.last_changed_time);
527 push = ndr_push_init_ctx(mem_ctx);
529 talloc_free(mem_ctx);
533 status = ndr_push_winreg_EnumKey(push, NDR_OUT, &r);
534 if (NT_STATUS_IS_ERR(status)) {
535 talloc_free(mem_ctx);
539 blob = ndr_push_blob(push);
540 if (!prs_init_data_blob(&p->out_data.rdata, &blob, p->mem_ctx)) {
541 talloc_free(mem_ctx);
545 talloc_free(mem_ctx);
550 static BOOL api_winreg_EnumValue(pipes_struct *p)
552 struct ndr_pull *pull;
553 struct ndr_push *push;
556 struct winreg_EnumValue r;
557 TALLOC_CTX *mem_ctx = talloc_init("api_winreg_EnumValue");
559 if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
560 talloc_free(mem_ctx);
564 pull = ndr_pull_init_blob(&blob, mem_ctx);
568 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
569 status = ndr_pull_winreg_EnumValue(pull, NDR_IN, &r);
570 if (NT_STATUS_IS_ERR(status)) {
571 talloc_free(mem_ctx);
575 r.out.name = r.in.name;
576 r.out.type = r.in.type;
577 r.out.value = r.in.value;
578 r.out.size = r.in.size;
579 r.out.length = r.in.length;
580 r.out.result = _winreg_EnumValue(p, r.in.handle, r.in.enum_index, r.in.name, r.in.type, r.in.value, r.in.size, r.in.length);
582 push = ndr_push_init_ctx(mem_ctx);
584 talloc_free(mem_ctx);
588 status = ndr_push_winreg_EnumValue(push, NDR_OUT, &r);
589 if (NT_STATUS_IS_ERR(status)) {
590 talloc_free(mem_ctx);
594 blob = ndr_push_blob(push);
595 if (!prs_init_data_blob(&p->out_data.rdata, &blob, p->mem_ctx)) {
596 talloc_free(mem_ctx);
600 talloc_free(mem_ctx);
605 static BOOL api_winreg_FlushKey(pipes_struct *p)
607 struct ndr_pull *pull;
608 struct ndr_push *push;
611 struct winreg_FlushKey r;
612 TALLOC_CTX *mem_ctx = talloc_init("api_winreg_FlushKey");
614 if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
615 talloc_free(mem_ctx);
619 pull = ndr_pull_init_blob(&blob, mem_ctx);
623 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
624 status = ndr_pull_winreg_FlushKey(pull, NDR_IN, &r);
625 if (NT_STATUS_IS_ERR(status)) {
626 talloc_free(mem_ctx);
630 r.out.result = _winreg_FlushKey(p, r.in.handle);
632 push = ndr_push_init_ctx(mem_ctx);
634 talloc_free(mem_ctx);
638 status = ndr_push_winreg_FlushKey(push, NDR_OUT, &r);
639 if (NT_STATUS_IS_ERR(status)) {
640 talloc_free(mem_ctx);
644 blob = ndr_push_blob(push);
645 if (!prs_init_data_blob(&p->out_data.rdata, &blob, p->mem_ctx)) {
646 talloc_free(mem_ctx);
650 talloc_free(mem_ctx);
655 static BOOL api_winreg_GetKeySecurity(pipes_struct *p)
657 struct ndr_pull *pull;
658 struct ndr_push *push;
661 struct winreg_GetKeySecurity r;
662 TALLOC_CTX *mem_ctx = talloc_init("api_winreg_GetKeySecurity");
664 if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
665 talloc_free(mem_ctx);
669 pull = ndr_pull_init_blob(&blob, mem_ctx);
673 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
674 status = ndr_pull_winreg_GetKeySecurity(pull, NDR_IN, &r);
675 if (NT_STATUS_IS_ERR(status)) {
676 talloc_free(mem_ctx);
681 r.out.result = _winreg_GetKeySecurity(p, r.in.handle, r.in.sec_info, r.in.sd);
683 push = ndr_push_init_ctx(mem_ctx);
685 talloc_free(mem_ctx);
689 status = ndr_push_winreg_GetKeySecurity(push, NDR_OUT, &r);
690 if (NT_STATUS_IS_ERR(status)) {
691 talloc_free(mem_ctx);
695 blob = ndr_push_blob(push);
696 if (!prs_init_data_blob(&p->out_data.rdata, &blob, p->mem_ctx)) {
697 talloc_free(mem_ctx);
701 talloc_free(mem_ctx);
706 static BOOL api_winreg_LoadKey(pipes_struct *p)
708 struct ndr_pull *pull;
709 struct ndr_push *push;
712 struct winreg_LoadKey r;
713 TALLOC_CTX *mem_ctx = talloc_init("api_winreg_LoadKey");
715 if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
716 talloc_free(mem_ctx);
720 pull = ndr_pull_init_blob(&blob, mem_ctx);
724 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
725 status = ndr_pull_winreg_LoadKey(pull, NDR_IN, &r);
726 if (NT_STATUS_IS_ERR(status)) {
727 talloc_free(mem_ctx);
731 r.out.result = _winreg_LoadKey(p, r.in.handle, r.in.keyname, r.in.filename);
733 push = ndr_push_init_ctx(mem_ctx);
735 talloc_free(mem_ctx);
739 status = ndr_push_winreg_LoadKey(push, NDR_OUT, &r);
740 if (NT_STATUS_IS_ERR(status)) {
741 talloc_free(mem_ctx);
745 blob = ndr_push_blob(push);
746 if (!prs_init_data_blob(&p->out_data.rdata, &blob, p->mem_ctx)) {
747 talloc_free(mem_ctx);
751 talloc_free(mem_ctx);
756 static BOOL api_winreg_NotifyChangeKeyValue(pipes_struct *p)
758 struct ndr_pull *pull;
759 struct ndr_push *push;
762 struct winreg_NotifyChangeKeyValue r;
763 TALLOC_CTX *mem_ctx = talloc_init("api_winreg_NotifyChangeKeyValue");
765 if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
766 talloc_free(mem_ctx);
770 pull = ndr_pull_init_blob(&blob, mem_ctx);
774 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
775 status = ndr_pull_winreg_NotifyChangeKeyValue(pull, NDR_IN, &r);
776 if (NT_STATUS_IS_ERR(status)) {
777 talloc_free(mem_ctx);
781 r.out.result = _winreg_NotifyChangeKeyValue(p, r.in.handle, r.in.watch_subtree, r.in.notify_filter, r.in.unknown, r.in.string1, r.in.string2, r.in.unknown2);
783 push = ndr_push_init_ctx(mem_ctx);
785 talloc_free(mem_ctx);
789 status = ndr_push_winreg_NotifyChangeKeyValue(push, NDR_OUT, &r);
790 if (NT_STATUS_IS_ERR(status)) {
791 talloc_free(mem_ctx);
795 blob = ndr_push_blob(push);
796 if (!prs_init_data_blob(&p->out_data.rdata, &blob, p->mem_ctx)) {
797 talloc_free(mem_ctx);
801 talloc_free(mem_ctx);
806 static BOOL api_winreg_OpenKey(pipes_struct *p)
808 struct ndr_pull *pull;
809 struct ndr_push *push;
812 struct winreg_OpenKey r;
813 TALLOC_CTX *mem_ctx = talloc_init("api_winreg_OpenKey");
815 if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
816 talloc_free(mem_ctx);
820 pull = ndr_pull_init_blob(&blob, mem_ctx);
824 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
825 status = ndr_pull_winreg_OpenKey(pull, NDR_IN, &r);
826 if (NT_STATUS_IS_ERR(status)) {
827 talloc_free(mem_ctx);
831 r.out.handle = talloc_size(mem_ctx, sizeof(*r.out.handle));
832 if (r.out.handle == NULL) {
833 talloc_free(mem_ctx);
837 r.out.result = _winreg_OpenKey(p, r.in.parent_handle, r.in.keyname, r.in.unknown, r.in.access_mask, r.out.handle);
839 push = ndr_push_init_ctx(mem_ctx);
841 talloc_free(mem_ctx);
845 status = ndr_push_winreg_OpenKey(push, NDR_OUT, &r);
846 if (NT_STATUS_IS_ERR(status)) {
847 talloc_free(mem_ctx);
851 blob = ndr_push_blob(push);
852 if (!prs_init_data_blob(&p->out_data.rdata, &blob, p->mem_ctx)) {
853 talloc_free(mem_ctx);
857 talloc_free(mem_ctx);
862 static BOOL api_winreg_QueryInfoKey(pipes_struct *p)
864 struct ndr_pull *pull;
865 struct ndr_push *push;
868 struct winreg_QueryInfoKey r;
869 TALLOC_CTX *mem_ctx = talloc_init("api_winreg_QueryInfoKey");
871 if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
872 talloc_free(mem_ctx);
876 pull = ndr_pull_init_blob(&blob, mem_ctx);
880 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
881 status = ndr_pull_winreg_QueryInfoKey(pull, NDR_IN, &r);
882 if (NT_STATUS_IS_ERR(status)) {
883 talloc_free(mem_ctx);
887 r.out.class_out = talloc_size(mem_ctx, sizeof(*r.out.class_out));
888 if (r.out.class_out == NULL) {
889 talloc_free(mem_ctx);
893 r.out.num_subkeys = talloc_size(mem_ctx, sizeof(*r.out.num_subkeys));
894 if (r.out.num_subkeys == NULL) {
895 talloc_free(mem_ctx);
899 r.out.max_subkeylen = talloc_size(mem_ctx, sizeof(*r.out.max_subkeylen));
900 if (r.out.max_subkeylen == NULL) {
901 talloc_free(mem_ctx);
905 r.out.max_subkeysize = talloc_size(mem_ctx, sizeof(*r.out.max_subkeysize));
906 if (r.out.max_subkeysize == NULL) {
907 talloc_free(mem_ctx);
911 r.out.num_values = talloc_size(mem_ctx, sizeof(*r.out.num_values));
912 if (r.out.num_values == NULL) {
913 talloc_free(mem_ctx);
917 r.out.max_valnamelen = talloc_size(mem_ctx, sizeof(*r.out.max_valnamelen));
918 if (r.out.max_valnamelen == NULL) {
919 talloc_free(mem_ctx);
923 r.out.max_valbufsize = talloc_size(mem_ctx, sizeof(*r.out.max_valbufsize));
924 if (r.out.max_valbufsize == NULL) {
925 talloc_free(mem_ctx);
929 r.out.secdescsize = talloc_size(mem_ctx, sizeof(*r.out.secdescsize));
930 if (r.out.secdescsize == NULL) {
931 talloc_free(mem_ctx);
935 r.out.last_changed_time = talloc_size(mem_ctx, sizeof(*r.out.last_changed_time));
936 if (r.out.last_changed_time == NULL) {
937 talloc_free(mem_ctx);
941 r.out.result = _winreg_QueryInfoKey(p, r.in.handle, r.in.class_in, r.out.class_out, r.out.num_subkeys, r.out.max_subkeylen, r.out.max_subkeysize, r.out.num_values, r.out.max_valnamelen, r.out.max_valbufsize, r.out.secdescsize, r.out.last_changed_time);
943 push = ndr_push_init_ctx(mem_ctx);
945 talloc_free(mem_ctx);
949 status = ndr_push_winreg_QueryInfoKey(push, NDR_OUT, &r);
950 if (NT_STATUS_IS_ERR(status)) {
951 talloc_free(mem_ctx);
955 blob = ndr_push_blob(push);
956 if (!prs_init_data_blob(&p->out_data.rdata, &blob, p->mem_ctx)) {
957 talloc_free(mem_ctx);
961 talloc_free(mem_ctx);
966 static BOOL api_winreg_QueryValue(pipes_struct *p)
968 struct ndr_pull *pull;
969 struct ndr_push *push;
972 struct winreg_QueryValue r;
973 TALLOC_CTX *mem_ctx = talloc_init("api_winreg_QueryValue");
975 if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
976 talloc_free(mem_ctx);
980 pull = ndr_pull_init_blob(&blob, mem_ctx);
984 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
985 status = ndr_pull_winreg_QueryValue(pull, NDR_IN, &r);
986 if (NT_STATUS_IS_ERR(status)) {
987 talloc_free(mem_ctx);
991 r.out.type = r.in.type;
992 r.out.data = r.in.data;
993 r.out.size = r.in.size;
994 r.out.length = r.in.length;
995 r.out.result = _winreg_QueryValue(p, r.in.handle, r.in.value_name, r.in.type, r.in.data, r.in.size, r.in.length);
997 push = ndr_push_init_ctx(mem_ctx);
999 talloc_free(mem_ctx);
1003 status = ndr_push_winreg_QueryValue(push, NDR_OUT, &r);
1004 if (NT_STATUS_IS_ERR(status)) {
1005 talloc_free(mem_ctx);
1009 blob = ndr_push_blob(push);
1010 if (!prs_init_data_blob(&p->out_data.rdata, &blob, p->mem_ctx)) {
1011 talloc_free(mem_ctx);
1015 talloc_free(mem_ctx);
1020 static BOOL api_winreg_ReplaceKey(pipes_struct *p)
1022 struct ndr_pull *pull;
1023 struct ndr_push *push;
1026 struct winreg_ReplaceKey r;
1027 TALLOC_CTX *mem_ctx = talloc_init("api_winreg_ReplaceKey");
1029 if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
1030 talloc_free(mem_ctx);
1034 pull = ndr_pull_init_blob(&blob, mem_ctx);
1038 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
1039 status = ndr_pull_winreg_ReplaceKey(pull, NDR_IN, &r);
1040 if (NT_STATUS_IS_ERR(status)) {
1041 talloc_free(mem_ctx);
1045 r.out.result = _winreg_ReplaceKey(p);
1047 push = ndr_push_init_ctx(mem_ctx);
1049 talloc_free(mem_ctx);
1053 status = ndr_push_winreg_ReplaceKey(push, NDR_OUT, &r);
1054 if (NT_STATUS_IS_ERR(status)) {
1055 talloc_free(mem_ctx);
1059 blob = ndr_push_blob(push);
1060 if (!prs_init_data_blob(&p->out_data.rdata, &blob, p->mem_ctx)) {
1061 talloc_free(mem_ctx);
1065 talloc_free(mem_ctx);
1070 static BOOL api_winreg_RestoreKey(pipes_struct *p)
1072 struct ndr_pull *pull;
1073 struct ndr_push *push;
1076 struct winreg_RestoreKey r;
1077 TALLOC_CTX *mem_ctx = talloc_init("api_winreg_RestoreKey");
1079 if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
1080 talloc_free(mem_ctx);
1084 pull = ndr_pull_init_blob(&blob, mem_ctx);
1088 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
1089 status = ndr_pull_winreg_RestoreKey(pull, NDR_IN, &r);
1090 if (NT_STATUS_IS_ERR(status)) {
1091 talloc_free(mem_ctx);
1095 r.out.result = _winreg_RestoreKey(p);
1097 push = ndr_push_init_ctx(mem_ctx);
1099 talloc_free(mem_ctx);
1103 status = ndr_push_winreg_RestoreKey(push, NDR_OUT, &r);
1104 if (NT_STATUS_IS_ERR(status)) {
1105 talloc_free(mem_ctx);
1109 blob = ndr_push_blob(push);
1110 if (!prs_init_data_blob(&p->out_data.rdata, &blob, p->mem_ctx)) {
1111 talloc_free(mem_ctx);
1115 talloc_free(mem_ctx);
1120 static BOOL api_winreg_SaveKey(pipes_struct *p)
1122 struct ndr_pull *pull;
1123 struct ndr_push *push;
1126 struct winreg_SaveKey r;
1127 TALLOC_CTX *mem_ctx = talloc_init("api_winreg_SaveKey");
1129 if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
1130 talloc_free(mem_ctx);
1134 pull = ndr_pull_init_blob(&blob, mem_ctx);
1138 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
1139 status = ndr_pull_winreg_SaveKey(pull, NDR_IN, &r);
1140 if (NT_STATUS_IS_ERR(status)) {
1141 talloc_free(mem_ctx);
1145 r.out.result = _winreg_SaveKey(p);
1147 push = ndr_push_init_ctx(mem_ctx);
1149 talloc_free(mem_ctx);
1153 status = ndr_push_winreg_SaveKey(push, NDR_OUT, &r);
1154 if (NT_STATUS_IS_ERR(status)) {
1155 talloc_free(mem_ctx);
1159 blob = ndr_push_blob(push);
1160 if (!prs_init_data_blob(&p->out_data.rdata, &blob, p->mem_ctx)) {
1161 talloc_free(mem_ctx);
1165 talloc_free(mem_ctx);
1170 static BOOL api_winreg_SetKeySecurity(pipes_struct *p)
1172 struct ndr_pull *pull;
1173 struct ndr_push *push;
1176 struct winreg_SetKeySecurity r;
1177 TALLOC_CTX *mem_ctx = talloc_init("api_winreg_SetKeySecurity");
1179 if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
1180 talloc_free(mem_ctx);
1184 pull = ndr_pull_init_blob(&blob, mem_ctx);
1188 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
1189 status = ndr_pull_winreg_SetKeySecurity(pull, NDR_IN, &r);
1190 if (NT_STATUS_IS_ERR(status)) {
1191 talloc_free(mem_ctx);
1196 r.out.result = _winreg_SetKeySecurity(p, r.in.handle, r.in.access_mask, r.in.sd);
1198 push = ndr_push_init_ctx(mem_ctx);
1200 talloc_free(mem_ctx);
1204 status = ndr_push_winreg_SetKeySecurity(push, NDR_OUT, &r);
1205 if (NT_STATUS_IS_ERR(status)) {
1206 talloc_free(mem_ctx);
1210 blob = ndr_push_blob(push);
1211 if (!prs_init_data_blob(&p->out_data.rdata, &blob, p->mem_ctx)) {
1212 talloc_free(mem_ctx);
1216 talloc_free(mem_ctx);
1221 static BOOL api_winreg_SetValue(pipes_struct *p)
1223 struct ndr_pull *pull;
1224 struct ndr_push *push;
1227 struct winreg_SetValue r;
1228 TALLOC_CTX *mem_ctx = talloc_init("api_winreg_SetValue");
1230 if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
1231 talloc_free(mem_ctx);
1235 pull = ndr_pull_init_blob(&blob, mem_ctx);
1239 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
1240 status = ndr_pull_winreg_SetValue(pull, NDR_IN, &r);
1241 if (NT_STATUS_IS_ERR(status)) {
1242 talloc_free(mem_ctx);
1246 r.out.result = _winreg_SetValue(p, r.in.handle, r.in.name, r.in.type, r.in.data, r.in.size);
1248 push = ndr_push_init_ctx(mem_ctx);
1250 talloc_free(mem_ctx);
1254 status = ndr_push_winreg_SetValue(push, NDR_OUT, &r);
1255 if (NT_STATUS_IS_ERR(status)) {
1256 talloc_free(mem_ctx);
1260 blob = ndr_push_blob(push);
1261 if (!prs_init_data_blob(&p->out_data.rdata, &blob, p->mem_ctx)) {
1262 talloc_free(mem_ctx);
1266 talloc_free(mem_ctx);
1271 static BOOL api_winreg_UnLoadKey(pipes_struct *p)
1273 struct ndr_pull *pull;
1274 struct ndr_push *push;
1277 struct winreg_UnLoadKey r;
1278 TALLOC_CTX *mem_ctx = talloc_init("api_winreg_UnLoadKey");
1280 if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
1281 talloc_free(mem_ctx);
1285 pull = ndr_pull_init_blob(&blob, mem_ctx);
1289 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
1290 status = ndr_pull_winreg_UnLoadKey(pull, NDR_IN, &r);
1291 if (NT_STATUS_IS_ERR(status)) {
1292 talloc_free(mem_ctx);
1296 r.out.result = _winreg_UnLoadKey(p);
1298 push = ndr_push_init_ctx(mem_ctx);
1300 talloc_free(mem_ctx);
1304 status = ndr_push_winreg_UnLoadKey(push, NDR_OUT, &r);
1305 if (NT_STATUS_IS_ERR(status)) {
1306 talloc_free(mem_ctx);
1310 blob = ndr_push_blob(push);
1311 if (!prs_init_data_blob(&p->out_data.rdata, &blob, p->mem_ctx)) {
1312 talloc_free(mem_ctx);
1316 talloc_free(mem_ctx);
1321 static BOOL api_winreg_InitiateSystemShutdown(pipes_struct *p)
1323 struct ndr_pull *pull;
1324 struct ndr_push *push;
1327 struct winreg_InitiateSystemShutdown r;
1328 TALLOC_CTX *mem_ctx = talloc_init("api_winreg_InitiateSystemShutdown");
1330 if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
1331 talloc_free(mem_ctx);
1335 pull = ndr_pull_init_blob(&blob, mem_ctx);
1339 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
1340 status = ndr_pull_winreg_InitiateSystemShutdown(pull, NDR_IN, &r);
1341 if (NT_STATUS_IS_ERR(status)) {
1342 talloc_free(mem_ctx);
1346 r.out.result = _winreg_InitiateSystemShutdown(p, r.in.hostname, r.in.message, r.in.timeout, r.in.force_apps, r.in.reboot);
1348 push = ndr_push_init_ctx(mem_ctx);
1350 talloc_free(mem_ctx);
1354 status = ndr_push_winreg_InitiateSystemShutdown(push, NDR_OUT, &r);
1355 if (NT_STATUS_IS_ERR(status)) {
1356 talloc_free(mem_ctx);
1360 blob = ndr_push_blob(push);
1361 if (!prs_init_data_blob(&p->out_data.rdata, &blob, p->mem_ctx)) {
1362 talloc_free(mem_ctx);
1366 talloc_free(mem_ctx);
1371 static BOOL api_winreg_AbortSystemShutdown(pipes_struct *p)
1373 struct ndr_pull *pull;
1374 struct ndr_push *push;
1377 struct winreg_AbortSystemShutdown r;
1378 TALLOC_CTX *mem_ctx = talloc_init("api_winreg_AbortSystemShutdown");
1380 if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
1381 talloc_free(mem_ctx);
1385 pull = ndr_pull_init_blob(&blob, mem_ctx);
1389 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
1390 status = ndr_pull_winreg_AbortSystemShutdown(pull, NDR_IN, &r);
1391 if (NT_STATUS_IS_ERR(status)) {
1392 talloc_free(mem_ctx);
1396 r.out.result = _winreg_AbortSystemShutdown(p, r.in.server);
1398 push = ndr_push_init_ctx(mem_ctx);
1400 talloc_free(mem_ctx);
1404 status = ndr_push_winreg_AbortSystemShutdown(push, NDR_OUT, &r);
1405 if (NT_STATUS_IS_ERR(status)) {
1406 talloc_free(mem_ctx);
1410 blob = ndr_push_blob(push);
1411 if (!prs_init_data_blob(&p->out_data.rdata, &blob, p->mem_ctx)) {
1412 talloc_free(mem_ctx);
1416 talloc_free(mem_ctx);
1421 static BOOL api_winreg_GetVersion(pipes_struct *p)
1423 struct ndr_pull *pull;
1424 struct ndr_push *push;
1427 struct winreg_GetVersion r;
1428 TALLOC_CTX *mem_ctx = talloc_init("api_winreg_GetVersion");
1430 if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
1431 talloc_free(mem_ctx);
1435 pull = ndr_pull_init_blob(&blob, mem_ctx);
1439 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
1440 status = ndr_pull_winreg_GetVersion(pull, NDR_IN, &r);
1441 if (NT_STATUS_IS_ERR(status)) {
1442 talloc_free(mem_ctx);
1446 r.out.version = talloc_size(mem_ctx, sizeof(*r.out.version));
1447 if (r.out.version == NULL) {
1448 talloc_free(mem_ctx);
1452 r.out.result = _winreg_GetVersion(p, r.in.handle, r.out.version);
1454 push = ndr_push_init_ctx(mem_ctx);
1456 talloc_free(mem_ctx);
1460 status = ndr_push_winreg_GetVersion(push, NDR_OUT, &r);
1461 if (NT_STATUS_IS_ERR(status)) {
1462 talloc_free(mem_ctx);
1466 blob = ndr_push_blob(push);
1467 if (!prs_init_data_blob(&p->out_data.rdata, &blob, p->mem_ctx)) {
1468 talloc_free(mem_ctx);
1472 talloc_free(mem_ctx);
1477 static BOOL api_winreg_OpenHKCC(pipes_struct *p)
1479 struct ndr_pull *pull;
1480 struct ndr_push *push;
1483 struct winreg_OpenHKCC r;
1484 TALLOC_CTX *mem_ctx = talloc_init("api_winreg_OpenHKCC");
1486 if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
1487 talloc_free(mem_ctx);
1491 pull = ndr_pull_init_blob(&blob, mem_ctx);
1495 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
1496 status = ndr_pull_winreg_OpenHKCC(pull, NDR_IN, &r);
1497 if (NT_STATUS_IS_ERR(status)) {
1498 talloc_free(mem_ctx);
1502 r.out.handle = talloc_size(mem_ctx, sizeof(*r.out.handle));
1503 if (r.out.handle == NULL) {
1504 talloc_free(mem_ctx);
1508 r.out.result = _winreg_OpenHKCC(p, r.in.system_name, r.in.access_mask, r.out.handle);
1510 push = ndr_push_init_ctx(mem_ctx);
1512 talloc_free(mem_ctx);
1516 status = ndr_push_winreg_OpenHKCC(push, NDR_OUT, &r);
1517 if (NT_STATUS_IS_ERR(status)) {
1518 talloc_free(mem_ctx);
1522 blob = ndr_push_blob(push);
1523 if (!prs_init_data_blob(&p->out_data.rdata, &blob, p->mem_ctx)) {
1524 talloc_free(mem_ctx);
1528 talloc_free(mem_ctx);
1533 static BOOL api_winreg_OpenHKDD(pipes_struct *p)
1535 struct ndr_pull *pull;
1536 struct ndr_push *push;
1539 struct winreg_OpenHKDD r;
1540 TALLOC_CTX *mem_ctx = talloc_init("api_winreg_OpenHKDD");
1542 if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
1543 talloc_free(mem_ctx);
1547 pull = ndr_pull_init_blob(&blob, mem_ctx);
1551 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
1552 status = ndr_pull_winreg_OpenHKDD(pull, NDR_IN, &r);
1553 if (NT_STATUS_IS_ERR(status)) {
1554 talloc_free(mem_ctx);
1558 r.out.handle = talloc_size(mem_ctx, sizeof(*r.out.handle));
1559 if (r.out.handle == NULL) {
1560 talloc_free(mem_ctx);
1564 r.out.result = _winreg_OpenHKDD(p, r.in.system_name, r.in.access_mask, r.out.handle);
1566 push = ndr_push_init_ctx(mem_ctx);
1568 talloc_free(mem_ctx);
1572 status = ndr_push_winreg_OpenHKDD(push, NDR_OUT, &r);
1573 if (NT_STATUS_IS_ERR(status)) {
1574 talloc_free(mem_ctx);
1578 blob = ndr_push_blob(push);
1579 if (!prs_init_data_blob(&p->out_data.rdata, &blob, p->mem_ctx)) {
1580 talloc_free(mem_ctx);
1584 talloc_free(mem_ctx);
1589 static BOOL api_winreg_QueryMultipleValues(pipes_struct *p)
1591 struct ndr_pull *pull;
1592 struct ndr_push *push;
1595 struct winreg_QueryMultipleValues r;
1596 TALLOC_CTX *mem_ctx = talloc_init("api_winreg_QueryMultipleValues");
1598 if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
1599 talloc_free(mem_ctx);
1603 pull = ndr_pull_init_blob(&blob, mem_ctx);
1607 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
1608 status = ndr_pull_winreg_QueryMultipleValues(pull, NDR_IN, &r);
1609 if (NT_STATUS_IS_ERR(status)) {
1610 talloc_free(mem_ctx);
1614 r.out.values = r.in.values;
1615 r.out.buffer = r.in.buffer;
1616 r.out.buffer_size = r.in.buffer_size;
1617 r.out.result = _winreg_QueryMultipleValues(p, r.in.key_handle, r.in.values, r.in.num_values, r.in.buffer, r.in.buffer_size);
1619 push = ndr_push_init_ctx(mem_ctx);
1621 talloc_free(mem_ctx);
1625 status = ndr_push_winreg_QueryMultipleValues(push, NDR_OUT, &r);
1626 if (NT_STATUS_IS_ERR(status)) {
1627 talloc_free(mem_ctx);
1631 blob = ndr_push_blob(push);
1632 if (!prs_init_data_blob(&p->out_data.rdata, &blob, p->mem_ctx)) {
1633 talloc_free(mem_ctx);
1637 talloc_free(mem_ctx);
1642 static BOOL api_winreg_InitiateSystemShutdownEx(pipes_struct *p)
1644 struct ndr_pull *pull;
1645 struct ndr_push *push;
1648 struct winreg_InitiateSystemShutdownEx r;
1649 TALLOC_CTX *mem_ctx = talloc_init("api_winreg_InitiateSystemShutdownEx");
1651 if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
1652 talloc_free(mem_ctx);
1656 pull = ndr_pull_init_blob(&blob, mem_ctx);
1660 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
1661 status = ndr_pull_winreg_InitiateSystemShutdownEx(pull, NDR_IN, &r);
1662 if (NT_STATUS_IS_ERR(status)) {
1663 talloc_free(mem_ctx);
1667 r.out.result = _winreg_InitiateSystemShutdownEx(p, r.in.hostname, r.in.message, r.in.timeout, r.in.force_apps, r.in.reboot, r.in.reason);
1669 push = ndr_push_init_ctx(mem_ctx);
1671 talloc_free(mem_ctx);
1675 status = ndr_push_winreg_InitiateSystemShutdownEx(push, NDR_OUT, &r);
1676 if (NT_STATUS_IS_ERR(status)) {
1677 talloc_free(mem_ctx);
1681 blob = ndr_push_blob(push);
1682 if (!prs_init_data_blob(&p->out_data.rdata, &blob, p->mem_ctx)) {
1683 talloc_free(mem_ctx);
1687 talloc_free(mem_ctx);
1692 static BOOL api_winreg_SaveKeyEx(pipes_struct *p)
1694 struct ndr_pull *pull;
1695 struct ndr_push *push;
1698 struct winreg_SaveKeyEx r;
1699 TALLOC_CTX *mem_ctx = talloc_init("api_winreg_SaveKeyEx");
1701 if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
1702 talloc_free(mem_ctx);
1706 pull = ndr_pull_init_blob(&blob, mem_ctx);
1710 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
1711 status = ndr_pull_winreg_SaveKeyEx(pull, NDR_IN, &r);
1712 if (NT_STATUS_IS_ERR(status)) {
1713 talloc_free(mem_ctx);
1717 r.out.result = _winreg_SaveKeyEx(p);
1719 push = ndr_push_init_ctx(mem_ctx);
1721 talloc_free(mem_ctx);
1725 status = ndr_push_winreg_SaveKeyEx(push, NDR_OUT, &r);
1726 if (NT_STATUS_IS_ERR(status)) {
1727 talloc_free(mem_ctx);
1731 blob = ndr_push_blob(push);
1732 if (!prs_init_data_blob(&p->out_data.rdata, &blob, p->mem_ctx)) {
1733 talloc_free(mem_ctx);
1737 talloc_free(mem_ctx);
1742 static BOOL api_winreg_OpenHKPT(pipes_struct *p)
1744 struct ndr_pull *pull;
1745 struct ndr_push *push;
1748 struct winreg_OpenHKPT r;
1749 TALLOC_CTX *mem_ctx = talloc_init("api_winreg_OpenHKPT");
1751 if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
1752 talloc_free(mem_ctx);
1756 pull = ndr_pull_init_blob(&blob, mem_ctx);
1760 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
1761 status = ndr_pull_winreg_OpenHKPT(pull, NDR_IN, &r);
1762 if (NT_STATUS_IS_ERR(status)) {
1763 talloc_free(mem_ctx);
1767 r.out.handle = talloc_size(mem_ctx, sizeof(*r.out.handle));
1768 if (r.out.handle == NULL) {
1769 talloc_free(mem_ctx);
1773 r.out.result = _winreg_OpenHKPT(p, r.in.system_name, r.in.access_mask, r.out.handle);
1775 push = ndr_push_init_ctx(mem_ctx);
1777 talloc_free(mem_ctx);
1781 status = ndr_push_winreg_OpenHKPT(push, NDR_OUT, &r);
1782 if (NT_STATUS_IS_ERR(status)) {
1783 talloc_free(mem_ctx);
1787 blob = ndr_push_blob(push);
1788 if (!prs_init_data_blob(&p->out_data.rdata, &blob, p->mem_ctx)) {
1789 talloc_free(mem_ctx);
1793 talloc_free(mem_ctx);
1798 static BOOL api_winreg_OpenHKPN(pipes_struct *p)
1800 struct ndr_pull *pull;
1801 struct ndr_push *push;
1804 struct winreg_OpenHKPN r;
1805 TALLOC_CTX *mem_ctx = talloc_init("api_winreg_OpenHKPN");
1807 if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
1808 talloc_free(mem_ctx);
1812 pull = ndr_pull_init_blob(&blob, mem_ctx);
1816 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
1817 status = ndr_pull_winreg_OpenHKPN(pull, NDR_IN, &r);
1818 if (NT_STATUS_IS_ERR(status)) {
1819 talloc_free(mem_ctx);
1823 r.out.handle = talloc_size(mem_ctx, sizeof(*r.out.handle));
1824 if (r.out.handle == NULL) {
1825 talloc_free(mem_ctx);
1829 r.out.result = _winreg_OpenHKPN(p, r.in.system_name, r.in.access_mask, r.out.handle);
1831 push = ndr_push_init_ctx(mem_ctx);
1833 talloc_free(mem_ctx);
1837 status = ndr_push_winreg_OpenHKPN(push, NDR_OUT, &r);
1838 if (NT_STATUS_IS_ERR(status)) {
1839 talloc_free(mem_ctx);
1843 blob = ndr_push_blob(push);
1844 if (!prs_init_data_blob(&p->out_data.rdata, &blob, p->mem_ctx)) {
1845 talloc_free(mem_ctx);
1849 talloc_free(mem_ctx);
1854 static BOOL api_winreg_QueryMultipleValues2(pipes_struct *p)
1856 struct ndr_pull *pull;
1857 struct ndr_push *push;
1860 struct winreg_QueryMultipleValues2 r;
1861 TALLOC_CTX *mem_ctx = talloc_init("api_winreg_QueryMultipleValues2");
1863 if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
1864 talloc_free(mem_ctx);
1868 pull = ndr_pull_init_blob(&blob, mem_ctx);
1872 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
1873 status = ndr_pull_winreg_QueryMultipleValues2(pull, NDR_IN, &r);
1874 if (NT_STATUS_IS_ERR(status)) {
1875 talloc_free(mem_ctx);
1879 r.out.result = _winreg_QueryMultipleValues2(p);
1881 push = ndr_push_init_ctx(mem_ctx);
1883 talloc_free(mem_ctx);
1887 status = ndr_push_winreg_QueryMultipleValues2(push, NDR_OUT, &r);
1888 if (NT_STATUS_IS_ERR(status)) {
1889 talloc_free(mem_ctx);
1893 blob = ndr_push_blob(push);
1894 if (!prs_init_data_blob(&p->out_data.rdata, &blob, p->mem_ctx)) {
1895 talloc_free(mem_ctx);
1899 talloc_free(mem_ctx);
1906 static struct api_struct api_winreg_cmds[] =
1908 {"WINREG_OPENHKCR", DCERPC_WINREG_OPENHKCR, api_winreg_OpenHKCR},
1909 {"WINREG_OPENHKCU", DCERPC_WINREG_OPENHKCU, api_winreg_OpenHKCU},
1910 {"WINREG_OPENHKLM", DCERPC_WINREG_OPENHKLM, api_winreg_OpenHKLM},
1911 {"WINREG_OPENHKPD", DCERPC_WINREG_OPENHKPD, api_winreg_OpenHKPD},
1912 {"WINREG_OPENHKU", DCERPC_WINREG_OPENHKU, api_winreg_OpenHKU},
1913 {"WINREG_CLOSEKEY", DCERPC_WINREG_CLOSEKEY, api_winreg_CloseKey},
1914 {"WINREG_CREATEKEY", DCERPC_WINREG_CREATEKEY, api_winreg_CreateKey},
1915 {"WINREG_DELETEKEY", DCERPC_WINREG_DELETEKEY, api_winreg_DeleteKey},
1916 {"WINREG_DELETEVALUE", DCERPC_WINREG_DELETEVALUE, api_winreg_DeleteValue},
1917 {"WINREG_ENUMKEY", DCERPC_WINREG_ENUMKEY, api_winreg_EnumKey},
1918 {"WINREG_ENUMVALUE", DCERPC_WINREG_ENUMVALUE, api_winreg_EnumValue},
1919 {"WINREG_FLUSHKEY", DCERPC_WINREG_FLUSHKEY, api_winreg_FlushKey},
1920 {"WINREG_GETKEYSECURITY", DCERPC_WINREG_GETKEYSECURITY, api_winreg_GetKeySecurity},
1921 {"WINREG_LOADKEY", DCERPC_WINREG_LOADKEY, api_winreg_LoadKey},
1922 {"WINREG_NOTIFYCHANGEKEYVALUE", DCERPC_WINREG_NOTIFYCHANGEKEYVALUE, api_winreg_NotifyChangeKeyValue},
1923 {"WINREG_OPENKEY", DCERPC_WINREG_OPENKEY, api_winreg_OpenKey},
1924 {"WINREG_QUERYINFOKEY", DCERPC_WINREG_QUERYINFOKEY, api_winreg_QueryInfoKey},
1925 {"WINREG_QUERYVALUE", DCERPC_WINREG_QUERYVALUE, api_winreg_QueryValue},
1926 {"WINREG_REPLACEKEY", DCERPC_WINREG_REPLACEKEY, api_winreg_ReplaceKey},
1927 {"WINREG_RESTOREKEY", DCERPC_WINREG_RESTOREKEY, api_winreg_RestoreKey},
1928 {"WINREG_SAVEKEY", DCERPC_WINREG_SAVEKEY, api_winreg_SaveKey},
1929 {"WINREG_SETKEYSECURITY", DCERPC_WINREG_SETKEYSECURITY, api_winreg_SetKeySecurity},
1930 {"WINREG_SETVALUE", DCERPC_WINREG_SETVALUE, api_winreg_SetValue},
1931 {"WINREG_UNLOADKEY", DCERPC_WINREG_UNLOADKEY, api_winreg_UnLoadKey},
1932 {"WINREG_INITIATESYSTEMSHUTDOWN", DCERPC_WINREG_INITIATESYSTEMSHUTDOWN, api_winreg_InitiateSystemShutdown},
1933 {"WINREG_ABORTSYSTEMSHUTDOWN", DCERPC_WINREG_ABORTSYSTEMSHUTDOWN, api_winreg_AbortSystemShutdown},
1934 {"WINREG_GETVERSION", DCERPC_WINREG_GETVERSION, api_winreg_GetVersion},
1935 {"WINREG_OPENHKCC", DCERPC_WINREG_OPENHKCC, api_winreg_OpenHKCC},
1936 {"WINREG_OPENHKDD", DCERPC_WINREG_OPENHKDD, api_winreg_OpenHKDD},
1937 {"WINREG_QUERYMULTIPLEVALUES", DCERPC_WINREG_QUERYMULTIPLEVALUES, api_winreg_QueryMultipleValues},
1938 {"WINREG_INITIATESYSTEMSHUTDOWNEX", DCERPC_WINREG_INITIATESYSTEMSHUTDOWNEX, api_winreg_InitiateSystemShutdownEx},
1939 {"WINREG_SAVEKEYEX", DCERPC_WINREG_SAVEKEYEX, api_winreg_SaveKeyEx},
1940 {"WINREG_OPENHKPT", DCERPC_WINREG_OPENHKPT, api_winreg_OpenHKPT},
1941 {"WINREG_OPENHKPN", DCERPC_WINREG_OPENHKPN, api_winreg_OpenHKPN},
1942 {"WINREG_QUERYMULTIPLEVALUES2", DCERPC_WINREG_QUERYMULTIPLEVALUES2, api_winreg_QueryMultipleValues2},
1945 void winreg_get_pipe_fns(struct api_struct **fns, int *n_fns)
1947 *fns = api_winreg_cmds;
1948 *n_fns = sizeof(api_winreg_cmds) / sizeof(struct api_struct);
1951 NTSTATUS rpc_winreg_init(void)
1953 return rpc_pipe_register_commands(SMB_RPC_INTERFACE_VERSION, "winreg", "winreg", api_winreg_cmds, sizeof(api_winreg_cmds) / sizeof(struct api_struct));