Convert dissector to callback based version of dissect_ndr_pointer().
authortpot <tpot@f5534014-38df-0310-8fa8-9805f1628bb7>
Tue, 28 Jan 2003 06:39:41 +0000 (06:39 +0000)
committertpot <tpot@f5534014-38df-0310-8fa8-9805f1628bb7>
Tue, 28 Jan 2003 06:39:41 +0000 (06:39 +0000)
Strings that used to call with levels != -1 should call the
callback helper which will append the string to the pointer item.

git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@7017 f5534014-38df-0310-8fa8-9805f1628bb7

packet-dcerpc-browser.c
packet-dcerpc-epm.c
packet-dcerpc-lsa-ds.c
packet-dcerpc-lsa.c
packet-dcerpc-mapi.c
packet-dcerpc-netlogon.c
packet-dcerpc-reg.c
packet-dcerpc-samr.c
packet-dcerpc-srvsvc.c
packet-dcerpc-tapi.c

index 55f10ebbd9be723925261e36ffd218f095e61f8d..185fb9569980f7c857ef6ea9e90946d2d23c5719 100644 (file)
@@ -2,7 +2,7 @@
  * Routines for DCERPC Browser packet disassembly
  * Copyright 2001, Ronnie Sahlberg
  *
- * $Id: packet-dcerpc-browser.c,v 1.8 2002/08/28 21:00:08 jmayer Exp $
+ * $Id: packet-dcerpc-browser.c,v 1.9 2003/01/28 06:39:39 tpot Exp $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -120,7 +120,7 @@ dissect_browser_TYPE_4(tvbuff_t *tvb, int offset,
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                dissect_browser_TYPE_4_data, NDR_POINTER_UNIQUE,
-               "unknown TYPE_4", -1, -1);
+               "unknown TYPE_4", -1);
 
        return offset;
 }
@@ -167,7 +167,7 @@ dissect_browser_TYPE_3(tvbuff_t *tvb, int offset,
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                dissect_browser_TYPE_3_data, NDR_POINTER_UNIQUE,
-               "unknown TYPE_3", -1, -1);
+               "unknown TYPE_3", -1);
 
        return offset;
 }
@@ -197,12 +197,12 @@ dissect_browser_TYPE_2(tvbuff_t *tvb, int offset,
        case 100:
                offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        dissect_browser_TYPE_3, NDR_POINTER_UNIQUE,
-                       "unknown TYPE_3", -1, -1);
+                       "unknown TYPE_3", -1);
                break;
        case 101:
                offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        dissect_browser_TYPE_4, NDR_POINTER_UNIQUE,
-                       "unknown TYPE_4", -1, -1);
+                       "unknown TYPE_4", -1);
                break;
        }
 
@@ -249,21 +249,21 @@ dissect_browser_UNKNOWN_00_rqst(tvbuff_t *tvb, int offset,
                        packet_info *pinfo, proto_tree *tree,
                        char *drep)
 {
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-                       dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-                       "unknown string", hf_browser_unknown_string, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+                       NDR_POINTER_UNIQUE, "unknown string", 
+                       hf_browser_unknown_string);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-                       dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-                       "unknown string", hf_browser_unknown_string, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+                       NDR_POINTER_UNIQUE, "unknown string", 
+                        hf_browser_unknown_string);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-                       dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-                       "unknown string", hf_browser_unknown_string, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+                       NDR_POINTER_UNIQUE, "unknown string", 
+                       hf_browser_unknown_string);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        dissect_browser_TYPE_1, NDR_POINTER_REF,
-                       "unknown TYPE_1", -1, 0);
+                       "unknown TYPE_1", -1);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_browser_unknown_long, NULL);
@@ -271,13 +271,13 @@ dissect_browser_UNKNOWN_00_rqst(tvbuff_t *tvb, int offset,
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_browser_unknown_long, NULL);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-                       dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-                       "unknown string", hf_browser_unknown_string, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+                       NDR_POINTER_UNIQUE, "unknown string", 
+                       hf_browser_unknown_string);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-                       dissect_browser_long_pointer, NDR_POINTER_UNIQUE,
-                       "unknown long", hf_browser_unknown_long, 0);
+                       dissect_browser_long_pointer, NDR_POINTER_UNIQUE, 
+                       "unknown long", hf_browser_unknown_long);
 
        return offset;
 }
@@ -288,14 +288,14 @@ dissect_browser_UNKNOWN_00_reply(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        dissect_browser_TYPE_1, NDR_POINTER_REF,
-                       "unknown TYPE_1", -1, 0);
+                       "unknown TYPE_1", -1);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_browser_unknown_long, NULL);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        dissect_browser_long_pointer, NDR_POINTER_UNIQUE,
-                       "unknown long", hf_browser_unknown_long, 0);
+                       "unknown long", hf_browser_unknown_long);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_browser_rc, NULL);
@@ -315,9 +315,9 @@ dissect_browser_UNKNOWN_01_rqst(tvbuff_t *tvb, int offset,
                        packet_info *pinfo, proto_tree *tree,
                        char *drep)
 {
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-                       dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-                       "unknown string", hf_browser_unknown_string, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+                       NDR_POINTER_UNIQUE, "unknown string", 
+                       hf_browser_unknown_string);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_browser_unknown_long, NULL);
@@ -351,13 +351,13 @@ dissect_browser_UNKNOWN_02_rqst(tvbuff_t *tvb, int offset,
                        packet_info *pinfo, proto_tree *tree,
                        char *drep)
 {
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-                       dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-                       "unknown string", hf_browser_unknown_string, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+                       NDR_POINTER_UNIQUE, "unknown string", 
+                       hf_browser_unknown_string);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        dissect_browser_TYPE_1, NDR_POINTER_REF,
-                       "unknown TYPE_1", -1, 0);
+                       "unknown TYPE_1", -1);
 
        return offset;
 }
@@ -386,9 +386,9 @@ dissect_browser_UNKNOWN_03_rqst(tvbuff_t *tvb, int offset,
                        packet_info *pinfo, proto_tree *tree,
                        char *drep)
 {
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-                       dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-                       "unknown string", hf_browser_unknown_string, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+                       NDR_POINTER_UNIQUE, "unknown string", 
+                       hf_browser_unknown_string);
 
        return offset;
 }
@@ -415,13 +415,13 @@ dissect_browser_UNKNOWN_04_rqst(tvbuff_t *tvb, int offset,
                        packet_info *pinfo, proto_tree *tree,
                        char *drep)
 {
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-                       dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-                       "unknown string", hf_browser_unknown_string, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+                       NDR_POINTER_UNIQUE, "unknown string", 
+                       hf_browser_unknown_string);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-                       dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_REF,
-                       "unknown string", hf_browser_unknown_string, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+                       NDR_POINTER_REF, "unknown string", 
+                       hf_browser_unknown_string);
 
        return offset;
 }
@@ -542,9 +542,9 @@ dissect_browser_UNKNOWN_05_rqst(tvbuff_t *tvb, int offset,
                        packet_info *pinfo, proto_tree *tree,
                        char *drep)
 {
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-                       dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-                       "unknown string", hf_browser_unknown_string, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+                       NDR_POINTER_UNIQUE, "unknown string", 
+                       hf_browser_unknown_string);
 
        return offset;
 }
@@ -555,7 +555,7 @@ dissect_browser_UNKNOWN_05_reply(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        dissect_browser_TYPE_5, NDR_POINTER_UNIQUE,
-                       "unknown TYPE_5", -1, 0);
+                       "unknown TYPE_5", -1);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_browser_rc, NULL);
@@ -574,9 +574,9 @@ dissect_browser_UNKNOWN_06_rqst(tvbuff_t *tvb, int offset,
                        packet_info *pinfo, proto_tree *tree,
                        char *drep)
 {
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-                       dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-                       "unknown string", hf_browser_unknown_string, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+                       NDR_POINTER_UNIQUE, "unknown string", 
+                       hf_browser_unknown_string);
 
        return offset;
 }
@@ -602,9 +602,9 @@ dissect_browser_UNKNOWN_07_rqst(tvbuff_t *tvb, int offset,
                        packet_info *pinfo, proto_tree *tree,
                        char *drep)
 {
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-                       dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-                       "unknown string", hf_browser_unknown_string, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+                       NDR_POINTER_UNIQUE, "unknown string", 
+                       hf_browser_unknown_string);
 
        return offset;
 }
@@ -723,7 +723,7 @@ dissect_browser_TYPE_10(tvbuff_t *tvb, int offset,
 
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                dissect_browser_TYPE_11_array, NDR_POINTER_UNIQUE,
-               "unknown TYPE_11_ARRAY", -1, 0);
+               "unknown TYPE_11_ARRAY", -1);
 
        return offset;
 }
@@ -771,7 +771,7 @@ dissect_browser_TYPE_9(tvbuff_t *tvb, int offset,
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                dissect_browser_TYPE_9_data, NDR_POINTER_UNIQUE,
-               "unknown TYPE_9", -1, -1);
+               "unknown TYPE_9", -1);
 
        return offset;
 }
@@ -800,12 +800,12 @@ dissect_browser_TYPE_8(tvbuff_t *tvb, int offset,
        case 100:
                offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        dissect_browser_TYPE_9, NDR_POINTER_UNIQUE,
-                       "unknown TYPE_9", -1, -1);
+                       "unknown TYPE_9", -1);
                break;
        case 101:
                offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        dissect_browser_TYPE_10, NDR_POINTER_UNIQUE,
-                       "unknown TYPE_10", -1, -1);
+                       "unknown TYPE_10", -1);
                break;
        }
 
@@ -845,16 +845,16 @@ dissect_browser_UNKNOWN_08_rqst(tvbuff_t *tvb, int offset,
                        packet_info *pinfo, proto_tree *tree,
                        char *drep)
 {
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-                       dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-                       "unknown string", hf_browser_unknown_string, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+                       NDR_POINTER_UNIQUE, "unknown string", 
+                       hf_browser_unknown_string);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_browser_unknown_long, NULL);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        dissect_browser_TYPE_7, NDR_POINTER_REF,
-                       "unknown TYPE_7", -1, 0);
+                       "unknown TYPE_7", -1);
 
        return offset;
 }
@@ -865,7 +865,7 @@ dissect_browser_UNKNOWN_08_reply(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        dissect_browser_TYPE_7, NDR_POINTER_REF,
-                       "unknown TYPE_7", -1, 0);
+                       "unknown TYPE_7", -1);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_browser_rc, NULL);
@@ -887,17 +887,17 @@ dissect_browser_UNKNOWN_09_rqst(tvbuff_t *tvb, int offset,
                        packet_info *pinfo, proto_tree *tree,
                        char *drep)
 {
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-                       dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-                       "unknown string", hf_browser_unknown_string, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+                       NDR_POINTER_UNIQUE, "unknown string", 
+                       hf_browser_unknown_string);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-                       dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_REF,
-                       "unknown string", hf_browser_unknown_string, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+                       NDR_POINTER_REF, "unknown string", 
+                        hf_browser_unknown_string);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-                       dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-                       "unknown string", hf_browser_unknown_string, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+                       NDR_POINTER_UNIQUE, "unknown string", 
+                       hf_browser_unknown_string);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_browser_unknown_long, NULL);
@@ -960,7 +960,7 @@ dissect_browser_TYPE_12(tvbuff_t *tvb, int offset,
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                dissect_browser_TYPE_12_data, NDR_POINTER_UNIQUE,
-               "unknown TYPE_12", -1, -1);
+               "unknown TYPE_12", -1);
 
        return offset;
 }
@@ -977,13 +977,13 @@ dissect_browser_UNKNOWN_0a_rqst(tvbuff_t *tvb, int offset,
                        packet_info *pinfo, proto_tree *tree,
                        char *drep)
 {
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-                       dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-                       "unknown string", hf_browser_unknown_string, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+                       NDR_POINTER_UNIQUE, "unknown string", 
+                       hf_browser_unknown_string);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        dissect_browser_TYPE_12, NDR_POINTER_REF,
-                       "unknown TYPE_12", -1, 0);
+                       "unknown TYPE_12", -1);
 
        return offset;
 }
@@ -994,7 +994,7 @@ dissect_browser_UNKNOWN_0a_reply(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        dissect_browser_TYPE_12, NDR_POINTER_REF,
-                       "unknown TYPE_12", -1, 0);
+                       "unknown TYPE_12", -1);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_browser_rc, NULL);
@@ -1021,21 +1021,21 @@ dissect_browser_UNKNOWN_0b_rqst(tvbuff_t *tvb, int offset,
                        packet_info *pinfo, proto_tree *tree,
                        char *drep)
 {
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-                       dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-                       "unknown string", hf_browser_unknown_string, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+                       NDR_POINTER_UNIQUE, "unknown string", 
+                       hf_browser_unknown_string);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-                       dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-                       "unknown string", hf_browser_unknown_string, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+                       NDR_POINTER_UNIQUE, "unknown string", 
+                       hf_browser_unknown_string);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-                       dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-                       "unknown string", hf_browser_unknown_string, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+                       NDR_POINTER_UNIQUE, "unknown string", 
+                       hf_browser_unknown_string);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        dissect_browser_TYPE_1, NDR_POINTER_REF,
-                       "unknown TYPE_1", -1, 0);
+                       "unknown TYPE_1", -1);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_browser_unknown_long, NULL);
@@ -1043,13 +1043,13 @@ dissect_browser_UNKNOWN_0b_rqst(tvbuff_t *tvb, int offset,
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_browser_unknown_long, NULL);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-                       dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-                       "unknown string", hf_browser_unknown_string, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+                       NDR_POINTER_UNIQUE, "unknown string", 
+                       hf_browser_unknown_string);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-                       dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-                       "unknown string", hf_browser_unknown_string, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+                       NDR_POINTER_UNIQUE, "unknown string", 
+                       hf_browser_unknown_string);
 
        return offset;
 }
@@ -1060,7 +1060,7 @@ dissect_browser_UNKNOWN_0b_reply(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        dissect_browser_TYPE_1, NDR_POINTER_REF,
-                       "unknown TYPE_1", -1, 0);
+                       "unknown TYPE_1", -1);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_browser_unknown_long, NULL);
index cb861c8f543d96443637b496865f36c20f52cecf..2152981fb5923186c6528fe6b522d05ab1d40afa 100644 (file)
@@ -2,7 +2,7 @@
  * Routines for dcerpc endpoint mapper dissection
  * Copyright 2001, Todd Sabin <tas@webspan.net>
  *
- * $Id: packet-dcerpc-epm.c,v 1.18 2002/11/28 03:57:50 guy Exp $
+ * $Id: packet-dcerpc-epm.c,v 1.19 2003/01/28 06:39:39 tpot Exp $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -124,11 +124,11 @@ epm_dissect_ept_lookup_rqst (tvbuff_t *tvb, int offset,
 
     offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                              epm_dissect_pointer_UUID, NDR_POINTER_PTR,
-                             "Object:", hf_epm_object, 0);
+                             "Object:", hf_epm_object);
 
     offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                              epm_dissect_pointer_IF_ID, NDR_POINTER_PTR,
-                             "Interface:", hf_epm_if_id, 0);
+                             "Interface:", hf_epm_if_id);
 
     offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
                                  hf_epm_ver_opt, NULL);
@@ -170,7 +170,7 @@ epm_dissect_ept_entry_t(tvbuff_t *tvb, int offset,
 
     offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                              epm_dissect_tower, NDR_POINTER_PTR,
-                             "Tower pointer:", -1, 1);
+                             "Tower pointer:", -1);
 
     offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
                                  hf_epm_ann_offset, NULL);
@@ -220,7 +220,7 @@ epm_dissect_ept_lookup_resp (tvbuff_t *tvb, int offset,
 
     offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                              epm_dissect_ept_entry_t_array, NDR_POINTER_REF,
-                             "Entries:", -1, 1);
+                             "Entries:", -1);
 
     offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
                                  hf_epm_rc, NULL);
@@ -409,7 +409,7 @@ epm_dissect_tower_pointer (tvbuff_t *tvb, int offset,
 {
     offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                              epm_dissect_tower, NDR_POINTER_PTR,
-                             "Tower pointer:", -1, 1);
+                             "Tower pointer:", -1);
     return offset;
 }
 static int
@@ -444,7 +444,7 @@ epm_dissect_ept_map_rqst (tvbuff_t *tvb, int offset,
     /* [in, ptr] twr_p_t map_tower */
     offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                              epm_dissect_tower, NDR_POINTER_PTR,
-                             "Tower pointer:", -1, 1);
+                             "Tower pointer:", -1);
 
     /* [in, out] ept_lookup_handle_t *entry_handle */
     offset = dissect_ndr_ctx_hnd (tvb, offset, pinfo, tree, drep,
@@ -473,7 +473,7 @@ epm_dissect_ept_map_resp (tvbuff_t *tvb, int offset,
     /* [out, length_is(*num_towers), size_is(max_towers), ptr] twr_p_t towers[] */
     offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                              epm_dissect_tower_array, NDR_POINTER_REF,
-                             "Tower array:", -1, 1);
+                             "Tower array:", -1);
 
     /* [out] error_status_t *status */
     offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
@@ -507,7 +507,7 @@ epm_dissect_ept_insert_rqst (tvbuff_t *tvb, int offset,
 
     offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                              epm_dissect_ept_entry_t_ucarray, NDR_POINTER_REF,
-                             "Entries:", -1, 1);
+                             "Entries:", -1);
 
     offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
                                  hf_epm_replace, NULL);
@@ -543,7 +543,7 @@ epm_dissect_ept_delete_rqst (tvbuff_t *tvb, int offset,
 
     offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                              epm_dissect_ept_entry_t_ucarray, NDR_POINTER_REF,
-                             "Entries:", -1, 1);
+                             "Entries:", -1);
 
     return offset;
 }
index bcc61651515eafd38e735af668d3e59ec4e1426d..74147125f5e2b4e557e6752e9cf5d002d14e0c2a 100644 (file)
@@ -1,9 +1,9 @@
 /* packet-dcerpc-lsa-ds.c
  * Routines for SMB \PIPE\lsarpc packet disassembly
- * Copyright 2002, Tim Potter <tpot@samba.org>
+ * Copyright 2002-2003, Tim Potter <tpot@samba.org>
  * Copyright 2002, Jim McDonough <jmcd@samba.org>
  *
- * $Id: packet-dcerpc-lsa-ds.c,v 1.6 2002/11/21 03:45:23 tpot Exp $
+ * $Id: packet-dcerpc-lsa-ds.c,v 1.7 2003/01/28 06:39:39 tpot Exp $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -86,15 +86,15 @@ lsa_ds_dissect_DSROLE_BASIC_INFO(tvbuff_t *tvb, int offset,
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                                    hf_lsa_ds_dominfo_flags, 0);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-               "NetBIOS domain name pointer", hf_lsa_ds_dominfo_netb_name, 0);
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-               "DNS domain pointer", hf_lsa_ds_dominfo_dns_name, 0);
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-               "DNS forest name pointer", hf_lsa_ds_dominfo_forest_name, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_UNIQUE, "NetBIOS domain name pointer", 
+               hf_lsa_ds_dominfo_netb_name);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_UNIQUE, "DNS domain pointer", 
+               hf_lsa_ds_dominfo_dns_name);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_UNIQUE, "DNS forest name pointer", 
+               hf_lsa_ds_dominfo_forest_name);
 
        /* GUID */
        offset = dissect_nt_GUID(tvb, offset, pinfo, tree, drep);
@@ -202,7 +202,7 @@ lsa_ds_dissect_role_get_dom_info_reply(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_ds_dissect_DS_DOMINFO_CTR, NDR_POINTER_UNIQUE,
-               "DOMAIN_INFORMATION pointer", -1, 0);
+               "DOMAIN_INFORMATION pointer", -1);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_lsa_ds_rc, NULL);
index 494de0918ee6c25afe814417c539ba27e35f3a89..b0ca72cde3e9152c3cc1ac5e5c66c98d708599a7 100644 (file)
@@ -1,9 +1,9 @@
 /* packet-dcerpc-lsa.c
  * Routines for SMB \PIPE\lsarpc packet disassembly
- * Copyright 2001, Tim Potter <tpot@samba.org>
+ * Copyright 2001,2003 Tim Potter <tpot@samba.org>
  *  2002  Added LSA command dissectors  Ronnie Sahlberg
  *
- * $Id: packet-dcerpc-lsa.c,v 1.60 2002/10/28 20:12:30 guy Exp $
+ * $Id: packet-dcerpc-lsa.c,v 1.61 2003/01/28 06:39:39 tpot Exp $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -192,7 +192,7 @@ lsa_dissect_pointer_UNICODE_STRING(tvbuff_t *tvb, int offset,
        }
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                       di->hf_index, di->levels);
+                       di->hf_index);
        return offset;
 }
 
@@ -211,7 +211,7 @@ lsa_dissect_pointer_pointer_UNICODE_STRING(tvbuff_t *tvb, int offset,
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_pointer_UNICODE_STRING, NDR_POINTER_UNIQUE,
-               "DOMAIN pointer: ", di->hf_index, 0);
+               "DOMAIN pointer: ", di->hf_index);
 
        return offset;
 }
@@ -230,7 +230,7 @@ lsa_dissect_pointer_STRING(tvbuff_t *tvb, int offset,
        }
 
        offset = dissect_ndr_nt_STRING(tvb, offset, pinfo, tree, drep,
-                       di->hf_index, di->levels);
+                       di->hf_index);
        return offset;
 }
 
@@ -276,7 +276,7 @@ lsa_dissect_LSA_SECRET(tvbuff_t *tvb, int offset,
                                      hf_lsa_sd_size, NULL);
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        lsa_dissect_LSA_SECRET_data, NDR_POINTER_UNIQUE,
-                       "LSA SECRET data:", -1, 0);
+                       "LSA SECRET data:", -1);
 
        proto_item_set_len(item, offset-old_offset);
        return offset;
@@ -289,7 +289,7 @@ lsa_dissect_LSA_SECRET_pointer(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_SECRET, NDR_POINTER_UNIQUE,
-               "LSA_SECRET pointer: data", -1, 0);
+               "LSA_SECRET pointer: data", -1);
 
        return offset;
 }
@@ -336,7 +336,7 @@ lsa_dissect_LSA_SECURITY_DESCRIPTOR(tvbuff_t *tvb, int offset,
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        lsa_dissect_LSA_SECURITY_DESCRIPTOR_data, NDR_POINTER_UNIQUE,
-                       "LSA SECURITY DESCRIPTOR data:", -1, 0);
+                       "LSA SECURITY DESCRIPTOR data:", -1);
 
        proto_item_set_len(item, offset-old_offset);
        return offset;
@@ -514,12 +514,12 @@ lsa_dissect_LSA_OBJECT_ATTRIBUTES(tvbuff_t *tvb, int offset,
        /* LPSTR */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LPSTR, NDR_POINTER_UNIQUE,
-               "LSPTR pointer: ", -1, 0);
+               "LSPTR pointer: ", -1);
 
        /* attribute name */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_pointer_STRING, NDR_POINTER_UNIQUE,
-               "NAME pointer: ", hf_lsa_obj_attr_name, 0);
+               "NAME pointer: ", hf_lsa_obj_attr_name);
 
        /* Attr */
        offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
@@ -528,12 +528,12 @@ lsa_dissect_LSA_OBJECT_ATTRIBUTES(tvbuff_t *tvb, int offset,
        /* security descriptor */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_SECURITY_DESCRIPTOR, NDR_POINTER_UNIQUE,
-               "LSA_SECURITY_DESCRIPTOR pointer: ", -1, 0);
+               "LSA_SECURITY_DESCRIPTOR pointer: ", -1);
 
        /* security quality of service */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_SECURITY_QUALITY_OF_SERVICE, NDR_POINTER_UNIQUE,
-               "LSA_SECURITY_QUALITY_OF_SERVICE pointer: ", -1, 0);
+               "LSA_SECURITY_QUALITY_OF_SERVICE pointer: ", -1);
 
        proto_item_set_len(item, offset-old_offset);
        return offset;
@@ -545,7 +545,7 @@ lsa_dissect_lsaclose_rqst(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_HANDLE_close, NDR_POINTER_REF,
-               "LSA_HANDLE", -1, 0);
+               "LSA_HANDLE", -1);
        return offset;
 }
 
@@ -556,7 +556,7 @@ lsa_dissect_lsaclose_reply(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_HANDLE, NDR_POINTER_REF,
-               "LSA_HANDLE", -1, 0);
+               "LSA_HANDLE", -1);
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_lsa_rc, NULL);
 
@@ -581,11 +581,11 @@ lsa_dissect_lsaopenpolicy_rqst(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                dissect_lsa_openpolicy_server, NDR_POINTER_UNIQUE,
-               "Server:", hf_lsa_server, 0);
+               "Server:", hf_lsa_server);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_OBJECT_ATTRIBUTES, NDR_POINTER_REF,
-               "OBJECT_ATTRIBUTES", -1, 0);
+               "OBJECT_ATTRIBUTES", -1);
 
        offset = lsa_dissect_ACCESS_MASK(tvb, offset,
                pinfo, tree, drep);
@@ -599,7 +599,7 @@ lsa_dissect_lsaopenpolicy_reply(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_HANDLE_open, NDR_POINTER_REF,
-               "LSA_HANDLE", -1, 0);
+               "LSA_HANDLE", -1);
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_lsa_rc, NULL);
 
@@ -610,13 +610,12 @@ static int
 lsa_dissect_lsaopenpolicy2_rqst(tvbuff_t *tvb, int offset,
        packet_info *pinfo, proto_tree *tree, char *drep)
 {
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-               "Server", hf_lsa_server, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_UNIQUE, "Server", hf_lsa_server);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_OBJECT_ATTRIBUTES, NDR_POINTER_REF,
-               "OBJECT_ATTRIBUTES", -1, 0);
+               "OBJECT_ATTRIBUTES", -1);
 
        offset = lsa_dissect_ACCESS_MASK(tvb, offset,
                pinfo, tree, drep);
@@ -630,7 +629,7 @@ lsa_dissect_lsaopenpolicy2_reply(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_HANDLE_open, NDR_POINTER_REF,
-               "LSA_HANDLE", -1, 0);
+               "LSA_HANDLE", -1);
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_lsa_rc, NULL);
 
@@ -659,7 +658,7 @@ lsa_dissect_lsaqueryinformationpolicy_rqst(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_HANDLE, NDR_POINTER_REF,
-               "LSA_HANDLE", -1, 0);
+               "LSA_HANDLE", -1);
 
        offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep,
                hf_lsa_policy_information_class, NULL);
