2 * Unix SMB/Netbios implementation.
4 * RPC Pipe client / server routines
5 * Copyright (C) Andrew Tridgell 1992-1997,
6 * Copyright (C) Luke Kenneth Casson Leighton 1996-1997,
7 * Copyright (C) Paul Ashton 1997.
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software
21 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
27 extern int DEBUGLEVEL;
30 /*******************************************************************
32 ********************************************************************/
33 void make_reg_q_open_hklm(REG_Q_OPEN_HKLM *q_o,
34 uint16 unknown_0, uint32 level)
37 q_o->unknown_0 = unknown_0;
38 q_o->unknown_1 = 0x0; /* random - changes */
42 /*******************************************************************
43 reads or writes a structure.
44 ********************************************************************/
45 void reg_io_q_open_hklm(char *desc, REG_Q_OPEN_HKLM *r_q, prs_struct *ps, int depth)
47 if (r_q == NULL) return;
49 prs_debug(ps, depth, desc, "reg_io_q_open_hklm");
54 prs_uint32("ptr ", ps, depth, &(r_q->ptr ));
57 prs_uint16("unknown_0", ps, depth, &(r_q->unknown_0));
58 prs_uint16("unknown_1", ps, depth, &(r_q->unknown_1));
59 prs_uint32("level ", ps, depth, &(r_q->level ));
64 /*******************************************************************
65 reads or writes a structure.
66 ********************************************************************/
67 void reg_io_r_open_hklm(char *desc, REG_R_OPEN_HKLM *r_r, prs_struct *ps, int depth)
69 if (r_r == NULL) return;
71 prs_debug(ps, depth, desc, "reg_io_r_open_hklm");
76 smb_io_pol_hnd("", &(r_r->pol), ps, depth);
78 prs_uint32("status", ps, depth, &(r_r->status));
82 /*******************************************************************
84 ********************************************************************/
85 void make_reg_q_flush_key(REG_Q_FLUSH_KEY *q_u, POLICY_HND *pol)
87 memcpy(&(q_u->pol), pol, sizeof(q_u->pol));
90 /*******************************************************************
91 reads or writes a structure.
92 ********************************************************************/
93 void reg_io_q_flush_key(char *desc, REG_Q_FLUSH_KEY *r_q, prs_struct *ps, int depth)
95 if (r_q == NULL) return;
97 prs_debug(ps, depth, desc, "reg_io_q_flush_key");
102 smb_io_pol_hnd("", &(r_q->pol), ps, depth);
106 /*******************************************************************
107 reads or writes a structure.
108 ********************************************************************/
109 void reg_io_r_flush_key(char *desc, REG_R_FLUSH_KEY *r_r, prs_struct *ps, int depth)
111 if (r_r == NULL) return;
113 prs_debug(ps, depth, desc, "reg_io_r_flush_key");
118 prs_uint32("status", ps, depth, &(r_r->status));
123 /*******************************************************************
125 ********************************************************************/
126 void make_reg_q_create_key(REG_Q_CREATE_KEY *q_c, POLICY_HND *hnd,
127 char *name, char *class,
128 SEC_INFO *sam_access)
130 int len_name = name != NULL ? strlen(name ) + 1: 0;
131 int len_class = class != NULL ? strlen(class) + 1: 0;
133 static unsigned char data[] =
135 0x01, 0x00, 0x00, 0x80,
136 0x00, 0x00, 0x00, 0x00,
137 0x00, 0x00, 0x00, 0x00,
138 0x00, 0x00, 0x00, 0x00,
139 0x00, 0x00, 0x00, 0x00
144 memcpy(&(q_c->pnt_pol), hnd, sizeof(q_c->pnt_pol));
146 make_uni_hdr(&(q_c->hdr_name), len_name, len_name, 1);
147 make_unistr2(&(q_c->uni_name), name, len_name);
149 make_uni_hdr(&(q_c->hdr_class), len_class, len_class, 1);
150 make_unistr2(&(q_c->uni_class), class, len_class);
152 q_c->reserved = 0x00000000;
153 memcpy(&(q_c->sam_access), sam_access, sizeof(q_c->sam_access));
156 q_c->unknown_0 = 0x0000000C;
159 q_c->sec_len1 = 0x14;
160 q_c->sec_len2 = 0x14;
162 q_c->sec_len4 = 0x14;
164 q_c->sec_len6 = 0x14;
166 memcpy(&q_c->buf_unk, data, sizeof(q_c->buf_unk));
168 q_c->unknown_2 = 0x00000000;
171 /*******************************************************************
172 reads or writes a structure.
173 ********************************************************************/
174 void reg_io_q_create_key(char *desc, REG_Q_CREATE_KEY *r_q, prs_struct *ps, int depth)
176 if (r_q == NULL) return;
178 prs_debug(ps, depth, desc, "reg_io_q_create_key");
183 smb_io_pol_hnd("", &(r_q->pnt_pol), ps, depth);
185 smb_io_unihdr ("", &(r_q->hdr_name), ps, depth);
186 smb_io_unistr2("", &(r_q->uni_name), r_q->hdr_name.buffer, ps, depth);
189 smb_io_unihdr ("", &(r_q->hdr_class), ps, depth);
190 smb_io_unistr2("", &(r_q->uni_class), r_q->hdr_class.buffer, ps, depth);
193 prs_uint32("reserved", ps, depth, &(r_q->reserved));
194 sec_io_info("sam_access", &r_q->sam_access, ps, depth);
196 prs_uint32("ptr1", ps, depth, &(r_q->ptr1));
199 prs_uint32("unknown_0", ps, depth, &(r_q->unknown_0));
202 prs_uint32("ptr2", ps, depth, &(r_q->ptr2));
205 prs_uint32("sec_len1", ps, depth, &(r_q->sec_len1));
206 prs_uint32("sec_len2", ps, depth, &(r_q->sec_len2));
207 prs_uint32("sec_len3", ps, depth, &(r_q->sec_len3));
208 prs_uint32("sec_len4", ps, depth, &(r_q->sec_len4));
209 prs_uint32("sec_len5", ps, depth, &(r_q->sec_len5));
210 prs_uint32("sec_len6", ps, depth, &(r_q->sec_len6));
211 prs_uint8s(False, "buf_unk", ps, depth, r_q->buf_unk, sizeof(r_q->buf_unk));
214 prs_uint32("unknown_2", ps, depth, &(r_q->unknown_2));
221 /*******************************************************************
222 reads or writes a structure.
223 ********************************************************************/
224 void reg_io_r_create_key(char *desc, REG_R_CREATE_KEY *r_r, prs_struct *ps, int depth)
226 if (r_r == NULL) return;
228 prs_debug(ps, depth, desc, "reg_io_r_create_key");
233 smb_io_pol_hnd("", &(r_r->key_pol), ps, depth);
234 prs_uint32("unknown", ps, depth, &(r_r->unknown));
236 prs_uint32("status", ps, depth, &(r_r->status));
240 /*******************************************************************
242 ********************************************************************/
243 void make_reg_q_delete_key(REG_Q_DELETE_KEY *q_c, POLICY_HND *hnd,
246 int len_name = name != NULL ? strlen(name ) + 1: 0;
249 memcpy(&(q_c->pnt_pol), hnd, sizeof(q_c->pnt_pol));
251 make_uni_hdr(&(q_c->hdr_name), len_name, len_name, 1);
252 make_unistr2(&(q_c->uni_name), name, len_name);
255 /*******************************************************************
256 reads or writes a structure.
257 ********************************************************************/
258 void reg_io_q_delete_key(char *desc, REG_Q_DELETE_KEY *r_q, prs_struct *ps, int depth)
260 if (r_q == NULL) return;
262 prs_debug(ps, depth, desc, "reg_io_q_delete_key");
267 smb_io_pol_hnd("", &(r_q->pnt_pol), ps, depth);
269 smb_io_unihdr ("", &(r_q->hdr_name), ps, depth);
270 smb_io_unistr2("", &(r_q->uni_name), r_q->hdr_name.buffer, ps, depth);
275 /*******************************************************************
276 reads or writes a structure.
277 ********************************************************************/
278 void reg_io_r_delete_key(char *desc, REG_R_DELETE_KEY *r_r, prs_struct *ps, int depth)
280 if (r_r == NULL) return;
282 prs_debug(ps, depth, desc, "reg_io_r_delete_key");
287 prs_uint32("status", ps, depth, &(r_r->status));
291 /*******************************************************************
293 ********************************************************************/
294 void make_reg_q_query_key(REG_Q_QUERY_KEY *q_o, POLICY_HND *hnd,
295 uint32 max_class_len)
299 memcpy(&(q_o->pol), hnd, sizeof(q_o->pol));
300 make_uni_hdr(&q_o->hdr_class, max_class_len, 0, max_class_len > 0 ? 1 : 0);
301 q_o->uni_class.uni_max_len = max_class_len;
304 /*******************************************************************
305 reads or writes a structure.
306 ********************************************************************/
307 void reg_io_q_query_key(char *desc, REG_Q_QUERY_KEY *r_q, prs_struct *ps, int depth)
309 if (r_q == NULL) return;
311 prs_debug(ps, depth, desc, "reg_io_q_query_key");
316 smb_io_pol_hnd("", &(r_q->pol), ps, depth);
317 smb_io_unihdr ("", &(r_q->hdr_class), ps, depth);
318 smb_io_unistr2("", &(r_q->uni_class), r_q->hdr_class.buffer, ps, depth);
324 /*******************************************************************
325 reads or writes a structure.
326 ********************************************************************/
327 void reg_io_r_query_key(char *desc, REG_R_QUERY_KEY *r_r, prs_struct *ps, int depth)
329 if (r_r == NULL) return;
331 prs_debug(ps, depth, desc, "reg_io_r_query_key");
336 smb_io_unihdr ("", &(r_r->hdr_class), ps, depth);
337 smb_io_unistr2("", &(r_r->uni_class), r_r->hdr_class.buffer, ps, depth);
341 prs_uint32("num_subkeys ", ps, depth, &(r_r->num_subkeys ));
342 prs_uint32("max_subkeylen ", ps, depth, &(r_r->max_subkeylen ));
343 prs_uint32("mak_subkeysize", ps, depth, &(r_r->max_subkeysize));
344 prs_uint32("num_values ", ps, depth, &(r_r->num_values ));
345 prs_uint32("max_valnamelen", ps, depth, &(r_r->max_valnamelen));
346 prs_uint32("max_valbufsize", ps, depth, &(r_r->max_valbufsize));
347 prs_uint32("sec_desc ", ps, depth, &(r_r->sec_desc ));
348 smb_io_time("mod_time ", &(r_r->mod_time), ps, depth);
350 prs_uint32("status", ps, depth, &(r_r->status));
354 /*******************************************************************
356 ********************************************************************/
357 void make_reg_q_unk_1a(REG_Q_UNK_1A *q_o, POLICY_HND *hnd)
359 memcpy(&(q_o->pol), hnd, sizeof(q_o->pol));
362 /*******************************************************************
363 reads or writes a structure.
364 ********************************************************************/
365 void reg_io_q_unk_1a(char *desc, REG_Q_UNK_1A *r_q, prs_struct *ps, int depth)
367 if (r_q == NULL) return;
369 prs_debug(ps, depth, desc, "reg_io_q_unk_1a");
374 smb_io_pol_hnd("", &(r_q->pol), ps, depth);
378 /*******************************************************************
379 reads or writes a structure.
380 ********************************************************************/
381 void reg_io_r_unk_1a(char *desc, REG_R_UNK_1A *r_r, prs_struct *ps, int depth)
383 if (r_r == NULL) return;
385 prs_debug(ps, depth, desc, "reg_io_r_unk_1a");
390 prs_uint32("unknown", ps, depth, &(r_r->unknown));
391 prs_uint32("status" , ps, depth, &(r_r->status ));
395 /*******************************************************************
397 ********************************************************************/
398 void make_reg_q_open_hku(REG_Q_OPEN_HKU *q_o,
399 uint16 unknown_0, uint32 level)
402 q_o->unknown_0 = unknown_0;
403 q_o->unknown_1 = 0x0; /* random - changes */
407 /*******************************************************************
408 reads or writes a structure.
409 ********************************************************************/
410 void reg_io_q_open_hku(char *desc, REG_Q_OPEN_HKU *r_q, prs_struct *ps, int depth)
412 if (r_q == NULL) return;
414 prs_debug(ps, depth, desc, "reg_io_q_open_hku");
419 prs_uint32("ptr ", ps, depth, &(r_q->ptr ));
422 prs_uint16("unknown_0", ps, depth, &(r_q->unknown_0));
423 prs_uint16("unknown_1", ps, depth, &(r_q->unknown_1));
424 prs_uint32("level ", ps, depth, &(r_q->level ));
429 /*******************************************************************
430 reads or writes a structure.
431 ********************************************************************/
432 void reg_io_r_open_hku(char *desc, REG_R_OPEN_HKU *r_r, prs_struct *ps, int depth)
434 if (r_r == NULL) return;
436 prs_debug(ps, depth, desc, "reg_io_r_open_hku");
441 smb_io_pol_hnd("", &(r_r->pol), ps, depth);
443 prs_uint32("status", ps, depth, &(r_r->status));
447 /*******************************************************************
448 makes an REG_Q_CLOSE structure.
449 ********************************************************************/
450 void make_reg_q_close(REG_Q_CLOSE *q_c, POLICY_HND *hnd)
452 if (q_c == NULL || hnd == NULL) return;
454 DEBUG(5,("make_reg_q_close\n"));
456 memcpy(&(q_c->pol), hnd, sizeof(q_c->pol));
459 /*******************************************************************
460 reads or writes a structure.
461 ********************************************************************/
462 void reg_io_q_close(char *desc, REG_Q_CLOSE *q_u, prs_struct *ps, int depth)
464 if (q_u == NULL) return;
466 prs_debug(ps, depth, desc, "reg_io_q_unknown_1");
471 smb_io_pol_hnd("", &(q_u->pol), ps, depth);
475 /*******************************************************************
476 reads or writes a structure.
477 ********************************************************************/
478 void reg_io_r_close(char *desc, REG_R_CLOSE *r_u, prs_struct *ps, int depth)
480 if (r_u == NULL) return;
482 prs_debug(ps, depth, desc, "reg_io_r_unknown_1");
487 smb_io_pol_hnd("", &(r_u->pol), ps, depth);
490 prs_uint32("status", ps, depth, &(r_u->status));
493 /*******************************************************************
495 ********************************************************************/
496 void make_reg_q_get_key_sec(REG_Q_GET_KEY_SEC *q_i, POLICY_HND *pol,
497 uint32 buf_len, SEC_DESC_BUF *sec_buf)
499 if (q_i == NULL) return;
501 memcpy(&(q_i->pol), pol, sizeof(q_i->pol));
508 make_buf_hdr(&(q_i->hdr_sec), buf_len, 0);
509 make_sec_desc_buf(q_i->data, buf_len, 0);
512 /*******************************************************************
513 reads or writes a structure.
514 ********************************************************************/
515 void reg_io_q_get_key_sec(char *desc, REG_Q_GET_KEY_SEC *r_q, prs_struct *ps, int depth)
517 if (r_q == NULL) return;
519 prs_debug(ps, depth, desc, "reg_io_q_get_key_sec");
524 smb_io_pol_hnd("", &(r_q->pol), ps, depth);
526 prs_uint32("unknown", ps, depth, &(r_q->unknown));
527 prs_uint32("ptr ", ps, depth, &(r_q->ptr ));
531 smb_io_hdrbuf ("hdr_sec", &(r_q->hdr_sec), ps, depth);
532 sec_io_desc_buf("data ", r_q->data , ps, depth);
538 /*******************************************************************
540 ********************************************************************/
541 void make_reg_r_get_key_sec(REG_R_GET_KEY_SEC *r_i, POLICY_HND *pol,
542 uint32 buf_len, uint8 *buf,
545 if (r_i == NULL) return;
548 make_buf_hdr(&(r_i->hdr_sec), buf_len, buf_len);
549 make_sec_desc_buf(r_i->data, buf_len, 1);
551 r_i->status = status; /* 0x0000 0000 or 0x0000 007a */
554 /*******************************************************************
555 reads or writes a structure.
556 ********************************************************************/
557 void reg_io_r_get_key_sec(char *desc, REG_R_GET_KEY_SEC *r_q, prs_struct *ps, int depth)
559 if (r_q == NULL) return;
561 prs_debug(ps, depth, desc, "reg_io_r_get_key_sec");
566 prs_uint32("ptr ", ps, depth, &(r_q->ptr ));
570 smb_io_hdrbuf("", &(r_q->hdr_sec), ps, depth);
571 sec_io_desc_buf("", r_q->data, ps, depth);
576 prs_uint32("status", ps, depth, &(r_q->status));
580 /*******************************************************************
582 ********************************************************************/
583 void make_reg_q_info(REG_Q_INFO *q_i, POLICY_HND *pol, char *product_type,
584 time_t unix_time, uint8 major, uint8 minor)
586 int len_type = strlen(product_type);
588 if (q_i == NULL) return;
590 memcpy(&(q_i->pol), pol, sizeof(q_i->pol));
592 make_uni_hdr(&(q_i->hdr_type), len_type, len_type, 1);
593 make_unistr2(&(q_i->uni_type), product_type, len_type);
596 unix_to_nt_time(&(q_i->time), unix_time);
597 q_i->major_version1 = major;
598 q_i->minor_version1 = minor;
599 memset(q_i->pad1, 0, sizeof(q_i->pad1));
602 q_i->major_version2 = major;
603 q_i->minor_version2 = minor;
604 memset(q_i->pad2, 0, sizeof(q_i->pad2));
607 q_i->unknown = 0x00000000;
610 /*******************************************************************
611 reads or writes a structure.
612 ********************************************************************/
613 void reg_io_q_info(char *desc, REG_Q_INFO *r_q, prs_struct *ps, int depth)
615 if (r_q == NULL) return;
617 prs_debug(ps, depth, desc, "reg_io_q_info");
622 smb_io_pol_hnd("", &(r_q->pol), ps, depth);
623 smb_io_unihdr ("", &(r_q->hdr_type), ps, depth);
624 smb_io_unistr2("", &(r_q->uni_type), r_q->hdr_type.buffer, ps, depth);
628 prs_uint32("ptr1", ps, depth, &(r_q->ptr1));
632 smb_io_time("", &(r_q->time), ps, depth);
633 prs_uint8 ("major_version1", ps, depth, &(r_q->major_version1));
634 prs_uint8 ("minor_version1", ps, depth, &(r_q->minor_version1));
635 prs_uint8s(False, "pad1", ps, depth, r_q->pad1, sizeof(r_q->pad1));
638 prs_uint32("ptr2", ps, depth, &(r_q->ptr2));
642 prs_uint8 ("major_version2", ps, depth, &(r_q->major_version2));
643 prs_uint8 ("minor_version2", ps, depth, &(r_q->minor_version2));
644 prs_uint8s(False, "pad2", ps, depth, r_q->pad2, sizeof(r_q->pad2));
647 prs_uint32("ptr3", ps, depth, &(r_q->ptr3));
651 prs_uint32("unknown", ps, depth, &(r_q->unknown));
656 /*******************************************************************
658 ********************************************************************/
659 void make_reg_r_info(REG_R_INFO *r_r,
660 uint32 level, char *os_type,
661 uint32 unknown_0, uint32 unknown_1,
665 int len = struni2((uint16*)buf, os_type);
671 make_buffer2(&(r_r->uni_type), buf, len*2);
674 r_r->unknown_0 = unknown_0;
677 r_r->unknown_1 = unknown_1;
679 r_r->status = status;
682 /*******************************************************************
683 reads or writes a structure.
684 ********************************************************************/
685 void reg_io_r_info(char *desc, REG_R_INFO *r_r, prs_struct *ps, int depth)
687 if (r_r == NULL) return;
689 prs_debug(ps, depth, desc, "reg_io_r_info");
694 prs_uint32("ptr1", ps, depth, &(r_r->ptr1));
698 prs_uint32("level", ps, depth, &(r_r->level));
699 prs_uint32("ptr_type", ps, depth, &(r_r->ptr_type));
701 smb_io_buffer2("uni_type", &(r_r->uni_type), r_r->ptr_type, ps, depth);
703 prs_uint32("ptr2", ps, depth, &(r_r->ptr2));
707 prs_uint32("unknown_0", ps, depth, &(r_r->unknown_0));
710 prs_uint32("ptr3", ps, depth, &(r_r->ptr3));
714 prs_uint32("unknown_1", ps, depth, &(r_r->unknown_1));
718 prs_uint32("status", ps, depth, &(r_r->status));
721 /*******************************************************************
723 ********************************************************************/
724 void make_reg_q_enum_val(REG_Q_ENUM_VALUE *q_i, POLICY_HND *pol,
725 uint32 val_idx, uint32 max_val_len,
728 if (q_i == NULL) return;
732 memcpy(&(q_i->pol), pol, sizeof(q_i->pol));
734 q_i->val_index = val_idx;
735 make_uni_hdr(&q_i->hdr_name, max_val_len, 0, 1);
736 q_i->uni_name.uni_max_len = max_val_len;
742 q_i->buf_value.buf_max_len = max_buf_len;
745 q_i->len_value1 = max_buf_len;
751 /*******************************************************************
752 reads or writes a structure.
753 ********************************************************************/
754 void reg_io_q_enum_val(char *desc, REG_Q_ENUM_VALUE *q_q, prs_struct *ps, int depth)
756 if (q_q == NULL) return;
758 prs_debug(ps, depth, desc, "reg_io_q_enum_val");
763 smb_io_pol_hnd("", &(q_q->pol), ps, depth);
765 prs_uint32("val_index", ps, depth, &(q_q->val_index));
766 smb_io_unihdr ("hdr_name", &(q_q->hdr_name), ps, depth);
767 smb_io_unistr2("uni_name", &(q_q->uni_name), q_q->hdr_name.buffer, ps, depth);
770 prs_uint32("ptr_type", ps, depth, &(q_q->ptr_type));
772 if (q_q->ptr_type != 0)
774 prs_uint32("type", ps, depth, &(q_q->type));
777 prs_uint32("ptr_value", ps, depth, &(q_q->ptr_value));
778 smb_io_buffer2("buf_value", &(q_q->buf_value), q_q->ptr_value, ps, depth);
781 prs_uint32("ptr1", ps, depth, &(q_q->ptr1));
784 prs_uint32("len_value1", ps, depth, &(q_q->len_value1));
786 prs_uint32("ptr2", ps, depth, &(q_q->ptr2));
789 prs_uint32("len_value2", ps, depth, &(q_q->len_value2));
793 /*******************************************************************
794 reads or writes a structure.
795 ********************************************************************/
796 void reg_io_r_enum_val(char *desc, REG_R_ENUM_VALUE *r_q, prs_struct *ps, int depth)
798 if (r_q == NULL) return;
800 prs_debug(ps, depth, desc, "reg_io_r_enum_val");
805 smb_io_unihdr ("hdr_name", &(r_q->hdr_name), ps, depth);
806 smb_io_unistr2("uni_name", &(r_q->uni_name), r_q->hdr_name.buffer, ps, depth);
809 prs_uint32("ptr_type", ps, depth, &(r_q->ptr_type));
811 if (r_q->ptr_type != 0)
813 prs_uint32("type", ps, depth, &(r_q->type));
816 prs_uint32("ptr_value", ps, depth, &(r_q->ptr_value));
817 smb_io_buffer2("buf_value", r_q->buf_value, r_q->ptr_value, ps, depth);
820 prs_uint32("ptr1", ps, depth, &(r_q->ptr1));
823 prs_uint32("len_value1", ps, depth, &(r_q->len_value1));
826 prs_uint32("ptr2", ps, depth, &(r_q->ptr2));
829 prs_uint32("len_value2", ps, depth, &(r_q->len_value2));
832 prs_uint32("status", ps, depth, &(r_q->status));
835 /*******************************************************************
837 ********************************************************************/
838 void make_reg_q_create_val(REG_Q_CREATE_VALUE *q_i, POLICY_HND *pol,
839 char *val_name, uint32 type,
842 int val_len = strlen(val_name) + 1;
844 if (q_i == NULL) return;
848 memcpy(&(q_i->pol), pol, sizeof(q_i->pol));
850 make_uni_hdr(&q_i->hdr_name, val_len, val_len, 1);
851 make_unistr2(&(q_i->uni_name), val_name, val_len);
854 q_i->buf_value = val;
857 /*******************************************************************
858 reads or writes a structure.
859 ********************************************************************/
860 void reg_io_q_create_val(char *desc, REG_Q_CREATE_VALUE *q_q, prs_struct *ps, int depth)
862 if (q_q == NULL) return;
864 prs_debug(ps, depth, desc, "reg_io_q_create_val");
869 smb_io_pol_hnd("", &(q_q->pol), ps, depth);
871 smb_io_unihdr ("hdr_name", &(q_q->hdr_name), ps, depth);
872 smb_io_unistr2("uni_name", &(q_q->uni_name), q_q->hdr_name.buffer, ps, depth);
875 prs_uint32("type", ps, depth, &(q_q->type));
876 smb_io_buffer3("buf_value", q_q->buf_value, ps, depth);
880 /*******************************************************************
881 reads or writes a structure.
882 ********************************************************************/
883 void reg_io_r_create_val(char *desc, REG_R_CREATE_VALUE *r_q, prs_struct *ps, int depth)
885 if (r_q == NULL) return;
887 prs_debug(ps, depth, desc, "reg_io_r_create_val");
892 prs_uint32("status", ps, depth, &(r_q->status));
895 /*******************************************************************
897 ********************************************************************/
898 void make_reg_q_enum_key(REG_Q_ENUM_KEY *q_i, POLICY_HND *pol, uint32 key_idx)
900 if (q_i == NULL) return;
902 memcpy(&(q_i->pol), pol, sizeof(q_i->pol));
904 q_i->key_index = key_idx;
905 q_i->key_name_len = 0;
906 q_i->unknown_1 = 0x0414;
909 q_i->unknown_2 = 0x0000020A;
910 memset(q_i->pad1, 0, sizeof(q_i->pad1));
913 memset(q_i->pad2, 0, sizeof(q_i->pad2));
916 unix_to_nt_time(&q_i->time, 0); /* current time? */
919 /*******************************************************************
920 reads or writes a structure.
921 ********************************************************************/
922 void reg_io_q_enum_key(char *desc, REG_Q_ENUM_KEY *q_q, prs_struct *ps, int depth)
924 if (q_q == NULL) return;
926 prs_debug(ps, depth, desc, "reg_io_q_enum_key");
931 smb_io_pol_hnd("", &(q_q->pol), ps, depth);
933 prs_uint32("key_index", ps, depth, &(q_q->key_index));
934 prs_uint16("key_name_len", ps, depth, &(q_q->key_name_len));
935 prs_uint16("unknown_1", ps, depth, &(q_q->unknown_1));
937 prs_uint32("ptr1", ps, depth, &(q_q->ptr1));
941 prs_uint32("unknown_2", ps, depth, &(q_q->unknown_2));
942 prs_uint8s(False, "pad1", ps, depth, q_q->pad1, sizeof(q_q->pad1));
945 prs_uint32("ptr2", ps, depth, &(q_q->ptr2));
949 prs_uint8s(False, "pad2", ps, depth, q_q->pad2, sizeof(q_q->pad2));
952 prs_uint32("ptr3", ps, depth, &(q_q->ptr3));
956 smb_io_time("", &(q_q->time), ps, depth);
960 /*******************************************************************
961 reads or writes a structure.
962 ********************************************************************/
963 void reg_io_r_enum_key(char *desc, REG_R_ENUM_KEY *r_q, prs_struct *ps, int depth)
965 if (r_q == NULL) return;
967 prs_debug(ps, depth, desc, "reg_io_r_enum_key");
972 prs_uint16("key_name_len", ps, depth, &(r_q->key_name_len));
973 prs_uint16("unknown_1", ps, depth, &(r_q->unknown_1));
975 prs_uint32("ptr1", ps, depth, &(r_q->ptr1));
979 prs_uint32("unknown_2", ps, depth, &(r_q->unknown_2));
980 prs_uint32("unknown_3", ps, depth, &(r_q->unknown_3));
981 smb_io_unistr3("key_name", &(r_q->key_name), ps, depth);
985 prs_uint32("ptr2", ps, depth, &(r_q->ptr2));
989 prs_uint8s(False, "pad2", ps, depth, r_q->pad2, sizeof(r_q->pad2));
992 prs_uint32("ptr3", ps, depth, &(r_q->ptr3));
996 smb_io_time("", &(r_q->time), ps, depth);
999 prs_uint32("status", ps, depth, &(r_q->status));
1003 /*******************************************************************
1005 ********************************************************************/
1006 void make_reg_q_open_entry(REG_Q_OPEN_ENTRY *r_q, POLICY_HND *pol,
1007 char *key_name, uint32 unk)
1009 int len_name = strlen(key_name)+1;
1011 if (r_q == NULL) return;
1013 memcpy(&(r_q->pol), pol, sizeof(r_q->pol));
1015 make_uni_hdr(&(r_q->hdr_name), len_name, len_name, 1);
1016 make_unistr2(&(r_q->uni_name), key_name, len_name);
1018 r_q->unknown_0 = 0x00000000;
1019 r_q->unknown_1 = unk;
1022 /*******************************************************************
1023 reads or writes a structure.
1024 ********************************************************************/
1025 void reg_io_q_open_entry(char *desc, REG_Q_OPEN_ENTRY *r_q, prs_struct *ps, int depth)
1027 if (r_q == NULL) return;
1029 prs_debug(ps, depth, desc, "reg_io_q_entry");
1034 smb_io_pol_hnd("", &(r_q->pol), ps, depth);
1035 smb_io_unihdr ("", &(r_q->hdr_name), ps, depth);
1036 smb_io_unistr2("", &(r_q->uni_name), r_q->hdr_name.buffer, ps, depth);
1040 prs_uint32("unknown_0", ps, depth, &(r_q->unknown_0));
1041 prs_uint32("unknown_1", ps, depth, &(r_q->unknown_1));
1045 /*******************************************************************
1046 creates a structure.
1047 ********************************************************************/
1048 void make_reg_r_open_entry(REG_R_OPEN_ENTRY *r_r,
1049 POLICY_HND *pol, uint32 status)
1051 if (r_r == NULL) return;
1053 memcpy(&(r_r->pol), pol, sizeof(r_r->pol));
1054 r_r->status = status;
1057 /*******************************************************************
1058 reads or writes a structure.
1059 ********************************************************************/
1060 void reg_io_r_open_entry(char *desc, REG_R_OPEN_ENTRY *r_r, prs_struct *ps, int depth)
1062 if (r_r == NULL) return;
1064 prs_debug(ps, depth, desc, "reg_io_r_open_entry");
1069 smb_io_pol_hnd("", &(r_r->pol), ps, depth);
1071 prs_uint32("status", ps, depth, &(r_r->status));