+/*******************************************************************
+reads or writes an LSA_POL_HND structure.
+********************************************************************/
+char* smb_io_pol_hnd(BOOL io, LSA_POL_HND *pol, char *q, char *base, int align)
+{
+ if (pol == NULL) return NULL;
+
+ q = align_offset(q, base, align);
+
+ RW_PCVAL(io, q, pol->data, POL_HND_SIZE); q += POL_HND_SIZE;
+
+ return q;
+}
+
+/*******************************************************************
+reads or writes a dom query structure.
+********************************************************************/
+char* smb_io_dom_query_3(BOOL io, DOM_QUERY_3 *d_q, char *q, char *base, int align)
+{
+ return smb_io_dom_query(io, d_q, q, base, align);
+}
+
+/*******************************************************************
+reads or writes a dom query structure.
+********************************************************************/
+char* smb_io_dom_query_5(BOOL io, DOM_QUERY_3 *d_q, char *q, char *base, int align)
+{
+ return smb_io_dom_query(io, d_q, q, base, align);
+}
+
+/*******************************************************************
+reads or writes a dom query structure.
+********************************************************************/
+char* smb_io_dom_query(BOOL io, DOM_QUERY *d_q, char *q, char *base, int align)
+{
+ if (d_q == NULL) return NULL;
+
+ q = align_offset(q, base, align);
+
+
+ RW_SVAL(io, q, d_q->uni_dom_max_len, 0); q += 2; /* domain name string length * 2 */
+ RW_SVAL(io, q, d_q->padding , 0); q += 2; /* 2 padding bytes */
+ RW_SVAL(io, q, d_q->uni_dom_str_len, 0); q += 2; /* domain name string length * 2 */
+
+ RW_IVAL(io, q, d_q->buffer_dom_name, 0); q += 4; /* undocumented domain name string buffer pointer */
+ RW_IVAL(io, q, d_q->buffer_dom_sid , 0); q += 4; /* undocumented domain SID string buffer pointer */
+
+ if (d_q->buffer_dom_name != 0)
+ {
+ q = smb_io_unistr2(io, &(d_q->uni_domain_name), q, base, align); /* domain name (unicode string) */
+ }
+ if (d_q->buffer_dom_sid != 0)
+ {
+ q = smb_io_dom_sid(io, &(d_q->dom_sid), q, base, align); /* domain SID */
+ }
+
+ return q;
+}
+
+/*******************************************************************
+reads or writes a DOM_R_REF structure.
+********************************************************************/
+char* smb_io_dom_r_ref(BOOL io, DOM_R_REF *r_r, char *q, char *base, int align)
+{
+ int i;
+
+ if (r_r == NULL) return NULL;
+
+ q = align_offset(q, base, align);
+
+ RW_IVAL(io, q, r_r->undoc_buffer, 0); q += 4; /* undocumented buffer pointer. */
+ RW_IVAL(io, q, r_r->num_ref_doms_1, 0); q += 4; /* num referenced domains? */
+ RW_IVAL(io, q, r_r->buffer_dom_name, 0); q += 4; /* undocumented domain name buffer pointer. */
+ RW_IVAL(io, q, r_r->max_entries, 0); q += 4; /* 32 - max number of entries */
+ RW_IVAL(io, q, r_r->num_ref_doms_2, 0); q += 4; /* 4 - num referenced domains? */
+
+ q = smb_io_unihdr2(io, &(r_r->hdr_dom_name), q, base, align); /* domain name unicode string header */
+
+ for (i = 0; i < r_r->num_ref_doms_1-1; i++)
+ {
+ q = smb_io_unihdr2(io, &(r_r->hdr_ref_dom[i]), q, base, align);
+ }
+
+ q = smb_io_unistr(io, &(r_r->uni_dom_name), q, base, align); /* domain name unicode string */
+
+ for (i = 0; i < r_r->num_ref_doms_2; i++)
+ {
+ q = smb_io_dom_sid(io, &(r_r->ref_dom[i]), q, base, align); /* referenced domain SIDs */
+ }
+ return q;
+}
+
+/*******************************************************************
+reads or writes a DOM_NAME structure.
+********************************************************************/
+char* smb_io_dom_name(BOOL io, DOM_NAME *name, char *q, char *base, int align)
+{
+ if (name == NULL) return NULL;
+
+ q = align_offset(q, base, align);
+
+ RW_IVAL(io, q, name->uni_str_len, 0); q += 4;
+
+ /* don't know if len is specified by uni_str_len member... */
+ /* assume unicode string is unicode-null-terminated, instead */
+
+ q = smb_io_unistr(io, &(name->str), q, base, align);
+
+ return q;
+}
+
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+char* smb_io_neg_flags(BOOL io, NEG_FLAGS *neg, char *q, char *base, int align)
+{
+ if (neg == NULL) return NULL;
+
+ q = align_offset(q, base, align);
+
+ RW_IVAL(io, q, neg->neg_flags, 0); q += 4;
+
+ return q;
+}
+
+