@@ -749,7 +748,7 @@ lsa_dissect_POLICY_AUDIT_EVENTS_INFO(tvbuff_t *tvb, int offset,
        /* settings */
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_POLICY_AUDIT_EVENTS_INFO_settings_array, NDR_POINTER_UNIQUE,
-               "Settings", -1, 0);
+               "Settings", -1);
 
        /* count */
         offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
@@ -776,7 +775,7 @@ lsa_dissect_POLICY_PRIMARY_DOMAIN_INFO(tvbuff_t *tvb, int offset,
 
        /* domain */
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_lsa_domain, 0);
+               hf_lsa_domain);
 
        /* sid */
        offset = dissect_ndr_nt_PSID(tvb, offset,
@@ -803,7 +802,7 @@ lsa_dissect_POLICY_ACCOUNT_DOMAIN_INFO(tvbuff_t *tvb, int offset,
 
        /* account */
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_lsa_acct, 0);
+               hf_lsa_acct);
 
        /* sid */
        offset = dissect_ndr_nt_PSID(tvb, offset,
@@ -859,11 +858,11 @@ lsa_dissect_POLICY_REPLICA_SOURCE_INFO(tvbuff_t *tvb, int offset,
 
        /* source */
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_lsa_source, 0);
+               hf_lsa_source);
 
        /* account */
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_lsa_acct, 0);
+               hf_lsa_acct);
 
        proto_item_set_len(item, offset-old_offset);
        return offset;
@@ -1006,15 +1005,15 @@ lsa_dissect_POLICY_DNS_DOMAIN_INFO(tvbuff_t *tvb, int offset,
 
        /* name */
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_lsa_name, 0);
+               hf_lsa_name);
 
        /* domain */
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_lsa_domain, 0);
+               hf_lsa_domain);
 
        /* forest */
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_lsa_forest, 0);
+               hf_lsa_forest);
 
        /* GUID */
        offset = dissect_nt_GUID(tvb, offset,
@@ -1060,8 +1059,8 @@ lsa_dissect_POLICY_INFORMATION(tvbuff_t *tvb, int offset,
                                tvb, offset, pinfo, tree, drep);
                break;
        case 4:
-               offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                       hf_lsa_acct, 0);
+               offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, 
+                       tree, drep, hf_lsa_acct);
                break;
        case 5:
                offset = lsa_dissect_POLICY_ACCOUNT_DOMAIN_INFO(
@@ -1109,7 +1108,7 @@ lsa_dissect_lsaqueryinformationpolicy_reply(tvbuff_t *tvb, int offset,
          so we just ignore that one */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_POLICY_INFORMATION, NDR_POINTER_UNIQUE,
-               "POLICY_INFORMATION pointer: info", -1, 0);
+               "POLICY_INFORMATION pointer: info", -1);
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_lsa_rc, NULL);
 
@@ -1122,7 +1121,7 @@ lsa_dissect_lsadelete_rqst(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_HANDLE, NDR_POINTER_REF,
-               "LSA_HANDLE", -1, 0);
+               "LSA_HANDLE", -1);
 
        return offset;
 }
@@ -1158,7 +1157,7 @@ lsa_dissect_lsaquerysecurityobject_reply(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_SECURITY_DESCRIPTOR, NDR_POINTER_UNIQUE,
-               "LSA_SECURITY_DESCRIPTOR pointer: sec_info", -1, 0);
+               "LSA_SECURITY_DESCRIPTOR pointer: sec_info", -1);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_lsa_rc, NULL);
@@ -1179,7 +1178,7 @@ lsa_dissect_lsasetsecurityobject_rqst(tvbuff_t *tvb, int offset,
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_SECURITY_DESCRIPTOR, NDR_POINTER_REF,
-               "LSA_SECURITY_DESCRIPTOR: sec_info", -1, 0);
+               "LSA_SECURITY_DESCRIPTOR: sec_info", -1);
 
        return offset;
 }
@@ -1201,23 +1200,23 @@ lsa_dissect_lsachangepassword_rqst(tvbuff_t *tvb, int offset,
 {
        /* server */
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_lsa_server, 0);
+               hf_lsa_server);
 
        /* domain */
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_lsa_domain, 0);
+               hf_lsa_domain);
 
        /* account */
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_lsa_acct, 0);
+               hf_lsa_acct);
 
        /* old password */
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_lsa_old_pwd, 0);
+               hf_lsa_old_pwd);
 
        /* new password */
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_lsa_new_pwd, 0);
+               hf_lsa_new_pwd);
 
        return offset;
 }
@@ -1264,7 +1263,7 @@ lsa_dissect_LSA_TRANSLATED_NAME(tvbuff_t *tvb, int offset,
 
        /* name */
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_lsa_name, 0);
+               hf_lsa_name);
 
        /* index */
         offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
@@ -1305,7 +1304,7 @@ lsa_dissect_LSA_TRANSLATED_NAMES(tvbuff_t *tvb, int offset,
        /* settings */
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_TRANSLATED_NAME_array, NDR_POINTER_UNIQUE,
-               "TRANSLATED_NAME_ARRAY", -1, 0);
+               "TRANSLATED_NAME_ARRAY", -1);
 
        proto_item_set_len(item, offset-old_offset);
        return offset;
@@ -1321,11 +1320,11 @@ lsa_dissect_lsalookupsids_rqst(tvbuff_t *tvb, int offset,
 
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        dissect_ndr_nt_PSID_ARRAY, NDR_POINTER_REF,
-                       "PSID_ARRAY", -1, 0);
+                       "PSID_ARRAY", -1);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_TRANSLATED_NAMES, NDR_POINTER_REF,
-               "LSA_TRANSLATED_NAMES pointer: names", -1, 0);
+               "LSA_TRANSLATED_NAMES pointer: names", -1);
 
        offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep,
                hf_lsa_info_level, NULL);
@@ -1352,7 +1351,7 @@ lsa_dissect_LSA_TRUST_INFORMATION(tvbuff_t *tvb, int offset,
 
        /* name */
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_lsa_name, 0);
+               hf_lsa_name);
 
        /* sid */
        offset = dissect_ndr_nt_PSID(tvb, offset,
@@ -1438,11 +1437,11 @@ lsa_dissect_LSA_TRUST_INFORMATION_EX(tvbuff_t *tvb, int offset,
 
        /* name */
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_lsa_name, 0);
+               hf_lsa_name);
 
        /* flat name */
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_lsa_flat_name, 0);
+               hf_lsa_flat_name);
 
        /* sid */
        offset = dissect_ndr_nt_PSID(tvb, offset,
@@ -1515,7 +1514,7 @@ lsa_dissect_auth_info(tvbuff_t *tvb, int offset,
        /* auth info blob */
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        lsa_dissect_auth_info_blob, NDR_POINTER_UNIQUE,
-                       "AUTH INFO blob:", -1, 0);
+                       "AUTH INFO blob:", -1);
 
        proto_item_set_len(item, offset-old_offset);
        return offset;
@@ -1591,7 +1590,7 @@ lsa_dissect_LSA_REFERENCED_DOMAIN_LIST(tvbuff_t *tvb, int offset,
        /* trust information */
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_TRUST_INFORMATION_array, NDR_POINTER_UNIQUE,
-               "TRUST INFORMATION array:", -1, 0);
+               "TRUST INFORMATION array:", -1);
 
        /* max count */
         offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
@@ -1607,11 +1606,11 @@ lsa_dissect_lsalookupsids_reply(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_REFERENCED_DOMAIN_LIST, NDR_POINTER_UNIQUE,
-               "LSA_REFERENCED_DOMAIN_LIST pointer: domains", -1, 0);
+               "LSA_REFERENCED_DOMAIN_LIST pointer: domains", -1);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_TRANSLATED_NAMES, NDR_POINTER_REF,
-               "LSA_TRANSLATED_NAMES pointer: names", -1, 0);
+               "LSA_TRANSLATED_NAMES pointer: names", -1);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_lsa_num_mapped, NULL);
@@ -1632,7 +1631,7 @@ lsa_dissect_lsasetquotasforaccount_rqst(tvbuff_t *tvb, int offset,
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_POLICY_DEFAULT_QUOTA_INFO, NDR_POINTER_REF,
-               "POLICY_DEFAULT_QUOTA_INFO pointer: quotas", -1, 0);
+               "POLICY_DEFAULT_QUOTA_INFO pointer: quotas", -1);
 
        return offset;
 }
@@ -1666,7 +1665,7 @@ lsa_dissect_lsagetquotasforaccount_reply(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_POLICY_DEFAULT_QUOTA_INFO, NDR_POINTER_REF,
-               "POLICY_DEFAULT_QUOTA_INFO pointer: quotas", -1, 0);
+               "POLICY_DEFAULT_QUOTA_INFO pointer: quotas", -1);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_lsa_rc, NULL);
@@ -1687,7 +1686,7 @@ lsa_dissect_lsasetinformationpolicy_rqst(tvbuff_t *tvb, int offset,
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_POLICY_INFORMATION, NDR_POINTER_REF,
-               "POLICY_INFORMATION pointer: info", -1, 0);
+               "POLICY_INFORMATION pointer: info", -1);
 
        return offset;
 }
@@ -1880,7 +1879,7 @@ lsa_dissect_LSA_PRIVILEGE(tvbuff_t *tvb, int offset,
 
        /* privilege name */
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                       hf_lsa_privilege_name, 0);
+                       hf_lsa_privilege_name);
 
        /* LUID */
        offset = dissect_nt_LUID(tvb, offset, pinfo, tree, drep);
@@ -1919,7 +1918,7 @@ lsa_dissect_LSA_PRIVILEGES(tvbuff_t *tvb, int offset,
        /* privileges */
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_PRIVILEGE_array, NDR_POINTER_UNIQUE,
-               "LSA_PRIVILEGE array:", -1, 0);
+               "LSA_PRIVILEGE array:", -1);
 
        proto_item_set_len(item, offset-old_offset);
        return offset;
@@ -1950,7 +1949,7 @@ lsa_dissect_lsaenumerateprivileges_reply(tvbuff_t *tvb, int offset,
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_PRIVILEGES, NDR_POINTER_REF,
-               "LSA_PRIVILEGES pointer: privs", -1, 0);
+               "LSA_PRIVILEGES pointer: privs", -1);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_lsa_rc, NULL);
@@ -1968,7 +1967,7 @@ lsa_dissect_lsalookupprivilegevalue_rqst(tvbuff_t *tvb, int offset,
        /* privilege name */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_pointer_UNICODE_STRING, NDR_POINTER_UNIQUE,
-               "NAME pointer: ", hf_lsa_privilege_name, 0);
+               "NAME pointer: ", hf_lsa_privilege_name);
 
        return offset;
 }
@@ -1999,7 +1998,7 @@ lsa_dissect_lsalookupprivilegename_rqst(tvbuff_t *tvb, int offset,
        /* LUID */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                dissect_nt_LUID, NDR_POINTER_REF,
-               "LUID pointer: value", -1, 0);
+               "LUID pointer: value", -1);
 
        return offset;
 }
@@ -2012,7 +2011,7 @@ lsa_dissect_lsalookupprivilegename_reply(tvbuff_t *tvb, int offset,
        /* [out, ref] LSA_UNICODE_STRING **name */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_pointer_UNICODE_STRING, NDR_POINTER_UNIQUE,
-               "PRIVILEGE NAME pointer:", hf_lsa_privilege_name, 0);
+               "PRIVILEGE NAME pointer:", hf_lsa_privilege_name);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_lsa_rc, NULL);
@@ -2088,7 +2087,7 @@ lsa_dissect_LUID_AND_ATTRIBUTES_ARRAY(tvbuff_t *tvb, int offset,
        /* luid and attributes */
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LUID_AND_ATTRIBUTES_array, NDR_POINTER_UNIQUE,
-               "LUID_AND_ATTRIBUTES array:", -1, 0);
+               "LUID_AND_ATTRIBUTES array:", -1);
 
        proto_item_set_len(item, offset-old_offset);
        return offset;
@@ -2101,7 +2100,7 @@ lsa_dissect_lsaenumerateprivilegesaccount_reply(tvbuff_t *tvb, int offset,
        /* [out, ref] LUID_AND_ATTRIBUTES_ARRAY * *privs */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LUID_AND_ATTRIBUTES_ARRAY, NDR_POINTER_UNIQUE,
-               "LUID_AND_ATTRIBUTES_ARRAY pointer: privs", -1, 0);
+               "LUID_AND_ATTRIBUTES_ARRAY pointer: privs", -1);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_lsa_rc, NULL);
@@ -2150,7 +2149,7 @@ lsa_dissect_lsaremoveprivilegesfromaccount_rqst(tvbuff_t *tvb, int offset,
        /* [in, unique] LUID_AND_ATTRIBUTES_ARRAY *privs */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LUID_AND_ATTRIBUTES_ARRAY, NDR_POINTER_UNIQUE,
-               "LUID_AND_ATTRIBUTES_ARRAY pointer: privs", -1, 0);
+               "LUID_AND_ATTRIBUTES_ARRAY pointer: privs", -1);
 
        return offset;
 }
@@ -2196,7 +2195,7 @@ lsa_dissect_lsaenumerateaccounts_reply(tvbuff_t *tvb, int offset,
        /* [out, ref] PSID_ARRAY **accounts */
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        dissect_ndr_nt_PSID_ARRAY, NDR_POINTER_REF,
-                       "PSID_ARRAY", -1, 0);
+                       "PSID_ARRAY", -1);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_lsa_rc, NULL);
@@ -2215,7 +2214,7 @@ lsa_dissect_lsacreatetrusteddomain_rqst(tvbuff_t *tvb, int offset,
        /* [in, ref] LSA_TRUST_INFORMATION *domain */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_TRUST_INFORMATION, NDR_POINTER_REF,
-               "LSA_TRUST_INFORMATION pointer: domain", -1, 0);
+               "LSA_TRUST_INFORMATION pointer: domain", -1);
 
        /* [in] ACCESS_MASK access */
        offset = lsa_dissect_ACCESS_MASK(tvb, offset,
@@ -2273,7 +2272,7 @@ lsa_dissect_LSA_TRUSTED_DOMAIN(tvbuff_t *tvb, int offset,
 
        /* domain */
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_lsa_domain, 0);
+               hf_lsa_domain);
 
        /* sid */
        offset = dissect_ndr_nt_PSID(tvb, offset,
@@ -2313,7 +2312,7 @@ lsa_dissect_LSA_TRUSTED_DOMAIN_LIST(tvbuff_t *tvb, int offset,
        /* privileges */
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_TRUSTED_DOMAIN_array, NDR_POINTER_UNIQUE,
-               "TRUSTED_DOMAIN array:", -1, 0);
+               "TRUSTED_DOMAIN array:", -1);
 
        proto_item_set_len(item, offset-old_offset);
        return offset;
@@ -2330,7 +2329,7 @@ lsa_dissect_lsaenumeratetrusteddomains_reply(tvbuff_t *tvb, int offset,
        /* [out, ref] LSA_REFERENCED_DOMAIN_LIST *domains */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_TRUSTED_DOMAIN_LIST, NDR_POINTER_REF,
-               "LSA_TRUSTED_DOMAIN_LIST pointer: domains", -1, 0);
+               "LSA_TRUSTED_DOMAIN_LIST pointer: domains", -1);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_lsa_rc, NULL);
@@ -2352,7 +2351,7 @@ lsa_dissect_LSA_UNICODE_STRING_item(tvbuff_t *tvb, int offset,
        }
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                       di->hf_index, di->levels);
+                       di->hf_index);
 
        return offset;
 }
@@ -2379,7 +2378,7 @@ lsa_dissect_LSA_UNICODE_STRING_ARRAY(tvbuff_t *tvb, int offset,
                hf_lsa_count, NULL);
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_UNICODE_STRING_array, NDR_POINTER_UNIQUE,
-               "UNICODE_STRING pointer: ", di->hf_index, 0);
+               "UNICODE_STRING pointer: ", di->hf_index);
 
        return offset;
 }
@@ -2432,7 +2431,7 @@ lsa_dissect_LSA_TRANSLATED_SIDS(tvbuff_t *tvb, int offset,
        /* settings */
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_TRANSLATED_SIDS_array, NDR_POINTER_UNIQUE,
-               "Translated SIDS", -1, 0);
+               "Translated SIDS", -1);
 
        proto_item_set_len(item, offset-old_offset);
        return offset;
@@ -2453,12 +2452,12 @@ lsa_dissect_lsalookupnames_rqst(tvbuff_t *tvb, int offset,
        /* [in, size_is(count), ref] LSA_UNICODE_STRING *names */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_UNICODE_STRING_array, NDR_POINTER_REF,
-               "Account pointer: names", hf_lsa_acct, 0);
+               "Account pointer: names", hf_lsa_acct);
 
        /* [in, out, ref] LSA_TRANSLATED_SIDS *rids */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_TRANSLATED_SIDS, NDR_POINTER_REF,
-               "LSA_TRANSLATED_SIDS pointer: rids", -1, 0);
+               "LSA_TRANSLATED_SIDS pointer: rids", -1);
 
        /* [in] USHORT level */
        offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep,
@@ -2479,12 +2478,12 @@ lsa_dissect_lsalookupnames_reply(tvbuff_t *tvb, int offset,
        /* [out] LSA_REFERENCED_DOMAIN_LIST *domains */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_REFERENCED_DOMAIN_LIST, NDR_POINTER_UNIQUE,
-               "LSA_REFERENCED_DOMAIN_LIST pointer: domains", -1, 0);
+               "LSA_REFERENCED_DOMAIN_LIST pointer: domains", -1);
 
        /* [in, out, ref] LSA_TRANSLATED_SIDS *rids */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_TRANSLATED_SIDS, NDR_POINTER_REF,
-               "LSA_TRANSLATED_SIDS pointer: rids", -1, 0);
+               "LSA_TRANSLATED_SIDS pointer: rids", -1);
 
        /* [in, out, ref] ULONG *num_mapped */
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
@@ -2506,7 +2505,7 @@ lsa_dissect_lsacreatesecret_rqst(tvbuff_t *tvb, int offset,
 
        /* [in, ref] LSA_UNICODE_STRING *name */
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_lsa_name, 0);
+               hf_lsa_name);
 
        /* [in] ACCESS_MASK access */
        offset = lsa_dissect_ACCESS_MASK(tvb, offset,
@@ -2600,14 +2599,14 @@ lsa_dissect_TRUSTED_DOMAIN_INFORMATION(tvbuff_t *tvb, int offset,
        switch(level){
        case 1:
                offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                       hf_lsa_domain, 0);
+                       hf_lsa_domain);
                break;
        case 2:
                offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                        hf_lsa_count, NULL);
                offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        lsa_dissect_LSA_UNICODE_STRING_array, NDR_POINTER_UNIQUE,
-                       "Controllers pointer: ", hf_lsa_controller, 0);
+                       "Controllers pointer: ", hf_lsa_controller);
                break;
        case 3:
                offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
@@ -2674,7 +2673,7 @@ lsa_dissect_lsaqueryinfotrusteddomain_reply(tvbuff_t *tvb, int offset,
        /* [out, ref] TRUSTED_DOMAIN_INFORMATION *info */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_TRUSTED_DOMAIN_INFORMATION, NDR_POINTER_REF,
-               "TRUSTED_DOMAIN_INFORMATION pointer: info", -1, 0);
+               "TRUSTED_DOMAIN_INFORMATION pointer: info", -1);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_lsa_rc, NULL);
@@ -2697,7 +2696,7 @@ lsa_dissect_lsasetinformationtrusteddomain_rqst(tvbuff_t *tvb, int offset,
        /* [in, ref] TRUSTED_DOMAIN_INFORMATION *info */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_TRUSTED_DOMAIN_INFORMATION, NDR_POINTER_REF,
-               "TRUSTED_DOMAIN_INFORMATION pointer: info", -1, 0);
+               "TRUSTED_DOMAIN_INFORMATION pointer: info", -1);
 
        return offset;
 }
@@ -2723,7 +2722,7 @@ lsa_dissect_lsaopensecret_rqst(tvbuff_t *tvb, int offset,
 
        /* [in, ref] LSA_UNICODE_STRING *name */
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_lsa_name, 0);
+               hf_lsa_name);
 
        /* [in] ACCESS_MASK access */
        offset = lsa_dissect_ACCESS_MASK(tvb, offset,
@@ -2758,12 +2757,12 @@ lsa_dissect_lsasetsecret_rqst(tvbuff_t *tvb, int offset,
        /* [in, unique] LSA_SECRET *new_val */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_SECRET, NDR_POINTER_UNIQUE,
-               "LSA_SECRET pointer: new_val", -1, 0);
+               "LSA_SECRET pointer: new_val", -1);
 
        /* [in, unique] LSA_SECRET *old_val */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_SECRET, NDR_POINTER_UNIQUE,
-               "LSA_SECRET pointer: old_val", -1, 0);
+               "LSA_SECRET pointer: old_val", -1);
 
        return offset;
 }
@@ -2790,22 +2789,22 @@ lsa_dissect_lsaquerysecret_rqst(tvbuff_t *tvb, int offset,
        /* [in, out, unique] LSA_SECRET **curr_val */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_SECRET, NDR_POINTER_UNIQUE,
-               "LSA_SECRET pointer: curr_val", -1, 0);
+               "LSA_SECRET pointer: curr_val", -1);
 
        /* [in, out, unique] LARGE_INTEGER *curr_mtime */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_pointer_NTTIME, NDR_POINTER_UNIQUE,
-               "NTIME pointer: old_mtime", hf_lsa_cur_mtime, 0);
+               "NTIME pointer: old_mtime", hf_lsa_cur_mtime);
 
        /* [in, out, unique] LSA_SECRET **old_val */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_SECRET, NDR_POINTER_UNIQUE,
-               "LSA_SECRET pointer: old_val", -1, 0);
+               "LSA_SECRET pointer: old_val", -1);
 
        /* [in, out, unique] LARGE_INTEGER *old_mtime */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_pointer_NTTIME, NDR_POINTER_UNIQUE,
-               "NTIME pointer: old_mtime", hf_lsa_old_mtime, 0);
+               "NTIME pointer: old_mtime", hf_lsa_old_mtime);
 
        return offset;
 }
@@ -2818,22 +2817,22 @@ lsa_dissect_lsaquerysecret_reply(tvbuff_t *tvb, int offset,
        /* [in, out, unique] LSA_SECRET **curr_val */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_SECRET, NDR_POINTER_UNIQUE,
-               "LSA_SECRET pointer: curr_val", -1, 0);
+               "LSA_SECRET pointer: curr_val", -1);
 
        /* [in, out, unique] LARGE_INTEGER *curr_mtime */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_pointer_NTTIME, NDR_POINTER_UNIQUE,
-               "NTIME pointer: old_mtime", hf_lsa_cur_mtime, 0);
+               "NTIME pointer: old_mtime", hf_lsa_cur_mtime);
 
        /* [in, out, unique] LSA_SECRET **old_val */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_SECRET, NDR_POINTER_UNIQUE,
-               "LSA_SECRET pointer: old_val", -1, 0);
+               "LSA_SECRET pointer: old_val", -1);
 
        /* [in, out, unique] LARGE_INTEGER *old_mtime */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_pointer_NTTIME, NDR_POINTER_UNIQUE,
-               "NTIME pointer: old_mtime", hf_lsa_old_mtime, 0);
+               "NTIME pointer: old_mtime", hf_lsa_old_mtime);
 
        return offset;
 }
@@ -2871,7 +2870,7 @@ lsa_dissect_lsaenumerateaccountswithuserright_rqst(tvbuff_t *tvb, int offset,
        /* [in, unique] LSA_UNICODE_STRING *rights */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_pointer_UNICODE_STRING, NDR_POINTER_UNIQUE,
-               "LSA_UNICODE_STRING pointer: rights", hf_lsa_rights, 0);
+               "LSA_UNICODE_STRING pointer: rights", hf_lsa_rights);
 
        return offset;
 }
@@ -2883,7 +2882,7 @@ lsa_dissect_lsaenumerateaccountswithuserright_reply(tvbuff_t *tvb, int offset,
        /* [out, ref] LSA_UNICODE_STRING_ARRAY *accounts */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_UNICODE_STRING_ARRAY, NDR_POINTER_REF,
-               "Account pointer: names", hf_lsa_acct, 0);
+               "Account pointer: names", hf_lsa_acct);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_lsa_rc, NULL);
@@ -2914,7 +2913,7 @@ lsa_dissect_lsaenumerateaccountrights_reply(tvbuff_t *tvb, int offset,
        /* [out, ref] LSA_UNICODE_STRING_ARRAY *rights */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_UNICODE_STRING_ARRAY, NDR_POINTER_REF,
-               "Account pointer: rights", hf_lsa_rights, 0);
+               "Account pointer: rights", hf_lsa_rights);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_lsa_rc, NULL);
@@ -2937,7 +2936,7 @@ lsa_dissect_lsaaddaccountrights_rqst(tvbuff_t *tvb, int offset,
        /* [in, ref] LSA_UNICODE_STRING_ARRAY *rights */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_UNICODE_STRING_ARRAY, NDR_POINTER_REF,
-               "Account pointer: rights", hf_lsa_rights, 0);
+               "Account pointer: rights", hf_lsa_rights);
 
        return offset;
 }
@@ -2972,7 +2971,7 @@ lsa_dissect_lsaremoveaccountrights_rqst(tvbuff_t *tvb, int offset,
        /* [in, ref] LSA_UNICODE_STRING_ARRAY *rights */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_UNICODE_STRING_ARRAY, NDR_POINTER_REF,
-               "Account pointer: rights", hf_lsa_rights, 0);
+               "Account pointer: rights", hf_lsa_rights);
 
        return offset;
 }
@@ -3000,7 +2999,7 @@ lsa_dissect_lsaquerytrusteddomaininfobyname_rqst(tvbuff_t *tvb, int offset,
        /* [in, ref] LSA_UNICODE_STRING *name */
        /* domain */
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_lsa_domain, 0);
+               hf_lsa_domain);
 
        /* [in] TRUSTED_INFORMATION_CLASS level */
         offset = dissect_ndr_uint16 (tvb, offset, pinfo, tree, drep,
@@ -3017,7 +3016,7 @@ lsa_dissect_lsaquerytrusteddomaininfobyname_reply(tvbuff_t *tvb, int offset,
        /* [out, ref] TRUSTED_DOMAIN_INFORMATION *info) */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_TRUSTED_DOMAIN_INFORMATION, NDR_POINTER_REF,
-               "TRUSTED_DOMAIN_INFORMATION pointer: info", -1, 0);
+               "TRUSTED_DOMAIN_INFORMATION pointer: info", -1);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_lsa_rc, NULL);
@@ -3037,7 +3036,7 @@ lsa_dissect_lsasettrusteddomaininfobyname_rqst(tvbuff_t *tvb, int offset,
        /* [in, ref] LSA_UNICODE_STRING *name */
        /* domain */
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_lsa_domain, 0);
+               hf_lsa_domain);
 
        /* [in] TRUSTED_INFORMATION_CLASS level */
         offset = dissect_ndr_uint16 (tvb, offset, pinfo, tree, drep,
@@ -3046,7 +3045,7 @@ lsa_dissect_lsasettrusteddomaininfobyname_rqst(tvbuff_t *tvb, int offset,
        /* [in, ref] TRUSTED_DOMAIN_INFORMATION *info) */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_TRUSTED_DOMAIN_INFORMATION, NDR_POINTER_REF,
-               "TRUSTED_DOMAIN_INFORMATION pointer: info", -1, 0);
+               "TRUSTED_DOMAIN_INFORMATION pointer: info", -1);
 
        return offset;
 }
@@ -3092,7 +3091,7 @@ lsa_dissect_lsaopentrusteddomainbyname_rqst(tvbuff_t *tvb, int offset,
        /* [in, ref] LSA_UNICODE_STRING *name */
        /* domain */
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_lsa_domain, 0);
+               hf_lsa_domain);
 
        /* [in] ACCESS_MASK access */
        offset = lsa_dissect_ACCESS_MASK(tvb, offset,
@@ -3125,7 +3124,7 @@ lsa_dissect_lsaquerytrusteddomaininfo_reply(tvbuff_t *tvb, int offset,
        /* [out, ref] TRUSTED_DOMAIN_INFORMATION *info) */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_TRUSTED_DOMAIN_INFORMATION, NDR_POINTER_REF,
-               "TRUSTED_DOMAIN_INFORMATION pointer: info", -1, 0);
+               "TRUSTED_DOMAIN_INFORMATION pointer: info", -1);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_lsa_rc, NULL);
@@ -3152,7 +3151,7 @@ lsa_dissect_lsasettrusteddomaininfo_rqst(tvbuff_t *tvb, int offset,
        /* [ref, ref] TRUSTED_DOMAIN_INFORMATION *info) */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_TRUSTED_DOMAIN_INFORMATION, NDR_POINTER_REF,
-               "TRUSTED_DOMAIN_INFORMATION pointer: info", -1, 0);
+               "TRUSTED_DOMAIN_INFORMATION pointer: info", -1);
 
        return offset;
 }
@@ -3174,7 +3173,7 @@ lsa_dissect_lsaqueryinformationpolicy2_rqst(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_HANDLE, NDR_POINTER_REF,
-               "LSA_HANDLE", -1, 0);
+               "LSA_HANDLE", -1);
 
        offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep,
                hf_lsa_policy_information_class, NULL);
@@ -3190,7 +3189,7 @@ lsa_dissect_lsaqueryinformationpolicy2_reply(tvbuff_t *tvb, int offset,
          so we just ignore that one */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_POLICY_INFORMATION, NDR_POINTER_UNIQUE,
-               "POLICY_INFORMATION pointer: info", -1, 0);
+               "POLICY_INFORMATION pointer: info", -1);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_lsa_rc, NULL);
@@ -3204,14 +3203,14 @@ lsa_dissect_lsasetinformationpolicy2_rqst(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_HANDLE, NDR_POINTER_REF,
-               "LSA_HANDLE", -1, 0);
+               "LSA_HANDLE", -1);
 
        offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep,
                hf_lsa_policy_information_class, NULL);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_POLICY_INFORMATION, NDR_POINTER_REF,
-               "POLICY_INFORMATION pointer: info", -1, 0);
+               "POLICY_INFORMATION pointer: info", -1);
 
        return offset;
 }
@@ -3232,7 +3231,7 @@ lsa_dissect_lsaquerydomaininformationpolicy_rqst(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_HANDLE, NDR_POINTER_REF,
-               "LSA_HANDLE", -1, 0);
+               "LSA_HANDLE", -1);
 
        offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep,
                hf_lsa_policy_information_class, NULL);
@@ -3246,7 +3245,7 @@ lsa_dissect_lsaquerydomaininformationpolicy_reply(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_POLICY_INFORMATION, NDR_POINTER_REF,
-               "POLICY_INFORMATION pointer: info", -1, 0);
+               "POLICY_INFORMATION pointer: info", -1);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_lsa_rc, NULL);
@@ -3260,14 +3259,14 @@ lsa_dissect_lsasetdomaininformationpolicy_rqst(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_HANDLE, NDR_POINTER_REF,
-               "LSA_HANDLE", -1, 0);
+               "LSA_HANDLE", -1);
 
        offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep,
                hf_lsa_policy_information_class, NULL);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_POLICY_INFORMATION, NDR_POINTER_REF,
-               "POLICY_INFORMATION pointer: info", -1, 0);
+               "POLICY_INFORMATION pointer: info", -1);
 
        return offset;
 }
@@ -3297,12 +3296,12 @@ lsa_dissect_lsalookupnames2_rqst(tvbuff_t *tvb, int offset,
        /* [in, size_is(count), ref] LSA_UNICODE_STRING *names */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_UNICODE_STRING_array, NDR_POINTER_REF,
-               "Account pointer: names", hf_lsa_acct, 0);
+               "Account pointer: names", hf_lsa_acct);
 
        /* [in, out, ref] LSA_TRANSLATED_SIDS *rids */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_TRANSLATED_SIDS, NDR_POINTER_REF,
-               "LSA_TRANSLATED_SIDS pointer: rids", -1, 0);
+               "LSA_TRANSLATED_SIDS pointer: rids", -1);
 
        /* [in] USHORT level */
        offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep,
@@ -3331,12 +3330,12 @@ lsa_dissect_lsalookupnames2_reply(tvbuff_t *tvb, int offset,
        /* [out] LSA_REFERENCED_DOMAIN_LIST *domains */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_REFERENCED_DOMAIN_LIST, NDR_POINTER_UNIQUE,
-               "LSA_REFERENCED_DOMAIN_LIST pointer: domains", -1, 0);
+               "LSA_REFERENCED_DOMAIN_LIST pointer: domains", -1);
 
        /* [in, out, ref] LSA_TRANSLATED_SIDS *rids */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_TRANSLATED_SIDS, NDR_POINTER_REF,
-               "LSA_TRANSLATED_SIDS pointer: rids", -1, 0);
+               "LSA_TRANSLATED_SIDS pointer: rids", -1);
 
        /* [in, out, ref] ULONG *num_mapped */
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
@@ -3389,7 +3388,7 @@ lsa_dissect_lsalookupprivilegedisplayname_rqst(tvbuff_t *tvb, int offset,
 
        /* [in, ref] LSA_UNICODE_STRING *name */
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_lsa_name, 0);
+               hf_lsa_name);
 
        /* [in] USHORT unknown */
        offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep,
@@ -3410,7 +3409,7 @@ lsa_dissect_lsalookupprivilegedisplayname_reply(tvbuff_t *tvb, int offset,
        /* [out, ref] LSA_UNICODE_STRING **disp_name */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_pointer_UNICODE_STRING, NDR_POINTER_UNIQUE,
-               "NAME pointer: ", hf_lsa_privilege_name, 0);
+               "NAME pointer: ", hf_lsa_privilege_name);
 
        /* [out, ref] USHORT *size_needed */
        offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep,
@@ -3432,12 +3431,12 @@ lsa_dissect_lsastoreprivatedata_rqst(tvbuff_t *tvb, int offset,
 
        /* [in, ref] LSA_UNICODE_STRING *key */
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_lsa_key, 0);
+               hf_lsa_key);
 
        /* [in, unique] LSA_SECRET **data */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_SECRET_pointer, NDR_POINTER_UNIQUE,
-               "LSA_SECRET* pointer: data", -1, 0);
+               "LSA_SECRET* pointer: data", -1);
 
        return offset;
 }
@@ -3463,12 +3462,12 @@ lsa_dissect_lsaretrieveprivatedata_rqst(tvbuff_t *tvb, int offset,
 
        /* [in, ref] LSA_UNICODE_STRING *key */
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_lsa_key, 0);
+               hf_lsa_key);
 
        /* [in, out, ref] LSA_SECRET **data */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_SECRET_pointer, NDR_POINTER_REF,
-               "LSA_SECRET* pointer: data", -1, 0);
+               "LSA_SECRET* pointer: data", -1);
 
        return offset;
 }
@@ -3481,7 +3480,7 @@ lsa_dissect_lsaretrieveprivatedata_reply(tvbuff_t *tvb, int offset,
        /* [in, out, ref] LSA_SECRET **data */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_SECRET_pointer, NDR_POINTER_REF,
-               "LSA_SECRET* pointer: data", -1, 0);
+               "LSA_SECRET* pointer: data", -1);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_lsa_rc, NULL);
@@ -3497,7 +3496,7 @@ lsa_dissect_lsaclosetrusteddomainex_rqst(tvbuff_t *tvb, int offset,
        /* [in, out] LSA_HANDLE *tdHnd */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_HANDLE, NDR_POINTER_REF,
-               "LSA_HANDLE", -1, 0);
+               "LSA_HANDLE", -1);
 
        return offset;
 }
@@ -3511,7 +3510,7 @@ lsa_dissect_lsaclosetrusteddomainex_reply(tvbuff_t *tvb, int offset,
        /* [in, out] LSA_HANDLE *tdHnd */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_HANDLE, NDR_POINTER_REF,
-               "LSA_HANDLE", -1, 0);
+               "LSA_HANDLE", -1);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_lsa_rc, NULL);
@@ -3539,7 +3538,7 @@ lsa_dissect_LSA_TRANSLATED_NAME_EX(tvbuff_t *tvb, int offset,
 
        /* name */
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_lsa_name, 0);
+               hf_lsa_name);
 
        /* index */
         offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
@@ -3572,7 +3571,7 @@ lsa_dissect_LSA_TRANSLATED_NAMES_EX(tvbuff_t *tvb, int offset,
 
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        lsa_dissect_LSA_TRANSLATED_NAME_EX_array, NDR_POINTER_UNIQUE,
-                       "LSA_TRANSLATED_NAME_EX: pointer", -1, 0);
+                       "LSA_TRANSLATED_NAME_EX: pointer", -1);
 
        return offset;
 }
@@ -3587,11 +3586,11 @@ lsa_dissect_lsalookupsids2_rqst(tvbuff_t *tvb, int offset,
 
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        dissect_ndr_nt_PSID_ARRAY, NDR_POINTER_REF,
-                       "PSID_ARRAY", -1, 0);
+                       "PSID_ARRAY", -1);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_TRANSLATED_NAMES_EX, NDR_POINTER_REF,
-               "LSA_TRANSLATED_NAMES_EX pointer: names", -1, 0);
+               "LSA_TRANSLATED_NAMES_EX pointer: names", -1);
 
        offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep,
                hf_lsa_info_level, NULL);
@@ -3616,11 +3615,11 @@ lsa_dissect_lsalookupsids2_reply(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_REFERENCED_DOMAIN_LIST, NDR_POINTER_UNIQUE,
-               "LSA_REFERENCED_DOMAIN_LIST pointer: domains", -1, 0);
+               "LSA_REFERENCED_DOMAIN_LIST pointer: domains", -1);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_TRANSLATED_NAMES_EX, NDR_POINTER_REF,
-               "LSA_TRANSLATED_NAMES_EX pointer: names", -1, 0);
+               "LSA_TRANSLATED_NAMES_EX pointer: names", -1);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_lsa_num_mapped, NULL);
@@ -3639,17 +3638,17 @@ lsa_dissect_lsagetusername_rqst(tvbuff_t *tvb, int offset,
        /* [in, unique, string] WCHAR *server */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                dissect_lsa_openpolicy_server, NDR_POINTER_UNIQUE,
-               "Server:", hf_lsa_server, 0);
+               "Server:", hf_lsa_server);
 
        /* [in, out, ref] LSA_UNICODE_STRING **user */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_pointer_UNICODE_STRING, NDR_POINTER_UNIQUE,
-               "ACCOUNT pointer: ", hf_lsa_acct, 0);
+               "ACCOUNT pointer: ", hf_lsa_acct);
 
        /* [in, out, unique] LSA_UNICODE_STRING **domain */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_pointer_pointer_UNICODE_STRING, NDR_POINTER_UNIQUE,
-               "DOMAIN pointer: ", hf_lsa_domain, 0);
+               "DOMAIN pointer: ", hf_lsa_domain);
 
        return offset;
 }
@@ -3662,12 +3661,12 @@ lsa_dissect_lsagetusername_reply(tvbuff_t *tvb, int offset,
        /* [in, out, ref] LSA_UNICODE_STRING **user */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_pointer_UNICODE_STRING, NDR_POINTER_UNIQUE,
-               "ACCOUNT pointer: ", hf_lsa_acct, 0);
+               "ACCOUNT pointer: ", hf_lsa_acct);
 
        /* [in, out, unique] LSA_UNICODE_STRING **domain */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_pointer_pointer_UNICODE_STRING, NDR_POINTER_UNIQUE,
-               "DOMAIN pointer: ", hf_lsa_domain, 0);
+               "DOMAIN pointer: ", hf_lsa_domain);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_lsa_rc, NULL);
@@ -3686,12 +3685,12 @@ lsa_dissect_lsacreatetrusteddomainex_rqst(tvbuff_t *tvb, int offset,
        /* [in, ref] TRUSTED_DOMAIN_INFORMATION_EX *info */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_TRUST_INFORMATION_EX, NDR_POINTER_REF,
-               "TRUSTED_DOMAIN_INFORMATION_EX pointer: info", -1, 0);
+               "TRUSTED_DOMAIN_INFORMATION_EX pointer: info", -1);
 
        /* [in, ref] TRUSTED_DOMAIN_AUTH_INFORMATION *auth */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_TRUSTED_DOMAIN_AUTH_INFORMATION, NDR_POINTER_REF,
-               "TRUSTED_DOMAIN_AUTH_INFORMATION pointer: auth", -1, 0);
+               "TRUSTED_DOMAIN_AUTH_INFORMATION pointer: auth", -1);
 
        /* [in] ACCESS_MASK mask */
        offset = lsa_dissect_ACCESS_MASK(tvb, offset,
@@ -3756,7 +3755,7 @@ lsa_dissect_LSA_TRUSTED_DOMAIN_INFORMATION_LIST_EX(tvbuff_t *tvb, int offset,
        /* trust information */
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_TRUSTED_DOMAIN_INFORMATION_EX_array, NDR_POINTER_UNIQUE,
-               "TRUST INFORMATION array:", -1, 0);
+               "TRUST INFORMATION array:", -1);
 
        /* max count */
         offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
@@ -3777,7 +3776,7 @@ lsa_dissect_lsaenumeratetrusteddomainsex_reply(tvbuff_t *tvb, int offset,
        /* [out, ref] TRUSTED_DOMAIN_INFORMATION_LIST_EX *domains */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_TRUSTED_DOMAIN_INFORMATION_LIST_EX, NDR_POINTER_REF,
-               "TRUSTED_DOMAIN_INFORMATION_LIST_EX pointer: domains", -1, 0);
+               "TRUSTED_DOMAIN_INFORMATION_LIST_EX pointer: domains", -1);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_lsa_rc, NULL);
@@ -3800,7 +3799,7 @@ lsa_dissect_lsafunction_38_rqst(tvbuff_t *tvb, int offset,
        /* [in, ref] LSA_SECURITY_DESCRIPTOR *sd */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_SECURITY_DESCRIPTOR, NDR_POINTER_REF,
-               "LSA_SECURITY_DESCRIPTOR pointer: sd", -1, 0);
+               "LSA_SECURITY_DESCRIPTOR pointer: sd", -1);
 
        return offset;
 }
@@ -3813,7 +3812,7 @@ lsa_dissect_lsafunction_38_reply(tvbuff_t *tvb, int offset,
        /* [out, ref] LSA_SECURITY_DESCRIPTOR **psd) */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_SECURITY_DESCRIPTOR, NDR_POINTER_UNIQUE,
-               "LSA_SECURITY_DESCRIPTOR pointer: psd)", -1, 0);
+               "LSA_SECURITY_DESCRIPTOR pointer: psd)", -1);
 
        return offset;
 }
@@ -3829,12 +3828,12 @@ lsa_dissect_lsafunction_3b_rqst(tvbuff_t *tvb, int offset,
        /* [in, ref] TRUSTED_DOMAIN_INFORMATION_EX *info */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_TRUST_INFORMATION_EX, NDR_POINTER_REF,
-               "TRUSTED_DOMAIN_INFORMATION_EX pointer: info", -1, 0);
+               "TRUSTED_DOMAIN_INFORMATION_EX pointer: info", -1);
 
        /* [in, ref] LSA_SECURITY_DESCRIPTOR *sd */
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_SECURITY_DESCRIPTOR, NDR_POINTER_REF,
-               "LSA_SECURITY_DESCRIPTOR pointer: sd", -1, 0);
+               "LSA_SECURITY_DESCRIPTOR pointer: sd", -1);
 
        /* [in] ULONG unknown */
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
index ce21b26f487b2065b32edeeec788ebb2e09f31b7..6ecf864d16546b8497963dfe9bc6198cc6e9589a 100644 (file)
@@ -2,7 +2,7 @@
  * Routines for MS Exchange MAPI
  * Copyright 2002, Ronnie Sahlberg
  *
- * $Id: packet-dcerpc-mapi.c,v 1.14 2002/11/28 03:57:50 guy Exp $
+ * $Id: packet-dcerpc-mapi.c,v 1.15 2003/01/28 06:39:40 tpot Exp $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -238,7 +238,7 @@ mapi_logon_rqst(tvbuff_t *tvb, int offset,
 {
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        dissect_ndr_nt_STRING_string, NDR_POINTER_REF,
-                       "unknown string", hf_mapi_unknown_string, -1);
+                       "unknown string", hf_mapi_unknown_string);
 
         DISSECT_UNKNOWN(tvb_length_remaining(tvb, offset));
 
@@ -259,13 +259,13 @@ mapi_logon_reply(tvbuff_t *tvb, int offset,
 
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        dissect_ndr_nt_STRING_string, NDR_POINTER_REF,
-                       "unknown string", hf_mapi_unknown_string, -1);
+                       "unknown string", hf_mapi_unknown_string);
 
         DISSECT_UNKNOWN(6); /* possibly 1 or 2 bytes padding here */
 
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        dissect_ndr_nt_STRING_string, NDR_POINTER_REF,
-                       "unknown string", hf_mapi_unknown_string, -1);
+                       "unknown string", hf_mapi_unknown_string);
 
         DISSECT_UNKNOWN( tvb_length_remaining(tvb, offset)-4 );
 
@@ -287,7 +287,7 @@ mapi_unknown_02_request(tvbuff_t *tvb, int offset,
                   encrypted data */
                        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                                dissect_ndr_nt_STRING_string, NDR_POINTER_REF,
-                               "unknown data", hf_mapi_unknown_data, -1);
+                               "unknown data", hf_mapi_unknown_data);
        } else {
                offset = mapi_decrypt_pdu(tvb, offset, pinfo, tree, drep);
        }
@@ -313,7 +313,7 @@ mapi_unknown_02_reply(tvbuff_t *tvb, int offset,
                   encrypted data */
                        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                                dissect_ndr_nt_STRING_string, NDR_POINTER_REF,
-                               "unknown data", hf_mapi_unknown_data, -1);
+                               "unknown data", hf_mapi_unknown_data);
        } else {
                offset = mapi_decrypt_pdu(tvb, offset, pinfo, tree, drep);
        }
index 15549823d4100fad7b97c72b1bb6bff1a24880a4..bd7ec66e8de54707923cadf5bbac8f0993044c31 100644 (file)
@@ -1,9 +1,9 @@
 /* packet-dcerpc-netlogon.c
- * Routines for SMB \\PIPE\\NETLOGON packet disassembly
+ * Routines for SMB \PIPE\NETLOGON packet disassembly
  * Copyright 2001,2003 Tim Potter <tpot@samba.org>
  *  2002 structure and command dissectors by Ronnie Sahlberg
  *
- * $Id: packet-dcerpc-netlogon.c,v 1.65 2003/01/14 05:09:16 tpot Exp $
+ * $Id: packet-dcerpc-netlogon.c,v 1.66 2003/01/28 06:39:40 tpot Exp $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -261,9 +261,9 @@ netlogon_dissect_LOGONSRV_HANDLE(tvbuff_t *tvb, int offset,
                        packet_info *pinfo, proto_tree *tree,
                        char *drep)
 {
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-               "Server Handle", hf_netlogon_logonsrv_handle, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_UNIQUE, "Server Handle", 
+               hf_netlogon_logonsrv_handle);
 
        return offset;
 }
@@ -300,9 +300,9 @@ netlogon_dissect_VALIDATION_UAS_INFO(tvbuff_t *tvb, int offset,
                return offset;
        }
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-               "Effective Account", hf_netlogon_acct_name, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_UNIQUE, "Effective Account", 
+               hf_netlogon_acct_name);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_netlogon_priv, NULL);
@@ -341,17 +341,14 @@ netlogon_dissect_VALIDATION_UAS_INFO(tvbuff_t *tvb, int offset,
        proto_tree_add_text(tree, tvb, offset, 4, "PW Must Change: unknown time format");
        offset+= 4;
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-               "Computer", hf_netlogon_computer_name, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_UNIQUE, "Computer", hf_netlogon_computer_name);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-               "Domain", hf_netlogon_domain_name, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_UNIQUE, "Domain", hf_netlogon_domain_name);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-               "Script", hf_netlogon_logon_script, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_UNIQUE, "Script", hf_netlogon_logon_script);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_netlogon_reserved, NULL);
@@ -374,13 +371,11 @@ netlogon_dissect_netlogonuaslogon_rqst(tvbuff_t *tvb, int offset,
        offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset,
                pinfo, tree, drep);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_REF,
-               "Account", hf_netlogon_acct_name, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_REF, "Account", hf_netlogon_acct_name);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_REF,
-               "Workstation", hf_netlogon_workstation, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_REF, "Workstation", hf_netlogon_workstation);
 
        return offset;
 }
@@ -392,7 +387,7 @@ netlogon_dissect_netlogonuaslogon_reply(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_VALIDATION_UAS_INFO, NDR_POINTER_UNIQUE,
-               "VALIDATION_UAS_INFO", -1, 0);
+               "VALIDATION_UAS_INFO", -1);
 
        offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                                  hf_netlogon_rc, NULL);
@@ -443,13 +438,11 @@ netlogon_dissect_netlogonuaslogoff_rqst(tvbuff_t *tvb, int offset,
        offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset,
                pinfo, tree, drep);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_REF,
-               "Account", hf_netlogon_acct_name, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_REF, "Account", hf_netlogon_acct_name);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_REF,
-               "Workstation", hf_netlogon_workstation, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_REF, "Workstation", hf_netlogon_workstation);
 
        return offset;
 }
@@ -461,7 +454,7 @@ netlogon_dissect_netlogonuaslogoff_reply(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_LOGOFF_UAS_INFO, NDR_POINTER_REF,
-               "LOGOFF_UAS_INFO", -1, 0);
+               "LOGOFF_UAS_INFO", -1);
 
        offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                                  hf_netlogon_rc, NULL);
@@ -497,7 +490,7 @@ netlogon_dissect_LOGON_IDENTITY_INFO(tvbuff_t *tvb, int offset,
        }
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_logon_dom, 0);
+               hf_netlogon_logon_dom);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_netlogon_param_ctrl, NULL);
@@ -506,10 +499,10 @@ netlogon_dissect_LOGON_IDENTITY_INFO(tvbuff_t *tvb, int offset,
                hf_netlogon_logon_id, NULL);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_acct_name, 0);
+               hf_netlogon_acct_name);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_workstation, 0);
+               hf_netlogon_workstation);
 
 #ifdef REMOVED
        /* NetMon does not recognize these bytes. Ill comment them out until someone complains */
@@ -662,10 +655,10 @@ netlogon_dissect_NETWORK_INFO(tvbuff_t *tvb, int offset,
                pinfo, tree, drep);
 
        offset = dissect_ndr_nt_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_nt_chal_resp, 0);
+               hf_netlogon_nt_chal_resp);
 
        offset = dissect_ndr_nt_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_lm_chal_resp, 0);
+               hf_netlogon_lm_chal_resp);
 
        return offset;
 }
@@ -716,17 +709,17 @@ netlogon_dissect_LEVEL(tvbuff_t *tvb, int offset,
        case 1:
                offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        netlogon_dissect_INTERACTIVE_INFO, NDR_POINTER_UNIQUE,
-                       "INTERACTIVE_INFO:", -1, 0);
+                       "INTERACTIVE_INFO:", -1);
                break;
        case 2:
                offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        netlogon_dissect_NETWORK_INFO, NDR_POINTER_UNIQUE,
-                       "NETWORK_INFO:", -1, 0);
+                       "NETWORK_INFO:", -1);
                break;
        case 3:
                offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        netlogon_dissect_SERVICE_INFO, NDR_POINTER_UNIQUE,
-                       "SERVICE_INFO:", -1, 0);
+                       "SERVICE_INFO:", -1);
                break;
        }
 
@@ -918,22 +911,22 @@ netlogon_dissect_VALIDATION_SAM_INFO(tvbuff_t *tvb, int offset,
                hf_netlogon_pwd_must_change_time);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_acct_name, 0);
+               hf_netlogon_acct_name);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_full_name, 0);
+               hf_netlogon_full_name);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_logon_script, 0);
+               hf_netlogon_logon_script);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_profile_path, 0);
+               hf_netlogon_profile_path);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_home_dir, 0);
+               hf_netlogon_home_dir);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_dir_drive, 0);
+               hf_netlogon_dir_drive);
 
        offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep,
                hf_netlogon_logon_count16, NULL);
@@ -952,7 +945,7 @@ netlogon_dissect_VALIDATION_SAM_INFO(tvbuff_t *tvb, int offset,
 
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_GROUP_MEMBERSHIP_ARRAY, NDR_POINTER_UNIQUE,
-               "GROUP_MEMBERSHIP_ARRAY", -1, 0);
+               "GROUP_MEMBERSHIP_ARRAY", -1);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_netlogon_user_flags, NULL);
@@ -961,10 +954,10 @@ netlogon_dissect_VALIDATION_SAM_INFO(tvbuff_t *tvb, int offset,
                pinfo, tree, drep);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_logon_srv, 0);
+               hf_netlogon_logon_srv);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_logon_dom, 0);
+               hf_netlogon_logon_dom);
 
        offset = dissect_ndr_nt_PSID(tvb, offset,
                pinfo, tree, drep);
@@ -1035,22 +1028,22 @@ netlogon_dissect_VALIDATION_SAM_INFO2(tvbuff_t *tvb, int offset,
                hf_netlogon_pwd_must_change_time);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_acct_name, 0);
+               hf_netlogon_acct_name);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_full_name, 0);
+               hf_netlogon_full_name);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_logon_script, 0);
+               hf_netlogon_logon_script);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_profile_path, 0);
+               hf_netlogon_profile_path);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_home_dir, 0);
+               hf_netlogon_home_dir);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_dir_drive, 0);
+               hf_netlogon_dir_drive);
 
        offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep,
                hf_netlogon_logon_count16, NULL);
@@ -1069,7 +1062,7 @@ netlogon_dissect_VALIDATION_SAM_INFO2(tvbuff_t *tvb, int offset,
 
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_GROUP_MEMBERSHIP_ARRAY, NDR_POINTER_UNIQUE,
-               "GROUP_MEMBERSHIP_ARRAY", -1, 0);
+               "GROUP_MEMBERSHIP_ARRAY", -1);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_netlogon_user_flags, NULL);
@@ -1078,10 +1071,10 @@ netlogon_dissect_VALIDATION_SAM_INFO2(tvbuff_t *tvb, int offset,
                pinfo, tree, drep);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_logon_srv, 0);
+               hf_netlogon_logon_srv);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_logon_dom, 0);
+               hf_netlogon_logon_dom);
 
        offset = dissect_ndr_nt_PSID(tvb, offset,
                pinfo, tree, drep);
@@ -1096,7 +1089,7 @@ netlogon_dissect_VALIDATION_SAM_INFO2(tvbuff_t *tvb, int offset,
 
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                dissect_ndr_nt_SID_AND_ATTRIBUTES_ARRAY, NDR_POINTER_UNIQUE,
-               "SID_AND_ATTRIBUTES_ARRAY:", -1, 0);
+               "SID_AND_ATTRIBUTES_ARRAY:", -1);
 
        return offset;
 }
@@ -1180,24 +1173,22 @@ netlogon_dissect_VALIDATION_PAC_INFO(tvbuff_t *tvb, int offset,
                hf_netlogon_pac_size, NULL);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               netlogon_dissect_PAC, NDR_POINTER_UNIQUE,
-               "PAC:", -1, 0);
+               netlogon_dissect_PAC, NDR_POINTER_UNIQUE, "PAC:", -1);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_logon_dom, 0);
+               hf_netlogon_logon_dom);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_logon_srv, 0);
+               hf_netlogon_logon_srv);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_principal, 0);
+               hf_netlogon_principal);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_netlogon_auth_size, NULL);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               netlogon_dissect_AUTH, NDR_POINTER_UNIQUE,
-               "AUTH:", -1, 0);
+               netlogon_dissect_AUTH, NDR_POINTER_UNIQUE, "AUTH:", -1);
 
        offset = netlogon_dissect_USER_SESSION_KEY(tvb, offset,
                pinfo, tree, drep);
@@ -1208,16 +1199,16 @@ netlogon_dissect_VALIDATION_PAC_INFO(tvbuff_t *tvb, int offset,
        }
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_dummy, 0);
+               hf_netlogon_dummy);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_dummy, 0);
+               hf_netlogon_dummy);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_dummy, 0);
+               hf_netlogon_dummy);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_dummy, 0);
+               hf_netlogon_dummy);
 
        return offset;
 }
@@ -1246,22 +1237,22 @@ netlogon_dissect_VALIDATION(tvbuff_t *tvb, int offset,
        case 2:
                offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        netlogon_dissect_VALIDATION_SAM_INFO, NDR_POINTER_UNIQUE,
-                       "VALIDATION_SAM_INFO:", -1, 0);
+                       "VALIDATION_SAM_INFO:", -1);
                break;
        case 3:
                offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        netlogon_dissect_VALIDATION_SAM_INFO2, NDR_POINTER_UNIQUE,
-                       "VALIDATION_SAM_INFO2:", -1, 0);
+                       "VALIDATION_SAM_INFO2:", -1);
                break;
        case 4:
                offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        netlogon_dissect_VALIDATION_PAC_INFO, NDR_POINTER_UNIQUE,
-                       "VALIDATION_PAC_INFO:", -1, 0);
+                       "VALIDATION_PAC_INFO:", -1);
                break;
        case 5:
                offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        netlogon_dissect_VALIDATION_PAC_INFO, NDR_POINTER_UNIQUE,
-                       "VALIDATION_PAC_INFO:", -1, 0);
+                       "VALIDATION_PAC_INFO:", -1);
                break;
        }
 
@@ -1289,24 +1280,24 @@ netlogon_dissect_netlogonsamlogon_rqst(tvbuff_t *tvb, int offset,
        offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset,
                pinfo, tree, drep);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-               "Computer Name", hf_netlogon_computer_name, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_UNIQUE, "Computer Name", 
+               hf_netlogon_computer_name);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_AUTHENTICATOR, NDR_POINTER_UNIQUE,
-               "AUTHENTICATOR: credential", -1, 0);
+               "AUTHENTICATOR: credential", -1);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_AUTHENTICATOR, NDR_POINTER_UNIQUE,
-               "AUTHENTICATOR: return_authenticator", -1, 0);
+               "AUTHENTICATOR: return_authenticator", -1);
 
        offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep,
                hf_netlogon_level16, NULL);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_LEVEL, NDR_POINTER_REF,
-               "LEVEL: LogonLevel", -1, 0);
+               "LEVEL: LogonLevel", -1);
 
        offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep,
                hf_netlogon_validation_level, NULL);
@@ -1320,11 +1311,11 @@ netlogon_dissect_netlogonsamlogon_reply(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_AUTHENTICATOR, NDR_POINTER_UNIQUE,
-               "AUTHENTICATOR: return_authenticator", -1, 0);
+               "AUTHENTICATOR: return_authenticator", -1);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_VALIDATION, NDR_POINTER_REF,
-               "VALIDATION:", -1, 0);
+               "VALIDATION:", -1);
 
        offset = dissect_ndr_uint8(tvb, offset, pinfo, tree, drep,
                hf_netlogon_authoritative, NULL);
@@ -1353,24 +1344,24 @@ netlogon_dissect_netlogonsamlogoff_rqst(tvbuff_t *tvb, int offset,
        offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset,
                pinfo, tree, drep);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-               "Computer Name", hf_netlogon_computer_name, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_UNIQUE, "Computer Name", 
+               hf_netlogon_computer_name);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_AUTHENTICATOR, NDR_POINTER_UNIQUE,
-               "AUTHENTICATOR: credential", -1, 0);
+               "AUTHENTICATOR: credential", -1);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_AUTHENTICATOR, NDR_POINTER_UNIQUE,
-               "AUTHENTICATOR: return_authenticator", -1, 0);
+               "AUTHENTICATOR: return_authenticator", -1);
 
        offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep,
                hf_netlogon_level16, NULL);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_LEVEL, NDR_POINTER_REF,
-               "LEVEL: logoninformation", -1, 0);
+               "LEVEL: logoninformation", -1);
 
        return offset;
 }
@@ -1381,7 +1372,7 @@ netlogon_dissect_netlogonsamlogoff_reply(tvbuff_t *tvb, int offset,
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_AUTHENTICATOR, NDR_POINTER_UNIQUE,
-               "AUTHENTICATOR: return_authenticator", -1, 0);
+               "AUTHENTICATOR: return_authenticator", -1);
 
        offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                                  hf_netlogon_rc, NULL);
@@ -1405,13 +1396,12 @@ netlogon_dissect_netserverreqchallenge_rqst(tvbuff_t *tvb, int offset,
        offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset,
                pinfo, tree, drep);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_REF,
-               "Computer Name", hf_netlogon_computer_name, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_REF, "Computer Name", hf_netlogon_computer_name);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_CREDENTIAL, NDR_POINTER_REF,
-               "CREDENTIAL: client challenge", -1, 0);
+               "CREDENTIAL: client challenge", -1);
 
        return offset;
 }
@@ -1421,7 +1411,7 @@ netlogon_dissect_netserverreqchallenge_reply(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_CREDENTIAL, NDR_POINTER_REF,
-               "CREDENTIAL: server credential", -1, 0);
+               "CREDENTIAL: server credential", -1);
 
        offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                                  hf_netlogon_rc, NULL);
@@ -1459,20 +1449,18 @@ netlogon_dissect_netserverauthenticate_rqst(tvbuff_t *tvb, int offset,
        offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset,
                pinfo, tree, drep);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_REF,
-               "User Name", hf_netlogon_acct_name, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_REF, "User Name", hf_netlogon_acct_name);
 
        offset = netlogon_dissect_NETLOGON_SECURE_CHANNEL_TYPE(tvb, offset,
                pinfo, tree, drep);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_REF,
-               "Computer Name", hf_netlogon_computer_name, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_REF, "Computer Name", hf_netlogon_computer_name);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_CREDENTIAL, NDR_POINTER_REF,
-               "CREDENTIAL: client challenge", -1, 0);
+               "CREDENTIAL: client challenge", -1);
 
        return offset;
 }
@@ -1482,7 +1470,7 @@ netlogon_dissect_netserverauthenticate_reply(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_CREDENTIAL, NDR_POINTER_REF,
-               "CREDENTIAL: server challenge", -1, 0);
+               "CREDENTIAL: server challenge", -1);
 
        offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                                  hf_netlogon_rc, NULL);
@@ -1535,24 +1523,22 @@ netlogon_dissect_netserverpasswordset_rqst(tvbuff_t *tvb, int offset,
        offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset,
                pinfo, tree, drep);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_REF,
-               "User Name", hf_netlogon_acct_name, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_REF, "User Name", hf_netlogon_acct_name);
 
        offset = netlogon_dissect_NETLOGON_SECURE_CHANNEL_TYPE(tvb, offset,
                pinfo, tree, drep);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_REF,
-               "Computer Name", hf_netlogon_computer_name, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_REF, "Computer Name", hf_netlogon_computer_name);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF,
-               "AUTHENTICATOR: credential", -1, 0);
+               "AUTHENTICATOR: credential", -1);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_ENCRYPTED_LM_OWF_PASSWORD, NDR_POINTER_REF,
-               "ENCRYPTED_LM_OWF_PASSWORD: hashed_pwd", -1, 0);
+               "ENCRYPTED_LM_OWF_PASSWORD: hashed_pwd", -1);
 
        return offset;
 }
@@ -1562,7 +1548,7 @@ netlogon_dissect_netserverpasswordset_reply(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF,
-               "AUTHENTICATOR: return_authenticator", -1, 0);
+               "AUTHENTICATOR: return_authenticator", -1);
 
        offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                                  hf_netlogon_rc, NULL);
@@ -1589,21 +1575,20 @@ netlogon_dissect_DELTA_DELETE_USER(tvbuff_t *tvb, int offset,
                        packet_info *pinfo, proto_tree *tree,
                        char *drep)
 {
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-               "Account Name", hf_netlogon_acct_name, -1);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_UNIQUE, "Account Name", hf_netlogon_acct_name);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_dummy, 0);
+               hf_netlogon_dummy);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_dummy, 0);
+               hf_netlogon_dummy);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_dummy, 0);
+               hf_netlogon_dummy);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_dummy, 0);
+               hf_netlogon_dummy);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_netlogon_reserved, NULL);
@@ -1664,7 +1649,7 @@ netlogon_dissect_USER_PRIVATE_INFO(tvbuff_t *tvb, int offset,
 
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_SENSITIVE_DATA, NDR_POINTER_UNIQUE,
-               "SENSITIVE_DATA", -1, 0);
+               "SENSITIVE_DATA", -1);
 
        return offset;
 }
@@ -1716,10 +1701,10 @@ netlogon_dissect_DELTA_USER(tvbuff_t *tvb, int offset,
                        char *drep)
 {
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_acct_name, 0);
+               hf_netlogon_acct_name);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_full_name, 0);
+               hf_netlogon_full_name);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_netlogon_user_rid, NULL);
@@ -1728,19 +1713,19 @@ netlogon_dissect_DELTA_USER(tvbuff_t *tvb, int offset,
                hf_netlogon_group_rid, NULL);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_home_dir, 0);
+               hf_netlogon_home_dir);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_dir_drive, 0);
+               hf_netlogon_dir_drive);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_logon_script, 0);
+               hf_netlogon_logon_script);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_acct_desc, 0);
+               hf_netlogon_acct_desc);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_workstations, 0);
+               hf_netlogon_workstations);
 
        offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep,
                hf_netlogon_logon_time);
@@ -1780,10 +1765,10 @@ netlogon_dissect_DELTA_USER(tvbuff_t *tvb, int offset,
                hf_netlogon_pwd_expired, NULL);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_comment, 0);
+               hf_netlogon_comment);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_parameters, 0);
+               hf_netlogon_parameters);
 
        offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep,
                hf_netlogon_country, NULL);
@@ -1801,16 +1786,16 @@ netlogon_dissect_DELTA_USER(tvbuff_t *tvb, int offset,
                pinfo, tree, drep);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_dummy, 0);
+               hf_netlogon_dummy);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_dummy, 0);
+               hf_netlogon_dummy);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_dummy, 0);
+               hf_netlogon_dummy);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_dummy, 0);
+               hf_netlogon_dummy);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_netlogon_reserved, NULL);
@@ -1857,10 +1842,10 @@ netlogon_dissect_DELTA_DOMAIN(tvbuff_t *tvb, int offset,
                        char *drep)
 {
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_domain_name, 1);
+               hf_netlogon_domain_name);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_oem_info, 0);
+               hf_netlogon_oem_info);
 
        offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep,
                hf_netlogon_kickoff_time);
@@ -1890,16 +1875,16 @@ netlogon_dissect_DELTA_DOMAIN(tvbuff_t *tvb, int offset,
                pinfo, tree, drep);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_dummy, 0);
+               hf_netlogon_dummy);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_dummy, 0);
+               hf_netlogon_dummy);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_dummy, 0);
+               hf_netlogon_dummy);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_dummy, 0);
+               hf_netlogon_dummy);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_netlogon_reserved, NULL);
@@ -1940,13 +1925,13 @@ netlogon_dissect_DELTA_GROUP(tvbuff_t *tvb, int offset,
                        char *drep)
 {
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_group_name, 1);
+               hf_netlogon_group_name);
 
        offset = netlogon_dissect_GROUP_MEMBERSHIP(tvb, offset,
                pinfo, tree, drep);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_group_desc, 0);
+               hf_netlogon_group_desc);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_netlogon_security_information, NULL);
@@ -1955,16 +1940,16 @@ netlogon_dissect_DELTA_GROUP(tvbuff_t *tvb, int offset,
                pinfo, tree, drep);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_dummy, 0);
+               hf_netlogon_dummy);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_dummy, 0);
+               hf_netlogon_dummy);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_dummy, 0);
+               hf_netlogon_dummy);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_dummy, 0);
+               hf_netlogon_dummy);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_netlogon_reserved, NULL);
@@ -2006,22 +1991,22 @@ netlogon_dissect_DELTA_RENAME(tvbuff_t *tvb, int offset,
        di=pinfo->private_data;
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               di->hf_index, 1);
+               di->hf_index);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               di->hf_index, 1);
+               di->hf_index);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_dummy, 0);
+               hf_netlogon_dummy);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_dummy, 0);
+               hf_netlogon_dummy);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_dummy, 0);
+               hf_netlogon_dummy);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_dummy, 0);
+               hf_netlogon_dummy);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_netlogon_reserved, NULL);
@@ -2101,11 +2086,11 @@ netlogon_dissect_DELTA_GROUP_MEMBER(tvbuff_t *tvb, int offset,
 {
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_RID_array, NDR_POINTER_UNIQUE,
-               "RIDs:", -1, 0);
+               "RIDs:", -1);
 
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_ATTRIB_array, NDR_POINTER_UNIQUE,
-               "Attribs:", -1, 0);
+               "Attribs:", -1);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_netlogon_num_rids, NULL);
@@ -2148,7 +2133,7 @@ netlogon_dissect_DELTA_ALIAS(tvbuff_t *tvb, int offset,
                        char *drep)
 {
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_alias_name, 1);
+               hf_netlogon_alias_name);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_netlogon_alias_rid, NULL);
@@ -2160,16 +2145,16 @@ netlogon_dissect_DELTA_ALIAS(tvbuff_t *tvb, int offset,
                pinfo, tree, drep);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_dummy, 0);
+               hf_netlogon_dummy);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_dummy, 0);
+               hf_netlogon_dummy);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_dummy, 0);
+               hf_netlogon_dummy);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_dummy, 0);
+               hf_netlogon_dummy);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_netlogon_reserved, NULL);
@@ -2333,10 +2318,10 @@ netlogon_dissect_DELTA_POLICY(tvbuff_t *tvb, int offset,
 
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_EVENT_AUDIT_OPTIONS_ARRAY, NDR_POINTER_UNIQUE,
-               "Event Audit Options:", -1, 0);
+               "Event Audit Options:", -1);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_domain_name, 0);
+               hf_netlogon_domain_name);
 
        offset = dissect_ndr_nt_PSID(tvb, offset,
                pinfo, tree, drep);
@@ -2357,16 +2342,16 @@ netlogon_dissect_DELTA_POLICY(tvbuff_t *tvb, int offset,
                pinfo, tree, drep);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_dummy, 0);
+               hf_netlogon_dummy);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_dummy, 0);
+               hf_netlogon_dummy);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_dummy, 0);
+               hf_netlogon_dummy);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_dummy, 0);
+               hf_netlogon_dummy);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_netlogon_reserved, NULL);
@@ -2390,7 +2375,7 @@ netlogon_dissect_CONTROLLER(tvbuff_t *tvb, int offset,
                        char *drep)
 {
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_dc_name, 1);
+               hf_netlogon_dc_name);
 
        return offset;
 }
@@ -2430,14 +2415,14 @@ netlogon_dissect_DELTA_TRUSTED_DOMAINS(tvbuff_t *tvb, int offset,
                        char *drep)
 {
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_domain_name, 0);
+               hf_netlogon_domain_name);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_netlogon_num_controllers, NULL);
 
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_CONTROLLER_ARRAY, NDR_POINTER_UNIQUE,
-               "Domain Controllers:", -1, 0);
+               "Domain Controllers:", -1);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_netlogon_security_information, NULL);
@@ -2446,16 +2431,16 @@ netlogon_dissect_DELTA_TRUSTED_DOMAINS(tvbuff_t *tvb, int offset,
                pinfo, tree, drep);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_dummy, 0);
+               hf_netlogon_dummy);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_dummy, 0);
+               hf_netlogon_dummy);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_dummy, 0);
+               hf_netlogon_dummy);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_dummy, 0);
+               hf_netlogon_dummy);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_netlogon_reserved, NULL);
@@ -2501,7 +2486,7 @@ netlogon_dissect_PRIV_NAME(tvbuff_t *tvb, int offset,
                        char *drep)
 {
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_privilege_name, 1);
+               hf_netlogon_privilege_name);
 
        return offset;
 }
@@ -2551,11 +2536,11 @@ netlogon_dissect_DELTA_ACCOUNTS(tvbuff_t *tvb, int offset,
 
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_PRIV_ATTR_ARRAY, NDR_POINTER_UNIQUE,
-               "PRIV_ATTR_ARRAY:", -1, 0);
+               "PRIV_ATTR_ARRAY:", -1);
 
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_PRIV_NAME_ARRAY, NDR_POINTER_UNIQUE,
-               "PRIV_NAME_ARRAY:", -1, 0);
+               "PRIV_NAME_ARRAY:", -1);
 
        offset = netlogon_dissect_QUOTA_LIMITS(tvb, offset,
                pinfo, tree, drep);
@@ -2570,16 +2555,16 @@ netlogon_dissect_DELTA_ACCOUNTS(tvbuff_t *tvb, int offset,
                pinfo, tree, drep);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_dummy, 0);
+               hf_netlogon_dummy);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_dummy, 0);
+               hf_netlogon_dummy);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_dummy, 0);
+               hf_netlogon_dummy);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_dummy, 0);
+               hf_netlogon_dummy);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_netlogon_reserved, NULL);
@@ -2655,7 +2640,7 @@ netlogon_dissect_CIPHER_VALUE(tvbuff_t *tvb, int offset,
 
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_CIPHER_VALUE_DATA, NDR_POINTER_UNIQUE,
-               name, hf_index, 0);
+               name, hf_index);
 
        proto_item_set_len(item, offset-old_offset);
        return offset;
@@ -2707,16 +2692,16 @@ netlogon_dissect_DELTA_SECRET(tvbuff_t *tvb, int offset,
                pinfo, tree, drep);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_dummy, 0);
+               hf_netlogon_dummy);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_dummy, 0);
+               hf_netlogon_dummy);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_dummy, 0);
+               hf_netlogon_dummy);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_dummy, 0);
+               hf_netlogon_dummy);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_netlogon_reserved, NULL);
@@ -2830,82 +2815,82 @@ netlogon_dissect_DELTA_UNION(tvbuff_t *tvb, int offset,
        case 1:
                offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        netlogon_dissect_DELTA_DOMAIN, NDR_POINTER_UNIQUE,
-                       "DELTA_DOMAIN:", -1, 0);
+                       "DELTA_DOMAIN:", -1);
                break;
        case 2:
                offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        netlogon_dissect_DELTA_GROUP, NDR_POINTER_UNIQUE,
-                       "DELTA_GROUP:", -1, 0);
+                       "DELTA_GROUP:", -1);
                break;
        case 4:
                offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        netlogon_dissect_DELTA_RENAME, NDR_POINTER_UNIQUE,
-                       "DELTA_RENAME_GROUP:", hf_netlogon_group_name, 0);
+                       "DELTA_RENAME_GROUP:", hf_netlogon_group_name);
                break;
        case 5:
                offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        netlogon_dissect_DELTA_USER, NDR_POINTER_UNIQUE,
-                       "DELTA_USER:", -1, 0);
+                       "DELTA_USER:", -1);
                break;
        case 7:
                offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        netlogon_dissect_DELTA_RENAME, NDR_POINTER_UNIQUE,
-                       "DELTA_RENAME_USER:", hf_netlogon_acct_name, 0);
+                       "DELTA_RENAME_USER:", hf_netlogon_acct_name);
                break;
        case 8:
                offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        netlogon_dissect_DELTA_GROUP_MEMBER, NDR_POINTER_UNIQUE,
-                       "DELTA_GROUP_MEMBER:", -1, 0);
+                       "DELTA_GROUP_MEMBER:", -1);
                break;
        case 9:
                offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        netlogon_dissect_DELTA_ALIAS, NDR_POINTER_UNIQUE,
-                       "DELTA_ALIAS:", -1, 0);
+                       "DELTA_ALIAS:", -1);
                break;
        case 11:
                offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        netlogon_dissect_DELTA_RENAME, NDR_POINTER_UNIQUE,
-                       "DELTA_RENAME_ALIAS:", hf_netlogon_alias_name, 0);
+                       "DELTA_RENAME_ALIAS:", hf_netlogon_alias_name);
                break;
        case 12:
                offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        netlogon_dissect_DELTA_ALIAS_MEMBER, NDR_POINTER_UNIQUE,
-                       "DELTA_ALIAS_MEMBER:", -1, 0);
+                       "DELTA_ALIAS_MEMBER:", -1);
                break;
        case 13:
                offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        netlogon_dissect_DELTA_POLICY, NDR_POINTER_UNIQUE,
-                       "DELTA_POLICY:", -1, 0);
+                       "DELTA_POLICY:", -1);
                break;
        case 14:
                offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        netlogon_dissect_DELTA_TRUSTED_DOMAINS, NDR_POINTER_UNIQUE,
-                       "DELTA_TRUSTED_DOMAINS:", -1, 0);
+                       "DELTA_TRUSTED_DOMAINS:", -1);
                break;
        case 16:
                offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        netlogon_dissect_DELTA_ACCOUNTS, NDR_POINTER_UNIQUE,
-                       "DELTA_ACCOUNTS:", -1, 0);
+                       "DELTA_ACCOUNTS:", -1);
                break;
        case 18:
                offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        netlogon_dissect_DELTA_SECRET, NDR_POINTER_UNIQUE,
-                       "DELTA_SECRET:", -1, 0);
+                       "DELTA_SECRET:", -1);
                break;
        case 20:
                offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        netlogon_dissect_DELTA_DELETE_USER, NDR_POINTER_UNIQUE,
-                       "DELTA_DELETE_GROUP:", -1, 0);
+                       "DELTA_DELETE_GROUP:", -1);
                break;
        case 21:
                offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        netlogon_dissect_DELTA_DELETE_USER, NDR_POINTER_UNIQUE,
-                       "DELTA_DELETE_USER:", -1, 0);
+                       "DELTA_DELETE_USER:", -1);
                break;
        case 22:
                offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        netlogon_dissect_MODIFIED_COUNT, NDR_POINTER_UNIQUE,
-                       "MODIFIED_COUNT:", -1, 0);
+                       "MODIFIED_COUNT:", -1);
                break;
        }
 
@@ -3030,14 +3015,14 @@ netlogon_dissect_DELTA_ID_UNION(tvbuff_t *tvb, int offset,
                        pinfo, tree, drep);
                break;
        case 18:
-               offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-                       dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-                       "unknown", hf_netlogon_unknown_string, -1);
+               offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, 
+                       tree, drep, NDR_POINTER_UNIQUE, "unknown", 
+                       hf_netlogon_unknown_string);
                break;
        case 19:
-               offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-                       dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-                       "unknown", hf_netlogon_unknown_string, -1);
+               offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, 
+                       tree, drep, NDR_POINTER_UNIQUE, "unknown", 
+                       hf_netlogon_unknown_string);
                break;
        case 20:
                offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
@@ -3115,7 +3100,7 @@ netlogon_dissect_DELTA_ENUM_ARRAY(tvbuff_t *tvb, int offset,
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_DELTA_ENUM_array, NDR_POINTER_UNIQUE,
-               "DELTA_ENUM: deltas", -1, 0);
+               "DELTA_ENUM: deltas", -1);
 
        return offset;
 }
@@ -3137,28 +3122,26 @@ static int
 netlogon_dissect_netsamdeltas_rqst(tvbuff_t *tvb, int offset,
        packet_info *pinfo, proto_tree *tree, char *drep)
 {
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_REF,
-               "Server Handle", hf_netlogon_logonsrv_handle, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_REF, "Server Handle", hf_netlogon_logonsrv_handle);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_REF,
-               "Computer Name", hf_netlogon_computer_name, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_REF, "Computer Name", hf_netlogon_computer_name);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF,
-               "AUTHENTICATOR: credential", -1, 0);
+               "AUTHENTICATOR: credential", -1);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF,
-               "AUTHENTICATOR: return_authenticator", -1, 0);
+               "AUTHENTICATOR: return_authenticator", -1);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_netlogon_database_id, NULL);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_MODIFIED_COUNT, NDR_POINTER_REF,
-               "MODIFIED_COUNT: domain modified count", -1, 0);
+               "MODIFIED_COUNT: domain modified count", -1);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_netlogon_max_size, NULL);
@@ -3171,15 +3154,15 @@ netlogon_dissect_netsamdeltas_reply(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF,
-               "AUTHENTICATOR: return_authenticator", -1, 0);
+               "AUTHENTICATOR: return_authenticator", -1);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_MODIFIED_COUNT, NDR_POINTER_REF,
-               "MODIFIED_COUNT: domain modified count", -1, 0);
+               "MODIFIED_COUNT: domain modified count", -1);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_DELTA_ENUM_ARRAY, NDR_POINTER_UNIQUE,
-               "DELTA_ENUM_ARRAY: deltas", -1, 0);
+               "DELTA_ENUM_ARRAY: deltas", -1);
 
        offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                                  hf_netlogon_rc, NULL);
@@ -3204,21 +3187,19 @@ static int
 netlogon_dissect_netlogondatabasesync_rqst(tvbuff_t *tvb, int offset,
        packet_info *pinfo, proto_tree *tree, char *drep)
 {
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_REF,
-               "Server Handle", hf_netlogon_logonsrv_handle, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_REF, "Server Handle", hf_netlogon_logonsrv_handle);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_REF,
-               "Computer Name", hf_netlogon_computer_name, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_REF, "Computer Name", hf_netlogon_computer_name);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF,
-               "AUTHENTICATOR: credential", -1, 0);
+               "AUTHENTICATOR: credential", -1);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF,
-               "AUTHENTICATOR: return_authenticator", -1, 0);
+               "AUTHENTICATOR: return_authenticator", -1);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_netlogon_database_id, NULL);
@@ -3239,14 +3220,14 @@ netlogon_dissect_netlogondatabasesync_reply(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF,
-               "AUTHENTICATOR: return_authenticator", -1, 0);
+               "AUTHENTICATOR: return_authenticator", -1);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_netlogon_sync_context, NULL);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_DELTA_ENUM_ARRAY, NDR_POINTER_UNIQUE,
-               "DELTA_ENUM_ARRAY: deltas", -1, 0);
+               "DELTA_ENUM_ARRAY: deltas", -1);
 
        offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                                  hf_netlogon_rc, NULL);
@@ -3331,21 +3312,20 @@ netlogon_dissect_netlogonaccountdeltas_rqst(tvbuff_t *tvb, int offset,
        offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset,
                pinfo, tree, drep);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_REF,
-               "Computer Name", hf_netlogon_computer_name, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_REF, "Computer Name", hf_netlogon_computer_name);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF,
-               "AUTHENTICATOR: credential", -1, 0);
+               "AUTHENTICATOR: credential", -1);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF,
-               "AUTHENTICATOR: return_authenticator", -1, 0);
+               "AUTHENTICATOR: return_authenticator", -1);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_UAS_INFO_0, NDR_POINTER_REF,
-               "UAS_INFO_0: RecordID", -1, 0);
+               "UAS_INFO_0: RecordID", -1);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_netlogon_count, NULL);
@@ -3364,11 +3344,11 @@ netlogon_dissect_netlogonaccountdeltas_reply(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF,
-               "AUTHENTICATOR: return_authenticator", -1, 0);
+               "AUTHENTICATOR: return_authenticator", -1);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_BYTE_array, NDR_POINTER_REF,
-               "BYTE_array: Buffer", -1, 0);
+               "BYTE_array: Buffer", -1);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_netlogon_count, NULL);
@@ -3378,7 +3358,7 @@ netlogon_dissect_netlogonaccountdeltas_reply(tvbuff_t *tvb, int offset,
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_UAS_INFO_0, NDR_POINTER_REF,
-               "UAS_INFO_0: RecordID", -1, 0);
+               "UAS_INFO_0: RecordID", -1);
 
        offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                                  hf_netlogon_rc, NULL);
@@ -3410,17 +3390,16 @@ netlogon_dissect_netlogonaccountsync_rqst(tvbuff_t *tvb, int offset,
        offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset,
                pinfo, tree, drep);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_REF,
-               "Computer Name", hf_netlogon_computer_name, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_REF, "Computer Name", hf_netlogon_computer_name);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF,
-               "AUTHENTICATOR: credential", -1, 0);
+               "AUTHENTICATOR: credential", -1);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF,
-               "AUTHENTICATOR: return_authenticator", -1, 0);
+               "AUTHENTICATOR: return_authenticator", -1);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_netlogon_reference, NULL);
@@ -3439,11 +3418,11 @@ netlogon_dissect_netlogonaccountsync_reply(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF,
-               "AUTHENTICATOR: return_authenticator", -1, 0);
+               "AUTHENTICATOR: return_authenticator", -1);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_BYTE_array, NDR_POINTER_REF,
-               "BYTE_array: Buffer", -1, 0);
+               "BYTE_array: Buffer", -1);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_netlogon_count, NULL);
@@ -3456,7 +3435,7 @@ netlogon_dissect_netlogonaccountsync_reply(tvbuff_t *tvb, int offset,
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_UAS_INFO_0, NDR_POINTER_REF,
-               "UAS_INFO_0: RecordID", -1, 0);
+               "UAS_INFO_0: RecordID", -1);
 
        offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                                  hf_netlogon_rc, NULL);
@@ -3476,13 +3455,11 @@ static int
 netlogon_dissect_netlogongetdcname_rqst(tvbuff_t *tvb, int offset,
        packet_info *pinfo, proto_tree *tree, char *drep)
 {
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_REF,
-               "Server Handle", hf_netlogon_logonsrv_handle, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_REF, "Server Handle", hf_netlogon_logonsrv_handle);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-               "Domain", hf_netlogon_domain_name, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_UNIQUE, "Domain", hf_netlogon_domain_name);
 
        return offset;
 }
@@ -3490,9 +3467,8 @@ static int
 netlogon_dissect_netlogongetdcname_reply(tvbuff_t *tvb, int offset,
        packet_info *pinfo, proto_tree *tree, char *drep)
 {
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-               "Domain", hf_netlogon_dc_name, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_UNIQUE, "Domain", hf_netlogon_dc_name);
 
        offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                                  hf_netlogon_rc, NULL);
@@ -3542,9 +3518,9 @@ netlogon_dissect_NETLOGON_INFO_2(tvbuff_t *tvb, int offset,
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_netlogon_pdc_connection_status, NULL);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-               "Trusted DC Name", hf_netlogon_trusted_dc_name, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_UNIQUE, "Trusted DC Name", 
+               hf_netlogon_trusted_dc_name);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_netlogon_tc_connection_status, NULL);
@@ -3616,17 +3592,17 @@ netlogon_dissect_CONTROL_QUERY_INFORMATION(tvbuff_t *tvb, int offset,
        case 1:
                offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        netlogon_dissect_NETLOGON_INFO_1, NDR_POINTER_UNIQUE,
-                       "NETLOGON_INFO_1:", -1, 0);
+                       "NETLOGON_INFO_1:", -1);
                break;
        case 2:
                offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        netlogon_dissect_NETLOGON_INFO_2, NDR_POINTER_UNIQUE,
-                       "NETLOGON_INFO_2:", -1, 0);
+                       "NETLOGON_INFO_2:", -1);
                break;
        case 3:
                offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        netlogon_dissect_NETLOGON_INFO_3, NDR_POINTER_UNIQUE,
-                       "NETLOGON_INFO_3:", -1, 0);
+                       "NETLOGON_INFO_3:", -1);
                break;
        }
 
@@ -3663,7 +3639,7 @@ netlogon_dissect_netlogoncontrol_reply(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_CONTROL_QUERY_INFORMATION, NDR_POINTER_REF,
-               "CONTROL_QUERY_INFORMATION:", -1, 0);
+               "CONTROL_QUERY_INFORMATION:", -1);
 
        offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                                  hf_netlogon_rc, NULL);
@@ -3683,13 +3659,12 @@ static int
 netlogon_dissect_netlogongetanydcname_rqst(tvbuff_t *tvb, int offset,
        packet_info *pinfo, proto_tree *tree, char *drep)
 {
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-               "Server Handle", hf_netlogon_logonsrv_handle, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_UNIQUE, "Server Handle", 
+               hf_netlogon_logonsrv_handle);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-               "Domain", hf_netlogon_domain_name, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_UNIQUE, "Domain", hf_netlogon_domain_name);
 
        return offset;
 }
@@ -3697,9 +3672,8 @@ static int
 netlogon_dissect_netlogongetanydcname_reply(tvbuff_t *tvb, int offset,
        packet_info *pinfo, proto_tree *tree, char *drep)
 {
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-               "Domain", hf_netlogon_dc_name, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_UNIQUE, "Domain", hf_netlogon_dc_name);
 
        offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                                  hf_netlogon_rc, NULL);
@@ -3736,23 +3710,23 @@ netlogon_dissect_CONTROL_DATA_INFORMATION(tvbuff_t *tvb, int offset,
        ALIGN_TO_4_BYTES;
        switch(level){
        case 5:
-               offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-                       dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-                       "unknown", hf_netlogon_unknown_string, -1);
+               offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, 
+                       tree, drep, NDR_POINTER_UNIQUE, "unknown", 
+                       hf_netlogon_unknown_string);
                break;
        case 6:
-               offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-                       dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-                       "unknown", hf_netlogon_unknown_string, -1);
+               offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, 
+                       tree, drep, NDR_POINTER_UNIQUE, "unknown", 
+                       hf_netlogon_unknown_string);
                break;
        case 0xfffe:
                offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                        hf_netlogon_unknown_long, NULL);
                break;
        case 8:
-               offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-                       dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-                       "unknown", hf_netlogon_unknown_string, -1);
+               offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, 
+                       tree, drep, NDR_POINTER_UNIQUE, "unknown", 
+                       hf_netlogon_unknown_string);
                break;
        }
 
@@ -3784,7 +3758,7 @@ netlogon_dissect_netlogoncontrol2_rqst(tvbuff_t *tvb, int offset,
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_CONTROL_DATA_INFORMATION, NDR_POINTER_REF,
-               "CONTROL_DATA_INFORMATION: ", -1, 0);
+               "CONTROL_DATA_INFORMATION: ", -1);
 
        return offset;
 }
@@ -3795,7 +3769,7 @@ netlogon_dissect_netlogoncontrol2_reply(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_CONTROL_QUERY_INFORMATION, NDR_POINTER_REF,
-               "CONTROL_QUERY_INFORMATION:", -1, 0);
+               "CONTROL_QUERY_INFORMATION:", -1);
 
        offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                                  hf_netlogon_rc, NULL);
@@ -3822,20 +3796,18 @@ netlogon_dissect_netserverauthenticate2_rqst(tvbuff_t *tvb, int offset,
        offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset,
                pinfo, tree, drep);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_REF,
-               "User Name", hf_netlogon_acct_name, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_REF, "User Name", hf_netlogon_acct_name);
 
        offset = netlogon_dissect_NETLOGON_SECURE_CHANNEL_TYPE(tvb, offset,
                pinfo, tree, drep);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_REF,
-               "Computer Name", hf_netlogon_computer_name, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_REF, "Computer Name", hf_netlogon_computer_name);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_CREDENTIAL, NDR_POINTER_REF,
-               "CREDENTIAL: client_chal", -1, 0);
+               "CREDENTIAL: client_chal", -1);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_netlogon_neg_flags, NULL);
@@ -3849,7 +3821,7 @@ netlogon_dissect_netserverauthenticate2_reply(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_CREDENTIAL, NDR_POINTER_REF,
-               "CREDENTIAL: server_chal", -1, 0);
+               "CREDENTIAL: server_chal", -1);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_netlogon_neg_flags, NULL);
@@ -3878,21 +3850,19 @@ static int
 netlogon_dissect_netdatabasesync2_rqst(tvbuff_t *tvb, int offset,
        packet_info *pinfo, proto_tree *tree, char *drep)
 {
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_REF,
-               "Server Handle", hf_netlogon_logonsrv_handle, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_REF, "Server Handle", hf_netlogon_logonsrv_handle);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_REF,
-               "Computer Name", hf_netlogon_computer_name, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_REF, "Computer Name", hf_netlogon_computer_name);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF,
-               "AUTHENTICATOR: credential", -1, 0);
+               "AUTHENTICATOR: credential", -1);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF,
-               "AUTHENTICATOR: return_authenticator", -1, 0);
+               "AUTHENTICATOR: return_authenticator", -1);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_netlogon_database_id, NULL);
@@ -3915,14 +3885,14 @@ netlogon_dissect_netdatabasesync2_reply(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF,
-               "AUTHENTICATOR: return_authenticator", -1, 0);
+               "AUTHENTICATOR: return_authenticator", -1);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_netlogon_sync_context, NULL);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_DELTA_ENUM_ARRAY, NDR_POINTER_UNIQUE,
-               "DELTA_ENUM_ARRAY: deltas", -1, 0);
+               "DELTA_ENUM_ARRAY: deltas", -1);
 
        offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                                  hf_netlogon_rc, NULL);
@@ -3946,25 +3916,23 @@ static int
 netlogon_dissect_netlogondatabaseredo_rqst(tvbuff_t *tvb, int offset,
        packet_info *pinfo, proto_tree *tree, char *drep)
 {
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_REF,
-               "Server Handle", hf_netlogon_logonsrv_handle, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_REF, "Server Handle", hf_netlogon_logonsrv_handle);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_REF,
-               "Computer Name", hf_netlogon_computer_name, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_REF, "Computer Name", hf_netlogon_computer_name);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF,
-               "AUTHENTICATOR: credential", -1, 0);
+               "AUTHENTICATOR: credential", -1);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF,
-               "AUTHENTICATOR: return_authenticator", -1, 0);
+               "AUTHENTICATOR: return_authenticator", -1);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_BYTE_array, NDR_POINTER_REF,
-               "Change log entry: ", -1, 0);
+               "Change log entry: ", -1);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_netlogon_max_log_size, NULL);
@@ -3978,11 +3946,11 @@ netlogon_dissect_netlogondatabaseredo_reply(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF,
-               "AUTHENTICATOR: return_authenticator", -1, 0);
+               "AUTHENTICATOR: return_authenticator", -1);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_DELTA_ENUM_ARRAY, NDR_POINTER_UNIQUE,
-               "DELTA_ENUM_ARRAY: deltas", -1, 0);
+               "DELTA_ENUM_ARRAY: deltas", -1);
 
        offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                                  hf_netlogon_rc, NULL);
@@ -4019,7 +3987,7 @@ netlogon_dissect_function_12_rqst(tvbuff_t *tvb, int offset,
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_CONTROL_DATA_INFORMATION, NDR_POINTER_REF,
-               "CONTROL_DATA_INFORMATION: ", -1, 0);
+               "CONTROL_DATA_INFORMATION: ", -1);
 
        return offset;
 }
@@ -4029,7 +3997,7 @@ netlogon_dissect_function_12_reply(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_CONTROL_QUERY_INFORMATION, NDR_POINTER_REF,
-               "CONTROL_QUERY_INFORMATION:", -1, 0);
+               "CONTROL_QUERY_INFORMATION:", -1);
 
        offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                                  hf_netlogon_rc, NULL);
@@ -4430,7 +4398,7 @@ netlogon_dissect_pointer_char(tvbuff_t *tvb, int offset,
 static int
 netlogon_dissect_UNICODE_STRING(tvbuff_t *tvb, int offset,
                        packet_info *pinfo, proto_tree *parent_tree,
-                       char *drep, int type, int hf_index, int levels)
+                       char *drep, int type, int hf_index, dcerpc_callback_fnct_t *callback)
 {
        proto_item *item=NULL;
        proto_tree *tree=NULL;
@@ -4451,9 +4419,9 @@ netlogon_dissect_UNICODE_STRING(tvbuff_t *tvb, int offset,
                tree = proto_item_add_subtree(item, ett_nt_unicode_string);
        }
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
+       offset = dissect_ndr_pointer_cb(tvb, offset, pinfo, tree, drep,
                        dissect_ndr_nt_UNICODE_STRING_str, type,
-                       name, hf_index, levels);
+                       name, hf_index, callback, NULL);
 
        proto_item_set_len(item, offset-old_offset);
        return offset;
@@ -4502,7 +4470,7 @@ netlogon_dissect_UNICODE_MULTI(tvbuff_t *tvb, int offset,
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_UNICODE_MULTI_array, NDR_POINTER_UNIQUE,
-               "unknown", hf_netlogon_unknown_string, 0);
+               "unknown", hf_netlogon_unknown_string);
 
        proto_item_set_len(item, offset-old_offset);
        return offset;
@@ -4533,13 +4501,11 @@ netlogon_dissect_DOMAIN_CONTROLLER_INFO(tvbuff_t *tvb, int offset,
                tree = proto_item_add_subtree(item, ett_DOMAIN_CONTROLLER_INFO);
        }
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-               "DC Name", hf_netlogon_dc_name, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_UNIQUE, "DC Name", hf_netlogon_dc_name);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-               "DC Address", hf_netlogon_dc_address, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_UNIQUE, "DC Address", hf_netlogon_dc_address);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_netlogon_dc_address_type, NULL);
@@ -4547,23 +4513,20 @@ netlogon_dissect_DOMAIN_CONTROLLER_INFO(tvbuff_t *tvb, int offset,
        offset = dissect_nt_GUID(tvb, offset,
                pinfo, tree, drep);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-               "Logon Domain", hf_netlogon_logon_dom, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_UNIQUE, "Logon Domain", hf_netlogon_logon_dom);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-               "DNS Forest", hf_netlogon_dns_forest_name, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_UNIQUE, "DNS Forest", hf_netlogon_dns_forest_name);
 
        offset = netlogon_dissect_DC_FLAGS(tvb, offset, pinfo, tree, drep);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-               "DC Site", hf_netlogon_dc_site_name, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_UNIQUE, "DC Site", hf_netlogon_dc_site_name);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-               "Client Site", hf_netlogon_client_site_name, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_UNIQUE, "Client Site", 
+               hf_netlogon_client_site_name);
 
        proto_item_set_len(item, offset-old_offset);
        return offset;
@@ -4612,7 +4575,7 @@ netlogon_dissect_BLOB(tvbuff_t *tvb, int offset,
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_BLOB_array, NDR_POINTER_UNIQUE,
-               "BLOB:", -1, 0);
+               "BLOB:", -1);
 
        return offset;
 }
@@ -4637,16 +4600,16 @@ netlogon_dissect_DOMAIN_TRUST_INFO(tvbuff_t *tvb, int offset,
 
        /* Guesses at best. */
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_unknown_string, 0);
+               hf_netlogon_unknown_string);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_unknown_string, 0);
+               hf_netlogon_unknown_string);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_unknown_string, 0);
+               hf_netlogon_unknown_string);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_unknown_string, 0);
+               hf_netlogon_unknown_string);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_netlogon_unknown_long, NULL);
@@ -4683,41 +4646,37 @@ netlogon_dissect_DOMAIN_QUERY_1(tvbuff_t *tvb, int offset,
        offset = netlogon_dissect_BLOB(tvb, offset,
                pinfo, tree, drep);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-               "Workstation FQDN", hf_netlogon_workstation_fqdn, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_UNIQUE, "Workstation FQDN", 
+               hf_netlogon_workstation_fqdn);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-               "Workstation Site", hf_netlogon_workstation_site_name, -1);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_UNIQUE, "Workstation Site", 
+               hf_netlogon_workstation_site_name);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-               "unknown", hf_netlogon_unknown_string, -1);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_UNIQUE, "unknown", hf_netlogon_unknown_string);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-               "unknown", hf_netlogon_unknown_string, -1);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_UNIQUE, "unknown", hf_netlogon_unknown_string);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-               "unknown", hf_netlogon_unknown_string, -1);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_UNIQUE, "unknown", hf_netlogon_unknown_string);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-               "unknown", hf_netlogon_unknown_string, -1);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_UNIQUE, "unknown", hf_netlogon_unknown_string);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_unknown_string, 0);
+               hf_netlogon_unknown_string);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_workstation_os, 0);
+               hf_netlogon_workstation_os);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_unknown_string, 0);
+               hf_netlogon_unknown_string);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_unknown_string, 0);
+               hf_netlogon_unknown_string);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_netlogon_unknown_long, NULL);
@@ -4746,26 +4705,26 @@ netlogon_dissect_DOMAIN_INFO_1(tvbuff_t *tvb, int offset,
 
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_DOMAIN_TRUST_INFO_ARRAY, NDR_POINTER_UNIQUE,
-               "DOMAIN_TRUST_ARRAY: Trusts", -1, 0);
+               "DOMAIN_TRUST_ARRAY: Trusts", -1);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_netlogon_num_trusts, NULL);
 
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_DOMAIN_TRUST_INFO_ARRAY, NDR_POINTER_UNIQUE,
-               "DOMAIN_TRUST_ARRAY:", -1, 0);
+               "DOMAIN_TRUST_ARRAY:", -1);
  
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_dns_domain_name, 0);
+               hf_netlogon_dns_domain_name);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_unknown_string, 0);
+               hf_netlogon_unknown_string);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_unknown_string, 0);
+               hf_netlogon_unknown_string);
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-               hf_netlogon_unknown_string, 0);
+               hf_netlogon_unknown_string);
 
        /* These four integers appear to mirror the last four in the query. */
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
@@ -4799,7 +4758,7 @@ netlogon_dissect_DOMAIN_INFO(tvbuff_t *tvb, int offset,
        case 1:
                offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        netlogon_dissect_DOMAIN_INFO_1, NDR_POINTER_UNIQUE,
-                       "DOMAIN_INFO_1:", -1, 0);
+                       "DOMAIN_INFO_1:", -1);
                break;
        }
 
@@ -4876,7 +4835,7 @@ netlogon_dissect_TYPE_50(tvbuff_t *tvb, int offset,
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_element_844_array, NDR_POINTER_UNIQUE,
-               "unknown", hf_netlogon_unknown_string, 0);
+               "unknown", hf_netlogon_unknown_string);
 
        proto_item_set_len(item, offset-old_offset);
        return offset;
@@ -4889,7 +4848,7 @@ netlogon_dissect_TYPE_50_ptr(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_TYPE_50, NDR_POINTER_UNIQUE,
-               "TYPE_50 pointer: unknown_TYPE_50", -1, 0);
+               "TYPE_50 pointer: unknown_TYPE_50", -1);
 
        return offset;
 }
@@ -4910,14 +4869,14 @@ netlogon_dissect_DS_DOMAIN_TRUSTS(tvbuff_t *tvb, int offset,
        }
 
        /* name */
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-               "NetBIOS Name", hf_netlogon_downlevel_domain_name, 1);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_UNIQUE, "NetBIOS Name", 
+               hf_netlogon_downlevel_domain_name);
 
        /* domain */
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-               "DNS Domain Name", hf_netlogon_dns_domain_name, 1);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_UNIQUE, "DNS Domain Name", 
+               hf_netlogon_dns_domain_name);
 
        offset = netlogon_dissect_DOMAIN_TRUST_FLAGS(tvb, offset, pinfo, tree, drep);
 
@@ -5015,11 +4974,11 @@ netlogon_dissect_TYPE_52(tvbuff_t *tvb, int offset,
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_element_865_array, NDR_POINTER_UNIQUE,
-               "unknown", hf_netlogon_unknown_string, 0);
+               "unknown", hf_netlogon_unknown_string);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_element_866_array, NDR_POINTER_UNIQUE,
-               "unknown", hf_netlogon_unknown_string, 0);
+               "unknown", hf_netlogon_unknown_string);
 
        proto_item_set_len(item, offset-old_offset);
        return offset;
@@ -5032,7 +4991,7 @@ netlogon_dissect_TYPE_52_ptr(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_TYPE_52, NDR_POINTER_UNIQUE,
-               "TYPE_52 pointer: unknown_TYPE_52", -1, 0);
+               "TYPE_52 pointer: unknown_TYPE_52", -1);
        return offset;
 }
 
@@ -5083,12 +5042,12 @@ netlogon_dissect_DOMAIN_QUERY(tvbuff_t *tvb, int offset,
        case 1:
                offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        netlogon_dissect_DOMAIN_QUERY_1, NDR_POINTER_UNIQUE,
-                       "DOMAIN_QUERY_1:", -1, 0);
+                       "DOMAIN_QUERY_1:", -1);
                break;
        case 2:
                offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        netlogon_dissect_DOMAIN_QUERY_1, NDR_POINTER_UNIQUE,
-                       "DOMAIN_QUERY_1:", -1, 0);
+                       "DOMAIN_QUERY_1:", -1);
                break;
        }
 
@@ -5112,7 +5071,7 @@ netlogon_dissect_nettrusteddomainlist_reply(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_UNICODE_MULTI, NDR_POINTER_REF,
-               "UNICODE_MULTI pointer: trust_dom_name_list", -1, 0);
+               "UNICODE_MULTI pointer: trust_dom_name_list", -1);
 
        offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                                  hf_netlogon_rc, NULL);
@@ -5127,17 +5086,16 @@ netlogon_dissect_dsrgetdcname2_rqst(tvbuff_t *tvb, int offset,
        offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset,
                pinfo, tree, drep);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-               "Domain", hf_netlogon_logon_dom, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_UNIQUE, "Domain", hf_netlogon_logon_dom);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                dissect_nt_GUID, NDR_POINTER_UNIQUE,
-               "GUID pointer: domain_guid", -1, 0);
+               "GUID pointer: domain_guid", -1);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                dissect_nt_GUID, NDR_POINTER_UNIQUE,
-               "GUID pointer: site_guid", -1, 0);
+               "GUID pointer: site_guid", -1);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_netlogon_flags, NULL);
@@ -5152,7 +5110,7 @@ netlogon_dissect_dsrgetdcname2_reply(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_DOMAIN_CONTROLLER_INFO, NDR_POINTER_UNIQUE,
-               "DOMAIN_CONTROLLER_INFO:", -1, 0);
+               "DOMAIN_CONTROLLER_INFO:", -1);
 
        offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                                  hf_netlogon_rc, NULL);
@@ -5167,17 +5125,17 @@ netlogon_dissect_function_15_rqst(tvbuff_t *tvb, int offset,
        offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset,
                pinfo, tree, drep);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-               "unknown string", hf_netlogon_unknown_string, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_UNIQUE, "unknown string", 
+               hf_netlogon_unknown_string);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF,
-               "AUTHENTICATOR: credential", -1, 0);
+               "AUTHENTICATOR: credential", -1);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_AUTHENTICATOR, NDR_POINTER_UNIQUE,
-               "AUTHENTICATOR: return_authenticator", -1, 0);
+               "AUTHENTICATOR: return_authenticator", -1);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_netlogon_unknown_long, NULL);
@@ -5192,11 +5150,11 @@ netlogon_dissect_function_15_reply(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_AUTHENTICATOR, NDR_POINTER_UNIQUE,
-               "AUTHENTICATOR: return_authenticator", -1, 0);
+               "AUTHENTICATOR: return_authenticator", -1);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_TYPE_44, NDR_POINTER_UNIQUE,
-               "TYPE_44 pointer: unknown_TYPE_44", -1, 0);
+               "TYPE_44 pointer: unknown_TYPE_44", -1);
 
        offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                                  hf_netlogon_rc, NULL);
@@ -5238,9 +5196,9 @@ netlogon_dissect_function_17_rqst(tvbuff_t *tvb, int offset,
        offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset,
                pinfo, tree, drep);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-               "unknown string", hf_netlogon_unknown_string, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_UNIQUE, "unknown string", 
+               hf_netlogon_unknown_string);
 
        return offset;
 }
@@ -5252,7 +5210,7 @@ netlogon_dissect_function_17_reply(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_pointer_long, NDR_POINTER_UNIQUE,
-               "ULONG pointer: unknown_ULONG", hf_netlogon_unknown_long, 0);
+               "ULONG pointer: unknown_ULONG", hf_netlogon_unknown_long);
 
        offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                                  hf_netlogon_rc, NULL);
@@ -5272,7 +5230,7 @@ netlogon_dissect_function_18_rqst(tvbuff_t *tvb, int offset,
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_BYTE_array, NDR_POINTER_UNIQUE,
-               "BYTE pointer: unknown_BYTE", -1, 0);
+               "BYTE pointer: unknown_BYTE", -1);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_netlogon_unknown_long, NULL);
@@ -5300,7 +5258,7 @@ netlogon_dissect_function_18_reply(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_BYTE_16_array, NDR_POINTER_UNIQUE,
-               "BYTE pointer: unknown_BYTE", -1, 0);
+               "BYTE pointer: unknown_BYTE", -1);
 
        offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                                  hf_netlogon_rc, NULL);
@@ -5315,13 +5273,13 @@ netlogon_dissect_function_19_rqst(tvbuff_t *tvb, int offset,
        offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset,
                pinfo, tree, drep);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-               "unknown string", hf_netlogon_unknown_string, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_UNIQUE, "unknown string", 
+               hf_netlogon_unknown_string);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_BYTE_array, NDR_POINTER_UNIQUE,
-               "BYTE pointer: unknown_BYTE", -1, 0);
+               "BYTE pointer: unknown_BYTE", -1);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_netlogon_unknown_long, NULL);
@@ -5336,7 +5294,7 @@ netlogon_dissect_function_19_reply(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_BYTE_16_array, NDR_POINTER_UNIQUE,
-               "BYTE pointer: unknown_BYTE", -1, 0);
+               "BYTE pointer: unknown_BYTE", -1);
 
        offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                                  hf_netlogon_rc, NULL);
@@ -5351,20 +5309,18 @@ netlogon_dissect_netserverauthenticate3_rqst(tvbuff_t *tvb, int offset,
        offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset,
                pinfo, tree, drep);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_REF,
-               "Acct Name", hf_netlogon_acct_name, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_REF, "Acct Name", hf_netlogon_acct_name);
 
        offset = netlogon_dissect_NETLOGON_SECURE_CHANNEL_TYPE(tvb, offset,
                pinfo, tree, drep);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_REF,
-               "Computer Name", hf_netlogon_computer_name, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_REF, "Computer Name", hf_netlogon_computer_name);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_CREDENTIAL, NDR_POINTER_REF,
-               "CREDENTIAL: authenticator", -1, 0);
+               "CREDENTIAL: authenticator", -1);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_netlogon_neg_flags, NULL);
@@ -5379,14 +5335,14 @@ netlogon_dissect_netserverauthenticate3_reply(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_CREDENTIAL, NDR_POINTER_REF,
-               "CREDENTIAL pointer: unknown_NETLOGON_CREDENTIAL", -1, 0);
+               "CREDENTIAL pointer: unknown_NETLOGON_CREDENTIAL", -1);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_netlogon_neg_flags, NULL);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_pointer_long, NDR_POINTER_REF,
-               "ULONG: unknown_ULONG", hf_netlogon_unknown_long, 0);
+               "ULONG: unknown_ULONG", hf_netlogon_unknown_long);
 
        offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                                  hf_netlogon_rc, NULL);
@@ -5401,17 +5357,15 @@ netlogon_dissect_dsrgetdcname_rqst(tvbuff_t *tvb, int offset,
        offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset,
                pinfo, tree, drep);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-               "Domain", hf_netlogon_logon_dom, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_UNIQUE, "Domain", hf_netlogon_logon_dom);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                dissect_nt_GUID, NDR_POINTER_UNIQUE,
-               "GUID pointer: domain_guid", -1, 0);
+               "GUID pointer: domain_guid", -1);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-               "Site Name", hf_netlogon_site_name, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_UNIQUE, "Site Name", hf_netlogon_site_name);
 
        offset = netlogon_dissect_GET_DCNAME_REQUEST_FLAGS(tvb, offset, pinfo, tree, drep);
 
@@ -5425,7 +5379,7 @@ netlogon_dissect_dsrgetdcname_reply(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_DOMAIN_CONTROLLER_INFO, NDR_POINTER_UNIQUE,
-               "DOMAIN_CONTROLLER_INFO:", -1, 0);
+               "DOMAIN_CONTROLLER_INFO:", -1);
 
        offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                                  hf_netlogon_rc, NULL);
@@ -5463,28 +5417,27 @@ netlogon_dissect_netrlogongetdomaininfo_rqst(tvbuff_t *tvb, int offset,
        packet_info *pinfo, proto_tree *tree, char *drep)
 {
        /* Unlike the other NETLOGON RPCs, this is not a unique pointer. */
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_REF,
-               "Server Handle", hf_netlogon_computer_name, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_REF, "Server Handle", hf_netlogon_computer_name);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-               "Computer Name", hf_netlogon_computer_name, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_UNIQUE, "Computer Name", 
+               hf_netlogon_computer_name);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF,
-               "AUTHENTICATOR: credential", -1, 0);
+               "AUTHENTICATOR: credential", -1);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_netlogon_unknown_long, NULL);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF,
-               "AUTHENTICATOR: return_authenticator", -1, 0);
+               "AUTHENTICATOR: return_authenticator", -1);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_DOMAIN_QUERY, NDR_POINTER_REF,
-               "DOMAIN_QUERY: ", -1, 0);
+               "DOMAIN_QUERY: ", -1);
 
        return offset;
 }
@@ -5496,11 +5449,11 @@ netlogon_dissect_netrlogongetdomaininfo_reply(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF,
-               "AUTHENTICATOR: return_authenticator", -1, 0);
+               "AUTHENTICATOR: return_authenticator", -1);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_DOMAIN_INFO, NDR_POINTER_REF,
-               "DOMAIN_INFO: ", -1, 0);
+               "DOMAIN_INFO: ", -1);
 
        offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                                  hf_netlogon_rc, NULL);
@@ -5515,20 +5468,20 @@ netlogon_dissect_function_1e_rqst(tvbuff_t *tvb, int offset,
        offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset,
                pinfo, tree, drep);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-               "unknown string", hf_netlogon_unknown_string, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_UNIQUE, "unknown string", 
+               hf_netlogon_unknown_string);
 
        offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep,
                hf_netlogon_unknown_short, NULL);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-               "unknown string", hf_netlogon_unknown_string, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_UNIQUE, "unknown string", 
+               hf_netlogon_unknown_string);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF,
-               "AUTHENTICATOR: credential", -1, 0);
+               "AUTHENTICATOR: credential", -1);
 
        offset = netlogon_dissect_UNICODE_STRING_512(tvb, offset,
                pinfo, tree, drep);
@@ -5543,7 +5496,7 @@ netlogon_dissect_function_1e_reply(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_AUTHENTICATOR, NDR_POINTER_UNIQUE,
-               "AUTHENTICATOR: return_authenticator", -1, 0);
+               "AUTHENTICATOR: return_authenticator", -1);
 
        offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                                  hf_netlogon_rc, NULL);
@@ -5558,20 +5511,19 @@ netlogon_dissect_netserverpasswordset2_rqst(tvbuff_t *tvb, int offset,
        offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset,
                pinfo, tree, drep);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-               "Acct Name", hf_netlogon_acct_name, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_UNIQUE, "Acct Name", hf_netlogon_acct_name);
 
        offset = netlogon_dissect_NETLOGON_SECURE_CHANNEL_TYPE(tvb, offset,
                pinfo, tree, drep);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-               "Computer Name", hf_netlogon_computer_name, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_UNIQUE, "Computer Name", 
+               hf_netlogon_computer_name);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF,
-               "AUTHENTICATOR: credential", -1, 0);
+               "AUTHENTICATOR: credential", -1);
 
        return offset;
 }
@@ -5583,11 +5535,11 @@ netlogon_dissect_netserverpasswordset2_reply(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF,
-               "AUTHENTICATOR: return_authenticator", -1, 0);
+               "AUTHENTICATOR: return_authenticator", -1);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_LM_OWF_PASSWORD, NDR_POINTER_REF,
-               "LM_OWF_PASSWORD pointer: server_pwd", -1, 0);
+               "LM_OWF_PASSWORD pointer: server_pwd", -1);
 
        offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                                  hf_netlogon_rc, NULL);
@@ -5602,17 +5554,17 @@ netlogon_dissect_function_20_rqst(tvbuff_t *tvb, int offset,
        offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset,
                pinfo, tree, drep);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-               "unknown string", hf_netlogon_unknown_string, -1);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_UNIQUE, "unknown string", 
+               hf_netlogon_unknown_string);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF,
-               "AUTHENTICATOR: credential", -1, 0);
+               "AUTHENTICATOR: credential", -1);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_BYTE_array, NDR_POINTER_UNIQUE,
-               "BYTE pointer: unknown_BYTE", -1, 0);
+               "BYTE pointer: unknown_BYTE", -1);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_netlogon_unknown_long, NULL);
@@ -5627,7 +5579,7 @@ netlogon_dissect_function_20_reply(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_AUTHENTICATOR, NDR_POINTER_UNIQUE,
-               "AUTHENTICATOR: return_authenticator", -1, 0);
+               "AUTHENTICATOR: return_authenticator", -1);
 
        offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                                  hf_netlogon_rc, NULL);
@@ -5647,7 +5599,7 @@ netlogon_dissect_function_21_rqst(tvbuff_t *tvb, int offset,
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_BYTE_array, NDR_POINTER_UNIQUE,
-               "BYTE pointer: unknown_BYTE", -1, 0);
+               "BYTE pointer: unknown_BYTE", -1);
 
        return offset;
 }
@@ -5659,7 +5611,7 @@ netlogon_dissect_function_21_reply(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_TYPE_50_ptr, NDR_POINTER_UNIQUE,
-               "TYPE_50** pointer: unknown_TYPE_50", -1, 0);
+               "TYPE_50** pointer: unknown_TYPE_50", -1);
 
        offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                                  hf_netlogon_rc, NULL);
@@ -5674,24 +5626,24 @@ netlogon_dissect_function_22_rqst(tvbuff_t *tvb, int offset,
        offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset,
                pinfo, tree, drep);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-               "unknown string", hf_netlogon_unknown_string, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_UNIQUE, "unknown string", 
+               hf_netlogon_unknown_string);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_netlogon_unknown_long, NULL);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-               "unknown string", hf_netlogon_unknown_string, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_UNIQUE, "unknown string", 
+               hf_netlogon_unknown_string);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                dissect_nt_GUID, NDR_POINTER_UNIQUE,
-               "GUID pointer: unknown_GUID", -1, 0);
+               "GUID pointer: unknown_GUID", -1);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-               "unknown string", hf_netlogon_unknown_string, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_UNIQUE, "unknown string", 
+               hf_netlogon_unknown_string);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_netlogon_unknown_long, NULL);
@@ -5706,7 +5658,7 @@ netlogon_dissect_function_22_reply(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_DOMAIN_CONTROLLER_INFO, NDR_POINTER_UNIQUE,
-               "DOMAIN_CONTROLLER_INFO:", -1, 0);
+               "DOMAIN_CONTROLLER_INFO:", -1);
 
        offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                                  hf_netlogon_rc, NULL);
@@ -5729,13 +5681,13 @@ static int
 netlogon_dissect_function_23_reply(tvbuff_t *tvb, int offset,
        packet_info *pinfo, proto_tree *tree, char *drep)
 {
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-               "unknown string", hf_netlogon_unknown_string, -1);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_UNIQUE, "unknown string", 
+               hf_netlogon_unknown_string);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_pointer_long, NDR_POINTER_UNIQUE,
-               "ULONG pointer: unknown_ULONG", hf_netlogon_unknown_long, 0);
+               "ULONG pointer: unknown_ULONG", hf_netlogon_unknown_long);
 
        offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                                  hf_netlogon_rc, NULL);
@@ -5762,7 +5714,7 @@ netlogon_dissect_function_24_reply(tvbuff_t *tvb, int offset,
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_DS_DOMAIN_TRUSTS_ARRAY, NDR_POINTER_UNIQUE,
-               "DS_DOMAIN_TRUSTS_ARRAY:", -1, 0);
+               "DS_DOMAIN_TRUSTS_ARRAY:", -1);
 
        offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                                  hf_netlogon_rc, NULL);
@@ -5782,7 +5734,7 @@ netlogon_dissect_function_25_rqst(tvbuff_t *tvb, int offset,
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_BYTE_array, NDR_POINTER_UNIQUE,
-               "BYTE pointer: unknown_BYTE", -1, 0);
+               "BYTE pointer: unknown_BYTE", -1);
 
        return offset;
 }
@@ -5794,7 +5746,7 @@ netlogon_dissect_function_25_reply(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_TYPE_52_ptr, NDR_POINTER_UNIQUE,
-               "TYPE_52 pointer: unknown_TYPE_52", -1, 0);
+               "TYPE_52 pointer: unknown_TYPE_52", -1);
 
        offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                                  hf_netlogon_rc, NULL);
@@ -5807,9 +5759,9 @@ static int
 netlogon_dissect_function_26_rqst(tvbuff_t *tvb, int offset,
        packet_info *pinfo, proto_tree *tree, char *drep)
 {
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-               "unknown string", hf_netlogon_unknown_string, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_UNIQUE, "unknown string", 
+               hf_netlogon_unknown_string);
 
        return offset;
 }
@@ -5821,7 +5773,7 @@ netlogon_dissect_function_26_reply(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_TYPE_50_ptr, NDR_POINTER_UNIQUE,
-               "TYPE_50** pointer: unknown_TYPE_50", -1, 0);
+               "TYPE_50** pointer: unknown_TYPE_50", -1);
 
        offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                                  hf_netlogon_rc, NULL);
@@ -5833,27 +5785,27 @@ static int
 netlogon_dissect_logonsamlogonex_rqst(tvbuff_t *tvb, int offset,
        packet_info *pinfo, proto_tree *tree, char *drep)
 {
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-               "unknown string", hf_netlogon_unknown_string, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_UNIQUE, "unknown string", 
+               hf_netlogon_unknown_string);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-               "unknown string", hf_netlogon_unknown_string, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_UNIQUE, "unknown string", 
+               hf_netlogon_unknown_string);
 
        offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep,
                hf_netlogon_unknown_short, NULL);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_LEVEL, NDR_POINTER_UNIQUE,
-               "LEVEL pointer: unknown_NETLOGON_LEVEL", -1, 0);
+               "LEVEL pointer: unknown_NETLOGON_LEVEL", -1);
 
        offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep,
                hf_netlogon_unknown_short, NULL);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_pointer_long, NDR_POINTER_UNIQUE,
-               "ULONG pointer: unknown_ULONG", hf_netlogon_unknown_long, 0);
+               "ULONG pointer: unknown_ULONG", hf_netlogon_unknown_long);
        return offset;
 }
 
@@ -5864,15 +5816,15 @@ netlogon_dissect_logonsamlogonex_reply(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_VALIDATION, NDR_POINTER_UNIQUE,
-               "VALIDATION: unknown_NETLOGON_VALIDATION", -1, 0);
+               "VALIDATION: unknown_NETLOGON_VALIDATION", -1);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_pointer_char, NDR_POINTER_UNIQUE,
-               "BOOLEAN pointer: unknown_BOOLEAN", hf_netlogon_unknown_char, 0);
+               "BOOLEAN pointer: unknown_BOOLEAN", hf_netlogon_unknown_char);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_pointer_long, NDR_POINTER_UNIQUE,
-               "ULONG pointer: unknown_ULONG", hf_netlogon_unknown_long, 0);
+               "ULONG pointer: unknown_ULONG", hf_netlogon_unknown_long);
 
        offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                                  hf_netlogon_rc, NULL);
@@ -5903,7 +5855,7 @@ netlogon_dissect_dsenumeratetrusteddomains_reply(tvbuff_t *tvb, int offset,
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                netlogon_dissect_DS_DOMAIN_TRUSTS_ARRAY, NDR_POINTER_UNIQUE,
-               "DS_DOMAIN_TRUSTS_ARRAY:", -1, 0);
+               "DS_DOMAIN_TRUSTS_ARRAY:", -1);
 
        offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                                  hf_netlogon_rc, NULL);
@@ -5918,21 +5870,19 @@ netlogon_dissect_dsrderegisterdnshostrecords_rqst(tvbuff_t *tvb, int offset,
        offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset,
                pinfo, tree, drep);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-               "Domain", hf_netlogon_logon_dom, 0);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_UNIQUE, "Domain", hf_netlogon_logon_dom);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                dissect_nt_GUID, NDR_POINTER_UNIQUE,
-               "GUID pointer: domain_guid", -1, 0);
+               "GUID pointer: domain_guid", -1);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                dissect_nt_GUID, NDR_POINTER_UNIQUE,
-               "GUID pointer: dsa_guid", -1, 0);
+               "GUID pointer: dsa_guid", -1);
 
-       offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-               dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-               "dns_host", hf_netlogon_dns_host, -1);
+       offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+               NDR_POINTER_UNIQUE, "dns_host", hf_netlogon_dns_host);
 
        return offset;
 }
index 79da7c69c53745076d0fa33babbc29f19f65c203..be18b6e8cdcfa728ef8eeb73ad3a1918299c96fe 100644 (file)
@@ -1,8 +1,8 @@
 /* packet-dcerpc-reg.c
  * Routines for SMB \PIPE\winreg packet disassembly
- * Copyright 2001, 2002 Tim Potter <tpot@samba.org>
+ * Copyright 2001-2003 Tim Potter <tpot@samba.org>
  *
- * $Id: packet-dcerpc-reg.c,v 1.12 2002/08/29 19:05:40 guy Exp $
+ * $Id: packet-dcerpc-reg.c,v 1.13 2003/01/28 06:39:40 tpot Exp $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -107,7 +107,7 @@ RegOpenHKLM_q(tvbuff_t *tvb, int offset, packet_info *pinfo,
        offset = dissect_ndr_pointer(
                tvb, offset, pinfo, tree, drep,
                dissect_open_data,
-               NDR_POINTER_UNIQUE, "Unknown", -1, 0);
+               NDR_POINTER_UNIQUE, "Unknown", -1);
 
        dcerpc_smb_check_long_frame(tvb, offset, pinfo, tree);
 
@@ -162,7 +162,7 @@ RegOpenHKU_q(tvbuff_t *tvb, int offset, packet_info *pinfo,
        offset = dissect_ndr_pointer(
                tvb, offset, pinfo, tree, drep,
                dissect_open_data,
-               NDR_POINTER_UNIQUE, "Unknown", -1, 0);
+               NDR_POINTER_UNIQUE, "Unknown", -1);
 
        dcerpc_smb_check_long_frame(tvb, offset, pinfo, tree);
 
@@ -217,7 +217,7 @@ RegOpenHKCR_q(tvbuff_t *tvb, int offset, packet_info *pinfo,
        offset = dissect_ndr_pointer(
                tvb, offset, pinfo, tree, drep,
                dissect_open_data,
-               NDR_POINTER_UNIQUE, "Unknown", -1, 0);
+               NDR_POINTER_UNIQUE, "Unknown", -1);
 
        dcerpc_smb_check_long_frame(tvb, offset, pinfo, tree);
 
@@ -325,7 +325,7 @@ RegQueryKey_q(tvbuff_t *tvb, int offset, packet_info *pinfo,
                hf_hnd, NULL, FALSE, FALSE);
 
        offset = dissect_ndr_nt_UNICODE_STRING(
-               tvb, offset, pinfo, tree, drep, hf_querykey_class, 0);
+               tvb, offset, pinfo, tree, drep, hf_querykey_class);
 
        dcerpc_smb_check_long_frame(tvb, offset, pinfo, tree);
 
@@ -346,7 +346,7 @@ RegQueryKey_r(tvbuff_t *tvb, int offset, packet_info *pinfo,
        /* Parse packet */
 
        offset = dissect_ndr_nt_UNICODE_STRING(
-               tvb, offset, pinfo, tree, drep, hf_querykey_class, 0);
+               tvb, offset, pinfo, tree, drep, hf_querykey_class);
 
        offset = dissect_ndr_uint32(
                tvb, offset, pinfo, tree, drep,
@@ -409,7 +409,7 @@ RegOpenEntry_q(tvbuff_t *tvb, int offset, packet_info *pinfo,
                hf_hnd, NULL, FALSE, FALSE);
 
        offset = dissect_ndr_nt_UNICODE_STRING(
-               tvb, offset, pinfo, tree, drep, hf_querykey_class, 0);
+               tvb, offset, pinfo, tree, drep, hf_querykey_class);
 
        offset = dissect_ndr_uint32(
                tvb, offset, pinfo, tree, drep,
index 61ecb73617347df2b26a857a58fc3a07f1bb6fd7..94d15915cc4a84616228f3cb825baa99f93914b5 100644 (file)
@@ -1,9 +1,9 @@
 /* packet-dcerpc-samr.c
  * Routines for SMB \PIPE\samr packet disassembly
- * Copyright 2001, Tim Potter <tpot@samba.org>
+ * Copyright 2001,2003 Tim Potter <tpot@samba.org>
  *   2002 Added all command dissectors  Ronnie Sahlberg
  *
- * $Id: packet-dcerpc-samr.c,v 1.66 2003/01/11 08:22:39 guy Exp $
+ * $Id: packet-dcerpc-samr.c,v 1.67 2003/01/28 06:39:40 tpot Exp $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -472,7 +472,7 @@ dissect_ndr_nt_SID_ptr(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        dissect_ndr_nt_SID, NDR_POINTER_UNIQUE,
-                       "SID pointer", -1, 1);
+                       "SID pointer", -1);
        return offset;
 }
 
@@ -640,7 +640,7 @@ samr_dissect_pointer_STRING(tvbuff_t *tvb, int offset,
        }
 
        offset = dissect_ndr_nt_STRING(tvb, offset, pinfo, tree, drep,
-                       di->hf_index, 0);
+                       di->hf_index);
        return offset;
 }
 
@@ -658,7 +658,7 @@ samr_dissect_pointer_UNICODE_STRING(tvbuff_t *tvb, int offset,
        }
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                       di->hf_index, di->levels);
+                       di->hf_index);
        return offset;
 }
 
@@ -717,11 +717,11 @@ samr_dissect_USER_DISPINFO_1(tvbuff_t *tvb, int offset,
                                hf_samr_rid, NULL);
        offset = dissect_ndr_nt_acct_ctrl(tvb, offset, pinfo, tree, drep);
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                               hf_samr_acct_name, 0);
+                               hf_samr_acct_name);
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                               hf_samr_full_name, 0);
+                               hf_samr_full_name);
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                               hf_samr_acct_desc, 0);
+                               hf_samr_acct_desc);
 
        proto_item_set_len(item, offset-old_offset);
        return offset;
@@ -759,7 +759,7 @@ samr_dissect_USER_DISPINFO_1_ARRAY (tvbuff_t *tvb, int offset,
                                      hf_samr_count, &count);
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_USER_DISPINFO_1_ARRAY_users, NDR_POINTER_PTR,
-                       "USER_DISPINFO_1_ARRAY", -1, 0);
+                       "USER_DISPINFO_1_ARRAY", -1);
 
        proto_item_set_len(item, offset-old_offset);
        return offset;
@@ -788,9 +788,9 @@ samr_dissect_USER_DISPINFO_2(tvbuff_t *tvb, int offset,
                        hf_samr_rid, NULL);
        offset = dissect_ndr_nt_acct_ctrl(tvb, offset, pinfo, tree, drep);
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                       hf_samr_acct_name, 0);
+                       hf_samr_acct_name);
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                       hf_samr_acct_desc, 0);
+                       hf_samr_acct_desc);
 
        proto_item_set_len(item, offset-old_offset);
        return offset;
@@ -828,7 +828,7 @@ samr_dissect_USER_DISPINFO_2_ARRAY (tvbuff_t *tvb, int offset,
                                      hf_samr_count, &count);
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_USER_DISPINFO_2_ARRAY_users, NDR_POINTER_PTR,
-                       "USER_DISPINFO_2_ARRAY", -1, 0);
+                       "USER_DISPINFO_2_ARRAY", -1);
 
        proto_item_set_len(item, offset-old_offset);
        return offset;
@@ -860,9 +860,9 @@ samr_dissect_GROUP_DISPINFO(tvbuff_t *tvb, int offset,
                        hf_samr_rid, NULL);
        offset = dissect_ndr_nt_acct_ctrl(tvb, offset, pinfo, tree, drep);
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                       hf_samr_acct_name, 0);
+                       hf_samr_acct_name);
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                       hf_samr_acct_desc, 0);
+                       hf_samr_acct_desc);
 
        proto_item_set_len(item, offset-old_offset);
        return offset;
@@ -899,7 +899,7 @@ samr_dissect_GROUP_DISPINFO_ARRAY(tvbuff_t *tvb, int offset,
                                      hf_samr_count, &count);
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_GROUP_DISPINFO_ARRAY_groups, NDR_POINTER_PTR,
-                       "GROUP_DISPINFO_ARRAY", -1, 0);
+                       "GROUP_DISPINFO_ARRAY", -1);
 
        proto_item_set_len(item, offset-old_offset);
        return offset;
@@ -929,9 +929,9 @@ samr_dissect_ASCII_DISPINFO(tvbuff_t *tvb, int offset,
                        hf_samr_rid, NULL);
        offset = dissect_ndr_nt_acct_ctrl(tvb, offset, pinfo, tree, drep);
        offset = dissect_ndr_nt_STRING(tvb, offset, pinfo, tree, drep,
-                       hf_samr_acct_name, 0);
+                       hf_samr_acct_name);
        offset = dissect_ndr_nt_STRING(tvb, offset, pinfo, tree, drep,
-                       hf_samr_acct_desc,0 );
+                       hf_samr_acct_desc);
 
        proto_item_set_len(item, offset-old_offset);
        return offset;
@@ -968,7 +968,7 @@ samr_dissect_ASCII_DISPINFO_ARRAY(tvbuff_t *tvb, int offset,
                                      hf_samr_count, &count);
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_ASCII_DISPINFO_ARRAY_users, NDR_POINTER_PTR,
-                       "ACSII_DISPINFO_ARRAY", -1, 0);
+                       "ACSII_DISPINFO_ARRAY", -1);
 
        proto_item_set_len(item, offset-old_offset);
        return offset;
@@ -1027,13 +1027,13 @@ samr_dissect_query_dispinfo_reply(tvbuff_t *tvb, int offset,
 {
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_pointer_long, NDR_POINTER_REF,
-                       "Total Size", hf_samr_total_size, 0);
+                       "Total Size", hf_samr_total_size);
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_pointer_long, NDR_POINTER_REF,
-                       "Returned Size", hf_samr_ret_size, 0);
+                       "Returned Size", hf_samr_ret_size);
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_DISPLAY_INFO, NDR_POINTER_REF,
-                       "DISPLAY_INFO:", -1, 0);
+                       "DISPLAY_INFO:", -1);
        offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                        hf_samr_rc, NULL);
 
@@ -1053,7 +1053,7 @@ samr_dissect_get_display_enumeration_index_rqst(tvbuff_t *tvb, int offset,
                                      hf_samr_level, NULL);
 
        offset = dissect_ndr_nt_STRING(tvb, offset, pinfo, tree, drep,
-                       hf_samr_acct_name, 0);
+                       hf_samr_acct_name);
 
        return offset;
 }
@@ -1065,7 +1065,7 @@ samr_dissect_get_display_enumeration_index_reply(tvbuff_t *tvb, int offset,
 {
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_pointer_long, NDR_POINTER_REF,
-                       "Index", hf_samr_index, 0);
+                       "Index", hf_samr_index);
 
         offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                                  hf_samr_rc, NULL);
@@ -1121,7 +1121,7 @@ samr_dissect_get_usrdom_pwinfo_reply(tvbuff_t *tvb, int offset,
 {
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_PASSWORD_INFO, NDR_POINTER_REF,
-                       "PASSWORD_INFO:", -1, 0);
+                       "PASSWORD_INFO:", -1);
 
         offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                                  hf_samr_rc, NULL);
@@ -1159,7 +1159,7 @@ samr_dissect_connect2_rqst(tvbuff_t *tvb, int offset,
 {
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_connect2_server, NDR_POINTER_UNIQUE,
-                       "Server", hf_samr_server, 1);
+                       "Server", hf_samr_server);
 
        offset = dissect_nt_access_mask(
                tvb, offset, pinfo, tree, drep, hf_samr_access,
@@ -1175,7 +1175,7 @@ samr_dissect_connect4_rqst(tvbuff_t *tvb, int offset,
 {
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_connect2_server, NDR_POINTER_UNIQUE,
-                       "Server", hf_samr_server, 1);
+                       "Server", hf_samr_server);
 
        offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
                                     hf_samr_unknown_long, NULL);
@@ -1295,7 +1295,7 @@ samr_dissect_USER_GROUP_ARRAY(tvbuff_t *tvb, int offset,
                        hf_samr_count, &count);
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_USER_GROUP_ARRAY_groups, NDR_POINTER_UNIQUE,
-                       "USER_GROUP_ARRAY", -1, 0);
+                       "USER_GROUP_ARRAY", -1);
 
        proto_item_set_len(item, offset-old_offset);
        return offset;
@@ -1308,7 +1308,7 @@ samr_dissect_USER_GROUP_ARRAY_ptr(tvbuff_t *tvb, int offset,
 {
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_USER_GROUP_ARRAY, NDR_POINTER_UNIQUE,
-                       "USER_GROUP_ARRAY", -1, 0);
+                       "USER_GROUP_ARRAY", -1);
        return offset;
 }
 
@@ -1330,7 +1330,7 @@ samr_dissect_get_groups_for_user_reply(tvbuff_t *tvb, int offset,
 {
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_USER_GROUP_ARRAY_ptr, NDR_POINTER_REF,
-                       "USER_GROUP_ARRAY:", -1, 0);
+                       "USER_GROUP_ARRAY:", -1);
 
         offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                                  hf_samr_rc, NULL);
@@ -1352,8 +1352,7 @@ samr_dissect_open_domain_rqst(tvbuff_t *tvb, int offset,
                specific_rights_domain);
 
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-                       dissect_ndr_nt_SID, NDR_POINTER_REF,
-                       "SID:", -1, 0);
+                       dissect_ndr_nt_SID, NDR_POINTER_REF, "SID:", -1);
        return offset;
 }
 
@@ -1437,7 +1436,7 @@ samr_dissect_unknown_3c_reply(tvbuff_t *tvb, int offset,
 {
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_pointer_short, NDR_POINTER_REF,
-                       "unknown short", hf_samr_unknown_short, 0);
+                       "unknown short", hf_samr_unknown_short);
 
         offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                                  hf_samr_rc, NULL);
@@ -1454,7 +1453,7 @@ samr_dissect_create_alias_in_domain_rqst(tvbuff_t *tvb, int offset,
 
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_pointer_UNICODE_STRING, NDR_POINTER_REF,
-                       "Account Name", hf_samr_acct_name, 0);
+                       "Account Name", hf_samr_acct_name);
 
        offset = dissect_nt_access_mask(
                tvb, offset, pinfo, tree, drep, hf_samr_access,
@@ -1504,13 +1503,11 @@ samr_dissect_ALIAS_INFO_1 (tvbuff_t *tvb, int offset,
                              char *drep)
 {
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo,
-               tree, drep,
-               hf_samr_acct_name, 0);
+               tree, drep, hf_samr_acct_name);
         offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
                                      hf_samr_rid, NULL);
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo,
-               tree, drep,
-               hf_samr_acct_desc, 0);
+               tree, drep, hf_samr_acct_desc);
        return offset;
 }
 
@@ -1539,13 +1536,11 @@ samr_dissect_ALIAS_INFO(tvbuff_t *tvb, int offset,
                break;
        case 2:
                offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo,
-                       tree, drep,
-                       hf_samr_acct_name, 0);
+                       tree, drep, hf_samr_acct_name);
                break;
        case 3:
                offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo,
-                       tree, drep,
-                       hf_samr_acct_desc, 0);
+                       tree, drep, hf_samr_acct_desc);
                break;
        }
 
@@ -1560,7 +1555,7 @@ samr_dissect_ALIAS_INFO_ptr(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_ALIAS_INFO, NDR_POINTER_UNIQUE,
-                       "ALIAS_INFO", -1, 0);
+                       "ALIAS_INFO", -1);
        return offset;
 }
 
@@ -1571,7 +1566,7 @@ samr_dissect_query_information_alias_reply(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_ALIAS_INFO_ptr, NDR_POINTER_REF,
-                       "ALIAS_INFO:", -1, 0);
+                       "ALIAS_INFO:", -1);
 
         offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                                  hf_samr_rc, NULL);
@@ -1591,7 +1586,7 @@ samr_dissect_set_information_alias_rqst(tvbuff_t *tvb, int offset,
                                      hf_samr_level, NULL);
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_ALIAS_INFO, NDR_POINTER_REF,
-                       "ALIAS_INFO:", -1, 0);
+                       "ALIAS_INFO:", -1);
        return offset;
 }
 
@@ -1602,7 +1597,7 @@ samr_dissect_set_information_alias_reply(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_ALIAS_INFO_ptr, NDR_POINTER_REF,
-                       "ALIAS_INFO", -1, 0);
+                       "ALIAS_INFO", -1);
 
        offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                                  hf_samr_rc, NULL);
@@ -1875,16 +1870,16 @@ samr_dissect_oem_change_password_user2_rqst(tvbuff_t *tvb, int offset,
 
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_pointer_STRING, NDR_POINTER_UNIQUE,
-                       "Server", hf_samr_server, 0);
+                       "Server", hf_samr_server);
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_pointer_STRING, NDR_POINTER_REF,
-                       "Account Name", hf_samr_acct_name, 0);
+                       "Account Name", hf_samr_acct_name);
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_CRYPT_PASSWORD, NDR_POINTER_UNIQUE,
-                       "Password", -1, 0);
+                       "Password", -1);
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_CRYPT_HASH, NDR_POINTER_UNIQUE,
-                       "Hash", -1, 0);
+                       "Hash", -1);
        return offset;
 }
 
@@ -1906,30 +1901,29 @@ samr_dissect_unicode_change_password_user2_rqst(tvbuff_t *tvb, int offset,
 {
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_PASSWORD_INFO, NDR_POINTER_REF,
-                       "PASSWORD_INFO:", -1, 0);
+                       "PASSWORD_INFO:", -1);
 
-        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-                       dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-                       "Server", hf_samr_server, 0);
+        offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+                       NDR_POINTER_UNIQUE, "Server", hf_samr_server);
 
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_pointer_UNICODE_STRING, NDR_POINTER_REF,
-                       "Account Name:", hf_samr_acct_name, 1);
+                       "Account Name:", hf_samr_acct_name);
 
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_NT_PASSCHANGE_BLOCK, NDR_POINTER_UNIQUE,
-                       "New NT Password Encrypted Block", -1, 0);
+                       "New NT Password Encrypted Block", -1);
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_NT_VERIFIER, NDR_POINTER_UNIQUE,
-                       "NT Password Verifier", -1, 0);
+                       "NT Password Verifier", -1);
         offset = dissect_ndr_uint8 (tvb, offset, pinfo, tree, drep,
                                      hf_samr_lm_change, NULL);
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_LM_PASSCHANGE_BLOCK, NDR_POINTER_UNIQUE,
-                       "New Lan Manager Password Encrypted Block", -1, 0);
+                       "New Lan Manager Password Encrypted Block", -1);
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_LM_VERIFIER, NDR_POINTER_UNIQUE,
-                       "Lan Manager Password Verifier", -1, 0);
+                       "Lan Manager Password Verifier", -1);
        return offset;
 }
 
@@ -1956,10 +1950,10 @@ samr_dissect_unknown_3b_rqst(tvbuff_t *tvb, int offset,
                                      hf_samr_unknown_short, NULL);
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_pointer_UNICODE_STRING, NDR_POINTER_UNIQUE,
-                       "Unknown", hf_samr_unknown_string, 0);
+                       "Unknown", hf_samr_unknown_string);
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_pointer_UNICODE_STRING, NDR_POINTER_UNIQUE,
-                       "Unknown", hf_samr_unknown_string, 0);
+                       "Unknown", hf_samr_unknown_string);
        return offset;
 }
 
@@ -1984,7 +1978,7 @@ samr_dissect_create_user2_in_domain_rqst(tvbuff_t *tvb, int offset,
 
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_pointer_UNICODE_STRING, NDR_POINTER_REF,
-                       "Account Name", hf_samr_acct_name, 0);
+                       "Account Name", hf_samr_acct_name);
 
        offset = dissect_ndr_nt_acct_ctrl(tvb, offset, pinfo, tree, drep);
 
@@ -2031,7 +2025,7 @@ samr_dissect_get_display_enumeration_index2_rqst(tvbuff_t *tvb, int offset,
                                      hf_samr_level, NULL);
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_pointer_UNICODE_STRING, NDR_POINTER_REF,
-                       "Account Name", hf_samr_acct_name, 0);
+                       "Account Name", hf_samr_acct_name);
        return offset;
 }
 
@@ -2060,28 +2054,28 @@ samr_dissect_change_password_user_rqst(tvbuff_t *tvb, int offset,
                        hf_samr_unknown_char, NULL);
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_CRYPT_HASH, NDR_POINTER_UNIQUE,
-                       "Hash", -1, 0);
+                       "Hash", -1);
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_CRYPT_HASH, NDR_POINTER_UNIQUE,
-                       "Hash", -1, 0);
+                       "Hash", -1);
        offset = dissect_ndr_uint8 (tvb, offset, pinfo, tree, drep,
                        hf_samr_unknown_char, NULL);
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_CRYPT_HASH, NDR_POINTER_UNIQUE,
-                       "Hash", -1, 0);
+                       "Hash", -1);
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_CRYPT_HASH, NDR_POINTER_UNIQUE,
-                       "Hash", -1, 0);
+                       "Hash", -1);
        offset = dissect_ndr_uint8 (tvb, offset, pinfo, tree, drep,
                        hf_samr_unknown_char, NULL);
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_CRYPT_HASH, NDR_POINTER_UNIQUE,
-                       "Hash", -1, 0);
+                       "Hash", -1);
        offset = dissect_ndr_uint8 (tvb, offset, pinfo, tree, drep,
                        hf_samr_unknown_char, NULL);
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_CRYPT_HASH, NDR_POINTER_UNIQUE,
-                       "Hash", -1, 0);
+                       "Hash", -1);
 
        return offset;
 }
@@ -2127,15 +2121,13 @@ samr_dissect_GROUP_INFO_1 (tvbuff_t *tvb, int offset,
                              char *drep)
 {
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo,
-               tree, drep,
-               hf_samr_acct_name, 0);
+               tree, drep, hf_samr_acct_name);
         offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
                                      hf_samr_rid, NULL);
         offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
                                        hf_samr_attrib, NULL);
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo,
-               tree, drep,
-               hf_samr_acct_desc, 0);
+               tree, drep, hf_samr_acct_desc);
        return offset;
 }
 
@@ -2164,8 +2156,7 @@ samr_dissect_GROUP_INFO(tvbuff_t *tvb, int offset,
                break;
        case 2:
                offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo,
-                       tree, drep,
-                       hf_samr_acct_name, 0);
+                       tree, drep, hf_samr_acct_name);
                break;
        case 3:
                offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
@@ -2173,8 +2164,7 @@ samr_dissect_GROUP_INFO(tvbuff_t *tvb, int offset,
                break;
        case 4:
                offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo,
-                       tree, drep,
-                       hf_samr_acct_desc, 0);
+                       tree, drep, hf_samr_acct_desc);
                break;
        }
 
@@ -2189,7 +2179,7 @@ samr_dissect_GROUP_INFO_ptr(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_GROUP_INFO, NDR_POINTER_UNIQUE,
-                       "GROUP_INFO", -1, 0);
+                       "GROUP_INFO", -1);
        return offset;
 }
 
@@ -2214,7 +2204,7 @@ samr_dissect_query_information_group_reply(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_GROUP_INFO_ptr, NDR_POINTER_REF,
-                       "GROUP_INFO", -1, 0);
+                       "GROUP_INFO", -1);
 
        offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                                  hf_samr_rc, NULL);
@@ -2233,7 +2223,7 @@ samr_dissect_set_information_group_rqst(tvbuff_t *tvb, int offset,
                                      hf_samr_level, NULL);
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_GROUP_INFO, NDR_POINTER_REF,
-                       "GROUP_INFO", -1, 0);
+                       "GROUP_INFO", -1);
        return offset;
 }
 
@@ -2256,11 +2246,10 @@ samr_dissect_get_domain_password_information_rqst(tvbuff_t *tvb, int offset,
 {
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_PASSWORD_INFO, NDR_POINTER_REF,
-                       "PASSWORD_INFO:", -1, 0);
+                       "PASSWORD_INFO:", -1);
 
-        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
-                       dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
-                       "Domain", hf_samr_domain, 0);
+        offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep,
+                       NDR_POINTER_UNIQUE, "Domain", hf_samr_domain);
        return offset;
 }
 
@@ -2272,7 +2261,7 @@ samr_dissect_get_domain_password_information_reply(tvbuff_t *tvb, int offset,
 {
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_PASSWORD_INFO, NDR_POINTER_REF,
-                       "PASSWORD_INFO:", -1, 0);
+                       "PASSWORD_INFO:", -1);
 
         offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                                  hf_samr_rc, NULL);
@@ -2329,11 +2318,11 @@ samr_dissect_DOMAIN_INFO_2(tvbuff_t *tvb, int offset,
        offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep,
                        hf_samr_unknown_time);
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                       hf_samr_unknown_string, 0);
+                       hf_samr_unknown_string);
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                       hf_samr_domain, 0);
+                       hf_samr_domain);
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                       hf_samr_controller, 0);
+                       hf_samr_controller);
        offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep,
                        hf_samr_unknown_time);
        offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
@@ -2490,17 +2479,17 @@ samr_dissect_DOMAIN_INFO(tvbuff_t *tvb, int offset,
                break;
        case 4:
                offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo,
-                       tree, drep, hf_samr_unknown_string, 0);
+                       tree, drep, hf_samr_unknown_string);
                break;
 
        case 5:
                offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo,
-                       tree, drep, hf_samr_domain, 0);
+                       tree, drep, hf_samr_domain);
                break;
 
        case 6:
                offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo,
-                       tree, drep, hf_samr_controller, 0);
+                       tree, drep, hf_samr_controller);
                break;
 
        case 7:
@@ -2569,7 +2558,7 @@ samr_dissect_lookup_domain_rqst(tvbuff_t *tvb, int offset,
 
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_pointer_UNICODE_STRING, NDR_POINTER_REF,
-                       "Domain:", hf_samr_domain, 0);
+                       "Domain:", hf_samr_domain);
 
        return offset;
 }
@@ -2581,7 +2570,7 @@ samr_dissect_lookup_domain_reply(tvbuff_t *tvb, int offset,
 {
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        dissect_ndr_nt_SID_ptr, NDR_POINTER_REF,
-                       "SID:", -1, 0);
+                       "SID:", -1);
 
         offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                                  hf_samr_rc, NULL);
@@ -2605,7 +2594,7 @@ dissect_ndr_nt_PSID(tvbuff_t *tvb, int offset,
 
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        dissect_ndr_nt_SID, NDR_POINTER_UNIQUE,
-                       "SID", -1, 0);
+                       "SID", -1);
 
        proto_item_set_len(item, offset-old_offset);
        return offset;
@@ -2644,7 +2633,7 @@ dissect_ndr_nt_PSID_ARRAY(tvbuff_t *tvb, int offset,
                        hf_samr_count, &count);
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        dissect_ndr_nt_PSID_ARRAY_sids, NDR_POINTER_UNIQUE,
-                       "PSID_ARRAY", -1, 0);
+                       "PSID_ARRAY", -1);
 
        proto_item_set_len(item, offset-old_offset);
        return offset;
@@ -2769,7 +2758,7 @@ samr_dissect_INDEX_ARRAY(tvbuff_t *tvb, int offset,
                        hf_samr_count, &count);
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_INDEX_ARRAY_value, NDR_POINTER_UNIQUE,
-                       str, di->hf_index, 0);
+                       str, di->hf_index);
 
        proto_item_set_len(item, offset-old_offset);
        return offset;
@@ -2785,7 +2774,7 @@ samr_dissect_get_alias_membership_rqst(tvbuff_t *tvb, int offset,
 
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        dissect_ndr_nt_PSID_ARRAY, NDR_POINTER_REF,
-                       "PSID_ARRAY:", -1, 0);
+                       "PSID_ARRAY:", -1);
 
        return offset;
 }
@@ -2797,7 +2786,7 @@ samr_dissect_get_alias_membership_reply(tvbuff_t *tvb, int offset,
 {
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_INDEX_ARRAY, NDR_POINTER_REF,
-                       "INDEX_ARRAY:", hf_samr_alias, 0);
+                       "INDEX_ARRAY:", hf_samr_alias);
 
         offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                                  hf_samr_rc, NULL);
@@ -2828,7 +2817,7 @@ samr_dissect_IDX_AND_NAME(tvbuff_t *tvb, int offset,
         offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
                        hf_samr_index, NULL);
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo,
-                       tree, drep, di->hf_index, 4);
+                       tree, drep, di->hf_index);
 
        proto_item_set_len(item, offset-old_offset);
        return offset;
@@ -2877,7 +2866,7 @@ samr_dissect_IDX_AND_NAME_ARRAY(tvbuff_t *tvb, int offset,
            plural_ending(field_name));
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_IDX_AND_NAME_entry, NDR_POINTER_UNIQUE,
-                       str, di->hf_index, 0);
+                       str, di->hf_index);
 
        proto_item_set_len(item, offset-old_offset);
        return offset;
@@ -2899,7 +2888,7 @@ samr_dissect_IDX_AND_NAME_ARRAY_ptr(tvbuff_t *tvb, int offset,
            plural_ending(field_name));
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_IDX_AND_NAME_ARRAY, NDR_POINTER_UNIQUE,
-                       str, di->hf_index, 0);
+                       str, di->hf_index);
        return offset;
 }
 
@@ -2913,7 +2902,7 @@ samr_dissect_enum_domains_rqst(tvbuff_t *tvb, int offset,
 
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_pointer_long, NDR_POINTER_REF,
-                       "Resume Handle:", hf_samr_resume_hnd, 0);
+                       "Resume Handle:", hf_samr_resume_hnd);
 
         offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
                        hf_samr_pref_maxsize, NULL);
@@ -2928,13 +2917,13 @@ samr_dissect_enum_domains_reply(tvbuff_t *tvb, int offset,
 {
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_pointer_long, NDR_POINTER_REF,
-                       "Resume Handle:", hf_samr_resume_hnd, 0);
+                       "Resume Handle:", hf_samr_resume_hnd);
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_IDX_AND_NAME_ARRAY_ptr, NDR_POINTER_REF,
-                       "IDX_AND_NAME_ARRAY:", hf_samr_domain, 0);
+                       "IDX_AND_NAME_ARRAY:", hf_samr_domain);
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_pointer_long, NDR_POINTER_REF,
-                       "Entries:", hf_samr_entries, 0);
+                       "Entries:", hf_samr_entries);
 
         offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                                  hf_samr_rc, NULL);
@@ -2952,7 +2941,7 @@ samr_dissect_enum_dom_groups_rqst(tvbuff_t *tvb, int offset,
 
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_pointer_long, NDR_POINTER_REF,
-                       "Resume Handle:", hf_samr_resume_hnd, 0);
+                       "Resume Handle:", hf_samr_resume_hnd);
         offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
                        hf_samr_mask, NULL);
         offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
@@ -2968,13 +2957,13 @@ samr_dissect_enum_dom_groups_reply(tvbuff_t *tvb, int offset,
 {
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_pointer_long, NDR_POINTER_REF,
-                       "Resume Handle:", hf_samr_resume_hnd, 0);
+                       "Resume Handle:", hf_samr_resume_hnd);
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_IDX_AND_NAME_ARRAY_ptr, NDR_POINTER_REF,
-                       "IDX_AND_NAME_ARRAY:", hf_samr_group_name, 0);
+                       "IDX_AND_NAME_ARRAY:", hf_samr_group_name);
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_pointer_long, NDR_POINTER_REF,
-                       "Entries:", hf_samr_entries, 0);
+                       "Entries:", hf_samr_entries);
 
         offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                                  hf_samr_rc, NULL);
@@ -2992,7 +2981,7 @@ samr_dissect_enum_dom_aliases_rqst(tvbuff_t *tvb, int offset,
 
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_pointer_long, NDR_POINTER_REF,
-                       "Resume Handle:", hf_samr_resume_hnd, 0);
+                       "Resume Handle:", hf_samr_resume_hnd);
 
         offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
                        hf_samr_mask, NULL);
@@ -3010,15 +2999,15 @@ samr_dissect_enum_dom_aliases_reply(tvbuff_t *tvb, int offset,
 {
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_pointer_long, NDR_POINTER_REF,
-                       "Resume Handle:", hf_samr_resume_hnd, 0);
+                       "Resume Handle:", hf_samr_resume_hnd);
 
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_IDX_AND_NAME_ARRAY_ptr, NDR_POINTER_REF,
-                       "IDX_AND_NAME_ARRAY:", hf_samr_alias_name, 0);
+                       "IDX_AND_NAME_ARRAY:", hf_samr_alias_name);
 
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_pointer_long, NDR_POINTER_REF,
-                       "Entries:", hf_samr_entries, 0);
+                       "Entries:", hf_samr_entries);
 
         offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                                  hf_samr_rc, NULL);
@@ -3044,7 +3033,7 @@ samr_dissect_get_members_in_alias_reply(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        dissect_ndr_nt_PSID_ARRAY, NDR_POINTER_REF,
-                       "PSID_ARRAY:", -1, 0);
+                       "PSID_ARRAY:", -1);
 
        offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                                  hf_samr_rc, NULL);
@@ -3110,7 +3099,7 @@ dissect_ndr_nt_LOGON_HOURS(tvbuff_t *tvb, int offset,
           of 11? */
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_LOGON_HOURS_hours, NDR_POINTER_UNIQUE,
-                       "LOGON_HOURS", -1, 0);
+                       "LOGON_HOURS", -1);
 
        proto_item_set_len(item, offset-old_offset);
        return offset;
@@ -3133,14 +3122,14 @@ samr_dissect_USER_INFO_1(tvbuff_t *tvb, int offset,
        }
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                               hf_samr_acct_name, 0);
+                               hf_samr_acct_name);
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                               hf_samr_full_name, 0);
+                               hf_samr_full_name);
        offset = dissect_ndr_nt_acct_ctrl(tvb, offset, pinfo, tree, drep);
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                               hf_samr_home, 0);
+                               hf_samr_home);
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                               hf_samr_script, 0);
+                               hf_samr_script);
 
        proto_item_set_len(item, offset-old_offset);
        return offset;
@@ -3162,9 +3151,9 @@ samr_dissect_USER_INFO_2(tvbuff_t *tvb, int offset,
        }
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                               hf_samr_acct_name, 0);
+                               hf_samr_acct_name);
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                               hf_samr_full_name, 0);
+                               hf_samr_full_name);
        offset = dissect_ndr_uint16 (tvb, offset, pinfo, tree, drep,
                                hf_samr_bad_pwd_count, NULL);
        offset = dissect_ndr_uint16 (tvb, offset, pinfo, tree, drep,
@@ -3190,23 +3179,23 @@ samr_dissect_USER_INFO_3(tvbuff_t *tvb, int offset,
        }
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                               hf_samr_acct_name, 0);
+                               hf_samr_acct_name);
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                               hf_samr_full_name, 0);
+                               hf_samr_full_name);
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                                hf_samr_rid, NULL);
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                                hf_samr_group, NULL);
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                               hf_samr_home, 0);
+                               hf_samr_home);
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                               hf_samr_home_drive, 0);
+                               hf_samr_home_drive);
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                               hf_samr_script, 0);
+                               hf_samr_script);
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                               hf_samr_acct_desc, 0);
+                               hf_samr_acct_desc);
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                               hf_samr_workstations, 0);
+                               hf_samr_workstations);
        offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep,
                                hf_samr_logon_time);
        offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep,
@@ -3244,9 +3233,9 @@ samr_dissect_USER_INFO_5(tvbuff_t *tvb, int offset,
        }
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                               hf_samr_acct_name, 0);
+                               hf_samr_acct_name);
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                               hf_samr_full_name, 0);
+                               hf_samr_full_name);
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                                hf_samr_rid, NULL);
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
@@ -3256,15 +3245,15 @@ samr_dissect_USER_INFO_5(tvbuff_t *tvb, int offset,
        offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep,
                                hf_samr_codepage, NULL);
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                               hf_samr_home, 0);
+                               hf_samr_home);
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                               hf_samr_home_drive, 0);
+                               hf_samr_home_drive);
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                               hf_samr_script, 0);
+                               hf_samr_script);
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                               hf_samr_acct_desc, 0);
+                               hf_samr_acct_desc);
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                               hf_samr_workstations, 0);
+                               hf_samr_workstations);
        offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep,
                                hf_samr_logon_time);
        offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep,
@@ -3300,9 +3289,9 @@ samr_dissect_USER_INFO_6(tvbuff_t *tvb, int offset,
        }
 
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                               hf_samr_acct_name, 0);
+                               hf_samr_acct_name);
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                               hf_samr_full_name, 0);
+                               hf_samr_full_name);
 
        proto_item_set_len(item, offset-old_offset);
        return offset;
@@ -3418,7 +3407,7 @@ samr_dissect_BUFFER(tvbuff_t *tvb, int offset,
                                hf_samr_count, NULL);
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_BUFFER_buffer, NDR_POINTER_UNIQUE,
-                       "BUFFER", -1, 0);
+                       "BUFFER", -1);
 
        proto_item_set_len(item, offset-old_offset);
        return offset;
@@ -3452,31 +3441,31 @@ samr_dissect_USER_INFO_21(tvbuff_t *tvb, int offset,
        offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep,
                                hf_samr_pwd_must_change_time);
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                               hf_samr_acct_name, 2);
+                               hf_samr_acct_name);
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                               hf_samr_full_name, 0);
+                               hf_samr_full_name);
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                               hf_samr_home, 0);
+                               hf_samr_home);
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                               hf_samr_home_drive, 0);
+                               hf_samr_home_drive);
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                               hf_samr_script, 0);
+                               hf_samr_script);
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                               hf_samr_profile, 0);
+                               hf_samr_profile);
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                               hf_samr_acct_desc, 0);
+                               hf_samr_acct_desc);
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                               hf_samr_workstations, 0);
+                               hf_samr_workstations);
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                               hf_samr_comment, 0);
+                               hf_samr_comment);
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                               hf_samr_parameters, 0);
+                               hf_samr_parameters);
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                               hf_samr_unknown_string, 0);
+                               hf_samr_unknown_string);
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                               hf_samr_unknown_string, 0);
+                               hf_samr_unknown_string);
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                               hf_samr_unknown_string, 0);
+                               hf_samr_unknown_string);
        offset = samr_dissect_BUFFER(tvb, offset, pinfo, tree, drep);
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                                hf_samr_rid, NULL);
@@ -3619,12 +3608,12 @@ samr_dissect_USER_INFO (tvbuff_t *tvb, int offset,
                                tvb, offset, pinfo, tree, drep);
                break;
        case 7:
-               offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                               hf_samr_full_name, 0);
+               offset = dissect_ndr_nt_UNICODE_STRING(
+                       tvb, offset, pinfo, tree, drep, hf_samr_full_name);
                break;
        case 8:
-               offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                               hf_samr_acct_desc, 0);
+               offset = dissect_ndr_nt_UNICODE_STRING(
+                       tvb, offset, pinfo, tree, drep, hf_samr_acct_desc);
                break;
        case 9:
                offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
@@ -3635,20 +3624,20 @@ samr_dissect_USER_INFO (tvbuff_t *tvb, int offset,
                                tvb, offset, pinfo, tree, drep);
                break;
        case 11:
-               offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                               hf_samr_home, 0);
+               offset = dissect_ndr_nt_UNICODE_STRING(
+                       tvb, offset, pinfo, tree, drep, hf_samr_home);
                break;
        case 12:
-               offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                               hf_samr_home_drive, 0);
+               offset = dissect_ndr_nt_UNICODE_STRING(
+                       tvb, offset, pinfo, tree, drep, hf_samr_home_drive);
                break;
        case 13:
-               offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                               hf_samr_script, 0);
+               offset = dissect_ndr_nt_UNICODE_STRING(
+                       tvb, offset, pinfo, tree, drep, hf_samr_script);
                break;
        case 14:
-               offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                               hf_samr_workstations, 0);
+               offset = dissect_ndr_nt_UNICODE_STRING(
+                       tvb, offset, pinfo, tree, drep, hf_samr_workstations);
                break;
        case 16:
                offset = dissect_ndr_nt_acct_ctrl(tvb, offset, pinfo, tree,
@@ -3667,8 +3656,8 @@ samr_dissect_USER_INFO (tvbuff_t *tvb, int offset,
                                tvb, offset, pinfo, tree, drep);
                break;
        case 20:
-               offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                               hf_samr_profile, 0);
+               offset = dissect_ndr_nt_UNICODE_STRING(
+                       tvb, offset, pinfo, tree, drep, hf_samr_profile);
                break;
        case 21:
                offset = samr_dissect_USER_INFO_21(
@@ -3699,7 +3688,7 @@ samr_dissect_USER_INFO_ptr(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_USER_INFO, NDR_POINTER_UNIQUE,
-                       "USER_INFO pointer", -1, 0);
+                       "USER_INFO pointer", -1);
        return offset;
 }
 
@@ -3716,7 +3705,7 @@ samr_dissect_set_information_user2_rqst(tvbuff_t *tvb, int offset,
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_USER_INFO, NDR_POINTER_REF,
-                       "USER_INFO:", -1, 0);
+                       "USER_INFO:", -1);
 
        return offset;
 }
@@ -3753,7 +3742,7 @@ samr_dissect_unknown_2f_reply(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_USER_INFO_ptr, NDR_POINTER_REF,
-                       "USER_INFO:", -1, 0);
+                       "USER_INFO:", -1);
 
        offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                        hf_samr_rc, NULL);
@@ -3853,10 +3842,10 @@ samr_dissect_MEMBER_ARRAY(tvbuff_t *tvb, int offset,
                        hf_samr_count, &count);
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_MEMBER_ARRAY_rids, NDR_POINTER_UNIQUE,
-                       "RIDs", -1, 0);
+                       "RIDs", -1);
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_MEMBER_ARRAY_types, NDR_POINTER_UNIQUE,
-                       "Types", -1, 0);
+                       "Types", -1);
 
        proto_item_set_len(item, offset-old_offset);
        return offset;
@@ -3869,7 +3858,7 @@ samr_dissect_MEMBER_ARRAY_ptr(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_MEMBER_ARRAY, NDR_POINTER_UNIQUE,
-                       "MEMBER_ARRAY", -1, 0);
+                       "MEMBER_ARRAY", -1);
        return offset;
 }
 
@@ -3890,7 +3879,7 @@ samr_dissect_query_groupmem_reply(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_MEMBER_ARRAY_ptr, NDR_POINTER_REF,
-                       "MEMBER_ARRAY:", -1, 0);
+                       "MEMBER_ARRAY:", -1);
 
        offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                                  hf_samr_rc, NULL);
@@ -3911,7 +3900,7 @@ samr_dissect_set_sec_object_rqst(tvbuff_t *tvb, int offset,
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_SECURITY_DESCRIPTOR, NDR_POINTER_REF,
-               "LSA_SECURITY_DESCRIPTOR pointer: ", -1, 0);
+               "LSA_SECURITY_DESCRIPTOR pointer: ", -1);
 
        return offset;
 }
@@ -3948,7 +3937,7 @@ samr_dissect_query_sec_object_reply(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                lsa_dissect_LSA_SECURITY_DESCRIPTOR, NDR_POINTER_UNIQUE,
-               "LSA_SECURITY_DESCRIPTOR pointer: ", -1, 0);
+               "LSA_SECURITY_DESCRIPTOR pointer: ", -1);
 
        offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                                  hf_samr_rc, NULL);
@@ -3962,7 +3951,7 @@ samr_dissect_LOOKUP_NAMES_name(tvbuff_t *tvb, int offset,
                        char *drep)
 {
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                               hf_samr_acct_name, 1);
+                               hf_samr_acct_name);
        return offset;
 }
 
@@ -4002,7 +3991,7 @@ samr_dissect_lookup_names_rqst(tvbuff_t *tvb, int offset,
 
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_LOOKUP_NAMES, NDR_POINTER_REF,
-                       "LOOKUP_NAMES:", -1, 0);
+                       "LOOKUP_NAMES:", -1);
 
        return offset;
 }
@@ -4014,10 +4003,10 @@ samr_dissect_lookup_names_reply(tvbuff_t *tvb, int offset,
 {
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_INDEX_ARRAY, NDR_POINTER_REF,
-                       "Rids:", hf_samr_rid, 0);
+                       "Rids:", hf_samr_rid);
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_INDEX_ARRAY, NDR_POINTER_REF,
-                       "Types:", hf_samr_type, 0);
+                       "Types:", hf_samr_type);
 
        offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                                  hf_samr_rc, NULL);
@@ -4072,7 +4061,7 @@ samr_dissect_lookup_rids_rqst(tvbuff_t *tvb, int offset,
 
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_LOOKUP_RIDS, NDR_POINTER_REF,
-                       "LOOKUP_RIDS:", -1, 0);
+                       "LOOKUP_RIDS:", -1);
 
        return offset;
 }
@@ -4083,7 +4072,7 @@ samr_dissect_UNICODE_STRING_ARRAY_name(tvbuff_t *tvb, int offset,
                        char *drep)
 {
        offset = dissect_ndr_nt_UNICODE_STRING(tvb, offset, pinfo, tree, drep,
-                               hf_samr_acct_name, 0);
+                               hf_samr_acct_name);
        return offset;
 }
 
@@ -4117,7 +4106,7 @@ samr_dissect_UNICODE_STRING_ARRAY(tvbuff_t *tvb, int offset,
 
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_UNICODE_STRING_ARRAY_names, NDR_POINTER_UNIQUE,
-                       "Strings", -1, 0);
+                       "Strings", -1);
 
        proto_item_set_len(item, offset-old_offset);
        return offset;
@@ -4133,10 +4122,10 @@ samr_dissect_lookup_rids_reply(tvbuff_t *tvb, int offset,
 {
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_UNICODE_STRING_ARRAY, NDR_POINTER_REF,
-                       "RIDs:", hf_samr_rid, 0);
+                       "RIDs:", hf_samr_rid);
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_INDEX_ARRAY, NDR_POINTER_REF,
-                       "Types:", hf_samr_type, 0);
+                       "Types:", hf_samr_type);
 
        offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                                  hf_samr_rc, NULL);
@@ -4271,7 +4260,7 @@ samr_dissect_add_alias_member_rqst(tvbuff_t *tvb, int offset,
 
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        dissect_ndr_nt_SID, NDR_POINTER_REF,
-                       "SID:", -1, 0);
+                       "SID:", -1);
        return offset;
 }
 
@@ -4296,7 +4285,7 @@ samr_dissect_remove_alias_member_rqst(tvbuff_t *tvb, int offset,
 
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        dissect_ndr_nt_SID, NDR_POINTER_REF,
-                       "SID:", -1, 0);
+                       "SID:", -1);
        return offset;
 }
 
@@ -4388,7 +4377,7 @@ samr_dissect_remove_member_from_foreign_domain_rqst(tvbuff_t *tvb, int offset,
 
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        dissect_ndr_nt_SID, NDR_POINTER_REF,
-                       "SID:", -1, 0);
+                       "SID:", -1);
        return offset;
 }
 
@@ -4416,7 +4405,7 @@ samr_dissect_remove_multiple_members_from_alias_rqst(tvbuff_t *tvb,
 
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        dissect_ndr_nt_PSID_ARRAY, NDR_POINTER_REF,
-                       "PSID_ARRAY:", -1, 0);
+                       "PSID_ARRAY:", -1);
 
        return offset;
 }
@@ -4532,7 +4521,7 @@ samr_dissect_add_multiple_members_to_alias_rqst(tvbuff_t *tvb, int offset,
 
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        dissect_ndr_nt_PSID_ARRAY, NDR_POINTER_REF,
-                       "PSID_ARRAY:", -1, 0);
+                       "PSID_ARRAY:", -1);
 
        return offset;
 }
@@ -4558,7 +4547,7 @@ samr_dissect_create_group_in_domain_rqst(tvbuff_t *tvb, int offset,
 
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_pointer_UNICODE_STRING, NDR_POINTER_REF,
-                       "Account Name", hf_samr_acct_name, 0);
+                       "Account Name", hf_samr_acct_name);
 
        offset = dissect_nt_access_mask(
                tvb, offset, pinfo, tree, drep, hf_samr_access,
@@ -4613,7 +4602,7 @@ samr_dissect_query_information_domain_reply(tvbuff_t *tvb, int offset,
         */
         offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                         samr_dissect_DOMAIN_INFO, NDR_POINTER_UNIQUE,
-                        "DOMAIN_INFO pointer", hf_samr_domain, 0);
+                        "DOMAIN_INFO pointer", hf_samr_domain);
 
        offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                        hf_samr_rc, NULL);
@@ -4642,7 +4631,7 @@ samr_dissect_query_information_user_reply(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        samr_dissect_USER_INFO_ptr, NDR_POINTER_REF,
-                       "USER_INFO:", -1, 0);
+                       "USER_INFO:", -1);
 
         offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
                                  hf_samr_rc, NULL);
index 67820dfa05d6f54c1dbb9efe78f11a838fdf0974..0ec90c306084223e9f6b8f1d5e76a5cdaf45ef21 100644 (file)
@@ -1,6 +1,6 @@
 /* packet-dcerpc-srvsvc.c
- * Routines for SMB \\PIPE\\srvsvc packet disassembly
- * Copyright 2001-2002, Tim Potter <tpot@samba.org>
+ * Routines for SMB \PIPE\srvsvc packet disassembly
+ * Copyright 2001-2003, Tim Potter <tpot@samba.org>
  * Copyright 2002, Richard Sharpe <rsharpe@ns.aus.com>
  *   decode srvsvc calls where Samba knows them ...
  * Copyright 2002, Ronnie Sahlberg
@@ -10,7 +10,7 @@
  * sources.
  *
  *
- * $Id: packet-dcerpc-srvsvc.c,v 1.45 2003/01/11 04:35:57 tpot Exp $
+ * $Id: packet-dcerpc-srvsvc.c,v 1.46 2003/01/28 06:39:40 tpot Exp $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -314,7 +314,7 @@ srvsvc_dissect_CHARDEV_INFO_0(tvbuff_t *tvb, int offset,
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                srvsvc_dissect_pointer_UNICODE_STRING,
                NDR_POINTER_UNIQUE, "Char Device",
-               hf_srvsvc_chrdev, 0);
+               hf_srvsvc_chrdev);
 
        return offset;
 }
@@ -345,7 +345,7 @@ srvsvc_dissect_CHARDEV_INFO_0_CONTAINER(tvbuff_t *tvb, int offset,
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                srvsvc_dissect_CHARDEV_INFO_0_array, NDR_POINTER_UNIQUE,
-               "CHARDEV_INFO_0 array:", -1, 0);
+               "CHARDEV_INFO_0 array:", -1);
 
        return offset;
 }
@@ -366,7 +366,7 @@ srvsvc_dissect_CHARDEV_INFO_1(tvbuff_t *tvb, int offset,
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                srvsvc_dissect_pointer_UNICODE_STRING,
                NDR_POINTER_UNIQUE, "Char Device",
-               hf_srvsvc_chrdev, 0);
+               hf_srvsvc_chrdev);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_srvsvc_chrdev_status, 0);
@@ -374,7 +374,7 @@ srvsvc_dissect_CHARDEV_INFO_1(tvbuff_t *tvb, int offset,
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                srvsvc_dissect_pointer_UNICODE_STRING,
                NDR_POINTER_UNIQUE, "User",
-               hf_srvsvc_user, 0);
+               hf_srvsvc_user);
 
        /* XXX dont know how to decode this time field */
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
@@ -409,7 +409,7 @@ srvsvc_dissect_CHARDEV_INFO_1_CONTAINER(tvbuff_t *tvb, int offset,
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                srvsvc_dissect_CHARDEV_INFO_1_array, NDR_POINTER_UNIQUE,
-               "CHARDEV_INFO_1 array:", -1, 3);
+               "CHARDEV_INFO_1 array:", -1);
 
        return offset;
 }
@@ -435,14 +435,12 @@ srvsvc_dissect_CHARDEV_ENUM_UNION(tvbuff_t *tvb, int offset,
        case 0:
                offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        srvsvc_dissect_CHARDEV_INFO_0_CONTAINER,
-                       NDR_POINTER_UNIQUE, "CHARDEV_INFO_0_CONTAINER:",
-                       -1, 0);
+                       NDR_POINTER_UNIQUE, "CHARDEV_INFO_0_CONTAINER:", -1);
                break;
        case 1:
                offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        srvsvc_dissect_CHARDEV_INFO_1_CONTAINER,
-                       NDR_POINTER_UNIQUE, "CHARDEV_INFO_1_CONTAINER:",
-                       -1, 0);
+                       NDR_POINTER_UNIQUE, "CHARDEV_INFO_1_CONTAINER:", -1);
                break;
        }
 
@@ -489,14 +487,12 @@ srvsvc_dissect_CHARDEV_INFO_UNION(tvbuff_t *tvb, int offset,
        case 0:
                offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        srvsvc_dissect_CHARDEV_INFO_0,
-                       NDR_POINTER_UNIQUE, "CHARDEV_INFO_0:",
-                       -1, 0);
+                       NDR_POINTER_UNIQUE, "CHARDEV_INFO_0:", -1);
                break;
        case 1:
                offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        srvsvc_dissect_CHARDEV_INFO_1,
-                       NDR_POINTER_UNIQUE, "CHARDEV_INFO_1:",
-                       -1, 0);
+                       NDR_POINTER_UNIQUE, "CHARDEV_INFO_1:", -1);
                break;
        }
 
@@ -519,20 +515,18 @@ srvsvc_dissect_netrchardevenum_rqst(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                srvsvc_dissect_pointer_UNICODE_STRING,
-               NDR_POINTER_UNIQUE, "Server",
-               hf_srvsvc_server, 0);
+               NDR_POINTER_UNIQUE, "Server", hf_srvsvc_server);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                srvsvc_dissect_CHARDEV_ENUM_STRUCT,
-               NDR_POINTER_REF, "CHARDEV_ENUM_STRUCT",
-               -1, 0);
+               NDR_POINTER_REF, "CHARDEV_ENUM_STRUCT", -1);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_srvsvc_preferred_len, 0);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                srvsvc_dissect_ENUM_HANDLE,
-               NDR_POINTER_UNIQUE, "Enum Handle", -1, 0);
+               NDR_POINTER_UNIQUE, "Enum Handle", -1);
 
        return offset;
 }
@@ -543,15 +537,14 @@ srvsvc_dissect_netrchardevenum_reply(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        srvsvc_dissect_CHARDEV_ENUM_STRUCT,
-                       NDR_POINTER_REF, "CHARDEV_ENUM_STRUCT",
-                       -1, 0);
+                       NDR_POINTER_REF, "CHARDEV_ENUM_STRUCT", -1);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                        hf_srvsvc_num_entries, NULL);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        srvsvc_dissect_ENUM_HANDLE,
-                       NDR_POINTER_UNIQUE, "Enum Handle", -1, 0);
+                       NDR_POINTER_UNIQUE, "Enum Handle", -1);
 
        offset = dissect_doserror(tvb, offset, pinfo, tree, drep,
                        hf_srvsvc_rc, NULL);
@@ -575,13 +568,11 @@ srvsvc_dissect_netrchardevgetinfo_rqst(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                srvsvc_dissect_pointer_UNICODE_STRING,
-               NDR_POINTER_UNIQUE, "Server",
-               hf_srvsvc_server, 0);
+               NDR_POINTER_UNIQUE, "Server", hf_srvsvc_server);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                srvsvc_dissect_pointer_UNICODE_STRING,
-               NDR_POINTER_REF, "Char Device",
-               hf_srvsvc_chrdev, 0);
+               NDR_POINTER_REF, "Char Device", hf_srvsvc_chrdev);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                        hf_srvsvc_info_level, 0);
@@ -595,7 +586,7 @@ srvsvc_dissect_netrchardevgetinfo_reply(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        srvsvc_dissect_CHARDEV_INFO_UNION,
-                       NDR_POINTER_REF, "CHARDEV_INFO_UNION", -1, 0);
+                       NDR_POINTER_REF, "CHARDEV_INFO_UNION", -1);
 
        offset = dissect_doserror(tvb, offset, pinfo, tree, drep,
                        hf_srvsvc_rc, NULL);
@@ -617,13 +608,11 @@ srvsvc_dissect_netrchardevcontrol_rqst(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                srvsvc_dissect_pointer_UNICODE_STRING,
-               NDR_POINTER_UNIQUE, "Server",
-               hf_srvsvc_server, 0);
+               NDR_POINTER_UNIQUE, "Server", hf_srvsvc_server);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                srvsvc_dissect_pointer_UNICODE_STRING,
-               NDR_POINTER_REF, "Char Device",
-               hf_srvsvc_chrdev, 0);
+               NDR_POINTER_REF, "Char Device", hf_srvsvc_chrdev);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                        hf_srvsvc_chrdev_opcode, 0);
@@ -655,8 +644,7 @@ srvsvc_dissect_CHARDEVQ_INFO_0(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                srvsvc_dissect_pointer_UNICODE_STRING,
-               NDR_POINTER_UNIQUE, "Char QDevice",
-               hf_srvsvc_chrdev, 0);
+               NDR_POINTER_UNIQUE, "Char QDevice", hf_srvsvc_chrdev);
 
        return offset;
 }
@@ -687,7 +675,7 @@ srvsvc_dissect_CHARDEVQ_INFO_0_CONTAINER(tvbuff_t *tvb, int offset,
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                srvsvc_dissect_CHARDEVQ_INFO_0_array, NDR_POINTER_UNIQUE,
-               "CHARDEVQ_INFO_0 array:", -1, 0);
+               "CHARDEVQ_INFO_0 array:", -1);
 
        return offset;
 }
@@ -708,16 +696,14 @@ srvsvc_dissect_CHARDEVQ_INFO_1(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                srvsvc_dissect_pointer_UNICODE_STRING,
-               NDR_POINTER_UNIQUE, "Char Device",
-               hf_srvsvc_chrdev, 0);
+               NDR_POINTER_UNIQUE, "Char Device", hf_srvsvc_chrdev);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_srvsvc_chrqpri, 0);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                srvsvc_dissect_pointer_UNICODE_STRING,
-               NDR_POINTER_UNIQUE, "Char Devices",
-               hf_srvsvc_chrdevq, 0);
+               NDR_POINTER_UNIQUE, "Char Devices", hf_srvsvc_chrdevq);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_srvsvc_chrqnumusers, 0);
@@ -754,7 +740,7 @@ srvsvc_dissect_CHARDEVQ_INFO_1_CONTAINER(tvbuff_t *tvb, int offset,
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                srvsvc_dissect_CHARDEVQ_INFO_1_array, NDR_POINTER_UNIQUE,
-               "CHARDEVQ_INFO_1 array:", -1, 3);
+               "CHARDEVQ_INFO_1 array:", -1);
 
        return offset;
 }
@@ -780,14 +766,12 @@ srvsvc_dissect_CHARDEVQ_ENUM_UNION(tvbuff_t *tvb, int offset,
        case 0:
                offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        srvsvc_dissect_CHARDEVQ_INFO_0_CONTAINER,
-                       NDR_POINTER_UNIQUE, "CHARDEVQ_INFO_0_CONTAINER:",
-                       -1, 0);
+                       NDR_POINTER_UNIQUE, "CHARDEVQ_INFO_0_CONTAINER:", -1);
                break;
        case 1:
                offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        srvsvc_dissect_CHARDEVQ_INFO_1_CONTAINER,
-                       NDR_POINTER_UNIQUE, "CHARDEVQ_INFO_1_CONTAINER:",
-                       -1, 0);
+                       NDR_POINTER_UNIQUE, "CHARDEVQ_INFO_1_CONTAINER:", -1);
                break;
        }
 
@@ -834,14 +818,12 @@ srvsvc_dissect_CHARDEVQ_INFO(tvbuff_t *tvb, int offset,
        case 0:
                offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        srvsvc_dissect_CHARDEVQ_INFO_0,
-                       NDR_POINTER_UNIQUE, "CHARDEVQ_INFO_0:",
-                       -1, 0);
+                       NDR_POINTER_UNIQUE, "CHARDEVQ_INFO_0:", -1);
                break;
        case 1:
                offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        srvsvc_dissect_CHARDEVQ_INFO_1,
-                       NDR_POINTER_UNIQUE, "CHARDEVQ_INFO_1:",
-                       -1, 0);
+                       NDR_POINTER_UNIQUE, "CHARDEVQ_INFO_1:", -1);
                break;
        }
 
@@ -866,25 +848,22 @@ srvsvc_dissect_netrchardevqenum_rqst(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                srvsvc_dissect_pointer_UNICODE_STRING,
-               NDR_POINTER_UNIQUE, "Server",
-               hf_srvsvc_server, 0);
+               NDR_POINTER_UNIQUE, "Server", hf_srvsvc_server);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                srvsvc_dissect_pointer_UNICODE_STRING,
-               NDR_POINTER_UNIQUE, "User",
-               hf_srvsvc_user, 0);
+               NDR_POINTER_UNIQUE, "User", hf_srvsvc_user);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                srvsvc_dissect_CHARDEVQ_ENUM_STRUCT,
-               NDR_POINTER_REF, "CHARDEVQ_ENUM_STRUCT",
-               -1, 0);
+               NDR_POINTER_REF, "CHARDEVQ_ENUM_STRUCT", -1);
 
        offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
                hf_srvsvc_preferred_len, 0);
 
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                srvsvc_dissect_ENUM_HANDLE,
-               NDR_POINTER_UNIQUE, "Enum Handle", -1, 0);
+               NDR_POINTER_UNIQUE, "Enum Handle", -1);
 
        return offset;
 }
@@ -895,15 +874,14 @@ srvsvc_dissect_netrchardevqenum_reply(tvbuff_t *tvb, int offset,
 {
        offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
                        srvsvc_dissect_CHARDEVQ_ENUM_STRUCT,
-