Wireshark-dev: Re: [Wireshark-dev] Wireshark PIDL generated dissectors
From: Matthieu Patou <[email protected]>
Date: Sun, 20 Oct 2013 21:38:44 -0700
Hi Joerg
On 10/07/2013 10:16 PM, Joerg Mayer wrote:
On Mon, Oct 07, 2013 at 09:30:58PM -0700, Matthieu Patou wrote:
That being said I did a bit of homework yesterday to fix the
situation I have a branch fix_pidl in my gitorious repository that I
maintain for wireshark:
https://gitorious.org/wireshark/wireshark/commits/fix_pidl

With this branch and the latest version of the pidl in samba tree
(that incorporate the change for Michael Mann) I'm able to
regenerate and rebuild most of the dissectors.
You might want to have a look at commit 27f5746 (https://gitorious.org/wireshark/wireshark/commit/27f5746163410acbf638cdce320fb1b8295fa682)
that update the guide to explain and make it easy to generate the
dissectors especially it explains how to avoid checking out the
whole samba source tree but still get the latest version of Samba's
pidl (minus the time it takes to update our rsync servers).
Are you interested to fetch those fixes ?
If nobody looks at it until the weekend I will do that (or unless I
shift some of my sleeping time into this).

Did you slept well last 2 weeks ?
If so can you think at integrating those patches:

0001-Update-the-README-file-for-pidl-usage-in-wireshark.patch
0002-Add-regenerated-atsvc-dissector.patch
0003-Fix-implicit-convertion-errors.patch
0004-Update-the-idl-for-dssetup.patch
0005-Update-the-generated-file-for-dssetup.patch
0006-Update-generated-file-for-efs.patch
0007-Update-the-idl-and-cnf-for-initshutdown.patch
0008-Add-regenerated-files-for-initshutdown.patch
0009-Add-regenerated-eventlog-files.patch
0010-frsrpc-Regenerate-frsrpc-due-to-changes-in-the-pidl-.patch
0011-Update-cnf-and-idl-for-misc-interface.patch
0012-Add-packet-dcerpc-misc.c-to-the-list-of-build-files.patch
0013-Generate-misc.idl-related-files.patch
0014-Update-the-idl-and-cnf-for-winreg.patch
0015-Update-generated-code-for-winreg.patch
0016-Regenerate-the-dnserver.patch
0017-Update-the-cnf-for-lsa-to-remove-some-warnings.patch
0018-Regenerate-the-lsa-files.patch
0019-Regenerate-wzcsvc.patch
0020-Update-samr.cnf-to-remove-warnings-about-void-conver.patch
0021-Regenerate-samr-files.patch

Thanks.
Matthieu.

--
Matthieu Patou
Samba Team
http://samba.org

>From 4efd35aeaec29731fdf748d17510aceffc78d8fc Mon Sep 17 00:00:00 2001
From: Matthieu Patou <[email protected]>
Date: Sun, 6 Oct 2013 17:48:11 -0700
Subject: [PATCH 07/21] Update the idl and cnf for initshutdown

Signed-off-by: Matthieu Patou <[email protected]>
---
 epan/dissectors/pidl/initshutdown.cnf |  1 +
 epan/dissectors/pidl/initshutdown.idl | 71 ++++++++++++++++++++++++++++-------
 2 files changed, 59 insertions(+), 13 deletions(-)
 create mode 100644 epan/dissectors/pidl/initshutdown.cnf

diff --git a/epan/dissectors/pidl/initshutdown.cnf b/epan/dissectors/pidl/initshutdown.cnf
new file mode 100644
index 0000000..55a0da3
--- /dev/null
+++ b/epan/dissectors/pidl/initshutdown.cnf
@@ -0,0 +1 @@
+TYPE lsa_StringLarge "offset=lsarpc_dissect_struct_lsa_StringLarge(tvb, offset, pinfo, tree, drep, @[email protected], @[email protected]);" FT_NONE BASE_NONE 0 NULL NULL
diff --git a/epan/dissectors/pidl/initshutdown.idl b/epan/dissectors/pidl/initshutdown.idl
index 868e48e..13a1362 100644
--- a/epan/dissectors/pidl/initshutdown.idl
+++ b/epan/dissectors/pidl/initshutdown.idl
@@ -4,6 +4,8 @@
   initshutdown interface definition
 */
 
+import "lsa.idl";
+
 [ 
   uuid("894de0c0-0d55-11d3-a322-00c04fa321a1"),
   version(1.0),
@@ -12,23 +14,62 @@
   helpstring("Init shutdown service")
 ] interface initshutdown
 {
-	typedef struct {
-		[value(strlen_m_term(name))] uint32 name_size;
-		[flag(STR_LEN4|STR_NOTERM)] string name;
-	} initshutdown_String_sub;
+	typedef [v1_enum] enum {
+		SHTDN_REASON_MAJOR_OTHER		= 0x00000000,
+		SHTDN_REASON_MAJOR_HARDWARE		= 0x00010000,
+		SHTDN_REASON_MAJOR_OPERATINGSYSTEM	= 0x00020000,
+		SHTDN_REASON_MAJOR_SOFTWARE		= 0x00030000,
+		SHTDN_REASON_MAJOR_APPLICATION		= 0x00040000,
+		SHTDN_REASON_MAJOR_SYSTEM		= 0x00050000,
+		SHTDN_REASON_MAJOR_POWER		= 0x00060000,
+		SHTDN_REASON_MAJOR_LEGACY_API		= 0x00070000
+	} initshutdown_ReasonMajor;
+
+	typedef [v1_enum] enum {
+		SHTDN_REASON_MINOR_OTHER		= 0x00000000,
+		SHTDN_REASON_MINOR_MAINTENANCE		= 0x00000001,
+		SHTDN_REASON_MINOR_INSTALLATION		= 0x00000002,
+		SHTDN_REASON_MINOR_UPGRADE		= 0x00000003,
+		SHTDN_REASON_MINOR_RECONFIG		= 0x00000004,
+		SHTDN_REASON_MINOR_HUNG			= 0x00000005,
+		SHTDN_REASON_MINOR_UNSTABLE		= 0x00000006,
+		SHTDN_REASON_MINOR_DISK			= 0x00000007,
+		SHTDN_REASON_MINOR_PROCESSOR		= 0x00000008,
+		SHTDN_REASON_MINOR_NETWORKCARD		= 0x00000009,
+		SHTDN_REASON_MINOR_POWER_SUPPLY		= 0x0000000a,
+		SHTDN_REASON_MINOR_CORDUNPLUGGED	= 0x0000000b,
+		SHTDN_REASON_MINOR_ENVIRONMENT		= 0x0000000c,
+		SHTDN_REASON_MINOR_HARDWARE_DRIVER	= 0x0000000d,
+		SHTDN_REASON_MINOR_OTHERDRIVER		= 0x0000000e,
+		SHTDN_REASON_MINOR_BLUESCREEN		= 0x0000000f,
+		SHTDN_REASON_MINOR_SERVICEPACK		= 0x00000010,
+		SHTDN_REASON_MINOR_HOTFIX		= 0x00000011,
+		SHTDN_REASON_MINOR_SECURITYFIX		= 0x00000012,
+		SHTDN_REASON_MINOR_SECURITY		= 0x00000013,
+		SHTDN_REASON_MINOR_NETWORK_CONNECTIVITY	= 0x00000014,
+		SHTDN_REASON_MINOR_WMI			= 0x00000015,
+		SHTDN_REASON_MINOR_SERVICEPACK_UNINSTALL= 0x00000016,
+		SHTDN_REASON_MINOR_HOTFIX_UNINSTALL	= 0x00000017,
+		SHTDN_REASON_MINOR_SECURITYFIX_UNINSTALL= 0x00000018,
+		SHTDN_REASON_MINOR_MMC			= 0x00000019,
+		SHTDN_REASON_MINOR_TERMSRV		= 0x00000020
+	} initshutdown_ReasonMinor;
 
-	typedef [public] struct {
-		[value(strlen_m(name->name)*2)] uint16 name_len;
-		[value(strlen_m_term(name->name)*2)] uint16 name_size;
-		initshutdown_String_sub *name;
-	} initshutdown_String;
+	typedef [bitmap32bit] bitmap {
+		SHTDN_REASON_FLAG_USER_DEFINED		= 0x40000000,
+		SHTDN_REASON_FLAG_PLANNED		= 0x80000000
+	} initshutdown_ReasonFlags;
 
 	WERROR initshutdown_Init(
 		[in,unique] uint16 *hostname,
-		[in,unique] initshutdown_String *message,
+		/*
+		 * Note: lsa_String and winreg_String both result
+		 *       in WERR_INVALID_PARAM
+		 */
+		[in,unique] lsa_StringLarge *message,
 		[in] uint32 timeout,
 		[in] uint8 force_apps,
-		[in] uint8 reboot
+		[in] uint8 do_reboot
 	);
 
 	WERROR initshutdown_Abort(
@@ -37,10 +78,14 @@
 
 	WERROR initshutdown_InitEx(
   		[in,unique] uint16 *hostname,
-		[in,unique] initshutdown_String *message,
+		/*
+		 * Note: lsa_String and winreg_String both result
+		 *       in WERR_INVALID_PARAM
+		 */
+		[in,unique] lsa_StringLarge *message,
 		[in] uint32 timeout,
 		[in] uint8 force_apps,
-		[in] uint8 reboot,
+		[in] uint8 do_reboot,
 		[in] uint32 reason
 	);
 }
-- 
1.8.1.2

>From 1e3535af4a752f74fdbbe36dcb1b2cfbd2fd39a2 Mon Sep 17 00:00:00 2001
From: Matthieu Patou <[email protected]>
Date: Sun, 6 Oct 2013 17:08:20 -0700
Subject: [PATCH 06/21] Update generated file for efs

Signed-off-by: Matthieu Patou <[email protected]>
---
 epan/dissectors/packet-dcerpc-efs.c | 215 ++++++++++++++++++++----------------
 1 file changed, 122 insertions(+), 93 deletions(-)

diff --git a/epan/dissectors/packet-dcerpc-efs.c b/epan/dissectors/packet-dcerpc-efs.c
index c48f667..f7992e1 100644
--- a/epan/dissectors/packet-dcerpc-efs.c
+++ b/epan/dissectors/packet-dcerpc-efs.c
@@ -12,7 +12,6 @@
 
 
 #include "config.h"
-
 #ifdef _MSC_VER
 #pragma warning(disable:4005)
 #pragma warning(disable:4013)
@@ -39,38 +38,38 @@ static gint ett_efs_ENCRYPTION_CERTIFICATE = -1;
 
 
 /* Header field declarations */
-static gint hf_efs_EfsRpcCloseRaw_pvContext = -1;
-static gint hf_efs_EfsRpcSetFileEncryptionKey_pEncryptionCertificate = -1;
+static gint hf_efs_EfsRpcQueryUsersOnFile_pUsers = -1;
+static gint hf_efs_EfsRpcDecryptFileSrv_FileName = -1;
+static gint hf_efs_EfsRpcEncryptFileSrv_Filename = -1;
 static gint hf_efs_EfsRpcOpenFileRaw_pvContext = -1;
-static gint hf_efs_ENCRYPTION_CERTIFICATE_HASH_pUserSid = -1;
+static gint hf_efs_ENCRYPTION_CERTIFICATE_TotalLength = -1;
+static gint hf_efs_EFS_CERTIFICATE_BLOB_dwCertEncodingType = -1;
+static gint hf_efs_ENCRYPTION_CERTIFICATE_pCertBlob = -1;
+static gint hf_efs_ENCRYPTION_CERTIFICATE_HASH_LIST_pUsers = -1;
+static gint hf_efs_EfsRpcWriteFileRaw_pvContext = -1;
+static gint hf_efs_EFS_HASH_BLOB_pbData = -1;
+static gint hf_efs_EfsRpcAddUsersToFile_FileName = -1;
 static gint hf_efs_EfsRpcReadFileRaw_pvContext = -1;
+static gint hf_efs_werror = -1;
+static gint hf_efs_EfsRpcSetFileEncryptionKey_pEncryptionCertificate = -1;
 static gint hf_efs_EfsRpcQueryRecoveryAgents_FileName = -1;
-static gint hf_efs_EfsRpcQueryUsersOnFile_FileName = -1;
 static gint hf_efs_EfsRpcOpenFileRaw_FileName = -1;
-static gint hf_efs_ENCRYPTION_CERTIFICATE_pCertBlob = -1;
 static gint hf_efs_opnum = -1;
-static gint hf_efs_EFS_HASH_BLOB_pbData = -1;
-static gint hf_efs_ENCRYPTION_CERTIFICATE_HASH_lpDisplayInformation = -1;
-static gint hf_efs_EfsRpcOpenFileRaw_Flags = -1;
-static gint hf_efs_EFS_CERTIFICATE_BLOB_pbData = -1;
 static gint hf_efs_ENCRYPTION_CERTIFICATE_HASH_LIST_nCert_Hash = -1;
-static gint hf_efs_EfsRpcEncryptFileSrv_Filename = -1;
-static gint hf_efs_EfsRpcRemoveUsersFromFile_FileName = -1;
-static gint hf_efs_EfsRpcQueryUsersOnFile_pUsers = -1;
-static gint hf_efs_EfsRpcDecryptFileSrv_FileName = -1;
-static gint hf_efs_ENCRYPTION_CERTIFICATE_TotalLength = -1;
-static gint hf_efs_EfsRpcAddUsersToFile_FileName = -1;
-static gint hf_efs_EfsRpcQueryRecoveryAgents_pRecoveryAgents = -1;
+static gint hf_efs_EfsRpcDecryptFileSrv_Reserved = -1;
 static gint hf_efs_ENCRYPTION_CERTIFICATE_HASH_pHash = -1;
-static gint hf_efs_ENCRYPTION_CERTIFICATE_HASH_cbTotalLength = -1;
-static gint hf_efs_werror = -1;
-static gint hf_efs_EFS_HASH_BLOB_cbData = -1;
-static gint hf_efs_EfsRpcWriteFileRaw_pvContext = -1;
-static gint hf_efs_ENCRYPTION_CERTIFICATE_HASH_LIST_pUsers = -1;
+static gint hf_efs_ENCRYPTION_CERTIFICATE_HASH_pUserSid = -1;
 static gint hf_efs_ENCRYPTION_CERTIFICATE_pUserSid = -1;
-static gint hf_efs_EFS_CERTIFICATE_BLOB_dwCertEncodingType = -1;
-static gint hf_efs_EfsRpcDecryptFileSrv_Reserved = -1;
+static gint hf_efs_EFS_CERTIFICATE_BLOB_pbData = -1;
+static gint hf_efs_EFS_HASH_BLOB_cbData = -1;
+static gint hf_efs_EfsRpcCloseRaw_pvContext = -1;
 static gint hf_efs_EFS_CERTIFICATE_BLOB_cbData = -1;
+static gint hf_efs_EfsRpcQueryUsersOnFile_FileName = -1;
+static gint hf_efs_ENCRYPTION_CERTIFICATE_HASH_cbTotalLength = -1;
+static gint hf_efs_EfsRpcOpenFileRaw_Flags = -1;
+static gint hf_efs_EfsRpcQueryRecoveryAgents_pRecoveryAgents = -1;
+static gint hf_efs_ENCRYPTION_CERTIFICATE_HASH_lpDisplayInformation = -1;
+static gint hf_efs_EfsRpcRemoveUsersFromFile_FileName = -1;
 
 static gint proto_dcerpc_efs = -1;
 /* Version information */
@@ -147,7 +146,7 @@ efs_dissect_struct_dom_sid(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_
 
 /* IDL: struct { */
 /* IDL: 	uint32 cbData; */
-/* IDL: 	[size_is(cbData)] [unique(1)] uint8 *pbData; */
+/* IDL: 	[unique(1)] [size_is(cbData)] uint8 *pbData; */
 /* IDL: } */
 
 static int
@@ -187,14 +186,15 @@ efs_dissect_struct_EFS_HASH_BLOB(tvbuff_t *tvb _U_, int offset _U_, packet_info
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
-	ALIGN_TO_4_BYTES;
+	ALIGN_TO_5_BYTES;
 
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_efs_EFS_HASH_BLOB);
 	}
 	
@@ -205,6 +205,11 @@ efs_dissect_struct_EFS_HASH_BLOB(tvbuff_t *tvb _U_, int offset _U_, packet_info
 
 	proto_item_set_len(item, offset-old_offset);
 
+
+	if (di->call_data->flags & DCERPC_IS_NDR64) {
+		ALIGN_TO_5_BYTES;
+	}
+
 	return offset;
 }
 
@@ -213,7 +218,7 @@ efs_dissect_struct_EFS_HASH_BLOB(tvbuff_t *tvb _U_, int offset _U_, packet_info
 /* IDL: 	uint32 cbTotalLength; */
 /* IDL: 	[unique(1)] dom_sid *pUserSid; */
 /* IDL: 	[unique(1)] EFS_HASH_BLOB *pHash; */
-/* IDL: 	[charset(UTF16)] [unique(1)] uint16 *lpDisplayInformation; */
+/* IDL: 	[unique(1)] [charset(UTF16)] uint16 *lpDisplayInformation; */
 /* IDL: } */
 
 static int
@@ -280,14 +285,15 @@ efs_dissect_struct_ENCRYPTION_CERTIFICATE_HASH(tvbuff_t *tvb _U_, int offset _U_
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
-	ALIGN_TO_4_BYTES;
+	ALIGN_TO_5_BYTES;
 
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_efs_ENCRYPTION_CERTIFICATE_HASH);
 	}
 	
@@ -302,13 +308,18 @@ efs_dissect_struct_ENCRYPTION_CERTIFICATE_HASH(tvbuff_t *tvb _U_, int offset _U_
 
 	proto_item_set_len(item, offset-old_offset);
 
+
+	if (di->call_data->flags & DCERPC_IS_NDR64) {
+		ALIGN_TO_5_BYTES;
+	}
+
 	return offset;
 }
 
 
 /* IDL: struct { */
 /* IDL: 	uint32 nCert_Hash; */
-/* IDL: 	[size_is(nCert_Hash)] [unique(1)] ENCRYPTION_CERTIFICATE_HASH *pUsers[*]; */
+/* IDL: 	[unique(1)] [size_is(nCert_Hash)] ENCRYPTION_CERTIFICATE_HASH *pUsers[*]; */
 /* IDL: } */
 
 static int
@@ -348,14 +359,15 @@ efs_dissect_struct_ENCRYPTION_CERTIFICATE_HASH_LIST(tvbuff_t *tvb _U_, int offse
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
-	ALIGN_TO_4_BYTES;
+	ALIGN_TO_5_BYTES;
 
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_efs_ENCRYPTION_CERTIFICATE_HASH_LIST);
 	}
 	
@@ -366,6 +378,11 @@ efs_dissect_struct_ENCRYPTION_CERTIFICATE_HASH_LIST(tvbuff_t *tvb _U_, int offse
 
 	proto_item_set_len(item, offset-old_offset);
 
+
+	if (di->call_data->flags & DCERPC_IS_NDR64) {
+		ALIGN_TO_5_BYTES;
+	}
+
 	return offset;
 }
 
@@ -373,7 +390,7 @@ efs_dissect_struct_ENCRYPTION_CERTIFICATE_HASH_LIST(tvbuff_t *tvb _U_, int offse
 /* IDL: struct { */
 /* IDL: 	uint32 dwCertEncodingType; */
 /* IDL: 	uint32 cbData; */
-/* IDL: 	[size_is(cbData)] [unique(1)] uint8 *pbData; */
+/* IDL: 	[unique(1)] [size_is(cbData)] uint8 *pbData; */
 /* IDL: } */
 
 static int
@@ -421,14 +438,15 @@ efs_dissect_struct_EFS_CERTIFICATE_BLOB(tvbuff_t *tvb _U_, int offset _U_, packe
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
-	ALIGN_TO_4_BYTES;
+	ALIGN_TO_5_BYTES;
 
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_efs_EFS_CERTIFICATE_BLOB);
 	}
 	
@@ -441,6 +459,11 @@ efs_dissect_struct_EFS_CERTIFICATE_BLOB(tvbuff_t *tvb _U_, int offset _U_, packe
 
 	proto_item_set_len(item, offset-old_offset);
 
+
+	if (di->call_data->flags & DCERPC_IS_NDR64) {
+		ALIGN_TO_5_BYTES;
+	}
+
 	return offset;
 }
 
@@ -496,14 +519,15 @@ efs_dissect_struct_ENCRYPTION_CERTIFICATE(tvbuff_t *tvb _U_, int offset _U_, pac
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
-	ALIGN_TO_4_BYTES;
+	ALIGN_TO_5_BYTES;
 
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_efs_ENCRYPTION_CERTIFICATE);
 	}
 	
@@ -516,6 +540,11 @@ efs_dissect_struct_ENCRYPTION_CERTIFICATE(tvbuff_t *tvb _U_, int offset _U_, pac
 
 	proto_item_set_len(item, offset-old_offset);
 
+
+	if (di->call_data->flags & DCERPC_IS_NDR64) {
+		ALIGN_TO_5_BYTES;
+	}
+
 	return offset;
 }
 
@@ -556,7 +585,7 @@ efs_dissect_element_EfsRpcOpenFileRaw_Flags(tvbuff_t *tvb _U_, int offset _U_, p
 
 /* IDL: WERROR EfsRpcOpenFileRaw( */
 /* IDL: [out] [ref] policy_handle *pvContext, */
-/* IDL: [charset(UTF16)] [in] uint16 FileName[*], */
+/* IDL: [in] [charset(UTF16)] uint16 FileName[*], */
 /* IDL: [in] uint32 Flags */
 /* IDL: ); */
 
@@ -725,7 +754,7 @@ efs_dissect_element_EfsRpcEncryptFileSrv_Filename(tvbuff_t *tvb _U_, int offset
 }
 
 /* IDL: WERROR EfsRpcEncryptFileSrv( */
-/* IDL: [charset(UTF16)] [in] uint16 Filename[*] */
+/* IDL: [in] [charset(UTF16)] uint16 Filename[*] */
 /* IDL: ); */
 
 static int
@@ -771,7 +800,7 @@ efs_dissect_element_EfsRpcDecryptFileSrv_Reserved(tvbuff_t *tvb _U_, int offset
 }
 
 /* IDL: WERROR EfsRpcDecryptFileSrv( */
-/* IDL: [charset(UTF16)] [in] uint16 FileName[*], */
+/* IDL: [in] [charset(UTF16)] uint16 FileName[*], */
 /* IDL: [in] uint32 Reserved */
 /* IDL: ); */
 
@@ -822,7 +851,7 @@ efs_dissect_element_EfsRpcQueryUsersOnFile_pUsers(tvbuff_t *tvb _U_, int offset
 static int
 efs_dissect_element_EfsRpcQueryUsersOnFile_pUsers_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	offset = dissect_ndr_embedded_pointer(tvb, offset, pinfo, tree, drep, efs_dissect_element_EfsRpcQueryUsersOnFile_pUsers__, NDR_POINTER_REF, "Pointer to Pusers (ENCRYPTION_CERTIFICATE_HASH_LIST)",hf_efs_EfsRpcQueryUsersOnFile_pUsers);
+	offset = dissect_ndr_embedded_pointer(tvb, offset, pinfo, tree, drep, efs_dissect_element_EfsRpcQueryUsersOnFile_pUsers__, NDR_POINTER_UNIQUE, "Pointer to Pusers (ENCRYPTION_CERTIFICATE_HASH_LIST)",hf_efs_EfsRpcQueryUsersOnFile_pUsers);
 
 	return offset;
 }
@@ -836,7 +865,7 @@ efs_dissect_element_EfsRpcQueryUsersOnFile_pUsers__(tvbuff_t *tvb _U_, int offse
 }
 
 /* IDL: WERROR EfsRpcQueryUsersOnFile( */
-/* IDL: [charset(UTF16)] [in] uint16 FileName[*], */
+/* IDL: [in] [charset(UTF16)] uint16 FileName[*], */
 /* IDL: [out] [unique(1)] [ref] ENCRYPTION_CERTIFICATE_HASH_LIST **pUsers */
 /* IDL: ); */
 
@@ -888,7 +917,7 @@ efs_dissect_element_EfsRpcQueryRecoveryAgents_pRecoveryAgents(tvbuff_t *tvb _U_,
 static int
 efs_dissect_element_EfsRpcQueryRecoveryAgents_pRecoveryAgents_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	offset = dissect_ndr_embedded_pointer(tvb, offset, pinfo, tree, drep, efs_dissect_element_EfsRpcQueryRecoveryAgents_pRecoveryAgents__, NDR_POINTER_REF, "Pointer to Precoveryagents (ENCRYPTION_CERTIFICATE_HASH_LIST)",hf_efs_EfsRpcQueryRecoveryAgents_pRecoveryAgents);
+	offset = dissect_ndr_embedded_pointer(tvb, offset, pinfo, tree, drep, efs_dissect_element_EfsRpcQueryRecoveryAgents_pRecoveryAgents__, NDR_POINTER_UNIQUE, "Pointer to Precoveryagents (ENCRYPTION_CERTIFICATE_HASH_LIST)",hf_efs_EfsRpcQueryRecoveryAgents_pRecoveryAgents);
 
 	return offset;
 }
@@ -902,7 +931,7 @@ efs_dissect_element_EfsRpcQueryRecoveryAgents_pRecoveryAgents__(tvbuff_t *tvb _U
 }
 
 /* IDL: WERROR EfsRpcQueryRecoveryAgents( */
-/* IDL: [charset(UTF16)] [in] uint16 FileName[*], */
+/* IDL: [in] [charset(UTF16)] uint16 FileName[*], */
 /* IDL: [out] [unique(1)] [ref] ENCRYPTION_CERTIFICATE_HASH_LIST **pRecoveryAgents */
 /* IDL: ); */
 
@@ -944,7 +973,7 @@ efs_dissect_element_EfsRpcRemoveUsersFromFile_FileName(tvbuff_t *tvb _U_, int of
 }
 
 /* IDL: WERROR EfsRpcRemoveUsersFromFile( */
-/* IDL: [charset(UTF16)] [in] uint16 FileName[*] */
+/* IDL: [in] [charset(UTF16)] uint16 FileName[*] */
 /* IDL: ); */
 
 static int
@@ -982,7 +1011,7 @@ efs_dissect_element_EfsRpcAddUsersToFile_FileName(tvbuff_t *tvb _U_, int offset
 }
 
 /* IDL: WERROR EfsRpcAddUsersToFile( */
-/* IDL: [charset(UTF16)] [in] uint16 FileName[*] */
+/* IDL: [in] [charset(UTF16)] uint16 FileName[*] */
 /* IDL: ); */
 
 static int
@@ -1162,70 +1191,70 @@ static dcerpc_sub_dissector efs_dissectors[] = {
 void proto_register_dcerpc_efs(void)
 {
 	static hf_register_info hf[] = {
-	{ &hf_efs_EfsRpcCloseRaw_pvContext, 
-	  { "Pvcontext", "efs.EfsRpcCloseRaw.pvContext", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_efs_EfsRpcSetFileEncryptionKey_pEncryptionCertificate, 
-	  { "Pencryptioncertificate", "efs.EfsRpcSetFileEncryptionKey.pEncryptionCertificate", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
+	{ &hf_efs_EfsRpcQueryUsersOnFile_pUsers, 
+	  { "Pusers", "efs.EfsRpcQueryUsersOnFile.pUsers", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
+	{ &hf_efs_EfsRpcDecryptFileSrv_FileName, 
+	  { "Filename", "efs.EfsRpcDecryptFileSrv.FileName", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
+	{ &hf_efs_EfsRpcEncryptFileSrv_Filename, 
+	  { "Filename", "efs.EfsRpcEncryptFileSrv.Filename", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
 	{ &hf_efs_EfsRpcOpenFileRaw_pvContext, 
 	  { "Pvcontext", "efs.EfsRpcOpenFileRaw.pvContext", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_efs_ENCRYPTION_CERTIFICATE_HASH_pUserSid, 
-	  { "Pusersid", "efs.ENCRYPTION_CERTIFICATE_HASH.pUserSid", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
+	{ &hf_efs_ENCRYPTION_CERTIFICATE_TotalLength, 
+	  { "Totallength", "efs.ENCRYPTION_CERTIFICATE.TotalLength", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_efs_EFS_CERTIFICATE_BLOB_dwCertEncodingType, 
+	  { "Dwcertencodingtype", "efs.EFS_CERTIFICATE_BLOB.dwCertEncodingType", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_efs_ENCRYPTION_CERTIFICATE_pCertBlob, 
+	  { "Pcertblob", "efs.ENCRYPTION_CERTIFICATE.pCertBlob", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
+	{ &hf_efs_ENCRYPTION_CERTIFICATE_HASH_LIST_pUsers, 
+	  { "Pusers", "efs.ENCRYPTION_CERTIFICATE_HASH_LIST.pUsers", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
+	{ &hf_efs_EfsRpcWriteFileRaw_pvContext, 
+	  { "Pvcontext", "efs.EfsRpcWriteFileRaw.pvContext", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
+	{ &hf_efs_EFS_HASH_BLOB_pbData, 
+	  { "Pbdata", "efs.EFS_HASH_BLOB.pbData", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_efs_EfsRpcAddUsersToFile_FileName, 
+	  { "Filename", "efs.EfsRpcAddUsersToFile.FileName", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
 	{ &hf_efs_EfsRpcReadFileRaw_pvContext, 
 	  { "Pvcontext", "efs.EfsRpcReadFileRaw.pvContext", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
+	{ &hf_efs_werror, 
+	  { "Windows Error", "efs.werror", FT_UINT32, BASE_HEX, VALS(WERR_errors), 0, NULL, HFILL }},
+	{ &hf_efs_EfsRpcSetFileEncryptionKey_pEncryptionCertificate, 
+	  { "Pencryptioncertificate", "efs.EfsRpcSetFileEncryptionKey.pEncryptionCertificate", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
 	{ &hf_efs_EfsRpcQueryRecoveryAgents_FileName, 
 	  { "Filename", "efs.EfsRpcQueryRecoveryAgents.FileName", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_efs_EfsRpcQueryUsersOnFile_FileName, 
-	  { "Filename", "efs.EfsRpcQueryUsersOnFile.FileName", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
 	{ &hf_efs_EfsRpcOpenFileRaw_FileName, 
 	  { "Filename", "efs.EfsRpcOpenFileRaw.FileName", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_efs_ENCRYPTION_CERTIFICATE_pCertBlob, 
-	  { "Pcertblob", "efs.ENCRYPTION_CERTIFICATE.pCertBlob", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
 	{ &hf_efs_opnum, 
 	  { "Operation", "efs.opnum", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_efs_EFS_HASH_BLOB_pbData, 
-	  { "Pbdata", "efs.EFS_HASH_BLOB.pbData", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_efs_ENCRYPTION_CERTIFICATE_HASH_lpDisplayInformation, 
-	  { "Lpdisplayinformation", "efs.ENCRYPTION_CERTIFICATE_HASH.lpDisplayInformation", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_efs_EfsRpcOpenFileRaw_Flags, 
-	  { "Flags", "efs.EfsRpcOpenFileRaw.Flags", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_efs_EFS_CERTIFICATE_BLOB_pbData, 
-	  { "Pbdata", "efs.EFS_CERTIFICATE_BLOB.pbData", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
 	{ &hf_efs_ENCRYPTION_CERTIFICATE_HASH_LIST_nCert_Hash, 
 	  { "Ncert Hash", "efs.ENCRYPTION_CERTIFICATE_HASH_LIST.nCert_Hash", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_efs_EfsRpcEncryptFileSrv_Filename, 
-	  { "Filename", "efs.EfsRpcEncryptFileSrv.Filename", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_efs_EfsRpcRemoveUsersFromFile_FileName, 
-	  { "Filename", "efs.EfsRpcRemoveUsersFromFile.FileName", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_efs_EfsRpcQueryUsersOnFile_pUsers, 
-	  { "Pusers", "efs.EfsRpcQueryUsersOnFile.pUsers", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_efs_EfsRpcDecryptFileSrv_FileName, 
-	  { "Filename", "efs.EfsRpcDecryptFileSrv.FileName", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_efs_ENCRYPTION_CERTIFICATE_TotalLength, 
-	  { "Totallength", "efs.ENCRYPTION_CERTIFICATE.TotalLength", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_efs_EfsRpcAddUsersToFile_FileName, 
-	  { "Filename", "efs.EfsRpcAddUsersToFile.FileName", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_efs_EfsRpcQueryRecoveryAgents_pRecoveryAgents, 
-	  { "Precoveryagents", "efs.EfsRpcQueryRecoveryAgents.pRecoveryAgents", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
+	{ &hf_efs_EfsRpcDecryptFileSrv_Reserved, 
+	  { "Reserved", "efs.EfsRpcDecryptFileSrv.Reserved", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
 	{ &hf_efs_ENCRYPTION_CERTIFICATE_HASH_pHash, 
 	  { "Phash", "efs.ENCRYPTION_CERTIFICATE_HASH.pHash", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_efs_ENCRYPTION_CERTIFICATE_HASH_cbTotalLength, 
-	  { "Cbtotallength", "efs.ENCRYPTION_CERTIFICATE_HASH.cbTotalLength", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_efs_werror, 
-	  { "Windows Error", "efs.werror", FT_UINT32, BASE_HEX, VALS(WERR_errors), 0, NULL, HFILL }},
-	{ &hf_efs_EFS_HASH_BLOB_cbData, 
-	  { "Cbdata", "efs.EFS_HASH_BLOB.cbData", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_efs_EfsRpcWriteFileRaw_pvContext, 
-	  { "Pvcontext", "efs.EfsRpcWriteFileRaw.pvContext", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_efs_ENCRYPTION_CERTIFICATE_HASH_LIST_pUsers, 
-	  { "Pusers", "efs.ENCRYPTION_CERTIFICATE_HASH_LIST.pUsers", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
+	{ &hf_efs_ENCRYPTION_CERTIFICATE_HASH_pUserSid, 
+	  { "Pusersid", "efs.ENCRYPTION_CERTIFICATE_HASH.pUserSid", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
 	{ &hf_efs_ENCRYPTION_CERTIFICATE_pUserSid, 
 	  { "Pusersid", "efs.ENCRYPTION_CERTIFICATE.pUserSid", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_efs_EFS_CERTIFICATE_BLOB_dwCertEncodingType, 
-	  { "Dwcertencodingtype", "efs.EFS_CERTIFICATE_BLOB.dwCertEncodingType", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_efs_EfsRpcDecryptFileSrv_Reserved, 
-	  { "Reserved", "efs.EfsRpcDecryptFileSrv.Reserved", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_efs_EFS_CERTIFICATE_BLOB_pbData, 
+	  { "Pbdata", "efs.EFS_CERTIFICATE_BLOB.pbData", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_efs_EFS_HASH_BLOB_cbData, 
+	  { "Cbdata", "efs.EFS_HASH_BLOB.cbData", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_efs_EfsRpcCloseRaw_pvContext, 
+	  { "Pvcontext", "efs.EfsRpcCloseRaw.pvContext", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
 	{ &hf_efs_EFS_CERTIFICATE_BLOB_cbData, 
 	  { "Cbdata", "efs.EFS_CERTIFICATE_BLOB.cbData", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_efs_EfsRpcQueryUsersOnFile_FileName, 
+	  { "Filename", "efs.EfsRpcQueryUsersOnFile.FileName", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
+	{ &hf_efs_ENCRYPTION_CERTIFICATE_HASH_cbTotalLength, 
+	  { "Cbtotallength", "efs.ENCRYPTION_CERTIFICATE_HASH.cbTotalLength", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_efs_EfsRpcOpenFileRaw_Flags, 
+	  { "Flags", "efs.EfsRpcOpenFileRaw.Flags", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_efs_EfsRpcQueryRecoveryAgents_pRecoveryAgents, 
+	  { "Precoveryagents", "efs.EfsRpcQueryRecoveryAgents.pRecoveryAgents", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
+	{ &hf_efs_ENCRYPTION_CERTIFICATE_HASH_lpDisplayInformation, 
+	  { "Lpdisplayinformation", "efs.ENCRYPTION_CERTIFICATE_HASH.lpDisplayInformation", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
+	{ &hf_efs_EfsRpcRemoveUsersFromFile_FileName, 
+	  { "Filename", "efs.EfsRpcRemoveUsersFromFile.FileName", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
 	};
 
 
-- 
1.8.1.2

>From 19b2f65487539ecaf6c1d7494633c33e466354ef Mon Sep 17 00:00:00 2001
From: Matthieu Patou <[email protected]>
Date: Sun, 6 Oct 2013 17:07:00 -0700
Subject: [PATCH 04/21] Update the idl for dssetup

Signed-off-by: Matthieu Patou <[email protected]>
---
 epan/dissectors/pidl/dssetup.idl | 35 ++++++++++++++++-------------------
 1 file changed, 16 insertions(+), 19 deletions(-)

diff --git a/epan/dissectors/pidl/dssetup.idl b/epan/dissectors/pidl/dssetup.idl
index 1164427..14de9f7 100644
--- a/epan/dissectors/pidl/dssetup.idl
+++ b/epan/dissectors/pidl/dssetup.idl
@@ -1,17 +1,14 @@
-#include "idl_types.h"
-
-#define unistr	[string] wchar_t *
-
 /*
   dssetup interface definition
 */
 
+import "misc.idl";
+
 [
 	uuid("3919286a-b10c-11d0-9ba8-00c04fd92ef5"),
 	version(0.0),
 	endpoint("ncacn_np:[\\pipe\\lsarpc]", "ncacn_np:[\\pipe\\lsass]", "ncacn_ip_tcp:", "ncalrpc:"),
 	pointer_default(unique),
-	pointer_default_top(unique),
 	helpstring("Active Directory Setup")
 ] interface dssetup
 {
@@ -37,9 +34,9 @@
 	typedef struct {
 		dssetup_DsRole		role;
 		dssetup_DsRoleFlags	flags;
-		unistr			*domain;
-		unistr			*dns_domain;
-		unistr			*forest;
+		[charset(UTF16),string] uint16			*domain;
+		[charset(UTF16),string] uint16			*dns_domain;
+		[charset(UTF16),string] uint16			*forest;
 		GUID			domain_guid;
 	} dssetup_DsRolePrimaryDomInfoBasic;
 
@@ -83,7 +80,7 @@
 
 	WERROR dssetup_DsRoleGetPrimaryDomainInformation(
 		[in] dssetup_DsRoleInfoLevel level,
-		[out,switch_is(level)] dssetup_DsRoleInfo *info
+		[out,switch_is(level),unique] dssetup_DsRoleInfo *info
 		);
 
 	/*
@@ -91,14 +88,14 @@
 	  These stubs are left here only as a way of documenting the names
 	  of the calls in case they ever turn up on the wire.
 	*/
-	WERROR dssetup_DsRoleDnsNameToFlatName();
-	WERROR dssetup_DsRoleDcAsDc();
-	WERROR dssetup_DsRoleDcAsReplica();
-	WERROR dssetup_DsRoleDemoteDc();
-	WERROR dssetup_DsRoleGetDcOperationProgress();
-	WERROR dssetup_DsRoleGetDcOperationResults();
-	WERROR dssetup_DsRoleCancel();
-	WERROR dssetup_DsRoleServerSaveStateForUpgrade();
-	WERROR dssetup_DsRoleUpgradeDownlevelServer();
-	WERROR dssetup_DsRoleAbortDownlevelServerUpgrade();
+	[todo] WERROR dssetup_DsRoleDnsNameToFlatName();
+	[todo] WERROR dssetup_DsRoleDcAsDc();
+	[todo] WERROR dssetup_DsRoleDcAsReplica();
+	[todo] WERROR dssetup_DsRoleDemoteDc();
+	[todo] WERROR dssetup_DsRoleGetDcOperationProgress();
+	[todo] WERROR dssetup_DsRoleGetDcOperationResults();
+	[todo] WERROR dssetup_DsRoleCancel();
+	[todo] WERROR dssetup_DsRoleServerSaveStateForUpgrade();
+	[todo] WERROR dssetup_DsRoleUpgradeDownlevelServer();
+	[todo] WERROR dssetup_DsRoleAbortDownlevelServerUpgrade();
 }
-- 
1.8.1.2

>From 665ee96456bdd191abb5a8b7018e655c8fcf24f9 Mon Sep 17 00:00:00 2001
From: Matthieu Patou <[email protected]>
Date: Sun, 6 Oct 2013 17:02:30 -0700
Subject: [PATCH 03/21] Fix implicit convertion errors.

Signed-off-by: Matthieu Patou <[email protected]>
---
 epan/dissectors/pidl/dnsserver.cnf | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/epan/dissectors/pidl/dnsserver.cnf b/epan/dissectors/pidl/dnsserver.cnf
index d0381c7..21bbda8 100644
--- a/epan/dissectors/pidl/dnsserver.cnf
+++ b/epan/dissectors/pidl/dnsserver.cnf
@@ -27,7 +27,7 @@ dnsserver_dissect_struct_DNS_RPC_NAME(tvbuff_t *tvb _U_, int offset _U_, packet_
 	int dn_len = 0;
 	guint16 bc;
 
-	di=pinfo->private_data;
+	di=(dcerpc_info *)pinfo->private_data;
 	if(di->conformant_run){
 		/*just a run to handle conformant arrays, nothing to dissect */
 		return offset;
@@ -65,7 +65,7 @@ dnsserver_dissect_element_DNS_RPC_NODE_RecordCount(tvbuff_t *tvb _U_, int offset
 {
 	dcerpc_info *di = NULL;
 
-	di=pinfo->private_data;
+	di=(dcerpc_info *)pinfo->private_data;
 	if(di->conformant_run){
 		/*just a run to handle conformant arrays, nothing to dissect */
 		return offset;
@@ -81,7 +81,7 @@ dnsserver_dissect_element_DNS_RPC_NODE_records(tvbuff_t *tvb _U_, int offset _U_
 {
 	dcerpc_info *di = NULL;
 
-	di=pinfo->private_data;
+	di=(dcerpc_info *)pinfo->private_data;
 	if(di->conformant_run){
 		/*just a run to handle conformant arrays, nothing to dissect */
 		return offset;
-- 
1.8.1.2

>From d2e5d805091b240c895ac520e230cde9bcbd073d Mon Sep 17 00:00:00 2001
From: Matthieu Patou <[email protected]>
Date: Sun, 6 Oct 2013 17:02:09 -0700
Subject: [PATCH 02/21] Add regenerated atsvc dissector

Signed-off-by: Matthieu Patou <[email protected]>
---
 epan/dissectors/packet-dcerpc-atsvc.c | 399 ++++++++++++++++++----------------
 1 file changed, 208 insertions(+), 191 deletions(-)

diff --git a/epan/dissectors/packet-dcerpc-atsvc.c b/epan/dissectors/packet-dcerpc-atsvc.c
index 2c1eebd..44e1dd8 100644
--- a/epan/dissectors/packet-dcerpc-atsvc.c
+++ b/epan/dissectors/packet-dcerpc-atsvc.c
@@ -12,7 +12,6 @@
 
 
 #include "config.h"
-
 #ifdef _MSC_VER
 #pragma warning(disable:4005)
 #pragma warning(disable:4013)
@@ -40,72 +39,72 @@ static gint ett_atsvc_atsvc_enum_ctr = -1;
 
 
 /* Header field declarations */
-static gint hf_atsvc_atsvc_Flags_JOB_NONINTERACTIVE = -1;
-static gint hf_atsvc_atsvc_DaysOfMonth_Fourteenth = -1;
-static gint hf_atsvc_atsvc_Flags_JOB_RUN_PERIODICALLY = -1;
-static gint hf_atsvc_atsvc_enum_ctr_entries_read = -1;
-static gint hf_atsvc_atsvc_DaysOfMonth_Twentyeighth = -1;
-static gint hf_atsvc_atsvc_DaysOfWeek_DAYSOFWEEK_MONDAY = -1;
-static gint hf_atsvc_atsvc_DaysOfWeek_DAYSOFWEEK_SUNDAY = -1;
-static gint hf_atsvc_atsvc_DaysOfMonth_Second = -1;
-static gint hf_atsvc_atsvc_DaysOfMonth_Twentyth = -1;
-static gint hf_atsvc_atsvc_DaysOfMonth_Ninth = -1;
-static gint hf_atsvc_servername = -1;
-static gint hf_atsvc_atsvc_DaysOfWeek_DAYSOFWEEK_WEDNESDAY = -1;
-static gint hf_atsvc_atsvc_DaysOfMonth_Twentyninth = -1;
-static gint hf_atsvc_atsvc_DaysOfWeek_DAYSOFWEEK_TUESDAY = -1;
-static gint hf_atsvc_atsvc_DaysOfMonth_Tenth = -1;
+static gint hf_atsvc_atsvc_JobEnumInfo_days_of_month = -1;
 static gint hf_atsvc_atsvc_JobEnum_resume_handle = -1;
+static gint hf_atsvc_atsvc_DaysOfWeek_DAYSOFWEEK_THURSDAY = -1;
+static gint hf_atsvc_atsvc_DaysOfMonth_Eight = -1;
+static gint hf_atsvc_atsvc_DaysOfMonth_Third = -1;
+static gint hf_atsvc_atsvc_JobInfo_days_of_week = -1;
 static gint hf_atsvc_atsvc_DaysOfMonth_Twentyseventh = -1;
-static gint hf_atsvc_atsvc_DaysOfMonth_Fifteenth = -1;
-static gint hf_atsvc_atsvc_JobInfo_command = -1;
-static gint hf_atsvc_atsvc_DaysOfMonth_Ninteenth = -1;
-static gint hf_atsvc_atsvc_DaysOfMonth_Seventh = -1;
-static gint hf_atsvc_atsvc_DaysOfMonth_Twentyfourth = -1;
+static gint hf_atsvc_atsvc_DaysOfMonth_Twentyth = -1;
 static gint hf_atsvc_atsvc_DaysOfMonth_Seventeenth = -1;
+static gint hf_atsvc_atsvc_Flags_JOB_RUN_PERIODICALLY = -1;
+static gint hf_atsvc_atsvc_DaysOfMonth_Fifth = -1;
+static gint hf_atsvc_job_info = -1;
+static gint hf_atsvc_atsvc_DaysOfMonth_Thitteenth = -1;
+static gint hf_atsvc_atsvc_enum_ctr_entries_read = -1;
+static gint hf_atsvc_atsvc_enum_ctr_first_entry = -1;
+static gint hf_atsvc_atsvc_Flags_JOB_EXEC_ERROR = -1;
+static gint hf_atsvc_atsvc_Flags_JOB_NONINTERACTIVE = -1;
 static gint hf_atsvc_opnum = -1;
-static gint hf_atsvc_atsvc_DaysOfMonth_Twelfth = -1;
-static gint hf_atsvc_atsvc_DaysOfMonth_Eighteenth = -1;
 static gint hf_atsvc_atsvc_Flags_JOB_RUNS_TODAY = -1;
-static gint hf_atsvc_atsvc_JobEnum_total_entries = -1;
-static gint hf_atsvc_atsvc_enum_ctr_first_entry = -1;
-static gint hf_atsvc_atsvc_JobEnumInfo_job_time = -1;
-static gint hf_atsvc_atsvc_DaysOfMonth_Thirtyfirst = -1;
-static gint hf_atsvc_atsvc_DaysOfMonth_Third = -1;
-static gint hf_atsvc_atsvc_JobEnum_preferred_max_len = -1;
-static gint hf_atsvc_atsvc_JobEnumInfo_days_of_month = -1;
-static gint hf_atsvc_atsvc_DaysOfWeek_DAYSOFWEEK_THURSDAY = -1;
+static gint hf_atsvc_atsvc_DaysOfMonth_Eighteenth = -1;
+static gint hf_atsvc_job_id = -1;
+static gint hf_atsvc_atsvc_DaysOfWeek_DAYSOFWEEK_SATURDAY = -1;
+static gint hf_atsvc_atsvc_DaysOfMonth_Ninteenth = -1;
+static gint hf_atsvc_atsvc_DaysOfWeek_DAYSOFWEEK_MONDAY = -1;
+static gint hf_atsvc_atsvc_DaysOfMonth_Twentysecond = -1;
 static gint hf_atsvc_atsvc_DaysOfWeek_DAYSOFWEEK_FRIDAY = -1;
-static gint hf_atsvc_atsvc_DaysOfMonth_Twentythird = -1;
-static gint hf_atsvc_atsvc_JobInfo_job_time = -1;
+static gint hf_atsvc_atsvc_DaysOfMonth_Second = -1;
 static gint hf_atsvc_status = -1;
-static gint hf_atsvc_atsvc_JobInfo_flags = -1;
-static gint hf_atsvc_atsvc_DaysOfWeek_DAYSOFWEEK_SATURDAY = -1;
-static gint hf_atsvc_atsvc_DaysOfMonth_Sixth = -1;
-static gint hf_atsvc_job_id = -1;
-static gint hf_atsvc_atsvc_DaysOfMonth_Twentysixth = -1;
-static gint hf_atsvc_atsvc_DaysOfMonth_Fifth = -1;
-static gint hf_atsvc_atsvc_DaysOfMonth_Fourth = -1;
-static gint hf_atsvc_job_info = -1;
-static gint hf_atsvc_atsvc_DaysOfMonth_Eleventh = -1;
+static gint hf_atsvc_atsvc_JobEnum_ctr = -1;
+static gint hf_atsvc_atsvc_JobInfo_command = -1;
 static gint hf_atsvc_atsvc_DaysOfMonth_Sixteenth = -1;
+static gint hf_atsvc_atsvc_JobEnumInfo_command = -1;
 static gint hf_atsvc_atsvc_Flags_JOB_ADD_CURRENT_DATE = -1;
-static gint hf_atsvc_atsvc_JobEnum_ctr = -1;
-static gint hf_atsvc_atsvc_DaysOfMonth_Twentyfifth = -1;
-static gint hf_atsvc_atsvc_JobInfo_days_of_month = -1;
-static gint hf_atsvc_atsvc_DaysOfMonth_Twentysecond = -1;
+static gint hf_atsvc_atsvc_DaysOfMonth_Thirtyfirst = -1;
+static gint hf_atsvc_atsvc_DaysOfMonth_Fourth = -1;
+static gint hf_atsvc_atsvc_JobEnumInfo_days_of_week = -1;
 static gint hf_atsvc_atsvc_DaysOfMonth_First = -1;
-static gint hf_atsvc_atsvc_JobEnumInfo_command = -1;
-static gint hf_atsvc_atsvc_DaysOfMonth_Thirtieth = -1;
-static gint hf_atsvc_atsvc_DaysOfMonth_Eight = -1;
+static gint hf_atsvc_atsvc_JobEnumInfo_job_time = -1;
+static gint hf_atsvc_atsvc_JobEnum_total_entries = -1;
+static gint hf_atsvc_atsvc_DaysOfMonth_Twentyninth = -1;
+static gint hf_atsvc_atsvc_JobDel_max_job_id = -1;
+static gint hf_atsvc_atsvc_DaysOfWeek_DAYSOFWEEK_TUESDAY = -1;
+static gint hf_atsvc_atsvc_DaysOfMonth_Twentythird = -1;
+static gint hf_atsvc_atsvc_DaysOfMonth_Fifteenth = -1;
+static gint hf_atsvc_atsvc_DaysOfMonth_Twentyeighth = -1;
+static gint hf_atsvc_atsvc_DaysOfMonth_Twelfth = -1;
+static gint hf_atsvc_atsvc_DaysOfWeek_DAYSOFWEEK_WEDNESDAY = -1;
+static gint hf_atsvc_atsvc_JobInfo_flags = -1;
+static gint hf_atsvc_atsvc_DaysOfMonth_Seventh = -1;
 static gint hf_atsvc_atsvc_DaysOfMonth_Twentyfirst = -1;
-static gint hf_atsvc_atsvc_Flags_JOB_EXEC_ERROR = -1;
-static gint hf_atsvc_atsvc_JobInfo_days_of_week = -1;
+static gint hf_atsvc_atsvc_DaysOfMonth_Tenth = -1;
+static gint hf_atsvc_atsvc_DaysOfMonth_Fourteenth = -1;
+static gint hf_atsvc_atsvc_JobEnum_preferred_max_len = -1;
+static gint hf_atsvc_atsvc_DaysOfMonth_Twentyfourth = -1;
+static gint hf_atsvc_atsvc_DaysOfMonth_Twentyfifth = -1;
+static gint hf_atsvc_servername = -1;
+static gint hf_atsvc_atsvc_DaysOfMonth_Thirtieth = -1;
+static gint hf_atsvc_atsvc_DaysOfWeek_DAYSOFWEEK_SUNDAY = -1;
+static gint hf_atsvc_atsvc_DaysOfMonth_Sixth = -1;
 static gint hf_atsvc_atsvc_JobDel_min_job_id = -1;
-static gint hf_atsvc_atsvc_JobEnumInfo_days_of_week = -1;
+static gint hf_atsvc_atsvc_JobInfo_job_time = -1;
+static gint hf_atsvc_atsvc_DaysOfMonth_Ninth = -1;
+static gint hf_atsvc_atsvc_DaysOfMonth_Eleventh = -1;
+static gint hf_atsvc_atsvc_DaysOfMonth_Twentysixth = -1;
+static gint hf_atsvc_atsvc_JobInfo_days_of_month = -1;
 static gint hf_atsvc_atsvc_JobEnumInfo_flags = -1;
-static gint hf_atsvc_atsvc_JobDel_max_job_id = -1;
-static gint hf_atsvc_atsvc_DaysOfMonth_Thitteenth = -1;
 
 static gint proto_dcerpc_atsvc = -1;
 /* Version information */
@@ -377,7 +376,7 @@ atsvc_dissect_bitmap_DaysOfMonth(tvbuff_t *tvb _U_, int offset _U_, packet_info
 	ALIGN_TO_4_BYTES;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, 4, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, 4, DREP_ENC_INTEGER(drep));
 		tree = proto_item_add_subtree(item,ett_atsvc_atsvc_DaysOfMonth);
 	}
 
@@ -660,7 +659,7 @@ atsvc_dissect_bitmap_Flags(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo
 	guint8 flags;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, 1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, 1, DREP_ENC_INTEGER(drep));
 		tree = proto_item_add_subtree(item,ett_atsvc_atsvc_Flags);
 	}
 
@@ -737,7 +736,7 @@ atsvc_dissect_bitmap_DaysOfWeek(tvbuff_t *tvb _U_, int offset _U_, packet_info *
 	guint8 flags;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, 1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, 1, DREP_ENC_INTEGER(drep));
 		tree = proto_item_add_subtree(item,ett_atsvc_atsvc_DaysOfWeek);
 	}
 
@@ -816,7 +815,7 @@ atsvc_dissect_bitmap_DaysOfWeek(tvbuff_t *tvb _U_, int offset _U_, packet_info *
 /* IDL: 	atsvc_DaysOfMonth days_of_month; */
 /* IDL: 	atsvc_DaysOfWeek days_of_week; */
 /* IDL: 	atsvc_Flags flags; */
-/* IDL: 	[charset(UTF16)] [unique(1)] uint16 *command; */
+/* IDL: 	[unique(1)] [charset(UTF16)] uint16 *command; */
 /* IDL: } */
 
 static int
@@ -875,14 +874,15 @@ atsvc_dissect_struct_JobInfo(tvbuff_t *tvb _U_, int offset _U_, packet_info *pin
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
-	ALIGN_TO_4_BYTES;
+	ALIGN_TO_5_BYTES;
 
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_atsvc_atsvc_JobInfo);
 	}
 	
@@ -899,6 +899,11 @@ atsvc_dissect_struct_JobInfo(tvbuff_t *tvb _U_, int offset _U_, packet_info *pin
 
 	proto_item_set_len(item, offset-old_offset);
 
+
+	if (di->call_data->flags & DCERPC_IS_NDR64) {
+		ALIGN_TO_5_BYTES;
+	}
+
 	return offset;
 }
 
@@ -909,7 +914,7 @@ atsvc_dissect_struct_JobInfo(tvbuff_t *tvb _U_, int offset _U_, packet_info *pin
 /* IDL: 	atsvc_DaysOfMonth days_of_month; */
 /* IDL: 	atsvc_DaysOfWeek days_of_week; */
 /* IDL: 	atsvc_Flags flags; */
-/* IDL: 	[charset(UTF16)] [unique(1)] uint16 *command; */
+/* IDL: 	[unique(1)] [charset(UTF16)] uint16 *command; */
 /* IDL: } */
 
 static int
@@ -976,14 +981,15 @@ atsvc_dissect_struct_JobEnumInfo(tvbuff_t *tvb _U_, int offset _U_, packet_info
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
-	ALIGN_TO_4_BYTES;
+	ALIGN_TO_5_BYTES;
 
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_atsvc_atsvc_JobEnumInfo);
 	}
 	
@@ -1002,13 +1008,18 @@ atsvc_dissect_struct_JobEnumInfo(tvbuff_t *tvb _U_, int offset _U_, packet_info
 
 	proto_item_set_len(item, offset-old_offset);
 
+
+	if (di->call_data->flags & DCERPC_IS_NDR64) {
+		ALIGN_TO_5_BYTES;
+	}
+
 	return offset;
 }
 
 
 /* IDL: struct { */
 /* IDL: 	uint32 entries_read; */
-/* IDL: 	[size_is(entries_read)] [unique(1)] atsvc_JobEnumInfo *first_entry; */
+/* IDL: 	[unique(1)] [size_is(entries_read)] atsvc_JobEnumInfo *first_entry; */
 /* IDL: } */
 
 static int
@@ -1048,14 +1059,15 @@ atsvc_dissect_struct_enum_ctr(tvbuff_t *tvb _U_, int offset _U_, packet_info *pi
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
-	ALIGN_TO_4_BYTES;
+	ALIGN_TO_5_BYTES;
 
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_atsvc_atsvc_enum_ctr);
 	}
 	
@@ -1066,6 +1078,11 @@ atsvc_dissect_struct_enum_ctr(tvbuff_t *tvb _U_, int offset _U_, packet_info *pi
 
 	proto_item_set_len(item, offset-old_offset);
 
+
+	if (di->call_data->flags & DCERPC_IS_NDR64) {
+		ALIGN_TO_5_BYTES;
+	}
+
 	return offset;
 }
 
@@ -1121,8 +1138,8 @@ atsvc_dissect_element_JobAdd_job_id_(tvbuff_t *tvb _U_, int offset _U_, packet_i
 }
 
 /* IDL: NTSTATUS atsvc_JobAdd( */
-/* IDL: [charset(UTF16)] [in] [unique(1)] uint16 *servername, */
-/* IDL: [in] [ref] atsvc_JobInfo *job_info, */
+/* IDL: [unique(1)] [in] [charset(UTF16)] uint16 *servername, */
+/* IDL: [ref] [in] atsvc_JobInfo *job_info, */
 /* IDL: [out] [ref] uint32 *job_id */
 /* IDL: ); */
 
@@ -1190,7 +1207,7 @@ atsvc_dissect_element_JobDel_max_job_id(tvbuff_t *tvb _U_, int offset _U_, packe
 }
 
 /* IDL: NTSTATUS atsvc_JobDel( */
-/* IDL: [charset(UTF16)] [in] [unique(1)] uint16 *servername, */
+/* IDL: [unique(1)] [in] [charset(UTF16)] uint16 *servername, */
 /* IDL: [in] uint32 min_job_id, */
 /* IDL: [in] uint32 max_job_id */
 /* IDL: ); */
@@ -1298,11 +1315,11 @@ atsvc_dissect_element_JobEnum_resume_handle_(tvbuff_t *tvb _U_, int offset _U_,
 }
 
 /* IDL: NTSTATUS atsvc_JobEnum( */
-/* IDL: [charset(UTF16)] [in] [unique(1)] uint16 *servername, */
-/* IDL: [out] [in] [ref] atsvc_enum_ctr *ctr, */
+/* IDL: [unique(1)] [in] [charset(UTF16)] uint16 *servername, */
+/* IDL: [out] [ref] [in] atsvc_enum_ctr *ctr, */
 /* IDL: [in] uint32 preferred_max_len, */
 /* IDL: [out] [ref] uint32 *total_entries, */
-/* IDL: [out] [in] [unique(1)] uint32 *resume_handle */
+/* IDL: [out] [unique(1)] [in] uint32 *resume_handle */
 /* IDL: ); */
 
 static int
@@ -1381,7 +1398,7 @@ atsvc_dissect_element_JobGetInfo_job_info(tvbuff_t *tvb _U_, int offset _U_, pac
 static int
 atsvc_dissect_element_JobGetInfo_job_info_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	offset = dissect_ndr_embedded_pointer(tvb, offset, pinfo, tree, drep, atsvc_dissect_element_JobGetInfo_job_info__, NDR_POINTER_REF, "Pointer to Job Info (atsvc_JobInfo)",hf_atsvc_job_info);
+	offset = dissect_ndr_embedded_pointer(tvb, offset, pinfo, tree, drep, atsvc_dissect_element_JobGetInfo_job_info__, NDR_POINTER_UNIQUE, "Pointer to Job Info (atsvc_JobInfo)",hf_atsvc_job_info);
 
 	return offset;
 }
@@ -1395,7 +1412,7 @@ atsvc_dissect_element_JobGetInfo_job_info__(tvbuff_t *tvb _U_, int offset _U_, p
 }
 
 /* IDL: NTSTATUS atsvc_JobGetInfo( */
-/* IDL: [charset(UTF16)] [in] [unique(1)] uint16 *servername, */
+/* IDL: [unique(1)] [in] [charset(UTF16)] uint16 *servername, */
 /* IDL: [in] uint32 job_id, */
 /* IDL: [out] [ref] atsvc_JobInfo **job_info */
 /* IDL: ); */
@@ -1444,138 +1461,138 @@ static dcerpc_sub_dissector atsvc_dissectors[] = {
 void proto_register_dcerpc_atsvc(void)
 {
 	static hf_register_info hf[] = {
-	{ &hf_atsvc_atsvc_Flags_JOB_NONINTERACTIVE, 
-	  { "Job Noninteractive", "atsvc.Flags.JOB_NONINTERACTIVE", FT_BOOLEAN, 8, TFS(&atsvc_Flags_JOB_NONINTERACTIVE_tfs), ( 0x10 ), NULL, HFILL }},
-	{ &hf_atsvc_atsvc_DaysOfMonth_Fourteenth, 
-	  { "Fourteenth", "atsvc.DaysOfMonth.Fourteenth", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Fourteenth_tfs), ( 0x00002000 ), NULL, HFILL }},
-	{ &hf_atsvc_atsvc_Flags_JOB_RUN_PERIODICALLY, 
-	  { "Job Run Periodically", "atsvc.Flags.JOB_RUN_PERIODICALLY", FT_BOOLEAN, 8, TFS(&atsvc_Flags_JOB_RUN_PERIODICALLY_tfs), ( 0x01 ), NULL, HFILL }},
-	{ &hf_atsvc_atsvc_enum_ctr_entries_read, 
-	  { "Entries Read", "atsvc.enum_ctr.entries_read", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_atsvc_atsvc_DaysOfMonth_Twentyeighth, 
-	  { "Twentyeighth", "atsvc.DaysOfMonth.Twentyeighth", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Twentyeighth_tfs), ( 0x08000000 ), NULL, HFILL }},
-	{ &hf_atsvc_atsvc_DaysOfWeek_DAYSOFWEEK_MONDAY, 
-	  { "Daysofweek Monday", "atsvc.DaysOfWeek.DAYSOFWEEK_MONDAY", FT_BOOLEAN, 8, TFS(&atsvc_DaysOfWeek_DAYSOFWEEK_MONDAY_tfs), ( 0x01 ), NULL, HFILL }},
-	{ &hf_atsvc_atsvc_DaysOfWeek_DAYSOFWEEK_SUNDAY, 
-	  { "Daysofweek Sunday", "atsvc.DaysOfWeek.DAYSOFWEEK_SUNDAY", FT_BOOLEAN, 8, TFS(&atsvc_DaysOfWeek_DAYSOFWEEK_SUNDAY_tfs), ( 0x40 ), NULL, HFILL }},
-	{ &hf_atsvc_atsvc_DaysOfMonth_Second, 
-	  { "Second", "atsvc.DaysOfMonth.Second", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Second_tfs), ( 0x00000002 ), NULL, HFILL }},
-	{ &hf_atsvc_atsvc_DaysOfMonth_Twentyth, 
-	  { "Twentyth", "atsvc.DaysOfMonth.Twentyth", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Twentyth_tfs), ( 0x00080000 ), NULL, HFILL }},
-	{ &hf_atsvc_atsvc_DaysOfMonth_Ninth, 
-	  { "Ninth", "atsvc.DaysOfMonth.Ninth", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Ninth_tfs), ( 0x00000100 ), NULL, HFILL }},
-	{ &hf_atsvc_servername, 
-	  { "Server", "atsvc.server", FT_STRING, BASE_NONE, NULL, 0, "Name of the server", HFILL }},
-	{ &hf_atsvc_atsvc_DaysOfWeek_DAYSOFWEEK_WEDNESDAY, 
-	  { "Daysofweek Wednesday", "atsvc.DaysOfWeek.DAYSOFWEEK_WEDNESDAY", FT_BOOLEAN, 8, TFS(&atsvc_DaysOfWeek_DAYSOFWEEK_WEDNESDAY_tfs), ( 0x04 ), NULL, HFILL }},
-	{ &hf_atsvc_atsvc_DaysOfMonth_Twentyninth, 
-	  { "Twentyninth", "atsvc.DaysOfMonth.Twentyninth", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Twentyninth_tfs), ( 0x10000000 ), NULL, HFILL }},
-	{ &hf_atsvc_atsvc_DaysOfWeek_DAYSOFWEEK_TUESDAY, 
-	  { "Daysofweek Tuesday", "atsvc.DaysOfWeek.DAYSOFWEEK_TUESDAY", FT_BOOLEAN, 8, TFS(&atsvc_DaysOfWeek_DAYSOFWEEK_TUESDAY_tfs), ( 0x02 ), NULL, HFILL }},
-	{ &hf_atsvc_atsvc_DaysOfMonth_Tenth, 
-	  { "Tenth", "atsvc.DaysOfMonth.Tenth", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Tenth_tfs), ( 0x00000200 ), NULL, HFILL }},
+	{ &hf_atsvc_atsvc_JobEnumInfo_days_of_month, 
+	  { "Days Of Month", "atsvc.atsvc_JobEnumInfo.days_of_month", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
 	{ &hf_atsvc_atsvc_JobEnum_resume_handle, 
-	  { "Resume Handle", "atsvc.JobEnum.resume_handle", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+	  { "Resume Handle", "atsvc.atsvc_JobEnum.resume_handle", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_atsvc_atsvc_DaysOfWeek_DAYSOFWEEK_THURSDAY, 
+	  { "Daysofweek Thursday", "atsvc.atsvc_DaysOfWeek.DAYSOFWEEK_THURSDAY", FT_BOOLEAN, 8, TFS(&atsvc_DaysOfWeek_DAYSOFWEEK_THURSDAY_tfs), ( 0x08 ), NULL, HFILL }},
+	{ &hf_atsvc_atsvc_DaysOfMonth_Eight, 
+	  { "Eight", "atsvc.atsvc_DaysOfMonth.Eight", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Eight_tfs), ( 0x00000080 ), NULL, HFILL }},
+	{ &hf_atsvc_atsvc_DaysOfMonth_Third, 
+	  { "Third", "atsvc.atsvc_DaysOfMonth.Third", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Third_tfs), ( 0x00000004 ), NULL, HFILL }},
+	{ &hf_atsvc_atsvc_JobInfo_days_of_week, 
+	  { "Days Of Week", "atsvc.atsvc_JobInfo.days_of_week", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
 	{ &hf_atsvc_atsvc_DaysOfMonth_Twentyseventh, 
-	  { "Twentyseventh", "atsvc.DaysOfMonth.Twentyseventh", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Twentyseventh_tfs), ( 0x04000000 ), NULL, HFILL }},
-	{ &hf_atsvc_atsvc_DaysOfMonth_Fifteenth, 
-	  { "Fifteenth", "atsvc.DaysOfMonth.Fifteenth", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Fifteenth_tfs), ( 0x00004000 ), NULL, HFILL }},
-	{ &hf_atsvc_atsvc_JobInfo_command, 
-	  { "Command", "atsvc.JobInfo.command", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_atsvc_atsvc_DaysOfMonth_Ninteenth, 
-	  { "Ninteenth", "atsvc.DaysOfMonth.Ninteenth", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Ninteenth_tfs), ( 0x00040000 ), NULL, HFILL }},
-	{ &hf_atsvc_atsvc_DaysOfMonth_Seventh, 
-	  { "Seventh", "atsvc.DaysOfMonth.Seventh", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Seventh_tfs), ( 0x00000040 ), NULL, HFILL }},
-	{ &hf_atsvc_atsvc_DaysOfMonth_Twentyfourth, 
-	  { "Twentyfourth", "atsvc.DaysOfMonth.Twentyfourth", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Twentyfourth_tfs), ( 0x00800000 ), NULL, HFILL }},
+	  { "Twentyseventh", "atsvc.atsvc_DaysOfMonth.Twentyseventh", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Twentyseventh_tfs), ( 0x04000000 ), NULL, HFILL }},
+	{ &hf_atsvc_atsvc_DaysOfMonth_Twentyth, 
+	  { "Twentyth", "atsvc.atsvc_DaysOfMonth.Twentyth", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Twentyth_tfs), ( 0x00080000 ), NULL, HFILL }},
 	{ &hf_atsvc_atsvc_DaysOfMonth_Seventeenth, 
-	  { "Seventeenth", "atsvc.DaysOfMonth.Seventeenth", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Seventeenth_tfs), ( 0x00010000 ), NULL, HFILL }},
+	  { "Seventeenth", "atsvc.atsvc_DaysOfMonth.Seventeenth", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Seventeenth_tfs), ( 0x00010000 ), NULL, HFILL }},
+	{ &hf_atsvc_atsvc_Flags_JOB_RUN_PERIODICALLY, 
+	  { "Job Run Periodically", "atsvc.atsvc_Flags.JOB_RUN_PERIODICALLY", FT_BOOLEAN, 8, TFS(&atsvc_Flags_JOB_RUN_PERIODICALLY_tfs), ( 0x01 ), NULL, HFILL }},
+	{ &hf_atsvc_atsvc_DaysOfMonth_Fifth, 
+	  { "Fifth", "atsvc.atsvc_DaysOfMonth.Fifth", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Fifth_tfs), ( 0x00000010 ), NULL, HFILL }},
+	{ &hf_atsvc_job_info, 
+	  { "JobInfo", "atcvs.job_info", FT_NONE, BASE_NONE, NULL, 0, "JobInfo structure", HFILL }},
+	{ &hf_atsvc_atsvc_DaysOfMonth_Thitteenth, 
+	  { "Thitteenth", "atsvc.atsvc_DaysOfMonth.Thitteenth", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Thitteenth_tfs), ( 0x00001000 ), NULL, HFILL }},
+	{ &hf_atsvc_atsvc_enum_ctr_entries_read, 
+	  { "Entries Read", "atsvc.atsvc_enum_ctr.entries_read", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_atsvc_atsvc_enum_ctr_first_entry, 
+	  { "First Entry", "atsvc.atsvc_enum_ctr.first_entry", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
+	{ &hf_atsvc_atsvc_Flags_JOB_EXEC_ERROR, 
+	  { "Job Exec Error", "atsvc.atsvc_Flags.JOB_EXEC_ERROR", FT_BOOLEAN, 8, TFS(&atsvc_Flags_JOB_EXEC_ERROR_tfs), ( 0x02 ), NULL, HFILL }},
+	{ &hf_atsvc_atsvc_Flags_JOB_NONINTERACTIVE, 
+	  { "Job Noninteractive", "atsvc.atsvc_Flags.JOB_NONINTERACTIVE", FT_BOOLEAN, 8, TFS(&atsvc_Flags_JOB_NONINTERACTIVE_tfs), ( 0x10 ), NULL, HFILL }},
 	{ &hf_atsvc_opnum, 
 	  { "Operation", "atsvc.opnum", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_atsvc_atsvc_DaysOfMonth_Twelfth, 
-	  { "Twelfth", "atsvc.DaysOfMonth.Twelfth", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Twelfth_tfs), ( 0x00000800 ), NULL, HFILL }},
-	{ &hf_atsvc_atsvc_DaysOfMonth_Eighteenth, 
-	  { "Eighteenth", "atsvc.DaysOfMonth.Eighteenth", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Eighteenth_tfs), ( 0x00020000 ), NULL, HFILL }},
 	{ &hf_atsvc_atsvc_Flags_JOB_RUNS_TODAY, 
-	  { "Job Runs Today", "atsvc.Flags.JOB_RUNS_TODAY", FT_BOOLEAN, 8, TFS(&atsvc_Flags_JOB_RUNS_TODAY_tfs), ( 0x04 ), NULL, HFILL }},
-	{ &hf_atsvc_atsvc_JobEnum_total_entries, 
-	  { "Total Entries", "atsvc.JobEnum.total_entries", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_atsvc_atsvc_enum_ctr_first_entry, 
-	  { "First Entry", "atsvc.enum_ctr.first_entry", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_atsvc_atsvc_JobEnumInfo_job_time, 
-	  { "Job Time", "atsvc.JobEnumInfo.job_time", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_atsvc_atsvc_DaysOfMonth_Thirtyfirst, 
-	  { "Thirtyfirst", "atsvc.DaysOfMonth.Thirtyfirst", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Thirtyfirst_tfs), ( 0x40000000 ), NULL, HFILL }},
-	{ &hf_atsvc_atsvc_DaysOfMonth_Third, 
-	  { "Third", "atsvc.DaysOfMonth.Third", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Third_tfs), ( 0x00000004 ), NULL, HFILL }},
-	{ &hf_atsvc_atsvc_JobEnum_preferred_max_len, 
-	  { "Preferred Max Len", "atsvc.JobEnum.preferred_max_len", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_atsvc_atsvc_JobEnumInfo_days_of_month, 
-	  { "Days Of Month", "atsvc.JobEnumInfo.days_of_month", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
-	{ &hf_atsvc_atsvc_DaysOfWeek_DAYSOFWEEK_THURSDAY, 
-	  { "Daysofweek Thursday", "atsvc.DaysOfWeek.DAYSOFWEEK_THURSDAY", FT_BOOLEAN, 8, TFS(&atsvc_DaysOfWeek_DAYSOFWEEK_THURSDAY_tfs), ( 0x08 ), NULL, HFILL }},
+	  { "Job Runs Today", "atsvc.atsvc_Flags.JOB_RUNS_TODAY", FT_BOOLEAN, 8, TFS(&atsvc_Flags_JOB_RUNS_TODAY_tfs), ( 0x04 ), NULL, HFILL }},
+	{ &hf_atsvc_atsvc_DaysOfMonth_Eighteenth, 
+	  { "Eighteenth", "atsvc.atsvc_DaysOfMonth.Eighteenth", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Eighteenth_tfs), ( 0x00020000 ), NULL, HFILL }},
+	{ &hf_atsvc_job_id, 
+	  { "Job Id", "atsvc.job_id", FT_UINT32, BASE_DEC, NULL, 0, "Identifier of the scheduled job", HFILL }},
+	{ &hf_atsvc_atsvc_DaysOfWeek_DAYSOFWEEK_SATURDAY, 
+	  { "Daysofweek Saturday", "atsvc.atsvc_DaysOfWeek.DAYSOFWEEK_SATURDAY", FT_BOOLEAN, 8, TFS(&atsvc_DaysOfWeek_DAYSOFWEEK_SATURDAY_tfs), ( 0x20 ), NULL, HFILL }},
+	{ &hf_atsvc_atsvc_DaysOfMonth_Ninteenth, 
+	  { "Ninteenth", "atsvc.atsvc_DaysOfMonth.Ninteenth", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Ninteenth_tfs), ( 0x00040000 ), NULL, HFILL }},
+	{ &hf_atsvc_atsvc_DaysOfWeek_DAYSOFWEEK_MONDAY, 
+	  { "Daysofweek Monday", "atsvc.atsvc_DaysOfWeek.DAYSOFWEEK_MONDAY", FT_BOOLEAN, 8, TFS(&atsvc_DaysOfWeek_DAYSOFWEEK_MONDAY_tfs), ( 0x01 ), NULL, HFILL }},
+	{ &hf_atsvc_atsvc_DaysOfMonth_Twentysecond, 
+	  { "Twentysecond", "atsvc.atsvc_DaysOfMonth.Twentysecond", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Twentysecond_tfs), ( 0x00200000 ), NULL, HFILL }},
 	{ &hf_atsvc_atsvc_DaysOfWeek_DAYSOFWEEK_FRIDAY, 
-	  { "Daysofweek Friday", "atsvc.DaysOfWeek.DAYSOFWEEK_FRIDAY", FT_BOOLEAN, 8, TFS(&atsvc_DaysOfWeek_DAYSOFWEEK_FRIDAY_tfs), ( 0x10 ), NULL, HFILL }},
-	{ &hf_atsvc_atsvc_DaysOfMonth_Twentythird, 
-	  { "Twentythird", "atsvc.DaysOfMonth.Twentythird", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Twentythird_tfs), ( 0x00400000 ), NULL, HFILL }},
-	{ &hf_atsvc_atsvc_JobInfo_job_time, 
-	  { "Job Time", "atsvc.JobInfo.job_time", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+	  { "Daysofweek Friday", "atsvc.atsvc_DaysOfWeek.DAYSOFWEEK_FRIDAY", FT_BOOLEAN, 8, TFS(&atsvc_DaysOfWeek_DAYSOFWEEK_FRIDAY_tfs), ( 0x10 ), NULL, HFILL }},
+	{ &hf_atsvc_atsvc_DaysOfMonth_Second, 
+	  { "Second", "atsvc.atsvc_DaysOfMonth.Second", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Second_tfs), ( 0x00000002 ), NULL, HFILL }},
 	{ &hf_atsvc_status, 
 	  { "NT Error", "atsvc.status", FT_UINT32, BASE_HEX, VALS(NT_errors), 0, NULL, HFILL }},
-	{ &hf_atsvc_atsvc_JobInfo_flags, 
-	  { "Flags", "atsvc.JobInfo.flags", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
-	{ &hf_atsvc_atsvc_DaysOfWeek_DAYSOFWEEK_SATURDAY, 
-	  { "Daysofweek Saturday", "atsvc.DaysOfWeek.DAYSOFWEEK_SATURDAY", FT_BOOLEAN, 8, TFS(&atsvc_DaysOfWeek_DAYSOFWEEK_SATURDAY_tfs), ( 0x20 ), NULL, HFILL }},
-	{ &hf_atsvc_atsvc_DaysOfMonth_Sixth, 
-	  { "Sixth", "atsvc.DaysOfMonth.Sixth", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Sixth_tfs), ( 0x00000020 ), NULL, HFILL }},
-	{ &hf_atsvc_job_id, 
-	  { "Job Id", "atsvc.job_id", FT_UINT32, BASE_DEC, NULL, 0, "Identifier of the scheduled job", HFILL }},
-	{ &hf_atsvc_atsvc_DaysOfMonth_Twentysixth, 
-	  { "Twentysixth", "atsvc.DaysOfMonth.Twentysixth", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Twentysixth_tfs), ( 0x02000000 ), NULL, HFILL }},
-	{ &hf_atsvc_atsvc_DaysOfMonth_Fifth, 
-	  { "Fifth", "atsvc.DaysOfMonth.Fifth", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Fifth_tfs), ( 0x00000010 ), NULL, HFILL }},
-	{ &hf_atsvc_atsvc_DaysOfMonth_Fourth, 
-	  { "Fourth", "atsvc.DaysOfMonth.Fourth", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Fourth_tfs), ( 0x00000008 ), NULL, HFILL }},
-	{ &hf_atsvc_job_info, 
-	  { "JobInfo", "atcvs.job_info", FT_NONE, BASE_NONE, NULL, 0, "JobInfo structure", HFILL }},
-	{ &hf_atsvc_atsvc_DaysOfMonth_Eleventh, 
-	  { "Eleventh", "atsvc.DaysOfMonth.Eleventh", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Eleventh_tfs), ( 0x00000400 ), NULL, HFILL }},
+	{ &hf_atsvc_atsvc_JobEnum_ctr, 
+	  { "Ctr", "atsvc.atsvc_JobEnum.ctr", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
+	{ &hf_atsvc_atsvc_JobInfo_command, 
+	  { "Command", "atsvc.atsvc_JobInfo.command", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
 	{ &hf_atsvc_atsvc_DaysOfMonth_Sixteenth, 
-	  { "Sixteenth", "atsvc.DaysOfMonth.Sixteenth", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Sixteenth_tfs), ( 0x00008000 ), NULL, HFILL }},
+	  { "Sixteenth", "atsvc.atsvc_DaysOfMonth.Sixteenth", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Sixteenth_tfs), ( 0x00008000 ), NULL, HFILL }},
+	{ &hf_atsvc_atsvc_JobEnumInfo_command, 
+	  { "Command", "atsvc.atsvc_JobEnumInfo.command", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
 	{ &hf_atsvc_atsvc_Flags_JOB_ADD_CURRENT_DATE, 
-	  { "Job Add Current Date", "atsvc.Flags.JOB_ADD_CURRENT_DATE", FT_BOOLEAN, 8, TFS(&atsvc_Flags_JOB_ADD_CURRENT_DATE_tfs), ( 0x08 ), NULL, HFILL }},
-	{ &hf_atsvc_atsvc_JobEnum_ctr, 
-	  { "Ctr", "atsvc.JobEnum.ctr", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_atsvc_atsvc_DaysOfMonth_Twentyfifth, 
-	  { "Twentyfifth", "atsvc.DaysOfMonth.Twentyfifth", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Twentyfifth_tfs), ( 0x01000000 ), NULL, HFILL }},
-	{ &hf_atsvc_atsvc_JobInfo_days_of_month, 
-	  { "Days Of Month", "atsvc.JobInfo.days_of_month", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
-	{ &hf_atsvc_atsvc_DaysOfMonth_Twentysecond, 
-	  { "Twentysecond", "atsvc.DaysOfMonth.Twentysecond", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Twentysecond_tfs), ( 0x00200000 ), NULL, HFILL }},
+	  { "Job Add Current Date", "atsvc.atsvc_Flags.JOB_ADD_CURRENT_DATE", FT_BOOLEAN, 8, TFS(&atsvc_Flags_JOB_ADD_CURRENT_DATE_tfs), ( 0x08 ), NULL, HFILL }},
+	{ &hf_atsvc_atsvc_DaysOfMonth_Thirtyfirst, 
+	  { "Thirtyfirst", "atsvc.atsvc_DaysOfMonth.Thirtyfirst", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Thirtyfirst_tfs), ( 0x40000000 ), NULL, HFILL }},
+	{ &hf_atsvc_atsvc_DaysOfMonth_Fourth, 
+	  { "Fourth", "atsvc.atsvc_DaysOfMonth.Fourth", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Fourth_tfs), ( 0x00000008 ), NULL, HFILL }},
+	{ &hf_atsvc_atsvc_JobEnumInfo_days_of_week, 
+	  { "Days Of Week", "atsvc.atsvc_JobEnumInfo.days_of_week", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
 	{ &hf_atsvc_atsvc_DaysOfMonth_First, 
-	  { "First", "atsvc.DaysOfMonth.First", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_First_tfs), ( 0x00000001 ), NULL, HFILL }},
-	{ &hf_atsvc_atsvc_JobEnumInfo_command, 
-	  { "Command", "atsvc.JobEnumInfo.command", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_atsvc_atsvc_DaysOfMonth_Thirtieth, 
-	  { "Thirtieth", "atsvc.DaysOfMonth.Thirtieth", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Thirtieth_tfs), ( 0x20000000 ), NULL, HFILL }},
-	{ &hf_atsvc_atsvc_DaysOfMonth_Eight, 
-	  { "Eight", "atsvc.DaysOfMonth.Eight", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Eight_tfs), ( 0x00000080 ), NULL, HFILL }},
+	  { "First", "atsvc.atsvc_DaysOfMonth.First", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_First_tfs), ( 0x00000001 ), NULL, HFILL }},
+	{ &hf_atsvc_atsvc_JobEnumInfo_job_time, 
+	  { "Job Time", "atsvc.atsvc_JobEnumInfo.job_time", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_atsvc_atsvc_JobEnum_total_entries, 
+	  { "Total Entries", "atsvc.atsvc_JobEnum.total_entries", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_atsvc_atsvc_DaysOfMonth_Twentyninth, 
+	  { "Twentyninth", "atsvc.atsvc_DaysOfMonth.Twentyninth", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Twentyninth_tfs), ( 0x10000000 ), NULL, HFILL }},
+	{ &hf_atsvc_atsvc_JobDel_max_job_id, 
+	  { "Max Job Id", "atsvc.atsvc_JobDel.max_job_id", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_atsvc_atsvc_DaysOfWeek_DAYSOFWEEK_TUESDAY, 
+	  { "Daysofweek Tuesday", "atsvc.atsvc_DaysOfWeek.DAYSOFWEEK_TUESDAY", FT_BOOLEAN, 8, TFS(&atsvc_DaysOfWeek_DAYSOFWEEK_TUESDAY_tfs), ( 0x02 ), NULL, HFILL }},
+	{ &hf_atsvc_atsvc_DaysOfMonth_Twentythird, 
+	  { "Twentythird", "atsvc.atsvc_DaysOfMonth.Twentythird", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Twentythird_tfs), ( 0x00400000 ), NULL, HFILL }},
+	{ &hf_atsvc_atsvc_DaysOfMonth_Fifteenth, 
+	  { "Fifteenth", "atsvc.atsvc_DaysOfMonth.Fifteenth", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Fifteenth_tfs), ( 0x00004000 ), NULL, HFILL }},
+	{ &hf_atsvc_atsvc_DaysOfMonth_Twentyeighth, 
+	  { "Twentyeighth", "atsvc.atsvc_DaysOfMonth.Twentyeighth", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Twentyeighth_tfs), ( 0x08000000 ), NULL, HFILL }},
+	{ &hf_atsvc_atsvc_DaysOfMonth_Twelfth, 
+	  { "Twelfth", "atsvc.atsvc_DaysOfMonth.Twelfth", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Twelfth_tfs), ( 0x00000800 ), NULL, HFILL }},
+	{ &hf_atsvc_atsvc_DaysOfWeek_DAYSOFWEEK_WEDNESDAY, 
+	  { "Daysofweek Wednesday", "atsvc.atsvc_DaysOfWeek.DAYSOFWEEK_WEDNESDAY", FT_BOOLEAN, 8, TFS(&atsvc_DaysOfWeek_DAYSOFWEEK_WEDNESDAY_tfs), ( 0x04 ), NULL, HFILL }},
+	{ &hf_atsvc_atsvc_JobInfo_flags, 
+	  { "Flags", "atsvc.atsvc_JobInfo.flags", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+	{ &hf_atsvc_atsvc_DaysOfMonth_Seventh, 
+	  { "Seventh", "atsvc.atsvc_DaysOfMonth.Seventh", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Seventh_tfs), ( 0x00000040 ), NULL, HFILL }},
 	{ &hf_atsvc_atsvc_DaysOfMonth_Twentyfirst, 
-	  { "Twentyfirst", "atsvc.DaysOfMonth.Twentyfirst", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Twentyfirst_tfs), ( 0x00100000 ), NULL, HFILL }},
-	{ &hf_atsvc_atsvc_Flags_JOB_EXEC_ERROR, 
-	  { "Job Exec Error", "atsvc.Flags.JOB_EXEC_ERROR", FT_BOOLEAN, 8, TFS(&atsvc_Flags_JOB_EXEC_ERROR_tfs), ( 0x02 ), NULL, HFILL }},
-	{ &hf_atsvc_atsvc_JobInfo_days_of_week, 
-	  { "Days Of Week", "atsvc.JobInfo.days_of_week", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+	  { "Twentyfirst", "atsvc.atsvc_DaysOfMonth.Twentyfirst", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Twentyfirst_tfs), ( 0x00100000 ), NULL, HFILL }},
+	{ &hf_atsvc_atsvc_DaysOfMonth_Tenth, 
+	  { "Tenth", "atsvc.atsvc_DaysOfMonth.Tenth", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Tenth_tfs), ( 0x00000200 ), NULL, HFILL }},
+	{ &hf_atsvc_atsvc_DaysOfMonth_Fourteenth, 
+	  { "Fourteenth", "atsvc.atsvc_DaysOfMonth.Fourteenth", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Fourteenth_tfs), ( 0x00002000 ), NULL, HFILL }},
+	{ &hf_atsvc_atsvc_JobEnum_preferred_max_len, 
+	  { "Preferred Max Len", "atsvc.atsvc_JobEnum.preferred_max_len", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_atsvc_atsvc_DaysOfMonth_Twentyfourth, 
+	  { "Twentyfourth", "atsvc.atsvc_DaysOfMonth.Twentyfourth", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Twentyfourth_tfs), ( 0x00800000 ), NULL, HFILL }},
+	{ &hf_atsvc_atsvc_DaysOfMonth_Twentyfifth, 
+	  { "Twentyfifth", "atsvc.atsvc_DaysOfMonth.Twentyfifth", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Twentyfifth_tfs), ( 0x01000000 ), NULL, HFILL }},
+	{ &hf_atsvc_servername, 
+	  { "Server", "atsvc.server", FT_STRING, BASE_NONE, NULL, 0, "Name of the server", HFILL }},
+	{ &hf_atsvc_atsvc_DaysOfMonth_Thirtieth, 
+	  { "Thirtieth", "atsvc.atsvc_DaysOfMonth.Thirtieth", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Thirtieth_tfs), ( 0x20000000 ), NULL, HFILL }},
+	{ &hf_atsvc_atsvc_DaysOfWeek_DAYSOFWEEK_SUNDAY, 
+	  { "Daysofweek Sunday", "atsvc.atsvc_DaysOfWeek.DAYSOFWEEK_SUNDAY", FT_BOOLEAN, 8, TFS(&atsvc_DaysOfWeek_DAYSOFWEEK_SUNDAY_tfs), ( 0x40 ), NULL, HFILL }},
+	{ &hf_atsvc_atsvc_DaysOfMonth_Sixth, 
+	  { "Sixth", "atsvc.atsvc_DaysOfMonth.Sixth", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Sixth_tfs), ( 0x00000020 ), NULL, HFILL }},
 	{ &hf_atsvc_atsvc_JobDel_min_job_id, 
-	  { "Min Job Id", "atsvc.JobDel.min_job_id", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_atsvc_atsvc_JobEnumInfo_days_of_week, 
-	  { "Days Of Week", "atsvc.JobEnumInfo.days_of_week", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+	  { "Min Job Id", "atsvc.atsvc_JobDel.min_job_id", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_atsvc_atsvc_JobInfo_job_time, 
+	  { "Job Time", "atsvc.atsvc_JobInfo.job_time", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_atsvc_atsvc_DaysOfMonth_Ninth, 
+	  { "Ninth", "atsvc.atsvc_DaysOfMonth.Ninth", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Ninth_tfs), ( 0x00000100 ), NULL, HFILL }},
+	{ &hf_atsvc_atsvc_DaysOfMonth_Eleventh, 
+	  { "Eleventh", "atsvc.atsvc_DaysOfMonth.Eleventh", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Eleventh_tfs), ( 0x00000400 ), NULL, HFILL }},
+	{ &hf_atsvc_atsvc_DaysOfMonth_Twentysixth, 
+	  { "Twentysixth", "atsvc.atsvc_DaysOfMonth.Twentysixth", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Twentysixth_tfs), ( 0x02000000 ), NULL, HFILL }},
+	{ &hf_atsvc_atsvc_JobInfo_days_of_month, 
+	  { "Days Of Month", "atsvc.atsvc_JobInfo.days_of_month", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
 	{ &hf_atsvc_atsvc_JobEnumInfo_flags, 
-	  { "Flags", "atsvc.JobEnumInfo.flags", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
-	{ &hf_atsvc_atsvc_JobDel_max_job_id, 
-	  { "Max Job Id", "atsvc.JobDel.max_job_id", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_atsvc_atsvc_DaysOfMonth_Thitteenth, 
-	  { "Thitteenth", "atsvc.DaysOfMonth.Thitteenth", FT_BOOLEAN, 32, TFS(&atsvc_DaysOfMonth_Thitteenth_tfs), ( 0x00001000 ), NULL, HFILL }},
+	  { "Flags", "atsvc.atsvc_JobEnumInfo.flags", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
 	};
 
 
-- 
1.8.1.2

>From 1b2eef569c7be996906989e566b7eb5816da9c3f Mon Sep 17 00:00:00 2001
From: Matthieu Patou <[email protected]>
Date: Sun, 6 Oct 2013 16:46:48 -0700
Subject: [PATCH 01/21] Update the README file for pidl usage in wireshark

Signed-off-by: Matthieu Patou <[email protected]>
---
 epan/dissectors/pidl/README | 127 +++++++++++++++++++++++++++++++++-----------
 1 file changed, 95 insertions(+), 32 deletions(-)

diff --git a/epan/dissectors/pidl/README b/epan/dissectors/pidl/README
index 33b55c2..6426112 100644
--- a/epan/dissectors/pidl/README
+++ b/epan/dissectors/pidl/README
@@ -1,41 +1,104 @@
-The REAMDE specific to the Wireshark "copy" of the pidl sources
-==============================================================
+A note about PIDL generated files
+=================================
+
+Quick guide
+===========
+    rsync -av rsync.samba.org::ftp/pub/unpacked/samba_4_0_test/pidl .
+
+    for file in *.idl; do
+        echo "Generating dissector for $file"
+        ./pidl/pidl --ws-parser -- $file;
+    done
+    cp packet-dcerpc*.* ..
+
+Complete infos
+==============
+
+The following files:
+../packet-dcerpc-atsvc.h
+../packet-dcerpc-budb.c
+../packet-dcerpc-budb.h
+../packet-dcerpc-butc.c
+../packet-dcerpc-butc.h
+../packet-dcerpc-dfs.h
+../packet-dcerpc-dnsserver.h
+../packet-dcerpc-drsuapi.c
+../packet-dcerpc-drsuapi.h
+../packet-dcerpc-dssetup.h
+../packet-dcerpc-efs.h
+../packet-dcerpc-eventlog.h
+../packet-dcerpc-frsrpc.h
+../packet-dcerpc-frstrans.h
+../packet-dcerpc-initshutdown.h
+../packet-dcerpc-lsa.h
+../packet-dcerpc-mapi.h
+../packet-dcerpc-misc.h
+../packet-dcerpc-nspi.h
+../packet-dcerpc-rfr.h
+../packet-dcerpc-samr.h
+../packet-dcerpc-srvsvc.h
+../packet-dcerpc-winreg.h
+../packet-dcerpc-wkssvc.h
+../packet-dcerpc-wzcsvc.h
+
+Are automatically generated via a tool called "pidl", you shouldn't modify them manually.
+
+The pidl tool is maintained by the Samba project (http://samba.org, [email protected])
+We recommend to fetch a copy of the git tree of Samba to get the tool:
+    git clone git://git.samba.org/samba.git
+
+Or if you are just interested to run pidl you could fetch it via rsync:
+    rsync -av rsync.samba.org::ftp/pub/unpacked/samba_4_0_test/pidl .
+
+If both solution are not applicable you can use the copy that is located in the
+tool folder but it might be a bit outdated.
+
+Running pidl
+============
+
+You have to run the pidl command inside the pidl folder of the wireshark source tree
+
+The command to compile file:
+    <path_to_pidl>pidl --ws-parser -- <idl-file>
+                                   ^^^
+                                   This is *VERY* important
+The command generate 2 files:
+    packet-dcerpc-<interfacename>.h
+    packet-dcerpc-<interfacename>.c
+
+For instance with a pidl copy in /usr/local/src/samba/pidl and the atsvc.idl, the
+command will be:
+
+    /usr/local/src/samba/pidl/pidl --ws-parser -- atsvc.idl
+
+This will generate 2 files:
+    packet-dcerpc-atsvc.h
+    packet-dcerpc-atsvc.c
 
-The tree tools/pidl is a direct extract from
+If you run outside the dissectors/pidl directory, this *will* result in a
+warning such as:
+
+    atsvc.idl:5:23: idl_types.h: No such file or directory
+
+and *may* result in additional warnings such as:
 
-	svn://svnanon.samba.org/samba/branches/SAMBA_4_0/source/pidl
+    Warning: No conformance file `initshutdown.cnf'
+    Unable to handle string with flags STR_LEN4|STR_NOTERM at /usr/lib/perl5/site_perl/5.8.6/Parse/Pidl/Wireshark/NDR.pm line 283.
 
-to allow building Wireshark pidl dissectors without having to
-*explicitly* access a remote svn repository.
+Notes about the in-tree pidl
+============================
+
+To allow building Wireshark pidl dissectors without having to
+*explicitly* access a remote svn repository a copy of pidl is located in tools/pidl
 
 Don't do changes in the tools/pidl directory, do them at the samba tree!
 Changes to this tree will be overwritten the next time the sources from
 the samba tree are updated, which is basically every time you do an svn
 up in the Wireshark toplevel dir.
 
-In order to build, install yapp, then do
-
-	perl Makefile.PL && make && && make install
-
-This will build and install the binaries and the manpage (pidl.1).
-
-Yapp can be found in CPAN at
-
-	http://search.cpan.org/~fdesar/Parse-Yapp/
-
-If you are using Linux, there may be a package for Yapp for your
-distribution; on SUSE, the package is an rpm named perl-Parse-Yapp.
-
-Run pidl with:
-
-	pidl --ws-parser -- <idl-file>  (don't forget the "--")
-
-If you run outside the dissectors/pidl directory, this *will* result in a
-warning such as:
-
-	atsvc.idl:5:23: idl_types.h: No such file or directory
-
-and *may* result in additional warnings such as:
-
-	Warning: No conformance file `initshutdown.cnf'
-	Unable to handle string with flags STR_LEN4|STR_NOTERM at /usr/lib/perl5/site_perl/5.8.6/Parse/Pidl/Wireshark/NDR.pm line 283.
+Not compiling idl
+=================
+As of October 2013, the following idl have issues when generating and compiling:
+dfs.idl
+srvsvc.idl
+wkssvc.cnf
-- 
1.8.1.2

>From 461cfe2032fcf3b5aa1a2d73386e58757b192988 Mon Sep 17 00:00:00 2001
From: Matthieu Patou <[email protected]>
Date: Sun, 6 Oct 2013 20:41:14 -0700
Subject: [PATCH 21/21] Regenerate samr files

Signed-off-by: Matthieu Patou <[email protected]>
---
 epan/dissectors/packet-dcerpc-samr.c | 149 +++++++++++++++++------------------
 1 file changed, 74 insertions(+), 75 deletions(-)

diff --git a/epan/dissectors/packet-dcerpc-samr.c b/epan/dissectors/packet-dcerpc-samr.c
index dad263e..be24f19 100644
--- a/epan/dissectors/packet-dcerpc-samr.c
+++ b/epan/dissectors/packet-dcerpc-samr.c
@@ -12,7 +12,6 @@
 
 
 #include "config.h"
-
 #ifdef _MSC_VER
 #pragma warning(disable:4005)
 #pragma warning(disable:4013)
@@ -2142,7 +2141,7 @@ cnf_dissect_sec_desc_buf_(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_t
 	dcerpc_call_value *dcv = NULL;
 	guint32 type=0;
 	struct access_mask_info *ami=NULL;
-	di=(dcerpc_info *)pinfo->private_data;
+	di=(dcerpc_info*)pinfo->private_data;
 	if(di->conformant_run){
 		/*just a run to handle conformant arrays, nothing to dissect */
 		return offset;
@@ -2183,7 +2182,7 @@ cnf_dissect_sec_desc_buf(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tr
 {
 	guint64 len;
 	dcerpc_info *di;
-	di=(dcerpc_info *)pinfo->private_data;
+	di=(dcerpc_info*)pinfo->private_data;
 	if(di->conformant_run){
 		/*just a run to handle conformant arrays, nothing to dissect */
 		return offset;
@@ -2265,7 +2264,7 @@ samr_dissect_struct_lsa_Strings(tvbuff_t *tvb _U_, int offset _U_, packet_info *
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_lsa_Strings);
 	}
 	
@@ -2368,7 +2367,7 @@ samr_dissect_bitmap_AcctFlags(tvbuff_t *tvb _U_, int offset _U_, packet_info *pi
 	ALIGN_TO_4_BYTES;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, 4, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, 4, DREP_ENC_INTEGER(drep));
 		tree = proto_item_add_subtree(item,ett_samr_samr_AcctFlags);
 	}
 
@@ -2638,7 +2637,7 @@ samr_dissect_struct_SamEntry(tvbuff_t *tvb _U_, int offset _U_, packet_info *pin
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_SamEntry);
 	}
 	
@@ -2708,7 +2707,7 @@ samr_dissect_struct_SamArray(tvbuff_t *tvb _U_, int offset _U_, packet_info *pin
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_SamArray);
 	}
 	
@@ -2800,7 +2799,7 @@ samr_dissect_bitmap_PasswordProperties(tvbuff_t *tvb _U_, int offset _U_, packet
 	ALIGN_TO_4_BYTES;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, 4, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, 4, DREP_ENC_INTEGER(drep));
 		tree = proto_item_add_subtree(item,ett_samr_samr_PasswordProperties);
 	}
 
@@ -2947,7 +2946,7 @@ samr_dissect_struct_DomInfo1(tvbuff_t *tvb _U_, int offset _U_, packet_info *pin
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_DomInfo1);
 	}
 	
@@ -3088,7 +3087,7 @@ samr_dissect_struct_DomGeneralInformation(tvbuff_t *tvb _U_, int offset _U_, pac
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_DomGeneralInformation);
 	}
 	
@@ -3151,7 +3150,7 @@ samr_dissect_struct_DomInfo3(tvbuff_t *tvb _U_, int offset _U_, packet_info *pin
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_DomInfo3);
 	}
 	
@@ -3194,7 +3193,7 @@ samr_dissect_struct_DomOEMInformation(tvbuff_t *tvb _U_, int offset _U_, packet_
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_DomOEMInformation);
 	}
 	
@@ -3237,7 +3236,7 @@ samr_dissect_struct_DomInfo5(tvbuff_t *tvb _U_, int offset _U_, packet_info *pin
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_DomInfo5);
 	}
 	
@@ -3280,7 +3279,7 @@ samr_dissect_struct_DomInfo6(tvbuff_t *tvb _U_, int offset _U_, packet_info *pin
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_DomInfo6);
 	}
 	
@@ -3323,7 +3322,7 @@ samr_dissect_struct_DomInfo7(tvbuff_t *tvb _U_, int offset _U_, packet_info *pin
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_DomInfo7);
 	}
 	
@@ -3375,7 +3374,7 @@ samr_dissect_struct_DomInfo8(tvbuff_t *tvb _U_, int offset _U_, packet_info *pin
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_DomInfo8);
 	}
 	
@@ -3420,7 +3419,7 @@ samr_dissect_struct_DomInfo9(tvbuff_t *tvb _U_, int offset _U_, packet_info *pin
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_DomInfo9);
 	}
 	
@@ -3490,7 +3489,7 @@ samr_dissect_struct_DomGeneralInformation2(tvbuff_t *tvb _U_, int offset _U_, pa
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_DomGeneralInformation2);
 	}
 	
@@ -3557,7 +3556,7 @@ samr_dissect_struct_DomInfo12(tvbuff_t *tvb _U_, int offset _U_, packet_info *pi
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_DomInfo12);
 	}
 	
@@ -3622,7 +3621,7 @@ samr_dissect_struct_DomInfo13(tvbuff_t *tvb _U_, int offset _U_, packet_info *pi
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_DomInfo13);
 	}
 	
@@ -3877,7 +3876,7 @@ samr_dissect_struct_Ids(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_Ids);
 	}
 	
@@ -3917,7 +3916,7 @@ samr_dissect_bitmap_GroupAttrs(tvbuff_t *tvb _U_, int offset _U_, packet_info *p
 	ALIGN_TO_4_BYTES;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, 4, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, 4, DREP_ENC_INTEGER(drep));
 		tree = proto_item_add_subtree(item,ett_samr_samr_GroupAttrs);
 	}
 
@@ -4043,7 +4042,7 @@ samr_dissect_struct_GroupInfoAll(tvbuff_t *tvb _U_, int offset _U_, packet_info
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_GroupInfoAll);
 	}
 	
@@ -4092,7 +4091,7 @@ samr_dissect_struct_GroupInfoAttributes(tvbuff_t *tvb _U_, int offset _U_, packe
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_GroupInfoAttributes);
 	}
 	
@@ -4135,7 +4134,7 @@ samr_dissect_struct_GroupInfoDescription(tvbuff_t *tvb _U_, int offset _U_, pack
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_GroupInfoDescription);
 	}
 	
@@ -4343,7 +4342,7 @@ samr_dissect_struct_RidTypeArray(tvbuff_t *tvb _U_, int offset _U_, packet_info
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_RidTypeArray);
 	}
 	
@@ -4408,7 +4407,7 @@ samr_dissect_struct_AliasInfoAll(tvbuff_t *tvb _U_, int offset _U_, packet_info
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_AliasInfoAll);
 	}
 	
@@ -4619,7 +4618,7 @@ samr_dissect_struct_UserInfo1(tvbuff_t *tvb _U_, int offset _U_, packet_info *pi
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_UserInfo1);
 	}
 	
@@ -4697,7 +4696,7 @@ samr_dissect_struct_UserInfo2(tvbuff_t *tvb _U_, int offset _U_, packet_info *pi
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_UserInfo2);
 	}
 	
@@ -4771,7 +4770,7 @@ samr_dissect_struct_LogonHours(tvbuff_t *tvb _U_, int offset _U_, packet_info *p
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_LogonHours);
 	}
 	
@@ -4969,7 +4968,7 @@ samr_dissect_struct_UserInfo3(tvbuff_t *tvb _U_, int offset _U_, packet_info *pi
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_UserInfo3);
 	}
 	
@@ -5046,7 +5045,7 @@ samr_dissect_struct_UserInfo4(tvbuff_t *tvb _U_, int offset _U_, packet_info *pi
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_UserInfo4);
 	}
 	
@@ -5242,7 +5241,7 @@ samr_dissect_struct_UserInfo5(tvbuff_t *tvb _U_, int offset _U_, packet_info *pi
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_UserInfo5);
 	}
 	
@@ -5328,7 +5327,7 @@ samr_dissect_struct_UserInfo6(tvbuff_t *tvb _U_, int offset _U_, packet_info *pi
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_UserInfo6);
 	}
 	
@@ -5373,7 +5372,7 @@ samr_dissect_struct_UserInfo7(tvbuff_t *tvb _U_, int offset _U_, packet_info *pi
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_UserInfo7);
 	}
 	
@@ -5416,7 +5415,7 @@ samr_dissect_struct_UserInfo8(tvbuff_t *tvb _U_, int offset _U_, packet_info *pi
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_UserInfo8);
 	}
 	
@@ -5459,7 +5458,7 @@ samr_dissect_struct_UserInfo9(tvbuff_t *tvb _U_, int offset _U_, packet_info *pi
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_UserInfo9);
 	}
 	
@@ -5511,7 +5510,7 @@ samr_dissect_struct_UserInfo10(tvbuff_t *tvb _U_, int offset _U_, packet_info *p
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_UserInfo10);
 	}
 	
@@ -5556,7 +5555,7 @@ samr_dissect_struct_UserInfo11(tvbuff_t *tvb _U_, int offset _U_, packet_info *p
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_UserInfo11);
 	}
 	
@@ -5599,7 +5598,7 @@ samr_dissect_struct_UserInfo12(tvbuff_t *tvb _U_, int offset _U_, packet_info *p
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_UserInfo12);
 	}
 	
@@ -5642,7 +5641,7 @@ samr_dissect_struct_UserInfo13(tvbuff_t *tvb _U_, int offset _U_, packet_info *p
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_UserInfo13);
 	}
 	
@@ -5685,7 +5684,7 @@ samr_dissect_struct_UserInfo14(tvbuff_t *tvb _U_, int offset _U_, packet_info *p
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_UserInfo14);
 	}
 	
@@ -5728,7 +5727,7 @@ samr_dissect_struct_UserInfo16(tvbuff_t *tvb _U_, int offset _U_, packet_info *p
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_UserInfo16);
 	}
 	
@@ -5771,7 +5770,7 @@ samr_dissect_struct_UserInfo17(tvbuff_t *tvb _U_, int offset _U_, packet_info *p
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_UserInfo17);
 	}
 	
@@ -5822,7 +5821,7 @@ samr_dissect_struct_Password(tvbuff_t *tvb _U_, int offset _U_, packet_info *pin
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_Password);
 	}
 	
@@ -5895,7 +5894,7 @@ samr_dissect_struct_UserInfo18(tvbuff_t *tvb _U_, int offset _U_, packet_info *p
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_UserInfo18);
 	}
 	
@@ -5942,7 +5941,7 @@ samr_dissect_struct_UserInfo20(tvbuff_t *tvb _U_, int offset _U_, packet_info *p
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_UserInfo20);
 	}
 	
@@ -6003,7 +6002,7 @@ samr_dissect_bitmap_FieldsPresent(tvbuff_t *tvb _U_, int offset _U_, packet_info
 	ALIGN_TO_4_BYTES;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, 4, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, 4, DREP_ENC_INTEGER(drep));
 		tree = proto_item_add_subtree(item,ett_samr_samr_FieldsPresent);
 	}
 
@@ -6599,7 +6598,7 @@ samr_dissect_struct_UserInfo21(tvbuff_t *tvb _U_, int offset _U_, packet_info *p
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_UserInfo21);
 	}
 	
@@ -6716,7 +6715,7 @@ samr_dissect_struct_CryptPassword(tvbuff_t *tvb _U_, int offset _U_, packet_info
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_CryptPassword);
 	}
 	
@@ -6764,7 +6763,7 @@ samr_dissect_struct_UserInfo23(tvbuff_t *tvb _U_, int offset _U_, packet_info *p
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_UserInfo23);
 	}
 	
@@ -6816,7 +6815,7 @@ samr_dissect_struct_UserInfo24(tvbuff_t *tvb _U_, int offset _U_, packet_info *p
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_UserInfo24);
 	}
 	
@@ -6865,7 +6864,7 @@ samr_dissect_struct_CryptPasswordEx(tvbuff_t *tvb _U_, int offset _U_, packet_in
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_CryptPasswordEx);
 	}
 	
@@ -6913,7 +6912,7 @@ samr_dissect_struct_UserInfo25(tvbuff_t *tvb _U_, int offset _U_, packet_info *p
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_UserInfo25);
 	}
 	
@@ -6965,7 +6964,7 @@ samr_dissect_struct_UserInfo26(tvbuff_t *tvb _U_, int offset _U_, packet_info *p
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_UserInfo26);
 	}
 	
@@ -7341,7 +7340,7 @@ samr_dissect_struct_RidWithAttribute(tvbuff_t *tvb _U_, int offset _U_, packet_i
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_RidWithAttribute);
 	}
 	
@@ -7411,7 +7410,7 @@ samr_dissect_struct_RidWithAttributeArray(tvbuff_t *tvb _U_, int offset _U_, pac
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_RidWithAttributeArray);
 	}
 	
@@ -7501,7 +7500,7 @@ samr_dissect_struct_DispEntryGeneral(tvbuff_t *tvb _U_, int offset _U_, packet_i
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_DispEntryGeneral);
 	}
 	
@@ -7579,7 +7578,7 @@ samr_dissect_struct_DispInfoGeneral(tvbuff_t *tvb _U_, int offset _U_, packet_in
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_DispInfoGeneral);
 	}
 	
@@ -7660,7 +7659,7 @@ samr_dissect_struct_DispEntryFull(tvbuff_t *tvb _U_, int offset _U_, packet_info
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_DispEntryFull);
 	}
 	
@@ -7736,7 +7735,7 @@ samr_dissect_struct_DispInfoFull(tvbuff_t *tvb _U_, int offset _U_, packet_info
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_DispInfoFull);
 	}
 	
@@ -7817,7 +7816,7 @@ samr_dissect_struct_DispEntryFullGroup(tvbuff_t *tvb _U_, int offset _U_, packet
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_DispEntryFullGroup);
 	}
 	
@@ -7893,7 +7892,7 @@ samr_dissect_struct_DispInfoFullGroups(tvbuff_t *tvb _U_, int offset _U_, packet
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_DispInfoFullGroups);
 	}
 	
@@ -7947,7 +7946,7 @@ samr_dissect_struct_DispEntryAscii(tvbuff_t *tvb _U_, int offset _U_, packet_inf
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_DispEntryAscii);
 	}
 	
@@ -8017,7 +8016,7 @@ samr_dissect_struct_DispInfoAscii(tvbuff_t *tvb _U_, int offset _U_, packet_info
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_DispInfoAscii);
 	}
 	
@@ -8186,7 +8185,7 @@ samr_dissect_struct_PwInfo(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_PwInfo);
 	}
 	
@@ -8270,7 +8269,7 @@ samr_dissect_struct_ChangeReject(tvbuff_t *tvb _U_, int offset _U_, packet_info
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_ChangeReject);
 	}
 	
@@ -8326,7 +8325,7 @@ samr_dissect_struct_ConnectInfo1(tvbuff_t *tvb _U_, int offset _U_, packet_info
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_ConnectInfo1);
 	}
 	
@@ -8405,7 +8404,7 @@ samr_dissect_bitmap_ValidateFieldsPresent(tvbuff_t *tvb _U_, int offset _U_, pac
 	ALIGN_TO_4_BYTES;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, 4, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, 4, DREP_ENC_INTEGER(drep));
 		tree = proto_item_add_subtree(item,ett_samr_samr_ValidateFieldsPresent);
 	}
 
@@ -8571,7 +8570,7 @@ samr_dissect_struct_ValidationBlob(tvbuff_t *tvb _U_, int offset _U_, packet_inf
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_ValidationBlob);
 	}
 	
@@ -8686,7 +8685,7 @@ samr_dissect_struct_ValidatePasswordInfo(tvbuff_t *tvb _U_, int offset _U_, pack
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_ValidatePasswordInfo);
 	}
 	
@@ -8750,7 +8749,7 @@ samr_dissect_struct_ValidatePasswordRepCtr(tvbuff_t *tvb _U_, int offset _U_, pa
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_ValidatePasswordRepCtr);
 	}
 	
@@ -8906,7 +8905,7 @@ samr_dissect_struct_ValidatePasswordReq3(tvbuff_t *tvb _U_, int offset _U_, pack
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_ValidatePasswordReq3);
 	}
 	
@@ -8995,7 +8994,7 @@ samr_dissect_struct_ValidatePasswordReq2(tvbuff_t *tvb _U_, int offset _U_, pack
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_ValidatePasswordReq2);
 	}
 	
@@ -9055,7 +9054,7 @@ samr_dissect_struct_ValidatePasswordReq1(tvbuff_t *tvb _U_, int offset _U_, pack
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_samr_samr_ValidatePasswordReq1);
 	}
 	
-- 
1.8.1.2

>From 0c931771cb2d6151ae9f38f96f08afc37c1b8000 Mon Sep 17 00:00:00 2001
From: Matthieu Patou <[email protected]>
Date: Sun, 6 Oct 2013 20:38:46 -0700
Subject: [PATCH 20/21] Update samr.cnf to remove warnings about void*
 conversion

Signed-off-by: Matthieu Patou <[email protected]>
---
 epan/dissectors/pidl/samr.cnf | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/epan/dissectors/pidl/samr.cnf b/epan/dissectors/pidl/samr.cnf
index bdcd28a..5e865fd 100644
--- a/epan/dissectors/pidl/samr.cnf
+++ b/epan/dissectors/pidl/samr.cnf
@@ -386,7 +386,7 @@ cnf_dissect_sec_desc_buf_(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_t
 	guint32 type=0;
 	struct access_mask_info *ami=NULL;
 
-	di=pinfo->private_data;
+	di=(dcerpc_info*)pinfo->private_data;
 
 	if(di->conformant_run){
 		/*just a run to handle conformant arrays, nothing to dissect */
@@ -435,7 +435,7 @@ cnf_dissect_sec_desc_buf(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tr
 	guint64 len;
 	dcerpc_info *di;
 
-	di=pinfo->private_data;
+	di=(dcerpc_info*)pinfo->private_data;
 	if(di->conformant_run){
 		/*just a run to handle conformant arrays, nothing to dissect */
 		return offset;
-- 
1.8.1.2

>From 95875b4edf5c302189f886e1a1a09b1457a782ff Mon Sep 17 00:00:00 2001
From: Matthieu Patou <[email protected]>
Date: Sun, 6 Oct 2013 20:33:16 -0700
Subject: [PATCH 19/21] Regenerate wzcsvc

Signed-off-by: Matthieu Patou <[email protected]>
---
 epan/dissectors/packet-dcerpc-wzcsvc.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/epan/dissectors/packet-dcerpc-wzcsvc.c b/epan/dissectors/packet-dcerpc-wzcsvc.c
index e52647a..cc352e4 100644
--- a/epan/dissectors/packet-dcerpc-wzcsvc.c
+++ b/epan/dissectors/packet-dcerpc-wzcsvc.c
@@ -12,7 +12,6 @@
 
 
 #include "config.h"
-
 #ifdef _MSC_VER
 #pragma warning(disable:4005)
 #pragma warning(disable:4013)
-- 
1.8.1.2

>From be0c58fabde894d95639e4d03d2c823098ac8abc Mon Sep 17 00:00:00 2001
From: Matthieu Patou <[email protected]>
Date: Sun, 6 Oct 2013 20:32:54 -0700
Subject: [PATCH 18/21] Regenerate the lsa files

Signed-off-by: Matthieu Patou <[email protected]>
---
 epan/dissectors/packet-dcerpc-lsa.c | 266 ++++++++++++++++++------------------
 1 file changed, 133 insertions(+), 133 deletions(-)

diff --git a/epan/dissectors/packet-dcerpc-lsa.c b/epan/dissectors/packet-dcerpc-lsa.c
index cdc1b3c..6408127 100644
--- a/epan/dissectors/packet-dcerpc-lsa.c
+++ b/epan/dissectors/packet-dcerpc-lsa.c
@@ -12,7 +12,6 @@
 
 
 #include "config.h"
-
 #ifdef _MSC_VER
 #pragma warning(disable:4005)
 #pragma warning(disable:4013)
@@ -987,9 +986,9 @@ const value_string lsarpc_lsa_ForestTrustRecordType_vals[] = {
 { 0, NULL }
 };
 static int lsarpc_dissect_element_lsa_ForestTrustRecord_flags(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
-static int lsarpc_dissect_element_lsa_ForestTrustRecord_level(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int lsarpc_dissect_element_lsa_ForestTrustRecord_level(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_, guint32 *level);
 static int lsarpc_dissect_element_lsa_ForestTrustRecord_unknown(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
-static int lsarpc_dissect_element_lsa_ForestTrustRecord_forest_trust_data(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int lsarpc_dissect_element_lsa_ForestTrustRecord_forest_trust_data(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_, guint32 *level);
 static int lsarpc_dissect_element_lsa_ForestTrustInformation_count(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int lsarpc_dissect_element_lsa_ForestTrustInformation_entries(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int lsarpc_dissect_element_lsa_ForestTrustInformation_entries_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
@@ -1435,7 +1434,7 @@ cnf_dissect_sec_desc_buf_(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_t
 	dcerpc_call_value *dcv = NULL;
 	guint32 type=0;
 	struct access_mask_info *ami=NULL;
-	di=pinfo->private_data;
+	di=(dcerpc_info*)pinfo->private_data;
 	if(di->conformant_run){
 		/*just a run to handle conformant arrays, nothing to dissect */
 		return offset;
@@ -1473,7 +1472,7 @@ cnf_dissect_sec_desc_buf(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tr
 {
 	guint32 len;
 	dcerpc_info *di;
-	di=pinfo->private_data;
+	di=(dcerpc_info*)pinfo->private_data;
 	if(di->conformant_run){
 		/*just a run to handle conformant arrays, nothing to dissect */
 		return offset;
@@ -1515,7 +1514,7 @@ lsarpc_dissect_element_lsa_LookupNames3_names_X(tvbuff_t *tvb _U_, int offset _U
 		item = proto_tree_add_item(parent_tree, hf_lsarpc_names, tvb, offset, -1, TRUE);
 		tree = proto_item_add_subtree(item, ett_lsarpc_names);
 	}
-	di=pinfo->private_data;
+	di=(dcerpc_info*)pinfo->private_data;
 	offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, drep, lsarpc_dissect_element_lsa_LookupNames3_names_);
 	proto_item_set_len(item, offset-old_offset);
 	return offset;
@@ -1577,7 +1576,7 @@ lsarpc_dissect_element_lsa_DomainInfoEfs_efs_blob_(tvbuff_t *tvb _U_, int offset
 	tvbuff_t *next_tvb;
 	gint len, reported_len;
 	dissector_handle_t efsblob_handle;
-	di=pinfo->private_data;
+	di=(dcerpc_info*)pinfo->private_data;
 	if(di->conformant_run){
 		/*just a run to handle conformant arrays, nothing to dissect */
 		return offset;
@@ -1653,7 +1652,7 @@ lsarpc_dissect_bitmap_security_secinfo(tvbuff_t *tvb _U_, int offset _U_, packet
 	ALIGN_TO_4_BYTES;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, 4, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, 4, DREP_ENC_INTEGER(drep));
 		tree = proto_item_add_subtree(item,ett_lsarpc_security_secinfo);
 	}
 
@@ -1706,7 +1705,7 @@ lsarpc_dissect_struct_lsa_String(tvbuff_t *tvb _U_, int offset _U_, packet_info
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_5_BYTES;
@@ -1714,7 +1713,7 @@ lsarpc_dissect_struct_lsa_String(tvbuff_t *tvb _U_, int offset _U_, packet_info
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_String);
 	}
 	
@@ -1771,7 +1770,7 @@ lsarpc_dissect_struct_lsa_StringLarge(tvbuff_t *tvb _U_, int offset _U_, packet_
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_5_BYTES;
@@ -1779,7 +1778,7 @@ lsarpc_dissect_struct_lsa_StringLarge(tvbuff_t *tvb _U_, int offset _U_, packet_
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_StringLarge);
 	}
 	
@@ -1843,7 +1842,7 @@ lsarpc_dissect_struct_lsa_Strings(tvbuff_t *tvb _U_, int offset _U_, packet_info
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_5_BYTES;
@@ -1851,7 +1850,7 @@ lsarpc_dissect_struct_lsa_Strings(tvbuff_t *tvb _U_, int offset _U_, packet_info
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_Strings);
 	}
 	
@@ -1922,7 +1921,7 @@ lsarpc_dissect_struct_lsa_AsciiString(tvbuff_t *tvb _U_, int offset _U_, packet_
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_5_BYTES;
@@ -1930,7 +1929,7 @@ lsarpc_dissect_struct_lsa_AsciiString(tvbuff_t *tvb _U_, int offset _U_, packet_
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_AsciiString);
 	}
 	
@@ -2003,7 +2002,7 @@ lsarpc_dissect_struct_lsa_AsciiStringLarge(tvbuff_t *tvb _U_, int offset _U_, pa
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_5_BYTES;
@@ -2011,7 +2010,7 @@ lsarpc_dissect_struct_lsa_AsciiStringLarge(tvbuff_t *tvb _U_, int offset _U_, pa
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_AsciiStringLarge);
 	}
 	
@@ -2059,7 +2058,7 @@ lsarpc_dissect_struct_lsa_LUID(tvbuff_t *tvb _U_, int offset _U_, packet_info *p
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_4_BYTES;
@@ -2067,7 +2066,7 @@ lsarpc_dissect_struct_lsa_LUID(tvbuff_t *tvb _U_, int offset _U_, packet_info *p
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_LUID);
 	}
 	
@@ -2113,7 +2112,7 @@ lsarpc_dissect_struct_lsa_PrivEntry(tvbuff_t *tvb _U_, int offset _U_, packet_in
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_5_BYTES;
@@ -2121,7 +2120,7 @@ lsarpc_dissect_struct_lsa_PrivEntry(tvbuff_t *tvb _U_, int offset _U_, packet_in
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_PrivEntry);
 	}
 	
@@ -2183,7 +2182,7 @@ lsarpc_dissect_struct_lsa_PrivArray(tvbuff_t *tvb _U_, int offset _U_, packet_in
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_5_BYTES;
@@ -2191,7 +2190,7 @@ lsarpc_dissect_struct_lsa_PrivArray(tvbuff_t *tvb _U_, int offset _U_, packet_in
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_PrivArray);
 	}
 	
@@ -2277,7 +2276,7 @@ lsarpc_dissect_struct_lsa_QosInfo(tvbuff_t *tvb _U_, int offset _U_, packet_info
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_4_BYTES;
@@ -2285,7 +2284,7 @@ lsarpc_dissect_struct_lsa_QosInfo(tvbuff_t *tvb _U_, int offset _U_, packet_info
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_QosInfo);
 	}
 	
@@ -2406,7 +2405,7 @@ lsarpc_dissect_struct_lsa_ObjectAttribute(tvbuff_t *tvb _U_, int offset _U_, pac
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_5_BYTES;
@@ -2414,7 +2413,7 @@ lsarpc_dissect_struct_lsa_ObjectAttribute(tvbuff_t *tvb _U_, int offset _U_, pac
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_ObjectAttribute);
 	}
 	
@@ -2513,7 +2512,7 @@ lsarpc_dissect_struct_lsa_AuditLogInfo(tvbuff_t *tvb _U_, int offset _U_, packet
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_4_BYTES;
@@ -2521,7 +2520,7 @@ lsarpc_dissect_struct_lsa_AuditLogInfo(tvbuff_t *tvb _U_, int offset _U_, packet
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_AuditLogInfo);
 	}
 	
@@ -2652,7 +2651,7 @@ lsarpc_dissect_struct_lsa_AuditEventsInfo(tvbuff_t *tvb _U_, int offset _U_, pac
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_5_BYTES;
@@ -2660,7 +2659,7 @@ lsarpc_dissect_struct_lsa_AuditEventsInfo(tvbuff_t *tvb _U_, int offset _U_, pac
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_AuditEventsInfo);
 	}
 	
@@ -2716,7 +2715,7 @@ lsarpc_dissect_struct_lsa_DomainInfo(tvbuff_t *tvb _U_, int offset _U_, packet_i
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_5_BYTES;
@@ -2724,7 +2723,7 @@ lsarpc_dissect_struct_lsa_DomainInfo(tvbuff_t *tvb _U_, int offset _U_, packet_i
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_DomainInfo);
 	}
 	
@@ -2761,7 +2760,7 @@ lsarpc_dissect_struct_lsa_PDAccountInfo(tvbuff_t *tvb _U_, int offset _U_, packe
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_5_BYTES;
@@ -2769,7 +2768,7 @@ lsarpc_dissect_struct_lsa_PDAccountInfo(tvbuff_t *tvb _U_, int offset _U_, packe
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_PDAccountInfo);
 	}
 	
@@ -2824,7 +2823,7 @@ lsarpc_dissect_struct_lsa_ServerRole(tvbuff_t *tvb _U_, int offset _U_, packet_i
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_3_BYTES;
@@ -2832,7 +2831,7 @@ lsarpc_dissect_struct_lsa_ServerRole(tvbuff_t *tvb _U_, int offset _U_, packet_i
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_ServerRole);
 	}
 	
@@ -2876,7 +2875,7 @@ lsarpc_dissect_struct_lsa_ReplicaSourceInfo(tvbuff_t *tvb _U_, int offset _U_, p
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_5_BYTES;
@@ -2884,7 +2883,7 @@ lsarpc_dissect_struct_lsa_ReplicaSourceInfo(tvbuff_t *tvb _U_, int offset _U_, p
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_ReplicaSourceInfo);
 	}
 	
@@ -2966,7 +2965,7 @@ lsarpc_dissect_struct_lsa_DefaultQuotaInfo(tvbuff_t *tvb _U_, int offset _U_, pa
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_8_BYTES;
@@ -2974,7 +2973,7 @@ lsarpc_dissect_struct_lsa_DefaultQuotaInfo(tvbuff_t *tvb _U_, int offset _U_, pa
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_DefaultQuotaInfo);
 	}
 	
@@ -3028,7 +3027,7 @@ lsarpc_dissect_struct_lsa_ModificationInfo(tvbuff_t *tvb _U_, int offset _U_, pa
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_8_BYTES;
@@ -3036,7 +3035,7 @@ lsarpc_dissect_struct_lsa_ModificationInfo(tvbuff_t *tvb _U_, int offset _U_, pa
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_ModificationInfo);
 	}
 	
@@ -3079,7 +3078,7 @@ lsarpc_dissect_struct_lsa_AuditFullSetInfo(tvbuff_t *tvb _U_, int offset _U_, pa
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_AuditFullSetInfo);
 	}
 	
@@ -3128,7 +3127,7 @@ lsarpc_dissect_struct_lsa_AuditFullQueryInfo(tvbuff_t *tvb _U_, int offset _U_,
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_2_BYTES;
@@ -3136,7 +3135,7 @@ lsarpc_dissect_struct_lsa_AuditFullQueryInfo(tvbuff_t *tvb _U_, int offset _U_,
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_AuditFullQueryInfo);
 	}
 	
@@ -3219,7 +3218,7 @@ lsarpc_dissect_struct_lsa_DnsDomainInfo(tvbuff_t *tvb _U_, int offset _U_, packe
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_5_BYTES;
@@ -3227,7 +3226,7 @@ lsarpc_dissect_struct_lsa_DnsDomainInfo(tvbuff_t *tvb _U_, int offset _U_, packe
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_DnsDomainInfo);
 	}
 	
@@ -3493,7 +3492,7 @@ lsarpc_dissect_struct_lsa_SidPtr(tvbuff_t *tvb _U_, int offset _U_, packet_info
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_5_BYTES;
@@ -3501,7 +3500,7 @@ lsarpc_dissect_struct_lsa_SidPtr(tvbuff_t *tvb _U_, int offset _U_, packet_info
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_SidPtr);
 	}
 	
@@ -3561,7 +3560,7 @@ lsarpc_dissect_struct_lsa_SidArray(tvbuff_t *tvb _U_, int offset _U_, packet_inf
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_5_BYTES;
@@ -3569,7 +3568,7 @@ lsarpc_dissect_struct_lsa_SidArray(tvbuff_t *tvb _U_, int offset _U_, packet_inf
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_SidArray);
 	}
 	
@@ -3631,7 +3630,7 @@ lsarpc_dissect_struct_lsa_DomainList(tvbuff_t *tvb _U_, int offset _U_, packet_i
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_5_BYTES;
@@ -3639,7 +3638,7 @@ lsarpc_dissect_struct_lsa_DomainList(tvbuff_t *tvb _U_, int offset _U_, packet_i
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_DomainList);
 	}
 	
@@ -3722,7 +3721,7 @@ lsarpc_dissect_struct_lsa_TranslatedSid(tvbuff_t *tvb _U_, int offset _U_, packe
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_4_BYTES;
@@ -3730,7 +3729,7 @@ lsarpc_dissect_struct_lsa_TranslatedSid(tvbuff_t *tvb _U_, int offset _U_, packe
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_TranslatedSid);
 	}
 	
@@ -3794,7 +3793,7 @@ lsarpc_dissect_struct_lsa_TransSidArray(tvbuff_t *tvb _U_, int offset _U_, packe
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_5_BYTES;
@@ -3802,7 +3801,7 @@ lsarpc_dissect_struct_lsa_TransSidArray(tvbuff_t *tvb _U_, int offset _U_, packe
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_TransSidArray);
 	}
 	
@@ -3873,7 +3872,7 @@ lsarpc_dissect_struct_lsa_RefDomainList(tvbuff_t *tvb _U_, int offset _U_, packe
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_5_BYTES;
@@ -3881,7 +3880,7 @@ lsarpc_dissect_struct_lsa_RefDomainList(tvbuff_t *tvb _U_, int offset _U_, packe
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_RefDomainList);
 	}
 	
@@ -3962,7 +3961,7 @@ lsarpc_dissect_struct_lsa_TranslatedName(tvbuff_t *tvb _U_, int offset _U_, pack
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_5_BYTES;
@@ -3970,7 +3969,7 @@ lsarpc_dissect_struct_lsa_TranslatedName(tvbuff_t *tvb _U_, int offset _U_, pack
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_TranslatedName);
 	}
 	
@@ -4034,7 +4033,7 @@ lsarpc_dissect_struct_lsa_TransNameArray(tvbuff_t *tvb _U_, int offset _U_, pack
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_5_BYTES;
@@ -4042,7 +4041,7 @@ lsarpc_dissect_struct_lsa_TransNameArray(tvbuff_t *tvb _U_, int offset _U_, pack
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_TransNameArray);
 	}
 	
@@ -4088,7 +4087,7 @@ lsarpc_dissect_struct_lsa_LUIDAttribute(tvbuff_t *tvb _U_, int offset _U_, packe
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_4_BYTES;
@@ -4096,7 +4095,7 @@ lsarpc_dissect_struct_lsa_LUIDAttribute(tvbuff_t *tvb _U_, int offset _U_, packe
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_LUIDAttribute);
 	}
 	
@@ -4159,7 +4158,7 @@ lsarpc_dissect_struct_lsa_PrivilegeSet(tvbuff_t *tvb _U_, int offset _U_, packet
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_4_BYTES;
@@ -4167,7 +4166,7 @@ lsarpc_dissect_struct_lsa_PrivilegeSet(tvbuff_t *tvb _U_, int offset _U_, packet
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_PrivilegeSet);
 	}
 	
@@ -4240,7 +4239,7 @@ lsarpc_dissect_struct_lsa_DATA_BUF(tvbuff_t *tvb _U_, int offset _U_, packet_inf
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_5_BYTES;
@@ -4248,7 +4247,7 @@ lsarpc_dissect_struct_lsa_DATA_BUF(tvbuff_t *tvb _U_, int offset _U_, packet_inf
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_DATA_BUF);
 	}
 	
@@ -4312,7 +4311,7 @@ lsarpc_dissect_struct_lsa_DATA_BUF2(tvbuff_t *tvb _U_, int offset _U_, packet_in
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_5_BYTES;
@@ -4320,7 +4319,7 @@ lsarpc_dissect_struct_lsa_DATA_BUF2(tvbuff_t *tvb _U_, int offset _U_, packet_in
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_DATA_BUF2);
 	}
 	
@@ -4385,7 +4384,7 @@ lsarpc_dissect_struct_lsa_TrustDomainInfoName(tvbuff_t *tvb _U_, int offset _U_,
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_5_BYTES;
@@ -4393,7 +4392,7 @@ lsarpc_dissect_struct_lsa_TrustDomainInfoName(tvbuff_t *tvb _U_, int offset _U_,
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_TrustDomainInfoName);
 	}
 	
@@ -4428,7 +4427,7 @@ lsarpc_dissect_struct_lsa_TrustDomainInfoPosixOffset(tvbuff_t *tvb _U_, int offs
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_4_BYTES;
@@ -4436,7 +4435,7 @@ lsarpc_dissect_struct_lsa_TrustDomainInfoPosixOffset(tvbuff_t *tvb _U_, int offs
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_TrustDomainInfoPosixOffset);
 	}
 	
@@ -4496,7 +4495,7 @@ lsarpc_dissect_struct_lsa_TrustDomainInfoPassword(tvbuff_t *tvb _U_, int offset
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_5_BYTES;
@@ -4504,7 +4503,7 @@ lsarpc_dissect_struct_lsa_TrustDomainInfoPassword(tvbuff_t *tvb _U_, int offset
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_TrustDomainInfoPassword);
 	}
 	
@@ -4558,7 +4557,7 @@ lsarpc_dissect_struct_lsa_TrustDomainInfoBasic(tvbuff_t *tvb _U_, int offset _U_
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_5_BYTES;
@@ -4566,7 +4565,7 @@ lsarpc_dissect_struct_lsa_TrustDomainInfoBasic(tvbuff_t *tvb _U_, int offset _U_
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_TrustDomainInfoBasic);
 	}
 	
@@ -4656,7 +4655,7 @@ lsarpc_dissect_struct_lsa_TrustDomainInfoInfoEx(tvbuff_t *tvb _U_, int offset _U
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_5_BYTES;
@@ -4664,7 +4663,7 @@ lsarpc_dissect_struct_lsa_TrustDomainInfoInfoEx(tvbuff_t *tvb _U_, int offset _U
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_TrustDomainInfoInfoEx);
 	}
 	
@@ -4727,7 +4726,7 @@ lsarpc_dissect_struct_lsa_TrustDomainInfoBuffer(tvbuff_t *tvb _U_, int offset _U
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_8_BYTES;
@@ -4735,7 +4734,7 @@ lsarpc_dissect_struct_lsa_TrustDomainInfoBuffer(tvbuff_t *tvb _U_, int offset _U
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_TrustDomainInfoBuffer);
 	}
 	
@@ -4851,7 +4850,7 @@ lsarpc_dissect_struct_lsa_TrustDomainInfoAuthInfo(tvbuff_t *tvb _U_, int offset
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_5_BYTES;
@@ -4859,7 +4858,7 @@ lsarpc_dissect_struct_lsa_TrustDomainInfoAuthInfo(tvbuff_t *tvb _U_, int offset
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_TrustDomainInfoAuthInfo);
 	}
 	
@@ -4922,7 +4921,7 @@ lsarpc_dissect_struct_lsa_TrustDomainInfoFullInfo(tvbuff_t *tvb _U_, int offset
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_5_BYTES;
@@ -4930,7 +4929,7 @@ lsarpc_dissect_struct_lsa_TrustDomainInfoFullInfo(tvbuff_t *tvb _U_, int offset
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_TrustDomainInfoFullInfo);
 	}
 	
@@ -4978,7 +4977,7 @@ lsarpc_dissect_struct_lsa_TrustDomainInfo11(tvbuff_t *tvb _U_, int offset _U_, p
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_5_BYTES;
@@ -4986,7 +4985,7 @@ lsarpc_dissect_struct_lsa_TrustDomainInfo11(tvbuff_t *tvb _U_, int offset _U_, p
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_TrustDomainInfo11);
 	}
 	
@@ -5050,7 +5049,7 @@ lsarpc_dissect_struct_lsa_TrustDomainInfoInfoAll(tvbuff_t *tvb _U_, int offset _
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_5_BYTES;
@@ -5058,7 +5057,7 @@ lsarpc_dissect_struct_lsa_TrustDomainInfoInfoAll(tvbuff_t *tvb _U_, int offset _
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_TrustDomainInfoInfoAll);
 	}
 	
@@ -5251,7 +5250,7 @@ lsarpc_dissect_struct_lsa_DATA_BUF_PTR(tvbuff_t *tvb _U_, int offset _U_, packet
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_5_BYTES;
@@ -5259,7 +5258,7 @@ lsarpc_dissect_struct_lsa_DATA_BUF_PTR(tvbuff_t *tvb _U_, int offset _U_, packet
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_DATA_BUF_PTR);
 	}
 	
@@ -5305,7 +5304,7 @@ lsarpc_dissect_struct_lsa_RightAttribute(tvbuff_t *tvb _U_, int offset _U_, pack
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_5_BYTES;
@@ -5313,7 +5312,7 @@ lsarpc_dissect_struct_lsa_RightAttribute(tvbuff_t *tvb _U_, int offset _U_, pack
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_RightAttribute);
 	}
 	
@@ -5373,7 +5372,7 @@ lsarpc_dissect_struct_lsa_RightSet(tvbuff_t *tvb _U_, int offset _U_, packet_inf
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_5_BYTES;
@@ -5381,7 +5380,7 @@ lsarpc_dissect_struct_lsa_RightSet(tvbuff_t *tvb _U_, int offset _U_, packet_inf
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_RightSet);
 	}
 	
@@ -5426,7 +5425,7 @@ lsarpc_dissect_struct_lsa_StringPointer(tvbuff_t *tvb _U_, int offset _U_, packe
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_5_BYTES;
@@ -5434,7 +5433,7 @@ lsarpc_dissect_struct_lsa_StringPointer(tvbuff_t *tvb _U_, int offset _U_, packe
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_StringPointer);
 	}
 	
@@ -5494,7 +5493,7 @@ lsarpc_dissect_struct_lsa_DomainListEx(tvbuff_t *tvb _U_, int offset _U_, packet
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_5_BYTES;
@@ -5502,7 +5501,7 @@ lsarpc_dissect_struct_lsa_DomainListEx(tvbuff_t *tvb _U_, int offset _U_, packet
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_DomainListEx);
 	}
 	
@@ -5584,7 +5583,7 @@ lsarpc_dissect_struct_lsa_DomainInfoKerberos(tvbuff_t *tvb _U_, int offset _U_,
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_8_BYTES;
@@ -5592,7 +5591,7 @@ lsarpc_dissect_struct_lsa_DomainInfoKerberos(tvbuff_t *tvb _U_, int offset _U_,
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_DomainInfoKerberos);
 	}
 	
@@ -5654,7 +5653,7 @@ lsarpc_dissect_struct_lsa_DomainInfoEfs(tvbuff_t *tvb _U_, int offset _U_, packe
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_5_BYTES;
@@ -5662,7 +5661,7 @@ lsarpc_dissect_struct_lsa_DomainInfoEfs(tvbuff_t *tvb _U_, int offset _U_, packe
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_DomainInfoEfs);
 	}
 	
@@ -5800,7 +5799,7 @@ lsarpc_dissect_struct_lsa_TranslatedName2(tvbuff_t *tvb _U_, int offset _U_, pac
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_5_BYTES;
@@ -5808,7 +5807,7 @@ lsarpc_dissect_struct_lsa_TranslatedName2(tvbuff_t *tvb _U_, int offset _U_, pac
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_TranslatedName2);
 	}
 	
@@ -5874,7 +5873,7 @@ lsarpc_dissect_struct_lsa_TransNameArray2(tvbuff_t *tvb _U_, int offset _U_, pac
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_5_BYTES;
@@ -5882,7 +5881,7 @@ lsarpc_dissect_struct_lsa_TransNameArray2(tvbuff_t *tvb _U_, int offset _U_, pac
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_TransNameArray2);
 	}
 	
@@ -5946,7 +5945,7 @@ lsarpc_dissect_struct_lsa_TranslatedSid2(tvbuff_t *tvb _U_, int offset _U_, pack
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_4_BYTES;
@@ -5954,7 +5953,7 @@ lsarpc_dissect_struct_lsa_TranslatedSid2(tvbuff_t *tvb _U_, int offset _U_, pack
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_TranslatedSid2);
 	}
 	
@@ -6020,7 +6019,7 @@ lsarpc_dissect_struct_lsa_TransSidArray2(tvbuff_t *tvb _U_, int offset _U_, pack
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_5_BYTES;
@@ -6028,7 +6027,7 @@ lsarpc_dissect_struct_lsa_TransSidArray2(tvbuff_t *tvb _U_, int offset _U_, pack
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_TransSidArray2);
 	}
 	
@@ -6100,7 +6099,7 @@ lsarpc_dissect_struct_lsa_TranslatedSid3(tvbuff_t *tvb _U_, int offset _U_, pack
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_5_BYTES;
@@ -6108,7 +6107,7 @@ lsarpc_dissect_struct_lsa_TranslatedSid3(tvbuff_t *tvb _U_, int offset _U_, pack
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_TranslatedSid3);
 	}
 	
@@ -6174,7 +6173,7 @@ lsarpc_dissect_struct_lsa_TransSidArray3(tvbuff_t *tvb _U_, int offset _U_, pack
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_5_BYTES;
@@ -6182,7 +6181,7 @@ lsarpc_dissect_struct_lsa_TransSidArray3(tvbuff_t *tvb _U_, int offset _U_, pack
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_TransSidArray3);
 	}
 	
@@ -6244,7 +6243,7 @@ lsarpc_dissect_struct_lsa_ForestTrustBinaryData(tvbuff_t *tvb _U_, int offset _U
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_5_BYTES;
@@ -6252,7 +6251,7 @@ lsarpc_dissect_struct_lsa_ForestTrustBinaryData(tvbuff_t *tvb _U_, int offset _U
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_ForestTrustBinaryData);
 	}
 	
@@ -6315,7 +6314,7 @@ lsarpc_dissect_struct_lsa_ForestTrustDomainInfo(tvbuff_t *tvb _U_, int offset _U
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_5_BYTES;
@@ -6323,7 +6322,7 @@ lsarpc_dissect_struct_lsa_ForestTrustDomainInfo(tvbuff_t *tvb _U_, int offset _U
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_ForestTrustDomainInfo);
 	}
 	
@@ -6462,9 +6461,9 @@ lsarpc_dissect_element_lsa_ForestTrustRecord_flags(tvbuff_t *tvb _U_, int offset
 }
 
 static int
-lsarpc_dissect_element_lsa_ForestTrustRecord_level(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+lsarpc_dissect_element_lsa_ForestTrustRecord_level(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_, guint32 *level)
 {
-	offset = lsarpc_dissect_enum_lsa_ForestTrustRecordType(tvb, offset, pinfo, tree, drep, hf_lsarpc_lsa_ForestTrustRecord_level, 0);
+	offset = lsarpc_dissect_enum_lsa_ForestTrustRecordType(tvb, offset, pinfo, tree, drep, hf_lsarpc_lsa_ForestTrustRecord_level, level);
 
 	return offset;
 }
@@ -6478,9 +6477,9 @@ lsarpc_dissect_element_lsa_ForestTrustRecord_unknown(tvbuff_t *tvb _U_, int offs
 }
 
 static int
-lsarpc_dissect_element_lsa_ForestTrustRecord_forest_trust_data(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+lsarpc_dissect_element_lsa_ForestTrustRecord_forest_trust_data(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_, guint32 *level)
 {
-	offset = lsarpc_dissect_lsa_ForestTrustData(tvb, offset, pinfo, tree, drep, hf_lsarpc_lsa_ForestTrustRecord_forest_trust_data, 0);
+	offset = lsarpc_dissect_lsa_ForestTrustData(tvb, offset, pinfo, tree, drep, hf_lsarpc_lsa_ForestTrustRecord_forest_trust_data, *level);
 
 	return offset;
 }
@@ -6488,9 +6487,10 @@ lsarpc_dissect_element_lsa_ForestTrustRecord_forest_trust_data(tvbuff_t *tvb _U_
 int
 lsarpc_dissect_struct_lsa_ForestTrustRecord(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_)
 {
+	guint32 level;
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_8_BYTES;
@@ -6498,17 +6498,17 @@ lsarpc_dissect_struct_lsa_ForestTrustRecord(tvbuff_t *tvb _U_, int offset _U_, p
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_ForestTrustRecord);
 	}
 	
 	offset = lsarpc_dissect_element_lsa_ForestTrustRecord_flags(tvb, offset, pinfo, tree, drep);
 
-	offset = lsarpc_dissect_element_lsa_ForestTrustRecord_level(tvb, offset, pinfo, tree, drep);
+	offset = lsarpc_dissect_element_lsa_ForestTrustRecord_level(tvb, offset, pinfo, tree, drep, &level);
 
 	offset = lsarpc_dissect_element_lsa_ForestTrustRecord_unknown(tvb, offset, pinfo, tree, drep);
 
-	offset = lsarpc_dissect_element_lsa_ForestTrustRecord_forest_trust_data(tvb, offset, pinfo, tree, drep);
+	offset = lsarpc_dissect_element_lsa_ForestTrustRecord_forest_trust_data(tvb, offset, pinfo, tree, drep, &level);
 
 
 	proto_item_set_len(item, offset-old_offset);
@@ -6572,7 +6572,7 @@ lsarpc_dissect_struct_lsa_ForestTrustInformation(tvbuff_t *tvb _U_, int offset _
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_5_BYTES;
@@ -6580,7 +6580,7 @@ lsarpc_dissect_struct_lsa_ForestTrustInformation(tvbuff_t *tvb _U_, int offset _
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_lsarpc_lsa_ForestTrustInformation);
 	}
 	
-- 
1.8.1.2

>From 9580ee2ff23d86d74ec9e40d3f6900082ea5fc7c Mon Sep 17 00:00:00 2001
From: Matthieu Patou <[email protected]>
Date: Sun, 6 Oct 2013 19:25:42 -0700
Subject: [PATCH 17/21] Update the cnf for lsa to remove some warnings

Signed-off-by: Matthieu Patou <[email protected]>
---
 epan/dissectors/pidl/lsa.cnf | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/epan/dissectors/pidl/lsa.cnf b/epan/dissectors/pidl/lsa.cnf
index c94778c..9637035 100644
--- a/epan/dissectors/pidl/lsa.cnf
+++ b/epan/dissectors/pidl/lsa.cnf
@@ -178,7 +178,7 @@ cnf_dissect_sec_desc_buf_(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_t
 	guint32 type=0;
 	struct access_mask_info *ami=NULL;
 
-	di=pinfo->private_data;
+	di=(dcerpc_info*)pinfo->private_data;
 	if(di->conformant_run){
 		/*just a run to handle conformant arrays, nothing to dissect */
 		return offset;
@@ -223,7 +223,7 @@ cnf_dissect_sec_desc_buf(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tr
 	guint32 len;
 	dcerpc_info *di;
 
-	di=pinfo->private_data;
+	di=(dcerpc_info*)pinfo->private_data;
 	if(di->conformant_run){
 		/*just a run to handle conformant arrays, nothing to dissect */
 		return offset;
@@ -281,7 +281,7 @@ lsarpc_dissect_element_lsa_LookupNames3_names_X(tvbuff_t *tvb _U_, int offset _U
 		tree = proto_item_add_subtree(item, ett_lsarpc_names);
 	}
 
-	di=pinfo->private_data;
+	di=(dcerpc_info*)pinfo->private_data;
 
 	offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, drep, lsarpc_dissect_element_lsa_LookupNames3_names_);
 
@@ -363,7 +363,7 @@ lsarpc_dissect_element_lsa_DomainInfoEfs_efs_blob_(tvbuff_t *tvb _U_, int offset
 	gint len, reported_len;
 	dissector_handle_t efsblob_handle;
 
-	di=pinfo->private_data;
+	di=(dcerpc_info*)pinfo->private_data;
 
 
 	if(di->conformant_run){
-- 
1.8.1.2

>From 478905bf59784a73da193c9fa2e82518ed82145a Mon Sep 17 00:00:00 2001
From: Matthieu Patou <[email protected]>
Date: Sun, 6 Oct 2013 18:49:10 -0700
Subject: [PATCH 16/21] Regenerate the dnserver

Signed-off-by: Matthieu Patou <[email protected]>
---
 epan/dissectors/packet-dcerpc-dnsserver.c | 419 +++++++++++++++++-------------
 1 file changed, 234 insertions(+), 185 deletions(-)

diff --git a/epan/dissectors/packet-dcerpc-dnsserver.c b/epan/dissectors/packet-dcerpc-dnsserver.c
index e87d805..89565bc 100644
--- a/epan/dissectors/packet-dcerpc-dnsserver.c
+++ b/epan/dissectors/packet-dcerpc-dnsserver.c
@@ -1,10 +1,10 @@
 /* DO NOT EDIT
 	This filter was automatically generated
 	from dnsserver.idl and dnsserver.cnf.
-
-	Pidl is a perl based IDL compiler for DCE/RPC idl files.
+	
+	Pidl is a perl based IDL compiler for DCE/RPC idl files. 
 	It is maintained by the Samba team, not the Wireshark team.
-	Instructions on how to download and install Pidl can be
+	Instructions on how to download and install Pidl can be 
 	found at http://wiki.wireshark.org/Pidl
 
 	$Id$
@@ -12,7 +12,6 @@
 
 
 #include "config.h"
-
 #ifdef _MSC_VER
 #pragma warning(disable:4005)
 #pragma warning(disable:4013)
@@ -93,6 +92,7 @@ static gint hf_dnsserver_DNS_RPC_VERSION_OSMajorVersion = -1;
 static gint hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_DsDomainVersion = -1;
 static gint hf_dnsserver_DNS_RPC_NODE_FLAGS_DNS_RPC_FLAG_ZONE_DELEGATION = -1;
 static gint hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_RecursionTimeout = -1;
+static gint hf_dnsserver_DnssrvEnumRecords2_record_buffer_ = -1;
 static gint hf_dnsserver_DNS_LOG_LEVELS_DNS_LOG_LEVEL_UPDATE = -1;
 static gint hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_LooseWildcarding = -1;
 static gint hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_DsContainer = -1;
@@ -401,13 +401,13 @@ static int dnsserver_dissect_element_DNS_RPC_NAME_Name_(tvbuff_t *tvb _U_, int o
 static int dnsserver_dissect_element_DNS_RPC_RECORD_NODE_NAME_Name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int dnsserver_dissect_element_DNS_RPC_RECORD_UNION_NodeName(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int dnsserver_dissect_element_DNS_RPC_RECORD_DataLength(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
-static int dnsserver_dissect_element_DNS_RPC_RECORD_Type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int dnsserver_dissect_element_DNS_RPC_RECORD_Type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_, guint16 *Type);
 static int dnsserver_dissect_element_DNS_RPC_RECORD_Flags(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int dnsserver_dissect_element_DNS_RPC_RECORD_Serial(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int dnsserver_dissect_element_DNS_RPC_RECORD_TtlSeconds(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int dnsserver_dissect_element_DNS_RPC_RECORD_TimeStamp(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int dnsserver_dissect_element_DNS_RPC_RECORD_reserved(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
-static int dnsserver_dissect_element_DNS_RPC_RECORD_record(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int dnsserver_dissect_element_DNS_RPC_RECORD_record(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_, guint16 *Type);
 static int dnsserver_dissect_element_DNS_RPC_NODE_Length(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int dnsserver_dissect_element_DNS_RPC_NODE_RecordCount(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int dnsserver_dissect_element_DNS_RPC_NODE_Flags(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
@@ -590,11 +590,12 @@ dnsserver_dissect_struct_DNS_RPC_NAME(tvbuff_t *tvb _U_, int offset _U_, packet_
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
 	int old_offset;
+	dcerpc_info *di = NULL;
 	guint8 len;
 	const char *dn;
 	int dn_len = 0;
 	guint16 bc;
-	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
+	di=(dcerpc_info *)pinfo->private_data;
 	if(di->conformant_run){
 		/*just a run to handle conformant arrays, nothing to dissect */
 		return offset;
@@ -620,7 +621,8 @@ static guint16 node_record_count;
 static int
 dnsserver_dissect_element_DNS_RPC_NODE_RecordCount(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
+	dcerpc_info *di = NULL;
+	di=(dcerpc_info *)pinfo->private_data;
 	if(di->conformant_run){
 		/*just a run to handle conformant arrays, nothing to dissect */
 		return offset;
@@ -631,7 +633,8 @@ dnsserver_dissect_element_DNS_RPC_NODE_RecordCount(tvbuff_t *tvb _U_, int offset
 static int
 dnsserver_dissect_element_DNS_RPC_NODE_records(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
+	dcerpc_info *di = NULL;
+	di=(dcerpc_info *)pinfo->private_data;
 	if(di->conformant_run){
 		/*just a run to handle conformant arrays, nothing to dissect */
 		return offset;
@@ -699,6 +702,7 @@ dnsserver_dissect_struct_DNS_RPC_VERSION(tvbuff_t *tvb _U_, int offset _U_, pack
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_2_BYTES;
@@ -706,10 +710,10 @@ dnsserver_dissect_struct_DNS_RPC_VERSION(tvbuff_t *tvb _U_, int offset _U_, pack
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_dnsserver_DNS_RPC_VERSION);
 	}
-
+	
 	offset = dnsserver_dissect_element_DNS_RPC_VERSION_OSMajorVersion(tvb, offset, pinfo, tree, drep);
 
 	offset = dnsserver_dissect_element_DNS_RPC_VERSION_OSMinorVersion(tvb, offset, pinfo, tree, drep);
@@ -719,6 +723,11 @@ dnsserver_dissect_struct_DNS_RPC_VERSION(tvbuff_t *tvb _U_, int offset _U_, pack
 
 	proto_item_set_len(item, offset-old_offset);
 
+
+	if (di->call_data->flags & DCERPC_IS_NDR64) {
+		ALIGN_TO_2_BYTES;
+	}
+
 	return offset;
 }
 
@@ -768,7 +777,7 @@ dnsserver_dissect_bitmap_DNS_LOG_LEVELS(tvbuff_t *tvb _U_, int offset _U_, packe
 	ALIGN_TO_4_BYTES;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, 4, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, 4, DREP_ENC_INTEGER(drep));
 		tree = proto_item_add_subtree(item,ett_dnsserver_DNS_LOG_LEVELS);
 	}
 
@@ -890,7 +899,7 @@ dnsserver_dissect_bitmap_DNS_RPC_PROTOCOLS(tvbuff_t *tvb _U_, int offset _U_, pa
 	ALIGN_TO_4_BYTES;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, 4, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, 4, DREP_ENC_INTEGER(drep));
 		tree = proto_item_add_subtree(item,ett_dnsserver_DNS_RPC_PROTOCOLS);
 	}
 
@@ -1030,7 +1039,7 @@ dnsserver_dissect_bitmap_DNS_SELECT_FLAGS(tvbuff_t *tvb _U_, int offset _U_, pac
 	ALIGN_TO_4_BYTES;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, 4, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, 4, DREP_ENC_INTEGER(drep));
 		tree = proto_item_add_subtree(item,ett_dnsserver_DNS_SELECT_FLAGS);
 	}
 
@@ -1129,7 +1138,7 @@ dnsserver_dissect_bitmap_DNS_RPC_NODE_FLAGS(tvbuff_t *tvb _U_, int offset _U_, p
 	ALIGN_TO_4_BYTES;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, 4, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, 4, DREP_ENC_INTEGER(drep));
 		tree = proto_item_add_subtree(item,ett_dnsserver_DNS_RPC_NODE_FLAGS);
 	}
 
@@ -1295,15 +1304,16 @@ dnsserver_dissect_struct_DNS_RPC_RECORD_NODE_NAME(tvbuff_t *tvb _U_, int offset
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_dnsserver_DNS_RPC_RECORD_NODE_NAME);
 	}
-
+	
 	offset = dnsserver_dissect_element_DNS_RPC_RECORD_NODE_NAME_Name(tvb, offset, pinfo, tree, drep);
 
 
 	proto_item_set_len(item, offset-old_offset);
 
+
 	return offset;
 }
 
@@ -1342,6 +1352,7 @@ dnsserver_dissect_DNS_RPC_RECORD_UNION(tvbuff_t *tvb _U_, int offset _U_, packet
 	}
 	proto_item_set_len(item, offset-old_offset);
 
+
 	return offset;
 }
 
@@ -1365,9 +1376,9 @@ dnsserver_dissect_element_DNS_RPC_RECORD_DataLength(tvbuff_t *tvb _U_, int offse
 }
 
 static int
-dnsserver_dissect_element_DNS_RPC_RECORD_Type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+dnsserver_dissect_element_DNS_RPC_RECORD_Type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_, guint16 *Type)
 {
-	offset = dnsserver_dissect_enum_DNS_RECORD_TYPE(tvb, offset, pinfo, tree, drep, hf_dnsserver_DNS_RPC_RECORD_Type, 0);
+	offset = dnsserver_dissect_enum_DNS_RECORD_TYPE(tvb, offset, pinfo, tree, drep, hf_dnsserver_DNS_RPC_RECORD_Type, Type);
 
 	return offset;
 }
@@ -1413,9 +1424,9 @@ dnsserver_dissect_element_DNS_RPC_RECORD_reserved(tvbuff_t *tvb _U_, int offset
 }
 
 static int
-dnsserver_dissect_element_DNS_RPC_RECORD_record(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+dnsserver_dissect_element_DNS_RPC_RECORD_record(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_, guint16 *Type)
 {
-	offset = dnsserver_dissect_DNS_RPC_RECORD_UNION(tvb, offset, pinfo, tree, drep, hf_dnsserver_DNS_RPC_RECORD_record, 0);
+	offset = dnsserver_dissect_DNS_RPC_RECORD_UNION(tvb, offset, pinfo, tree, drep, hf_dnsserver_DNS_RPC_RECORD_record, *Type);
 
 	return offset;
 }
@@ -1423,8 +1434,10 @@ dnsserver_dissect_element_DNS_RPC_RECORD_record(tvbuff_t *tvb _U_, int offset _U
 int
 dnsserver_dissect_struct_DNS_RPC_RECORD(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_)
 {
+	guint16 Type;
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_4_BYTES;
@@ -1432,13 +1445,13 @@ dnsserver_dissect_struct_DNS_RPC_RECORD(tvbuff_t *tvb _U_, int offset _U_, packe
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_dnsserver_DNS_RPC_RECORD);
 	}
-
+	
 	offset = dnsserver_dissect_element_DNS_RPC_RECORD_DataLength(tvb, offset, pinfo, tree, drep);
 
-	offset = dnsserver_dissect_element_DNS_RPC_RECORD_Type(tvb, offset, pinfo, tree, drep);
+	offset = dnsserver_dissect_element_DNS_RPC_RECORD_Type(tvb, offset, pinfo, tree, drep, &Type);
 
 	offset = dnsserver_dissect_element_DNS_RPC_RECORD_Flags(tvb, offset, pinfo, tree, drep);
 
@@ -1450,11 +1463,16 @@ dnsserver_dissect_struct_DNS_RPC_RECORD(tvbuff_t *tvb _U_, int offset _U_, packe
 
 	offset = dnsserver_dissect_element_DNS_RPC_RECORD_reserved(tvb, offset, pinfo, tree, drep);
 
-	offset = dnsserver_dissect_element_DNS_RPC_RECORD_record(tvb, offset, pinfo, tree, drep);
+	offset = dnsserver_dissect_element_DNS_RPC_RECORD_record(tvb, offset, pinfo, tree, drep, &Type);
 
 
 	proto_item_set_len(item, offset-old_offset);
 
+
+	if (di->call_data->flags & DCERPC_IS_NDR64) {
+		ALIGN_TO_4_BYTES;
+	}
+
 	return offset;
 }
 
@@ -1513,6 +1531,7 @@ dnsserver_dissect_struct_DNS_RPC_NODE(tvbuff_t *tvb _U_, int offset _U_, packet_
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_4_BYTES;
@@ -1520,10 +1539,10 @@ dnsserver_dissect_struct_DNS_RPC_NODE(tvbuff_t *tvb _U_, int offset _U_, packet_
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_dnsserver_DNS_RPC_NODE);
 	}
-
+	
 	offset = dnsserver_dissect_element_DNS_RPC_NODE_Length(tvb, offset, pinfo, tree, drep);
 
 	offset = dnsserver_dissect_element_DNS_RPC_NODE_RecordCount(tvb, offset, pinfo, tree, drep);
@@ -1539,6 +1558,11 @@ dnsserver_dissect_struct_DNS_RPC_NODE(tvbuff_t *tvb _U_, int offset _U_, packet_
 
 	proto_item_set_len(item, offset-old_offset);
 
+
+	if (di->call_data->flags & DCERPC_IS_NDR64) {
+		ALIGN_TO_4_BYTES;
+	}
+
 	return offset;
 }
 
@@ -1577,6 +1601,7 @@ dnsserver_dissect_struct_IP4_ARRAY(tvbuff_t *tvb _U_, int offset _U_, packet_inf
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_4_BYTES;
@@ -1584,10 +1609,10 @@ dnsserver_dissect_struct_IP4_ARRAY(tvbuff_t *tvb _U_, int offset _U_, packet_inf
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_dnsserver_IP4_ARRAY);
 	}
-
+	
 	offset = dnsserver_dissect_element_IP4_ARRAY_AddrCount(tvb, offset, pinfo, tree, drep);
 
 	offset = dnsserver_dissect_element_IP4_ARRAY_AddrArray(tvb, offset, pinfo, tree, drep);
@@ -1595,6 +1620,11 @@ dnsserver_dissect_struct_IP4_ARRAY(tvbuff_t *tvb _U_, int offset _U_, packet_inf
 
 	proto_item_set_len(item, offset-old_offset);
 
+
+	if (di->call_data->flags & DCERPC_IS_NDR64) {
+		ALIGN_TO_4_BYTES;
+	}
+
 	return offset;
 }
 
@@ -2333,17 +2363,18 @@ dnsserver_dissect_struct_DNS_RPC_SERVER_INFO_DOTNET(tvbuff_t *tvb _U_, int offse
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
-	ALIGN_TO_4_BYTES;
+	ALIGN_TO_5_BYTES;
 
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_dnsserver_DNS_RPC_SERVER_INFO_DOTNET);
 	}
-
+	
 	offset = dnsserver_dissect_element_DNS_RPC_SERVER_INFO_DOTNET_RpcStructureVersion(tvb, offset, pinfo, tree, drep);
 
 	offset = dnsserver_dissect_element_DNS_RPC_SERVER_INFO_DOTNET_reserved0(tvb, offset, pinfo, tree, drep);
@@ -2465,6 +2496,11 @@ dnsserver_dissect_struct_DNS_RPC_SERVER_INFO_DOTNET(tvbuff_t *tvb _U_, int offse
 
 	proto_item_set_len(item, offset-old_offset);
 
+
+	if (di->call_data->flags & DCERPC_IS_NDR64) {
+		ALIGN_TO_5_BYTES;
+	}
+
 	return offset;
 }
 
@@ -2593,7 +2629,7 @@ dnsserver_dissect_DNSSRV_RPC_UNION(tvbuff_t *tvb _U_, int offset _U_, packet_inf
 	}
 
 	offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, hf_index, &level);
-	ALIGN_TO_4_BYTES;
+	ALIGN_TO_5_BYTES;
 
 	switch(level) {
 		case DNSSRV_TYPEID_NULL:
@@ -2610,6 +2646,7 @@ dnsserver_dissect_DNSSRV_RPC_UNION(tvbuff_t *tvb _U_, int offset _U_, packet_inf
 	}
 	proto_item_set_len(item, offset-old_offset);
 
+
 	return offset;
 }
 
@@ -2630,6 +2667,7 @@ dnsserver_dissect_struct_DNS_RECORD_BUFFER(tvbuff_t *tvb _U_, int offset _U_, pa
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_4_BYTES;
@@ -2637,15 +2675,20 @@ dnsserver_dissect_struct_DNS_RECORD_BUFFER(tvbuff_t *tvb _U_, int offset _U_, pa
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_dnsserver_DNS_RECORD_BUFFER);
 	}
-
+	
 	offset = dnsserver_dissect_element_DNS_RECORD_BUFFER_rpc_node(tvb, offset, pinfo, tree, drep);
 
 
 	proto_item_set_len(item, offset-old_offset);
 
+
+	if (di->call_data->flags & DCERPC_IS_NDR64) {
+		ALIGN_TO_4_BYTES;
+	}
+
 	return offset;
 }
 
@@ -3149,16 +3192,20 @@ dnsserver_dissect_element_DnssrvEnumRecords2_record_buffer(tvbuff_t *tvb _U_, in
 static int
 dnsserver_dissect_element_DnssrvEnumRecords2_record_buffer_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	guint32 size;
-	int start_offset = offset;
+	dcerpc_info *di = (dcerpc_info*)pinfo->private_data;
+	guint3264 size;
+	int conformant = di->conformant_run;
 	tvbuff_t *subtvb;
-	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
-	if(di->conformant_run)return offset;
-	offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, hf_dnsserver_DnssrvEnumRecords2_record_buffer, &size);
-	proto_tree_add_text(tree, tvb, start_offset, offset, "Subcontext size: %d", size);
-	subtvb = tvb_new_subset(tvb, offset, size, -1);
-	dnsserver_dissect_element_DnssrvEnumRecords2_record_buffer__(subtvb, 0, pinfo, tree, drep);
-	offset = start_offset + size + 4;
+
+	if (!conformant) {
+		guint32 saved_flags = di->call_data->flags;
+		offset = dissect_ndr_uint3264(tvb, offset, pinfo, tree, drep, hf_dnsserver_DnssrvEnumRecords2_record_buffer_, &size);
+		di->call_data->flags &= ~DCERPC_IS_NDR64;
+		subtvb = tvb_new_subset(tvb, offset, size, -1);
+		dnsserver_dissect_element_DnssrvEnumRecords2_record_buffer__(subtvb, 0, pinfo, tree, drep);
+		offset += size;
+		di->call_data->flags = saved_flags;
+	}
 
 	return offset;
 }
@@ -3286,287 +3333,289 @@ static dcerpc_sub_dissector dnsserver_dissectors[] = {
 void proto_register_dcerpc_dnsserver(void)
 {
 	static hf_register_info hf[] = {
-	{ &hf_dnsserver_DnssrvEnumRecords2_start_child,
+	{ &hf_dnsserver_DnssrvEnumRecords2_start_child, 
 	  { "Start Child", "dnsserver.DnssrvEnumRecords2.start_child", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_LocalNetPriority,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_LocalNetPriority, 
 	  { "Localnetpriority", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.LocalNetPriority", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_NODE_FLAGS_DNS_RPC_FLAG_AGING_ON,
+	{ &hf_dnsserver_DNS_RPC_NODE_FLAGS_DNS_RPC_FLAG_AGING_ON, 
 	  { "Dns Rpc Flag Aging On", "dnsserver.DNS_RPC_NODE_FLAGS.DNS_RPC_FLAG_AGING_ON", FT_BOOLEAN, 32, TFS(&DNS_RPC_NODE_FLAGS_DNS_RPC_FLAG_AGING_ON_tfs), ( 0x00020000 ), NULL, HFILL }},
-	{ &hf_dnsserver_DNS_LOG_LEVELS_DNS_LOG_LEVEL_WRITE_THROUGH,
+	{ &hf_dnsserver_DNS_LOG_LEVELS_DNS_LOG_LEVEL_WRITE_THROUGH, 
 	  { "Dns Log Level Write Through", "dnsserver.DNS_LOG_LEVELS.DNS_LOG_LEVEL_WRITE_THROUGH", FT_BOOLEAN, 32, TFS(&DNS_LOG_LEVELS_DNS_LOG_LEVEL_WRITE_THROUGH_tfs), ( 0x80000000 ), NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_reserved0,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_reserved0, 
 	  { "Reserved0", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.reserved0", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_DefaultNoRefreshInterval,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_DefaultNoRefreshInterval, 
 	  { "Defaultnorefreshinterval", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.DefaultNoRefreshInterval", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_LogFilter,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_LogFilter, 
 	  { "Logfilter", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.LogFilter", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_LOG_LEVELS_DNS_LOG_LEVEL_ANSWERS,
+	{ &hf_dnsserver_DNS_LOG_LEVELS_DNS_LOG_LEVEL_ANSWERS, 
 	  { "Dns Log Level Answers", "dnsserver.DNS_LOG_LEVELS.DNS_LOG_LEVEL_ANSWERS", FT_BOOLEAN, 32, TFS(&DNS_LOG_LEVELS_DNS_LOG_LEVEL_ANSWERS_tfs), ( 0x00000200 ), NULL, HFILL }},
-	{ &hf_dnsserver_DNS_SELECT_FLAGS_DNS_RPC_VIEW_ONLY_CHILDREN,
+	{ &hf_dnsserver_DNS_SELECT_FLAGS_DNS_RPC_VIEW_ONLY_CHILDREN, 
 	  { "Dns Rpc View Only Children", "dnsserver.DNS_SELECT_FLAGS.DNS_RPC_VIEW_ONLY_CHILDREN", FT_BOOLEAN, 32, TFS(&DNS_SELECT_FLAGS_DNS_RPC_VIEW_ONLY_CHILDREN_tfs), ( 0x00020000 ), NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_BootMethod,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_BootMethod, 
 	  { "Bootmethod", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.BootMethod", FT_UINT8, BASE_DEC, VALS(dnsserver_DNS_RPC_BOOT_METHOD_vals), 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_SELECT_FLAGS_DNS_RPC_VIEW_AUTHORITY_DATA,
+	{ &hf_dnsserver_DNS_SELECT_FLAGS_DNS_RPC_VIEW_AUTHORITY_DATA, 
 	  { "Dns Rpc View Authority Data", "dnsserver.DNS_SELECT_FLAGS.DNS_RPC_VIEW_AUTHORITY_DATA", FT_BOOLEAN, 32, TFS(&DNS_SELECT_FLAGS_DNS_RPC_VIEW_AUTHORITY_DATA_tfs), ( 0x00000001 ), NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_extension1,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_extension1, 
 	  { "Extension1", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.extension1", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_ListenAddrs,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_ListenAddrs, 
 	  { "Listenaddrs", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.ListenAddrs", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_LOG_LEVELS_DNS_LOG_LEVEL_QUESTIONS,
+	{ &hf_dnsserver_DNS_LOG_LEVELS_DNS_LOG_LEVEL_QUESTIONS, 
 	  { "Dns Log Level Questions", "dnsserver.DNS_LOG_LEVELS.DNS_LOG_LEVEL_QUESTIONS", FT_BOOLEAN, 32, TFS(&DNS_LOG_LEVELS_DNS_LOG_LEVEL_QUESTIONS_tfs), ( 0x00000100 ), NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_NODE_FLAGS_DNS_RPC_FLAG_NODE_COMPLETE,
+	{ &hf_dnsserver_DNS_RPC_NODE_FLAGS_DNS_RPC_FLAG_NODE_COMPLETE, 
 	  { "Dns Rpc Flag Node Complete", "dnsserver.DNS_RPC_NODE_FLAGS.DNS_RPC_FLAG_NODE_COMPLETE", FT_BOOLEAN, 32, TFS(&DNS_RPC_NODE_FLAGS_DNS_RPC_FLAG_NODE_COMPLETE_tfs), ( 0x00800000 ), NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_Forwarders,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_Forwarders, 
 	  { "Forwarders", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.Forwarders", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DnssrvQuery2_server_name,
+	{ &hf_dnsserver_DnssrvQuery2_server_name, 
 	  { "Server Name", "dnsserver.DnssrvQuery2.server_name", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_NODE_FLAGS_DNS_RPC_FLAG_NODE_STICKY,
+	{ &hf_dnsserver_DNS_RPC_NODE_FLAGS_DNS_RPC_FLAG_NODE_STICKY, 
 	  { "Dns Rpc Flag Node Sticky", "dnsserver.DNS_RPC_NODE_FLAGS.DNS_RPC_FLAG_NODE_STICKY", FT_BOOLEAN, 32, TFS(&DNS_RPC_NODE_FLAGS_DNS_RPC_FLAG_NODE_STICKY_tfs), ( 0x01000000 ), NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_WriteAuthorityNs,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_WriteAuthorityNs, 
 	  { "Writeauthorityns", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.WriteAuthorityNs", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_AutoCacheUpdate,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_AutoCacheUpdate, 
 	  { "Autocacheupdate", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.AutoCacheUpdate", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_status,
+	{ &hf_dnsserver_status, 
 	  { "NT Error", "dnsserver.status", FT_UINT32, BASE_HEX, VALS(NT_errors), 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_RECORD_DataLength,
+	{ &hf_dnsserver_DNS_RPC_RECORD_DataLength, 
 	  { "Datalength", "dnsserver.DNS_RPC_RECORD.DataLength", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_AdminConfigured,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_AdminConfigured, 
 	  { "Adminconfigured", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.AdminConfigured", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_LOG_LEVELS_DNS_LOG_LEVEL_RECV,
+	{ &hf_dnsserver_DNS_LOG_LEVELS_DNS_LOG_LEVEL_RECV, 
 	  { "Dns Log Level Recv", "dnsserver.DNS_LOG_LEVELS.DNS_LOG_LEVEL_RECV", FT_BOOLEAN, 32, TFS(&DNS_LOG_LEVELS_DNS_LOG_LEVEL_RECV_tfs), ( 0x00002000 ), NULL, HFILL }},
-	{ &hf_dnsserver_DnssrvEnumRecords2_buffer_length,
+	{ &hf_dnsserver_DnssrvEnumRecords2_buffer_length, 
 	  { "Buffer Length", "dnsserver.DnssrvEnumRecords2.buffer_length", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_extension3,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_extension3, 
 	  { "Extension3", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.extension3", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_PROTOCOLS_DNS_RPC_USE_LPC,
+	{ &hf_dnsserver_DNS_RPC_PROTOCOLS_DNS_RPC_USE_LPC, 
 	  { "Dns Rpc Use Lpc", "dnsserver.DNS_RPC_PROTOCOLS.DNS_RPC_USE_LPC", FT_BOOLEAN, 32, TFS(&DNS_RPC_PROTOCOLS_DNS_RPC_USE_LPC_tfs), ( 0x00000004 ), NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_NAME_name,
+	{ &hf_dnsserver_DNS_RPC_NAME_name, 
 	  { "Name", "dnsserver.DNS_RPC_NAME.name", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_NODE_FLAGS_DNS_RPC_FLAG_RECORD_CREATE_PTR,
+	{ &hf_dnsserver_DNS_RPC_NODE_FLAGS_DNS_RPC_FLAG_RECORD_CREATE_PTR, 
 	  { "Dns Rpc Flag Record Create Ptr", "dnsserver.DNS_RPC_NODE_FLAGS.DNS_RPC_FLAG_RECORD_CREATE_PTR", FT_BOOLEAN, 32, TFS(&DNS_RPC_NODE_FLAGS_DNS_RPC_FLAG_RECORD_CREATE_PTR_tfs), ( 0x02000000 ), NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_RpcProtocol,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_RpcProtocol, 
 	  { "Rpcprotocol", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.RpcProtocol", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_NODE_Childcount,
+	{ &hf_dnsserver_DNS_RPC_NODE_Childcount, 
 	  { "Childcount", "dnsserver.DNS_RPC_NODE.Childcount", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_RpcStructureVersion,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_RpcStructureVersion, 
 	  { "Rpcstructureversion", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.RpcStructureVersion", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_DefaultAgingState,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_DefaultAgingState, 
 	  { "Defaultagingstate", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.DefaultAgingState", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_DsDsaVersion,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_DsDsaVersion, 
 	  { "Dsdsaversion", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.DsDsaVersion", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_extension0,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_extension0, 
 	  { "Extension0", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.extension0", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_RoundRobin,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_RoundRobin, 
 	  { "Roundrobin", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.RoundRobin", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_BindSecondaries,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_BindSecondaries, 
 	  { "Bindsecondaries", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.BindSecondaries", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_extension5,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_extension5, 
 	  { "Extension5", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.extension5", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_AutoReverseZones,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_AutoReverseZones, 
 	  { "Autoreversezones", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.AutoReverseZones", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DnssrvQuery2_data,
+	{ &hf_dnsserver_DnssrvQuery2_data, 
 	  { "Data", "dnsserver.DnssrvQuery2.data", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNSSRV_RPC_UNION_dword,
+	{ &hf_dnsserver_DNSSRV_RPC_UNION_dword, 
 	  { "Dword", "dnsserver.DNSSRV_RPC_UNION.dword", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_VERSION_OSMajorVersion,
+	{ &hf_dnsserver_DNS_RPC_VERSION_OSMajorVersion, 
 	  { "Osmajorversion", "dnsserver.DNS_RPC_VERSION.OSMajorVersion", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_DsDomainVersion,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_DsDomainVersion, 
 	  { "Dsdomainversion", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.DsDomainVersion", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_NODE_FLAGS_DNS_RPC_FLAG_ZONE_DELEGATION,
+	{ &hf_dnsserver_DNS_RPC_NODE_FLAGS_DNS_RPC_FLAG_ZONE_DELEGATION, 
 	  { "Dns Rpc Flag Zone Delegation", "dnsserver.DNS_RPC_NODE_FLAGS.DNS_RPC_FLAG_ZONE_DELEGATION", FT_BOOLEAN, 32, TFS(&DNS_RPC_NODE_FLAGS_DNS_RPC_FLAG_ZONE_DELEGATION_tfs), ( 0x10000000 ), NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_RecursionTimeout,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_RecursionTimeout, 
 	  { "Recursiontimeout", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.RecursionTimeout", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_LOG_LEVELS_DNS_LOG_LEVEL_UPDATE,
+	{ &hf_dnsserver_DnssrvEnumRecords2_record_buffer_, 
+	  { "Subcontext length", "dnsserver.DnssrvEnumRecords2.subcontext", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
+	{ &hf_dnsserver_DNS_LOG_LEVELS_DNS_LOG_LEVEL_UPDATE, 
 	  { "Dns Log Level Update", "dnsserver.DNS_LOG_LEVELS.DNS_LOG_LEVEL_UPDATE", FT_BOOLEAN, 32, TFS(&DNS_LOG_LEVELS_DNS_LOG_LEVEL_UPDATE_tfs), ( 0x00000020 ), NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_LooseWildcarding,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_LooseWildcarding, 
 	  { "Loosewildcarding", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.LooseWildcarding", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_DsContainer,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_DsContainer, 
 	  { "Dscontainer", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.DsContainer", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DnssrvQuery2_client_version,
+	{ &hf_dnsserver_DnssrvQuery2_client_version, 
 	  { "Client Version", "dnsserver.DnssrvQuery2.client_version", FT_UINT32, BASE_DEC, VALS(dnsserver_DNS_RPC_CLIENT_VERSION_vals), 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_SELECT_FLAGS_DNS_RPC_VIEW_ADDITIONAL_DATA,
+	{ &hf_dnsserver_DNS_SELECT_FLAGS_DNS_RPC_VIEW_ADDITIONAL_DATA, 
 	  { "Dns Rpc View Additional Data", "dnsserver.DNS_SELECT_FLAGS.DNS_RPC_VIEW_ADDITIONAL_DATA", FT_BOOLEAN, 32, TFS(&DNS_SELECT_FLAGS_DNS_RPC_VIEW_ADDITIONAL_DATA_tfs), ( 0x00000010 ), NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_NODE_records,
+	{ &hf_dnsserver_DNS_RPC_NODE_records, 
 	  { "Records", "dnsserver.DNS_RPC_NODE.records", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_RECORD_NODE_NAME_Name,
+	{ &hf_dnsserver_DNS_RPC_RECORD_NODE_NAME_Name, 
 	  { "Name", "dnsserver.DNS_RPC_RECORD_NODE_NAME.Name", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_RECORD_TimeStamp,
+	{ &hf_dnsserver_DNS_RPC_RECORD_TimeStamp, 
 	  { "Timestamp", "dnsserver.DNS_RPC_RECORD.TimeStamp", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_RECORD_TtlSeconds,
+	{ &hf_dnsserver_DNS_RPC_RECORD_TtlSeconds, 
 	  { "Ttlseconds", "dnsserver.DNS_RPC_RECORD.TtlSeconds", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_VERSION_OSMinorVersion,
+	{ &hf_dnsserver_DNS_RPC_VERSION_OSMinorVersion, 
 	  { "Osminorversion", "dnsserver.DNS_RPC_VERSION.OSMinorVersion", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_NameCheckFlag,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_NameCheckFlag, 
 	  { "Namecheckflag", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.NameCheckFlag", FT_UINT32, BASE_DEC, VALS(dnsserver_DNS_NAME_CHECK_FLAGS_vals), 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_DomainName,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_DomainName, 
 	  { "Domainname", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.DomainName", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_NODE_FLAGS_DNS_RPC_FLAG_AUTH_ZONE_ROOT,
+	{ &hf_dnsserver_DNS_RPC_NODE_FLAGS_DNS_RPC_FLAG_AUTH_ZONE_ROOT, 
 	  { "Dns Rpc Flag Auth Zone Root", "dnsserver.DNS_RPC_NODE_FLAGS.DNS_RPC_FLAG_AUTH_ZONE_ROOT", FT_BOOLEAN, 32, TFS(&DNS_RPC_NODE_FLAGS_DNS_RPC_FLAG_AUTH_ZONE_ROOT_tfs), ( 0x20000000 ), NULL, HFILL }},
-	{ &hf_dnsserver_DnssrvEnumRecords2_filter_stop,
+	{ &hf_dnsserver_DnssrvEnumRecords2_filter_stop, 
 	  { "Filter Stop", "dnsserver.DnssrvEnumRecords2.filter_stop", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DnssrvEnumRecords2_setting_flags,
+	{ &hf_dnsserver_DnssrvEnumRecords2_setting_flags, 
 	  { "Setting Flags", "dnsserver.DnssrvEnumRecords2.setting_flags", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_LOG_LEVELS_DNS_LOG_LEVEL_SEND,
+	{ &hf_dnsserver_DNS_LOG_LEVELS_DNS_LOG_LEVEL_SEND, 
 	  { "Dns Log Level Send", "dnsserver.DNS_LOG_LEVELS.DNS_LOG_LEVEL_SEND", FT_BOOLEAN, 32, TFS(&DNS_LOG_LEVELS_DNS_LOG_LEVEL_SEND_tfs), ( 0x00001000 ), NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_DomainDirectoryPartition,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_DomainDirectoryPartition, 
 	  { "Domaindirectorypartition", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.DomainDirectoryPartition", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_NoRecursion,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_NoRecursion, 
 	  { "Norecursion", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.NoRecursion", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DnssrvEnumRecords2_client_version,
+	{ &hf_dnsserver_DnssrvEnumRecords2_client_version, 
 	  { "Client Version", "dnsserver.DnssrvEnumRecords2.client_version", FT_UINT32, BASE_DEC, VALS(dnsserver_DNS_RPC_CLIENT_VERSION_vals), 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_ServerAddrs,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_ServerAddrs, 
 	  { "Serveraddrs", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.ServerAddrs", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DnssrvEnumRecords2_select_flag,
+	{ &hf_dnsserver_DnssrvEnumRecords2_select_flag, 
 	  { "Select Flag", "dnsserver.DnssrvEnumRecords2.select_flag", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_LogFilePath,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_LogFilePath, 
 	  { "Logfilepath", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.LogFilePath", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_PROTOCOLS_DNS_RPC_USE_NAMED_PIPE,
+	{ &hf_dnsserver_DNS_RPC_PROTOCOLS_DNS_RPC_USE_NAMED_PIPE, 
 	  { "Dns Rpc Use Named Pipe", "dnsserver.DNS_RPC_PROTOCOLS.DNS_RPC_USE_NAMED_PIPE", FT_BOOLEAN, 32, TFS(&DNS_RPC_PROTOCOLS_DNS_RPC_USE_NAMED_PIPE_tfs), ( 0x00000002 ), NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_NODE_NodeName,
+	{ &hf_dnsserver_DNS_RPC_NODE_NodeName, 
 	  { "Nodename", "dnsserver.DNS_RPC_NODE.NodeName", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_SELECT_FLAGS_DNS_RPC_VIEW_NO_CHILDREN,
+	{ &hf_dnsserver_DNS_SELECT_FLAGS_DNS_RPC_VIEW_NO_CHILDREN, 
 	  { "Dns Rpc View No Children", "dnsserver.DNS_SELECT_FLAGS.DNS_RPC_VIEW_NO_CHILDREN", FT_BOOLEAN, 32, TFS(&DNS_SELECT_FLAGS_DNS_RPC_VIEW_NO_CHILDREN_tfs), ( 0x00010000 ), NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_extension4,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_extension4, 
 	  { "Extension4", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.extension4", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_IP4_ARRAY_AddrCount,
+	{ &hf_dnsserver_IP4_ARRAY_AddrCount, 
 	  { "Addrcount", "dnsserver.IP4_ARRAY.AddrCount", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_ForestName,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_ForestName, 
 	  { "Forestname", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.ForestName", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DnssrvEnumRecords2_record_type,
+	{ &hf_dnsserver_DnssrvEnumRecords2_record_type, 
 	  { "Record Type", "dnsserver.DnssrvEnumRecords2.record_type", FT_UINT16, BASE_DEC, VALS(dnsserver_DNS_RECORD_TYPE_vals), 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_LOG_LEVELS_DNS_LOG_LEVEL_NOTIFY,
+	{ &hf_dnsserver_DNS_LOG_LEVELS_DNS_LOG_LEVEL_NOTIFY, 
 	  { "Dns Log Level Notify", "dnsserver.DNS_LOG_LEVELS.DNS_LOG_LEVEL_NOTIFY", FT_BOOLEAN, 32, TFS(&DNS_LOG_LEVELS_DNS_LOG_LEVEL_NOTIFY_tfs), ( 0x00000010 ), NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_RECORD_Flags,
+	{ &hf_dnsserver_DNS_RPC_RECORD_Flags, 
 	  { "Flags", "dnsserver.DNS_RPC_RECORD.Flags", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DnssrvEnumRecords2_server_name,
+	{ &hf_dnsserver_DnssrvEnumRecords2_server_name, 
 	  { "Server Name", "dnsserver.DnssrvEnumRecords2.server_name", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DnssrvEnumRecords2_record_buffer,
+	{ &hf_dnsserver_DnssrvEnumRecords2_record_buffer, 
 	  { "Record Buffer", "dnsserver.DnssrvEnumRecords2.record_buffer", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DnssrvEnumRecords2_node_name,
+	{ &hf_dnsserver_DnssrvEnumRecords2_node_name, 
 	  { "Node Name", "dnsserver.DnssrvEnumRecords2.node_name", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RECORD_BUFFER_rpc_node,
+	{ &hf_dnsserver_DNS_RECORD_BUFFER_rpc_node, 
 	  { "Rpc Node", "dnsserver.DNS_RECORD_BUFFER.rpc_node", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_LastScavengeTime,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_LastScavengeTime, 
 	  { "Lastscavengetime", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.LastScavengeTime", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_NODE_Length,
+	{ &hf_dnsserver_DNS_RPC_NODE_Length, 
 	  { "Length", "dnsserver.DNS_RPC_NODE.Length", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DnssrvEnumRecords2_filter_start,
+	{ &hf_dnsserver_DnssrvEnumRecords2_filter_start, 
 	  { "Filter Start", "dnsserver.DnssrvEnumRecords2.filter_start", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_ForestDirectoryPartition,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_ForestDirectoryPartition, 
 	  { "Forestdirectorypartition", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.ForestDirectoryPartition", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DnssrvEnumRecords2_zone,
+	{ &hf_dnsserver_DnssrvEnumRecords2_zone, 
 	  { "Zone", "dnsserver.DnssrvEnumRecords2.zone", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_reserve_array,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_reserve_array, 
 	  { "Reserve Array", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.reserve_array", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_NODE_FLAGS_DNS_RPC_FLAG_RECORD_TTL_CHANGE,
+	{ &hf_dnsserver_DNS_RPC_NODE_FLAGS_DNS_RPC_FLAG_RECORD_TTL_CHANGE, 
 	  { "Dns Rpc Flag Record Ttl Change", "dnsserver.DNS_RPC_NODE_FLAGS.DNS_RPC_FLAG_RECORD_TTL_CHANGE", FT_BOOLEAN, 32, TFS(&DNS_RPC_NODE_FLAGS_DNS_RPC_FLAG_RECORD_TTL_CHANGE_tfs), ( 0x04000000 ), NULL, HFILL }},
-	{ &hf_dnsserver_DNS_SELECT_FLAGS_DNS_RPC_VIEW_CACHE_DATA,
+	{ &hf_dnsserver_DNS_SELECT_FLAGS_DNS_RPC_VIEW_CACHE_DATA, 
 	  { "Dns Rpc View Cache Data", "dnsserver.DNS_SELECT_FLAGS.DNS_RPC_VIEW_CACHE_DATA", FT_BOOLEAN, 32, TFS(&DNS_SELECT_FLAGS_DNS_RPC_VIEW_CACHE_DATA_tfs), ( 0x00000002 ), NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_ForwardTimeout,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_ForwardTimeout, 
 	  { "Forwardtimeout", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.ForwardTimeout", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_reserve_array2,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_reserve_array2, 
 	  { "Reserve Array2", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.reserve_array2", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_extension2,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_extension2, 
 	  { "Extension2", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.extension2", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_RECORD_UNION_NodeName,
+	{ &hf_dnsserver_DNS_RPC_RECORD_UNION_NodeName, 
 	  { "Nodename", "dnsserver.DNS_RPC_RECORD_UNION.NodeName", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_LOG_LEVELS_DNS_LOG_LEVEL_FULL_PACKETS,
+	{ &hf_dnsserver_DNS_LOG_LEVELS_DNS_LOG_LEVEL_FULL_PACKETS, 
 	  { "Dns Log Level Full Packets", "dnsserver.DNS_LOG_LEVELS.DNS_LOG_LEVEL_FULL_PACKETS", FT_BOOLEAN, 32, TFS(&DNS_LOG_LEVELS_DNS_LOG_LEVEL_FULL_PACKETS_tfs), ( 0x01000000 ), NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_RecursionRetry,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_RecursionRetry, 
 	  { "Recursionretry", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.RecursionRetry", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DnssrvQuery2_zone,
+	{ &hf_dnsserver_DnssrvQuery2_zone, 
 	  { "Zone", "dnsserver.DnssrvQuery2.zone", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_DefaultRefreshInterval,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_DefaultRefreshInterval, 
 	  { "Defaultrefreshinterval", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.DefaultRefreshInterval", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_NODE_FLAGS_DNS_RPC_FLAG_ZONE_ROOT,
+	{ &hf_dnsserver_DNS_RPC_NODE_FLAGS_DNS_RPC_FLAG_ZONE_ROOT, 
 	  { "Dns Rpc Flag Zone Root", "dnsserver.DNS_RPC_NODE_FLAGS.DNS_RPC_FLAG_ZONE_ROOT", FT_BOOLEAN, 32, TFS(&DNS_RPC_NODE_FLAGS_DNS_RPC_FLAG_ZONE_ROOT_tfs), ( 0x40000000 ), NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_StrictFileParsing,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_StrictFileParsing, 
 	  { "Strictfileparsing", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.StrictFileParsing", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_SELECT_FLAGS_DNS_RPC_VIEW_ROOT_HINT_DATA,
+	{ &hf_dnsserver_DNS_SELECT_FLAGS_DNS_RPC_VIEW_ROOT_HINT_DATA, 
 	  { "Dns Rpc View Root Hint Data", "dnsserver.DNS_SELECT_FLAGS.DNS_RPC_VIEW_ROOT_HINT_DATA", FT_BOOLEAN, 32, TFS(&DNS_SELECT_FLAGS_DNS_RPC_VIEW_ROOT_HINT_DATA_tfs), ( 0x00000008 ), NULL, HFILL }},
-	{ &hf_dnsserver_DNS_SELECT_FLAGS_DNS_RPC_VIEW_GLUE_DATA,
+	{ &hf_dnsserver_DNS_SELECT_FLAGS_DNS_RPC_VIEW_GLUE_DATA, 
 	  { "Dns Rpc View Glue Data", "dnsserver.DNS_SELECT_FLAGS.DNS_RPC_VIEW_GLUE_DATA", FT_BOOLEAN, 32, TFS(&DNS_SELECT_FLAGS_DNS_RPC_VIEW_GLUE_DATA_tfs), ( 0x00000004 ), NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_DsForestVersion,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_DsForestVersion, 
 	  { "Dsforestversion", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.DsForestVersion", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNSSRV_RPC_UNION_ServerInfoDotnet,
+	{ &hf_dnsserver_DNSSRV_RPC_UNION_ServerInfoDotnet, 
 	  { "Serverinfodotnet", "dnsserver.DNSSRV_RPC_UNION.ServerInfoDotnet", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_LogFileMaxSize,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_LogFileMaxSize, 
 	  { "Logfilemaxsize", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.LogFileMaxSize", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_MaxCacheTtl,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_MaxCacheTtl, 
 	  { "Maxcachettl", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.MaxCacheTtl", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_RECORD_record,
+	{ &hf_dnsserver_DNS_RPC_RECORD_record, 
 	  { "Record", "dnsserver.DNS_RPC_RECORD.record", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_ScavengingInterval,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_ScavengingInterval, 
 	  { "Scavenginginterval", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.ScavengingInterval", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_RecurseAfterForwarding,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_RecurseAfterForwarding, 
 	  { "Recurseafterforwarding", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.RecurseAfterForwarding", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_NODE_FLAGS_DNS_RPC_FLAG_SUPPRESS_NOTIFY,
+	{ &hf_dnsserver_DNS_RPC_NODE_FLAGS_DNS_RPC_FLAG_SUPPRESS_NOTIFY, 
 	  { "Dns Rpc Flag Suppress Notify", "dnsserver.DNS_RPC_NODE_FLAGS.DNS_RPC_FLAG_SUPPRESS_NOTIFY", FT_BOOLEAN, 32, TFS(&DNS_RPC_NODE_FLAGS_DNS_RPC_FLAG_SUPPRESS_NOTIFY_tfs), ( 0x00010000 ), NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_Version,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_Version, 
 	  { "Version", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.Version", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DnssrvQuery2_setting_flags,
+	{ &hf_dnsserver_DnssrvQuery2_setting_flags, 
 	  { "Setting Flags", "dnsserver.DnssrvQuery2.setting_flags", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_RECORD_reserved,
+	{ &hf_dnsserver_DNS_RPC_RECORD_reserved, 
 	  { "Reserved", "dnsserver.DNS_RPC_RECORD.reserved", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_NODE_FLAGS_DNS_RPC_FLAG_CACHE_DATA,
+	{ &hf_dnsserver_DNS_RPC_NODE_FLAGS_DNS_RPC_FLAG_CACHE_DATA, 
 	  { "Dns Rpc Flag Cache Data", "dnsserver.DNS_RPC_NODE_FLAGS.DNS_RPC_FLAG_CACHE_DATA", FT_BOOLEAN, 32, TFS(&DNS_RPC_NODE_FLAGS_DNS_RPC_FLAG_CACHE_DATA_tfs), ( 0x80000000 ), NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_ServerName,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_ServerName, 
 	  { "Servername", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.ServerName", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_AddressAnswerLimit,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_AddressAnswerLimit, 
 	  { "Addressanswerlimit", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.AddressAnswerLimit", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_AllowUpdate,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_AllowUpdate, 
 	  { "Allowupdate", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.AllowUpdate", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_PROTOCOLS_DNS_RPC_USE_TCPIP,
+	{ &hf_dnsserver_DNS_RPC_PROTOCOLS_DNS_RPC_USE_TCPIP, 
 	  { "Dns Rpc Use Tcpip", "dnsserver.DNS_RPC_PROTOCOLS.DNS_RPC_USE_TCPIP", FT_BOOLEAN, 32, TFS(&DNS_RPC_PROTOCOLS_DNS_RPC_USE_TCPIP_tfs), ( 0x00000001 ), NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_SecureResponses,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_SecureResponses, 
 	  { "Secureresponses", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.SecureResponses", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_IP4_ARRAY_AddrArray,
+	{ &hf_dnsserver_IP4_ARRAY_AddrArray, 
 	  { "Addrarray", "dnsserver.IP4_ARRAY.AddrArray", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_VERSION_ServicePackVersion,
+	{ &hf_dnsserver_DNS_RPC_VERSION_ServicePackVersion, 
 	  { "Servicepackversion", "dnsserver.DNS_RPC_VERSION.ServicePackVersion", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_DebugLevel,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_DebugLevel, 
 	  { "Debuglevel", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.DebugLevel", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_RECORD_Type,
+	{ &hf_dnsserver_DNS_RPC_RECORD_Type, 
 	  { "Type", "dnsserver.DNS_RPC_RECORD.Type", FT_UINT16, BASE_DEC, VALS(dnsserver_DNS_RECORD_TYPE_vals), 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNSSRV_RPC_UNION_null,
+	{ &hf_dnsserver_DNSSRV_RPC_UNION_null, 
 	  { "Null", "dnsserver.DNSSRV_RPC_UNION.null", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_NAME_Name,
+	{ &hf_dnsserver_DNS_RPC_NAME_Name, 
 	  { "Name", "dnsserver.DNS_RPC_NAME.Name", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_LogLevel,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_LogLevel, 
 	  { "Loglevel", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.LogLevel", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_NODE_RecordCount,
+	{ &hf_dnsserver_DNS_RPC_NODE_RecordCount, 
 	  { "Recordcount", "dnsserver.DNS_RPC_NODE.RecordCount", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_NODE_Flags,
+	{ &hf_dnsserver_DNS_RPC_NODE_Flags, 
 	  { "Flags", "dnsserver.DNS_RPC_NODE.Flags", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_LOG_LEVELS_DNS_LOG_LEVEL_QUERY,
+	{ &hf_dnsserver_DNS_LOG_LEVELS_DNS_LOG_LEVEL_QUERY, 
 	  { "Dns Log Level Query", "dnsserver.DNS_LOG_LEVELS.DNS_LOG_LEVEL_QUERY", FT_BOOLEAN, 32, TFS(&DNS_LOG_LEVELS_DNS_LOG_LEVEL_QUERY_tfs), ( 0x00000001 ), NULL, HFILL }},
-	{ &hf_dnsserver_DNS_LOG_LEVELS_DNS_LOG_LEVEL_UDP,
+	{ &hf_dnsserver_DNS_LOG_LEVELS_DNS_LOG_LEVEL_UDP, 
 	  { "Dns Log Level Udp", "dnsserver.DNS_LOG_LEVELS.DNS_LOG_LEVEL_UDP", FT_BOOLEAN, 32, TFS(&DNS_LOG_LEVELS_DNS_LOG_LEVEL_UDP_tfs), ( 0x00004000 ), NULL, HFILL }},
-	{ &hf_dnsserver_DNS_LOG_LEVELS_DNS_LOG_LEVEL_TCP,
+	{ &hf_dnsserver_DNS_LOG_LEVELS_DNS_LOG_LEVEL_TCP, 
 	  { "Dns Log Level Tcp", "dnsserver.DNS_LOG_LEVELS.DNS_LOG_LEVEL_TCP", FT_BOOLEAN, 32, TFS(&DNS_LOG_LEVELS_DNS_LOG_LEVEL_TCP_tfs), ( 0x00008000 ), NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_DsPollingInterval,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_DsPollingInterval, 
 	  { "Dspollinginterval", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.DsPollingInterval", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_opnum,
+	{ &hf_dnsserver_opnum, 
 	  { "Operation", "dnsserver.opnum", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_DsAvailable,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_DsAvailable, 
 	  { "Dsavailable", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.DsAvailable", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_ForwardDelegations,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_ForwardDelegations, 
 	  { "Forwarddelegations", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.ForwardDelegations", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_RECORD_Serial,
+	{ &hf_dnsserver_DNS_RPC_RECORD_Serial, 
 	  { "Serial", "dnsserver.DNS_RPC_RECORD.Serial", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DnssrvQuery2_operation,
+	{ &hf_dnsserver_DnssrvQuery2_operation, 
 	  { "Operation", "dnsserver.DnssrvQuery2.operation", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DnssrvQuery2_type_id,
+	{ &hf_dnsserver_DnssrvQuery2_type_id, 
 	  { "Type Id", "dnsserver.DnssrvQuery2.type_id", FT_UINT32, BASE_DEC, VALS(dnsserver_DnssrvRpcTypeId_vals), 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_NAME_NameLength,
+	{ &hf_dnsserver_DNS_RPC_NAME_NameLength, 
 	  { "Namelength", "dnsserver.DNS_RPC_NAME.NameLength", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_NODE_FLAGS_DNS_RPC_FLAG_OPEN_ACL,
+	{ &hf_dnsserver_DNS_RPC_NODE_FLAGS_DNS_RPC_FLAG_OPEN_ACL, 
 	  { "Dns Rpc Flag Open Acl", "dnsserver.DNS_RPC_NODE_FLAGS.DNS_RPC_FLAG_OPEN_ACL", FT_BOOLEAN, 32, TFS(&DNS_RPC_NODE_FLAGS_DNS_RPC_FLAG_OPEN_ACL_tfs), ( 0x00040000 ), NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_NODE_FLAGS_DNS_RPC_FLAG_RECOR_DEFAULT_TTL,
+	{ &hf_dnsserver_DNS_RPC_NODE_FLAGS_DNS_RPC_FLAG_RECOR_DEFAULT_TTL, 
 	  { "Dns Rpc Flag Recor Default Ttl", "dnsserver.DNS_RPC_NODE_FLAGS.DNS_RPC_FLAG_RECOR_DEFAULT_TTL", FT_BOOLEAN, 32, TFS(&DNS_RPC_NODE_FLAGS_DNS_RPC_FLAG_RECOR_DEFAULT_TTL_tfs), ( 0x08000000 ), NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_EventLogLevel,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_EventLogLevel, 
 	  { "Eventloglevel", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.EventLogLevel", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_LocalNetPriorityNetmask,
+	{ &hf_dnsserver_DNS_RPC_SERVER_INFO_DOTNET_LocalNetPriorityNetmask, 
 	  { "Localnetprioritynetmask", "dnsserver.DNS_RPC_SERVER_INFO_DOTNET.LocalNetPriorityNetmask", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
 	};
 
-- 
1.8.1.2

>From 16b54de5373ce73ca1a6e523d0406e76f1f41d07 Mon Sep 17 00:00:00 2001
From: Matthieu Patou <[email protected]>
Date: Sun, 6 Oct 2013 18:25:48 -0700
Subject: [PATCH 15/21] Update generated code for winreg

Signed-off-by: Matthieu Patou <[email protected]>
---
 epan/dissectors/packet-dcerpc-winreg.c | 1797 ++++++++++++++++++++++++--------
 epan/dissectors/packet-dcerpc-winreg.h |   31 +-
 2 files changed, 1399 insertions(+), 429 deletions(-)

diff --git a/epan/dissectors/packet-dcerpc-winreg.c b/epan/dissectors/packet-dcerpc-winreg.c
index 046737d..c65d225 100644
--- a/epan/dissectors/packet-dcerpc-winreg.c
+++ b/epan/dissectors/packet-dcerpc-winreg.c
@@ -12,7 +12,6 @@
 
 
 #include "config.h"
-
 #ifdef _MSC_VER
 #pragma warning(disable:4005)
 #pragma warning(disable:4013)
@@ -31,11 +30,16 @@
 
 /* Ett declarations */
 static gint ett_dcerpc_winreg = -1;
+static gint ett_winreg_security_secinfo = -1;
 static gint ett_winreg_winreg_AccessMask = -1;
 static gint ett_winreg_winreg_String = -1;
 static gint ett_winreg_KeySecurityData = -1;
 static gint ett_winreg_winreg_SecBuf = -1;
+static gint ett_winreg_winreg_KeyOptions = -1;
 static gint ett_winreg_winreg_StringBuf = -1;
+static gint ett_winreg_winreg_ValNameBuf = -1;
+static gint ett_winreg_winreg_NotifyChangeType = -1;
+static gint ett_winreg_winreg_RestoreKeyFlags = -1;
 static gint ett_winreg_KeySecurityAttribute = -1;
 static gint ett_winreg_QueryMultipleValue = -1;
 
@@ -44,115 +48,152 @@ static gint ett_winreg_QueryMultipleValue = -1;
 static gint hf_winreg_winreg_AccessMask_KEY_ENUMERATE_SUB_KEYS = -1;
 static gint hf_winreg_winreg_NotifyChangeKeyValue_string2 = -1;
 static gint hf_winreg_winreg_InitiateSystemShutdown_message = -1;
-static gint hf_winreg_KeySecurityData_size = -1;
 static gint hf_winreg_winreg_String_name = -1;
 static gint hf_winreg_winreg_InitiateSystemShutdownEx_message = -1;
-static gint hf_winreg_winreg_InitiateSystemShutdown_reboot = -1;
 static gint hf_winreg_winreg_EnumValue_enum_index = -1;
 static gint hf_winreg_access_mask = -1;
-static gint hf_winreg_winreg_QueryMultipleValues_key_handle = -1;
-static gint hf_winreg_winreg_LoadKey_keyname = -1;
-static gint hf_winreg_winreg_EnumKey_name = -1;
 static gint hf_winreg_winreg_CreateKey_options = -1;
-static gint hf_winreg_winreg_EnumValue_type = -1;
 static gint hf_winreg_winreg_InitiateSystemShutdownEx_timeout = -1;
-static gint hf_winreg_winreg_EnumKey_last_changed_time = -1;
-static gint hf_winreg_winreg_QueryValue_size = -1;
-static gint hf_winreg_winreg_EnumValue_size = -1;
 static gint hf_winreg_handle = -1;
-static gint hf_winreg_winreg_SaveKey_sec_attrib = -1;
 static gint hf_winreg_winreg_QueryInfoKey_max_valnamelen = -1;
 static gint hf_winreg_winreg_SecBuf_length = -1;
-static gint hf_winreg_winreg_InitiateSystemShutdownEx_reboot = -1;
-static gint hf_winreg_sd = -1;
-static gint hf_winreg_winreg_SaveKey_filename = -1;
+static gint hf_winreg_winreg_InitiateSystemShutdown_do_reboot = -1;
+static gint hf_winreg_winreg_DeleteKeyEx_handle = -1;
 static gint hf_winreg_winreg_QueryMultipleValues_buffer_size = -1;
-static gint hf_winreg_winreg_QueryValue_data = -1;
 static gint hf_winreg_winreg_CreateKey_new_handle = -1;
-static gint hf_winreg_winreg_QueryInfoKey_max_subkeysize = -1;
-static gint hf_winreg_winreg_InitiateSystemShutdown_hostname = -1;
-static gint hf_winreg_KeySecurityData_data = -1;
+static gint hf_winreg_winreg_QueryMultipleValues2_needed = -1;
+static gint hf_winreg_QueryMultipleValue_ve_valuelen = -1;
 static gint hf_winreg_KeySecurityAttribute_sec_data = -1;
-static gint hf_winreg_winreg_OpenKey_access_mask = -1;
-static gint hf_winreg_QueryMultipleValue_name = -1;
 static gint hf_winreg_winreg_GetKeySecurity_sec_info = -1;
+static gint hf_winreg_winreg_SaveKeyEx_handle = -1;
+static gint hf_winreg_winreg_KeyOptions_REG_OPTION_VOLATILE = -1;
+static gint hf_winreg_winreg_QueryMultipleValues2_num_values = -1;
+static gint hf_winreg_winreg_SetKeySecurity_sec_info = -1;
 static gint hf_winreg_winreg_StringBuf_size = -1;
 static gint hf_winreg_winreg_SecBuf_sd = -1;
 static gint hf_winreg_winreg_QueryInfoKey_secdescsize = -1;
-static gint hf_winreg_winreg_OpenKey_keyname = -1;
-static gint hf_winreg_QueryMultipleValue_type = -1;
+static gint hf_winreg_winreg_NotifyChangeType_REG_NOTIFY_CHANGE_SECURITY = -1;
 static gint hf_winreg_winreg_SetValue_name = -1;
 static gint hf_winreg_winreg_RestoreKey_flags = -1;
-static gint hf_winreg_winreg_NotifyChangeKeyValue_watch_subtree = -1;
+static gint hf_winreg_QueryMultipleValue_ve_type = -1;
 static gint hf_winreg_winreg_CreateKey_secdesc = -1;
+static gint hf_winreg_winreg_DeleteKeyEx_reserved = -1;
 static gint hf_winreg_winreg_InitiateSystemShutdownEx_force_apps = -1;
 static gint hf_winreg_winreg_SetValue_type = -1;
-static gint hf_winreg_winreg_CreateKey_name = -1;
-static gint hf_winreg_KeySecurityData_len = -1;
-static gint hf_winreg_winreg_String_name_len = -1;
 static gint hf_winreg_opnum = -1;
-static gint hf_winreg_winreg_DeleteKey_key = -1;
 static gint hf_winreg_winreg_EnumValue_name = -1;
 static gint hf_winreg_winreg_LoadKey_filename = -1;
 static gint hf_winreg_winreg_AccessMask_KEY_CREATE_LINK = -1;
 static gint hf_winreg_winreg_DeleteValue_value = -1;
-static gint hf_winreg_system_name = -1;
-static gint hf_winreg_QueryMultipleValue_length = -1;
-static gint hf_winreg_winreg_QueryMultipleValues_num_values = -1;
+static gint hf_winreg_winreg_QueryMultipleValues2_offered = -1;
+static gint hf_winreg_winreg_QueryMultipleValues_values_in = -1;
 static gint hf_winreg_winreg_AccessMask_KEY_NOTIFY = -1;
-static gint hf_winreg_KeySecurityAttribute_data_size = -1;
 static gint hf_winreg_winreg_OpenKey_parent_handle = -1;
-static gint hf_winreg_winreg_StringBuf_name = -1;
-static gint hf_winreg_winreg_NotifyChangeKeyValue_unknown2 = -1;
 static gint hf_winreg_winreg_QueryInfoKey_num_subkeys = -1;
-static gint hf_winreg_sd_offset = -1;
 static gint hf_winreg_winreg_AccessMask_KEY_WOW64_32KEY = -1;
-static gint hf_winreg_winreg_StringBuf_length = -1;
+static gint hf_winreg_winreg_SaveKeyEx_sec_attrib = -1;
 static gint hf_winreg_winreg_QueryInfoKey_last_changed_time = -1;
+static gint hf_winreg_winreg_KeyOptions_REG_OPTION_OPEN_LINK = -1;
 static gint hf_winreg_winreg_OpenHKPD_access_mask = -1;
 static gint hf_winreg_winreg_AbortSystemShutdown_server = -1;
 static gint hf_winreg_winreg_QueryValue_type = -1;
 static gint hf_winreg_sd_actual_size = -1;
-static gint hf_winreg_winreg_String_name_size = -1;
-static gint hf_winreg_winreg_NotifyChangeKeyValue_unknown = -1;
-static gint hf_winreg_winreg_QueryValue_length = -1;
-static gint hf_winreg_winreg_AccessMask_KEY_CREATE_SUB_KEY = -1;
-static gint hf_winreg_winreg_OpenKey_unknown = -1;
-static gint hf_winreg_winreg_RestoreKey_filename = -1;
-static gint hf_winreg_winreg_QueryInfoKey_max_valbufsize = -1;
-static gint hf_winreg_winreg_InitiateSystemShutdownEx_reason = -1;
+static gint hf_winreg_winreg_RestoreKeyFlags_REG_FORCE_RESTORE = -1;
 static gint hf_winreg_winreg_SecBuf_inherit = -1;
 static gint hf_winreg_winreg_SetValue_size = -1;
-static gint hf_winreg_winreg_EnumValue_length = -1;
-static gint hf_winreg_winreg_QueryMultipleValues_values = -1;
-static gint hf_winreg_winreg_QueryInfoKey_max_subkeylen = -1;
-static gint hf_winreg_winreg_InitiateSystemShutdown_timeout = -1;
-static gint hf_winreg_winreg_InitiateSystemShutdownEx_hostname = -1;
 static gint hf_winreg_winreg_SaveKey_handle = -1;
-static gint hf_winreg_KeySecurityAttribute_inherit = -1;
-static gint hf_winreg_werror = -1;
+static gint hf_winreg_winreg_NotifyChangeType_REG_NOTIFY_CHANGE_LAST_SET = -1;
+static gint hf_winreg_winreg_ReplaceKey_handle = -1;
 static gint hf_winreg_winreg_GetVersion_version = -1;
+static gint hf_winreg_winreg_ReplaceKey_old_file = -1;
 static gint hf_winreg_winreg_AccessMask_KEY_QUERY_VALUE = -1;
 static gint hf_winreg_winreg_CreateKey_action_taken = -1;
 static gint hf_winreg_winreg_QueryInfoKey_num_values = -1;
-static gint hf_winreg_winreg_EnumKey_keyclass = -1;
+static gint hf_winreg_winreg_RestoreKeyFlags_REG_WHOLE_HIVE_VOLATILE = -1;
+static gint hf_winreg_winreg_NotifyChangeType_REG_NOTIFY_CHANGE_NAME = -1;
 static gint hf_winreg_winreg_AccessMask_KEY_SET_VALUE = -1;
 static gint hf_winreg_winreg_EnumKey_enum_index = -1;
 static gint hf_winreg_winreg_RestoreKey_handle = -1;
 static gint hf_winreg_winreg_SetValue_data = -1;
-static gint hf_winreg_winreg_CreateKey_keyclass = -1;
 static gint hf_winreg_winreg_InitiateSystemShutdown_force_apps = -1;
-static gint hf_winreg_winreg_EnumValue_value = -1;
 static gint hf_winreg_winreg_NotifyChangeKeyValue_string1 = -1;
+static gint hf_winreg_winreg_SaveKeyEx_flags = -1;
 static gint hf_winreg_winreg_QueryMultipleValues_buffer = -1;
-static gint hf_winreg_winreg_SetKeySecurity_access_mask = -1;
-static gint hf_winreg_winreg_QueryValue_value_name = -1;
 static gint hf_winreg_winreg_QueryInfoKey_classname = -1;
 static gint hf_winreg_winreg_AccessMask_KEY_WOW64_64KEY = -1;
-static gint hf_winreg_winreg_OpenHKCU_access_mask = -1;
+static gint hf_winreg_winreg_ReplaceKey_subkey = -1;
 static gint hf_winreg_sd_max_size = -1;
+static gint hf_winreg_winreg_QueryInfoKey_max_classlen = -1;
+static gint hf_winreg_winreg_ValNameBuf_length = -1;
 static gint hf_winreg_winreg_NotifyChangeKeyValue_notify_filter = -1;
-static gint hf_winreg_QueryMultipleValue_offset = -1;
+static gint hf_winreg_winreg_UnLoadKey_subkey = -1;
+static gint hf_winreg_winreg_ReplaceKey_new_file = -1;
+static gint hf_winreg_winreg_SaveKeyEx_filename = -1;
+static gint hf_winreg_QueryMultipleValue_ve_valuename = -1;
+static gint hf_winreg_winreg_QueryMultipleValues2_key_handle = -1;
+static gint hf_winreg_KeySecurityData_size = -1;
+static gint hf_winreg_winreg_KeyOptions_REG_OPTION_BACKUP_RESTORE = -1;
+static gint hf_winreg_winreg_EnumKey_name = -1;
+static gint hf_winreg_winreg_LoadKey_keyname = -1;
+static gint hf_winreg_winreg_QueryMultipleValues_key_handle = -1;
+static gint hf_winreg_winreg_EnumValue_type = -1;
+static gint hf_winreg_winreg_EnumKey_last_changed_time = -1;
+static gint hf_winreg_winreg_EnumValue_size = -1;
+static gint hf_winreg_winreg_SaveKey_sec_attrib = -1;
+static gint hf_winreg_sd = -1;
+static gint hf_winreg_winreg_KeyOptions_REG_OPTION_CREATE_LINK = -1;
+static gint hf_winreg_winreg_OpenKey_options = -1;
+static gint hf_winreg_winreg_SaveKey_filename = -1;
+static gint hf_winreg_winreg_QueryValue_data = -1;
+static gint hf_winreg_winreg_QueryMultipleValues2_buffer = -1;
+static gint hf_winreg_winreg_InitiateSystemShutdown_hostname = -1;
+static gint hf_winreg_winreg_UnLoadKey_handle = -1;
+static gint hf_winreg_winreg_QueryMultipleValues_values_out = -1;
+static gint hf_winreg_KeySecurityData_data = -1;
+static gint hf_winreg_winreg_OpenKey_access_mask = -1;
+static gint hf_winreg_winreg_OpenKey_keyname = -1;
+static gint hf_winreg_winreg_InitiateSystemShutdownEx_do_reboot = -1;
+static gint hf_winreg_winreg_NotifyChangeKeyValue_watch_subtree = -1;
+static gint hf_winreg_winreg_DeleteKeyEx_access_mask = -1;
+static gint hf_winreg_winreg_DeleteKeyEx_key = -1;
+static gint hf_winreg_winreg_QueryValue_data_length = -1;
+static gint hf_winreg_KeySecurityData_len = -1;
+static gint hf_winreg_winreg_ValNameBuf_size = -1;
+static gint hf_winreg_winreg_CreateKey_name = -1;
+static gint hf_winreg_winreg_NotifyChangeType_REG_NOTIFY_CHANGE_ATTRIBUTES = -1;
+static gint hf_winreg_winreg_String_name_len = -1;
+static gint hf_winreg_winreg_DeleteKey_key = -1;
+static gint hf_winreg_winreg_QueryValue_data_size = -1;
+static gint hf_winreg_system_name = -1;
+static gint hf_winreg_QueryMultipleValue_ve_valueptr = -1;
+static gint hf_winreg_KeySecurityAttribute_data_size = -1;
+static gint hf_winreg_winreg_QueryMultipleValues_num_values = -1;
+static gint hf_winreg_winreg_StringBuf_name = -1;
+static gint hf_winreg_winreg_NotifyChangeKeyValue_unknown2 = -1;
+static gint hf_winreg_sd_offset = -1;
+static gint hf_winreg_winreg_ValNameBuf_name = -1;
+static gint hf_winreg_winreg_StringBuf_length = -1;
+static gint hf_winreg_winreg_QueryMultipleValues2_values_in = -1;
+static gint hf_winreg_winreg_String_name_size = -1;
+static gint hf_winreg_winreg_NotifyChangeKeyValue_unknown = -1;
+static gint hf_winreg_winreg_AccessMask_KEY_CREATE_SUB_KEY = -1;
+static gint hf_winreg_winreg_RestoreKey_filename = -1;
+static gint hf_winreg_winreg_RestoreKeyFlags_REG_REFRESH_HIVE = -1;
+static gint hf_winreg_winreg_QueryInfoKey_max_valbufsize = -1;
+static gint hf_winreg_winreg_InitiateSystemShutdownEx_reason = -1;
+static gint hf_winreg_winreg_EnumValue_length = -1;
+static gint hf_winreg_winreg_QueryInfoKey_max_subkeylen = -1;
+static gint hf_winreg_winreg_InitiateSystemShutdown_timeout = -1;
+static gint hf_winreg_winreg_InitiateSystemShutdownEx_hostname = -1;
+static gint hf_winreg_KeySecurityAttribute_inherit = -1;
+static gint hf_winreg_werror = -1;
+static gint hf_winreg_winreg_QueryMultipleValues2_values_out = -1;
+static gint hf_winreg_winreg_EnumKey_keyclass = -1;
+static gint hf_winreg_winreg_CreateKey_keyclass = -1;
+static gint hf_winreg_winreg_EnumValue_value = -1;
+static gint hf_winreg_winreg_OpenHKCU_access_mask = -1;
+static gint hf_winreg_winreg_QueryValue_value_name = -1;
+static gint hf_winreg_winreg_RestoreKeyFlags_REG_NO_LAZY_FLUSH = -1;
 
 static gint proto_dcerpc_winreg = -1;
 /* Version information */
@@ -196,21 +237,6 @@ static const true_false_string winreg_AccessMask_KEY_WOW64_32KEY_tfs = {
    "KEY_WOW64_32KEY is SET",
    "KEY_WOW64_32KEY is NOT SET",
 };
-const value_string winreg_winreg_Type_vals[] = {
-	{ REG_NONE, "REG_NONE" },
-	{ REG_SZ, "REG_SZ" },
-	{ REG_EXPAND_SZ, "REG_EXPAND_SZ" },
-	{ REG_BINARY, "REG_BINARY" },
-	{ REG_DWORD, "REG_DWORD" },
-	{ REG_DWORD_BIG_ENDIAN, "REG_DWORD_BIG_ENDIAN" },
-	{ REG_LINK, "REG_LINK" },
-	{ REG_MULTI_SZ, "REG_MULTI_SZ" },
-	{ REG_RESOURCE_LIST, "REG_RESOURCE_LIST" },
-	{ REG_FULL_RESOURCE_DESCRIPTOR, "REG_FULL_RESOURCE_DESCRIPTOR" },
-	{ REG_RESOURCE_REQUIREMENTS_LIST, "REG_RESOURCE_REQUIREMENTS_LIST" },
-	{ REG_QWORD, "REG_QWORD" },
-{ 0, NULL }
-};
 static int winreg_dissect_element_String_name_len(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_String_name_size(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_String_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
@@ -223,6 +249,22 @@ static int winreg_dissect_element_KeySecurityData_len(tvbuff_t *tvb _U_, int off
 static int winreg_dissect_element_SecBuf_length(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_SecBuf_sd(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_SecBuf_inherit(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static const true_false_string winreg_KeyOptions_REG_OPTION_VOLATILE_tfs = {
+   "REG_OPTION_VOLATILE is SET",
+   "REG_OPTION_VOLATILE is NOT SET",
+};
+static const true_false_string winreg_KeyOptions_REG_OPTION_CREATE_LINK_tfs = {
+   "REG_OPTION_CREATE_LINK is SET",
+   "REG_OPTION_CREATE_LINK is NOT SET",
+};
+static const true_false_string winreg_KeyOptions_REG_OPTION_BACKUP_RESTORE_tfs = {
+   "REG_OPTION_BACKUP_RESTORE is SET",
+   "REG_OPTION_BACKUP_RESTORE is NOT SET",
+};
+static const true_false_string winreg_KeyOptions_REG_OPTION_OPEN_LINK_tfs = {
+   "REG_OPTION_OPEN_LINK is SET",
+   "REG_OPTION_OPEN_LINK is NOT SET",
+};
 const value_string winreg_winreg_CreateAction_vals[] = {
 	{ REG_ACTION_NONE, "REG_ACTION_NONE" },
 	{ REG_CREATED_NEW_KEY, "REG_CREATED_NEW_KEY" },
@@ -234,14 +276,51 @@ static int winreg_dissect_element_StringBuf_size(tvbuff_t *tvb _U_, int offset _
 static int winreg_dissect_element_StringBuf_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_StringBuf_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_StringBuf_name__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_ValNameBuf_length(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_ValNameBuf_size(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_ValNameBuf_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_ValNameBuf_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_ValNameBuf_name__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static const true_false_string winreg_NotifyChangeType_REG_NOTIFY_CHANGE_NAME_tfs = {
+   "REG_NOTIFY_CHANGE_NAME is SET",
+   "REG_NOTIFY_CHANGE_NAME is NOT SET",
+};
+static const true_false_string winreg_NotifyChangeType_REG_NOTIFY_CHANGE_ATTRIBUTES_tfs = {
+   "REG_NOTIFY_CHANGE_ATTRIBUTES is SET",
+   "REG_NOTIFY_CHANGE_ATTRIBUTES is NOT SET",
+};
+static const true_false_string winreg_NotifyChangeType_REG_NOTIFY_CHANGE_LAST_SET_tfs = {
+   "REG_NOTIFY_CHANGE_LAST_SET is SET",
+   "REG_NOTIFY_CHANGE_LAST_SET is NOT SET",
+};
+static const true_false_string winreg_NotifyChangeType_REG_NOTIFY_CHANGE_SECURITY_tfs = {
+   "REG_NOTIFY_CHANGE_SECURITY is SET",
+   "REG_NOTIFY_CHANGE_SECURITY is NOT SET",
+};
+static const true_false_string winreg_RestoreKeyFlags_REG_WHOLE_HIVE_VOLATILE_tfs = {
+   "REG_WHOLE_HIVE_VOLATILE is SET",
+   "REG_WHOLE_HIVE_VOLATILE is NOT SET",
+};
+static const true_false_string winreg_RestoreKeyFlags_REG_REFRESH_HIVE_tfs = {
+   "REG_REFRESH_HIVE is SET",
+   "REG_REFRESH_HIVE is NOT SET",
+};
+static const true_false_string winreg_RestoreKeyFlags_REG_NO_LAZY_FLUSH_tfs = {
+   "REG_NO_LAZY_FLUSH is SET",
+   "REG_NO_LAZY_FLUSH is NOT SET",
+};
+static const true_false_string winreg_RestoreKeyFlags_REG_FORCE_RESTORE_tfs = {
+   "REG_FORCE_RESTORE is SET",
+   "REG_FORCE_RESTORE is NOT SET",
+};
 static int winreg_dissect_element_KeySecurityAttribute_data_size(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_KeySecurityAttribute_sec_data(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_KeySecurityAttribute_inherit(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
-static int winreg_dissect_element_QueryMultipleValue_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
-static int winreg_dissect_element_QueryMultipleValue_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
-static int winreg_dissect_element_QueryMultipleValue_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
-static int winreg_dissect_element_QueryMultipleValue_offset(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
-static int winreg_dissect_element_QueryMultipleValue_length(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_QueryMultipleValue_ve_valuename(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_QueryMultipleValue_ve_valuename_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_QueryMultipleValue_ve_valuelen(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_QueryMultipleValue_ve_valueptr(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_QueryMultipleValue_ve_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_OpenHKCR_system_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_OpenHKCR_system_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_OpenHKCR_access_mask(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
@@ -334,7 +413,7 @@ static int winreg_dissect_element_NotifyChangeKeyValue_unknown2(tvbuff_t *tvb _U
 static int winreg_dissect_element_OpenKey_parent_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_OpenKey_parent_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_OpenKey_keyname(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
-static int winreg_dissect_element_OpenKey_unknown(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_OpenKey_options(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_OpenKey_access_mask(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_OpenKey_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_OpenKey_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
@@ -346,8 +425,8 @@ static int winreg_dissect_element_QueryInfoKey_num_subkeys(tvbuff_t *tvb _U_, in
 static int winreg_dissect_element_QueryInfoKey_num_subkeys_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_QueryInfoKey_max_subkeylen(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_QueryInfoKey_max_subkeylen_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
-static int winreg_dissect_element_QueryInfoKey_max_subkeysize(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
-static int winreg_dissect_element_QueryInfoKey_max_subkeysize_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_QueryInfoKey_max_classlen(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_QueryInfoKey_max_classlen_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_QueryInfoKey_num_values(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_QueryInfoKey_num_values_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_QueryInfoKey_max_valnamelen(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
@@ -361,15 +440,24 @@ static int winreg_dissect_element_QueryInfoKey_last_changed_time_(tvbuff_t *tvb
 static int winreg_dissect_element_QueryValue_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_QueryValue_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_QueryValue_value_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_QueryValue_value_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_QueryValue_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_QueryValue_type_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_QueryValue_data(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_QueryValue_data_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_QueryValue_data__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
-static int winreg_dissect_element_QueryValue_size(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
-static int winreg_dissect_element_QueryValue_size_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
-static int winreg_dissect_element_QueryValue_length(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
-static int winreg_dissect_element_QueryValue_length_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_QueryValue_data_size(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_QueryValue_data_size_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_QueryValue_data_length(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_QueryValue_data_length_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_ReplaceKey_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_ReplaceKey_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_ReplaceKey_subkey(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_ReplaceKey_subkey_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_ReplaceKey_new_file(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_ReplaceKey_new_file_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_ReplaceKey_old_file(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_ReplaceKey_old_file_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_RestoreKey_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_RestoreKey_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_RestoreKey_filename(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
@@ -383,7 +471,7 @@ static int winreg_dissect_element_SaveKey_sec_attrib(tvbuff_t *tvb _U_, int offs
 static int winreg_dissect_element_SaveKey_sec_attrib_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_SetKeySecurity_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_SetKeySecurity_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
-static int winreg_dissect_element_SetKeySecurity_access_mask(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_SetKeySecurity_sec_info(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_SetKeySecurity_sd(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_SetKeySecurity_sd_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_SetValue_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
@@ -394,13 +482,17 @@ static int winreg_dissect_element_SetValue_data(tvbuff_t *tvb _U_, int offset _U
 static int winreg_dissect_element_SetValue_data_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_SetValue_data__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_SetValue_size(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_UnLoadKey_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_UnLoadKey_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_UnLoadKey_subkey(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_UnLoadKey_subkey_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_InitiateSystemShutdown_hostname(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_InitiateSystemShutdown_hostname_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_InitiateSystemShutdown_message(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_InitiateSystemShutdown_message_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_InitiateSystemShutdown_timeout(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_InitiateSystemShutdown_force_apps(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
-static int winreg_dissect_element_InitiateSystemShutdown_reboot(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_InitiateSystemShutdown_do_reboot(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_AbortSystemShutdown_server(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_AbortSystemShutdown_server_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_GetVersion_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
@@ -419,9 +511,12 @@ static int winreg_dissect_element_OpenHKDD_handle(tvbuff_t *tvb _U_, int offset
 static int winreg_dissect_element_OpenHKDD_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_QueryMultipleValues_key_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_QueryMultipleValues_key_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
-static int winreg_dissect_element_QueryMultipleValues_values(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
-static int winreg_dissect_element_QueryMultipleValues_values_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
-static int winreg_dissect_element_QueryMultipleValues_values__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_QueryMultipleValues_values_in(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_QueryMultipleValues_values_in_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_QueryMultipleValues_values_in__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_QueryMultipleValues_values_out(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_QueryMultipleValues_values_out_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_QueryMultipleValues_values_out__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_QueryMultipleValues_num_values(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_QueryMultipleValues_buffer(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_QueryMultipleValues_buffer_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
@@ -434,8 +529,15 @@ static int winreg_dissect_element_InitiateSystemShutdownEx_message(tvbuff_t *tvb
 static int winreg_dissect_element_InitiateSystemShutdownEx_message_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_InitiateSystemShutdownEx_timeout(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_InitiateSystemShutdownEx_force_apps(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
-static int winreg_dissect_element_InitiateSystemShutdownEx_reboot(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_InitiateSystemShutdownEx_do_reboot(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_InitiateSystemShutdownEx_reason(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_SaveKeyEx_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_SaveKeyEx_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_SaveKeyEx_filename(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_SaveKeyEx_filename_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_SaveKeyEx_sec_attrib(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_SaveKeyEx_sec_attrib_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_SaveKeyEx_flags(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_OpenHKPT_system_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_OpenHKPT_system_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_OpenHKPT_access_mask(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
@@ -446,6 +548,29 @@ static int winreg_dissect_element_OpenHKPN_system_name_(tvbuff_t *tvb _U_, int o
 static int winreg_dissect_element_OpenHKPN_access_mask(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_OpenHKPN_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int winreg_dissect_element_OpenHKPN_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_QueryMultipleValues2_key_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_QueryMultipleValues2_key_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_QueryMultipleValues2_values_in(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_QueryMultipleValues2_values_in_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_QueryMultipleValues2_values_in__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_QueryMultipleValues2_values_out(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_QueryMultipleValues2_values_out_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_QueryMultipleValues2_values_out__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_QueryMultipleValues2_num_values(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_QueryMultipleValues2_buffer(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_QueryMultipleValues2_buffer_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_QueryMultipleValues2_buffer__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_QueryMultipleValues2_offered(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_QueryMultipleValues2_offered_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_QueryMultipleValues2_needed(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_QueryMultipleValues2_needed_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_DeleteKeyEx_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_DeleteKeyEx_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_DeleteKeyEx_key(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_DeleteKeyEx_key_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_DeleteKeyEx_access_mask(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int winreg_dissect_element_DeleteKeyEx_reserved(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+ #include "packet-dcerpc-lsa.h"
 static void
 winreg_specific_rights(tvbuff_t *tvb, gint offset, proto_tree *tree, guint32 access)
 {
@@ -469,7 +594,7 @@ winreg_dissect_element_KeySecurityData_data_(tvbuff_t *tvb, int offset, packet_i
 {
 	guint32 len;
 	dcerpc_info *di;
-	di=pinfo->private_data;
+	di=(dcerpc_info*)pinfo->private_data;
 	if(di->conformant_run){
 		/*just a run to handle conformant arrays, nothing to dissect */
 		return offset;
@@ -494,13 +619,6 @@ winreg_dissect_bitmap_AccessMask(tvbuff_t *tvb, int offset, packet_info *pinfo,
 		&winreg_access_mask_info, NULL);
 	return offset;
 }
-/* FIXME: pidl generates the wrong name for external symbols */
-static int
-winreg_dissect_struct_initshutdown_String(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *parent_tree, guint8 *drep, int hf_index, guint32 param)
-{
-        #include "packet-dcerpc-initshutdown.h"
-	return initshutdown_dissect_struct_String(tvb, offset, pinfo, parent_tree, drep, hf_index, param);
-}
 /* winreg_String :
  *	typedef [public,noejs] struct {
  *		[value(strlen_m_term(name)*2)] uint16 name_len;
@@ -536,6 +654,37 @@ cnf_dissect_winreg_String(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_t
 
 
 /* IDL: bitmap { */
+/* IDL: } */
+
+int
+winreg_dissect_bitmap_security_secinfo(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_)
+{
+	proto_item *item = NULL;
+	proto_tree *tree = NULL;
+
+	guint32 flags;
+	ALIGN_TO_4_BYTES;
+
+	if (parent_tree) {
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, 4, DREP_ENC_INTEGER(drep));
+		tree = proto_item_add_subtree(item,ett_winreg_security_secinfo);
+	}
+
+	offset = dissect_ndr_uint32(tvb, offset, pinfo, NULL, drep, -1, &flags);
+	proto_item_append_text(item, ": ");
+
+	if (!flags)
+		proto_item_append_text(item, "(No values set)");
+
+	if (flags) {
+		proto_item_append_text(item, "Unknown bitmap value 0x%x", flags);
+	}
+
+	return offset;
+}
+
+
+/* IDL: bitmap { */
 /* IDL: 	KEY_QUERY_VALUE =  0x00001 , */
 /* IDL: 	KEY_SET_VALUE =  0x00002 , */
 /* IDL: 	KEY_CREATE_SUB_KEY =  0x00004 , */
@@ -547,36 +696,6 @@ cnf_dissect_winreg_String(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_t
 /* IDL: } */
 
 
-/* IDL: enum { */
-/* IDL: 	REG_NONE=0, */
-/* IDL: 	REG_SZ=1, */
-/* IDL: 	REG_EXPAND_SZ=2, */
-/* IDL: 	REG_BINARY=3, */
-/* IDL: 	REG_DWORD=4, */
-/* IDL: 	REG_DWORD_BIG_ENDIAN=5, */
-/* IDL: 	REG_LINK=6, */
-/* IDL: 	REG_MULTI_SZ=7, */
-/* IDL: 	REG_RESOURCE_LIST=8, */
-/* IDL: 	REG_FULL_RESOURCE_DESCRIPTOR=9, */
-/* IDL: 	REG_RESOURCE_REQUIREMENTS_LIST=10, */
-/* IDL: 	REG_QWORD=11, */
-/* IDL: } */
-
-int
-winreg_dissect_enum_Type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 *param _U_)
-{
-	guint32 parameter=0;
-	if(param){
-		parameter=(guint32)*param;
-	}
-	offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, hf_index, &parameter);
-	if(param){
-		*param=(guint32)parameter;
-	}
-	return offset;
-}
-
-
 /* IDL: struct { */
 /* IDL: 	[value(strlen_m_term(name)*2)] uint16 name_len; */
 /* IDL: 	[value(strlen_m_term(name)*2)] uint16 name_size; */
@@ -623,6 +742,7 @@ winreg_dissect_struct_String(tvbuff_t *tvb _U_, int offset _U_, packet_info *pin
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_4_BYTES;
@@ -630,7 +750,7 @@ winreg_dissect_struct_String(tvbuff_t *tvb _U_, int offset _U_, packet_info *pin
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_winreg_winreg_String);
 	}
 	
@@ -643,6 +763,11 @@ winreg_dissect_struct_String(tvbuff_t *tvb _U_, int offset _U_, packet_info *pin
 
 	proto_item_set_len(item, offset-old_offset);
 
+
+	if (di->call_data->flags & DCERPC_IS_NDR64) {
+		ALIGN_TO_4_BYTES;
+	}
+
 	return offset;
 }
 
@@ -690,14 +815,15 @@ winreg_dissect_struct_KeySecurityData(tvbuff_t *tvb _U_, int offset _U_, packet_
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
-	ALIGN_TO_4_BYTES;
+	ALIGN_TO_5_BYTES;
 
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_winreg_KeySecurityData);
 	}
 	
@@ -710,6 +836,11 @@ winreg_dissect_struct_KeySecurityData(tvbuff_t *tvb _U_, int offset _U_, packet_
 
 	proto_item_set_len(item, offset-old_offset);
 
+
+	if (di->call_data->flags & DCERPC_IS_NDR64) {
+		ALIGN_TO_5_BYTES;
+	}
+
 	return offset;
 }
 
@@ -749,14 +880,15 @@ winreg_dissect_struct_SecBuf(tvbuff_t *tvb _U_, int offset _U_, packet_info *pin
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
-	ALIGN_TO_4_BYTES;
+	ALIGN_TO_5_BYTES;
 
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_winreg_winreg_SecBuf);
 	}
 	
@@ -769,6 +901,78 @@ winreg_dissect_struct_SecBuf(tvbuff_t *tvb _U_, int offset _U_, packet_info *pin
 
 	proto_item_set_len(item, offset-old_offset);
 
+
+	if (di->call_data->flags & DCERPC_IS_NDR64) {
+		ALIGN_TO_5_BYTES;
+	}
+
+	return offset;
+}
+
+
+/* IDL: bitmap { */
+/* IDL: 	REG_OPTION_VOLATILE =  0x00000001 , */
+/* IDL: 	REG_OPTION_CREATE_LINK =  0x00000002 , */
+/* IDL: 	REG_OPTION_BACKUP_RESTORE =  0x00000004 , */
+/* IDL: 	REG_OPTION_OPEN_LINK =  0x00000008 , */
+/* IDL: } */
+
+int
+winreg_dissect_bitmap_KeyOptions(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_)
+{
+	proto_item *item = NULL;
+	proto_tree *tree = NULL;
+
+	guint32 flags;
+	ALIGN_TO_4_BYTES;
+
+	if (parent_tree) {
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, 4, DREP_ENC_INTEGER(drep));
+		tree = proto_item_add_subtree(item,ett_winreg_winreg_KeyOptions);
+	}
+
+	offset = dissect_ndr_uint32(tvb, offset, pinfo, NULL, drep, -1, &flags);
+	proto_item_append_text(item, ": ");
+
+	if (!flags)
+		proto_item_append_text(item, "(No values set)");
+
+	proto_tree_add_boolean(tree, hf_winreg_winreg_KeyOptions_REG_OPTION_VOLATILE, tvb, offset-4, 4, flags);
+	if (flags&( 0x00000001 )){
+		proto_item_append_text(item, "REG_OPTION_VOLATILE");
+		if (flags & (~( 0x00000001 )))
+			proto_item_append_text(item, ", ");
+	}
+	flags&=(~( 0x00000001 ));
+
+	proto_tree_add_boolean(tree, hf_winreg_winreg_KeyOptions_REG_OPTION_CREATE_LINK, tvb, offset-4, 4, flags);
+	if (flags&( 0x00000002 )){
+		proto_item_append_text(item, "REG_OPTION_CREATE_LINK");
+		if (flags & (~( 0x00000002 )))
+			proto_item_append_text(item, ", ");
+	}
+	flags&=(~( 0x00000002 ));
+
+	proto_tree_add_boolean(tree, hf_winreg_winreg_KeyOptions_REG_OPTION_BACKUP_RESTORE, tvb, offset-4, 4, flags);
+	if (flags&( 0x00000004 )){
+		proto_item_append_text(item, "REG_OPTION_BACKUP_RESTORE");
+		if (flags & (~( 0x00000004 )))
+			proto_item_append_text(item, ", ");
+	}
+	flags&=(~( 0x00000004 ));
+
+	proto_tree_add_boolean(tree, hf_winreg_winreg_KeyOptions_REG_OPTION_OPEN_LINK, tvb, offset-4, 4, flags);
+	if (flags&( 0x00000008 )){
+		proto_item_append_text(item, "REG_OPTION_OPEN_LINK");
+		if (flags & (~( 0x00000008 )))
+			proto_item_append_text(item, ", ");
+	}
+	flags&=(~( 0x00000008 ));
+
+	if (flags) {
+		proto_item_append_text(item, "Unknown bitmap value 0x%x", flags);
+	}
+
 	return offset;
 }
 
@@ -795,7 +999,7 @@ winreg_dissect_enum_CreateAction(tvbuff_t *tvb _U_, int offset _U_, packet_info
 
 
 /* IDL: struct { */
-/* IDL: 	[value(strlen_m_term(name)*2)] uint16 length; */
+/* IDL: 	[value(strlen_m_term_null(name)*2)] uint16 length; */
 /* IDL: 	uint16 size; */
 /* IDL: 	[unique(1)] [length_is(length/2)] [charset(UTF16)] [size_is(size/2)] uint16 *name; */
 /* IDL: } */
@@ -845,14 +1049,15 @@ winreg_dissect_struct_StringBuf(tvbuff_t *tvb _U_, int offset _U_, packet_info *
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
-	ALIGN_TO_4_BYTES;
+	ALIGN_TO_5_BYTES;
 
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_winreg_winreg_StringBuf);
 	}
 	
@@ -865,150 +1070,382 @@ winreg_dissect_struct_StringBuf(tvbuff_t *tvb _U_, int offset _U_, packet_info *
 
 	proto_item_set_len(item, offset-old_offset);
 
-	return offset;
-}
-
-
-/* IDL: struct { */
-/* IDL: 	uint32 data_size; */
-/* IDL: 	KeySecurityData sec_data; */
-/* IDL: 	uint8 inherit; */
-/* IDL: } */
-
-static int
-winreg_dissect_element_KeySecurityAttribute_data_size(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
-{
-	offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, drep, hf_winreg_KeySecurityAttribute_data_size, 0);
-
-	return offset;
-}
-
-static int
-winreg_dissect_element_KeySecurityAttribute_sec_data(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
-{
-	offset = winreg_dissect_struct_KeySecurityData(tvb,offset,pinfo,tree,drep,hf_winreg_KeySecurityAttribute_sec_data,0);
-
-	return offset;
-}
-
-static int
-winreg_dissect_element_KeySecurityAttribute_inherit(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
-{
-	offset = PIDL_dissect_uint8(tvb, offset, pinfo, tree, drep, hf_winreg_KeySecurityAttribute_inherit, 0);
-
-	return offset;
-}
-
-int
-winreg_dissect_struct_KeySecurityAttribute(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_)
-{
-	proto_item *item = NULL;
-	proto_tree *tree = NULL;
-	int old_offset;
-
-	ALIGN_TO_4_BYTES;
-
-	old_offset = offset;
 
-	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
-		tree = proto_item_add_subtree(item, ett_winreg_KeySecurityAttribute);
+	if (di->call_data->flags & DCERPC_IS_NDR64) {
+		ALIGN_TO_5_BYTES;
 	}
-	
-	offset = winreg_dissect_element_KeySecurityAttribute_data_size(tvb, offset, pinfo, tree, drep);
-
-	offset = winreg_dissect_element_KeySecurityAttribute_sec_data(tvb, offset, pinfo, tree, drep);
-
-	offset = winreg_dissect_element_KeySecurityAttribute_inherit(tvb, offset, pinfo, tree, drep);
-
-
-	proto_item_set_len(item, offset-old_offset);
 
 	return offset;
 }
 
 
 /* IDL: struct { */
-/* IDL: 	[unique(1)] winreg_String *name; */
-/* IDL: 	winreg_Type type; */
-/* IDL: 	uint32 offset; */
-/* IDL: 	uint32 length; */
+/* IDL: 	[value(strlen_m_term(name)*2)] uint16 length; */
+/* IDL: 	uint16 size; */
+/* IDL: 	[unique(1)] [length_is(length/2)] [charset(UTF16)] [size_is(size/2)] uint16 *name; */
 /* IDL: } */
 
 static int
-winreg_dissect_element_QueryMultipleValue_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+winreg_dissect_element_ValNameBuf_length(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	offset = dissect_ndr_embedded_pointer(tvb, offset, pinfo, tree, drep, winreg_dissect_element_QueryMultipleValue_name_, NDR_POINTER_UNIQUE, "Pointer to Name (winreg_String)",hf_winreg_QueryMultipleValue_name);
+	offset = PIDL_dissect_uint16(tvb, offset, pinfo, tree, drep, hf_winreg_winreg_ValNameBuf_length, 0);
 
 	return offset;
 }
 
 static int
-winreg_dissect_element_QueryMultipleValue_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+winreg_dissect_element_ValNameBuf_size(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	offset=cnf_dissect_winreg_String(tvb, offset, pinfo, tree, drep, 0, hf_winreg_QueryMultipleValue_name);
+	offset = PIDL_dissect_uint16(tvb, offset, pinfo, tree, drep, hf_winreg_winreg_ValNameBuf_size, 0);
 
 	return offset;
 }
 
 static int
-winreg_dissect_element_QueryMultipleValue_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+winreg_dissect_element_ValNameBuf_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	offset = winreg_dissect_enum_Type(tvb, offset, pinfo, tree, drep, hf_winreg_QueryMultipleValue_type, 0);
+	offset = dissect_ndr_embedded_pointer(tvb, offset, pinfo, tree, drep, winreg_dissect_element_ValNameBuf_name_, NDR_POINTER_UNIQUE, "Pointer to Name (uint16)",hf_winreg_winreg_ValNameBuf_name);
 
 	return offset;
 }
 
 static int
-winreg_dissect_element_QueryMultipleValue_offset(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+winreg_dissect_element_ValNameBuf_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, drep, hf_winreg_QueryMultipleValue_offset, 0);
+	offset = dissect_ndr_ucvarray(tvb, offset, pinfo, tree, drep, winreg_dissect_element_ValNameBuf_name__);
 
 	return offset;
 }
 
 static int
-winreg_dissect_element_QueryMultipleValue_length(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+winreg_dissect_element_ValNameBuf_name__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, drep, hf_winreg_QueryMultipleValue_length, 0);
+	offset = PIDL_dissect_uint16(tvb, offset, pinfo, tree, drep, hf_winreg_winreg_ValNameBuf_name, 0);
 
 	return offset;
 }
 
 int
-winreg_dissect_struct_QueryMultipleValue(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_)
+winreg_dissect_struct_ValNameBuf(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_)
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
-	ALIGN_TO_4_BYTES;
+	ALIGN_TO_5_BYTES;
 
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
-		tree = proto_item_add_subtree(item, ett_winreg_QueryMultipleValue);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
+		tree = proto_item_add_subtree(item, ett_winreg_winreg_ValNameBuf);
 	}
 	
-	offset = winreg_dissect_element_QueryMultipleValue_name(tvb, offset, pinfo, tree, drep);
+	offset = winreg_dissect_element_ValNameBuf_length(tvb, offset, pinfo, tree, drep);
 
-	offset = winreg_dissect_element_QueryMultipleValue_type(tvb, offset, pinfo, tree, drep);
+	offset = winreg_dissect_element_ValNameBuf_size(tvb, offset, pinfo, tree, drep);
 
-	offset = winreg_dissect_element_QueryMultipleValue_offset(tvb, offset, pinfo, tree, drep);
-
-	offset = winreg_dissect_element_QueryMultipleValue_length(tvb, offset, pinfo, tree, drep);
+	offset = winreg_dissect_element_ValNameBuf_name(tvb, offset, pinfo, tree, drep);
 
 
 	proto_item_set_len(item, offset-old_offset);
 
-	return offset;
-}
 
-static int
-winreg_dissect_element_OpenHKCR_system_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
-{
-	offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, drep, winreg_dissect_element_OpenHKCR_system_name_, NDR_POINTER_UNIQUE, "Pointer to System Name (uint16)",hf_winreg_system_name);
+	if (di->call_data->flags & DCERPC_IS_NDR64) {
+		ALIGN_TO_5_BYTES;
+	}
+
+	return offset;
+}
+
+
+/* IDL: bitmap { */
+/* IDL: 	REG_NOTIFY_CHANGE_NAME =  0x00000001 , */
+/* IDL: 	REG_NOTIFY_CHANGE_ATTRIBUTES =  0x00000002 , */
+/* IDL: 	REG_NOTIFY_CHANGE_LAST_SET =  0x00000004 , */
+/* IDL: 	REG_NOTIFY_CHANGE_SECURITY =  0x00000008 , */
+/* IDL: } */
+
+int
+winreg_dissect_bitmap_NotifyChangeType(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_)
+{
+	proto_item *item = NULL;
+	proto_tree *tree = NULL;
+
+	guint32 flags;
+	ALIGN_TO_4_BYTES;
+
+	if (parent_tree) {
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, 4, DREP_ENC_INTEGER(drep));
+		tree = proto_item_add_subtree(item,ett_winreg_winreg_NotifyChangeType);
+	}
+
+	offset = dissect_ndr_uint32(tvb, offset, pinfo, NULL, drep, -1, &flags);
+	proto_item_append_text(item, ": ");
+
+	if (!flags)
+		proto_item_append_text(item, "(No values set)");
+
+	proto_tree_add_boolean(tree, hf_winreg_winreg_NotifyChangeType_REG_NOTIFY_CHANGE_NAME, tvb, offset-4, 4, flags);
+	if (flags&( 0x00000001 )){
+		proto_item_append_text(item, "REG_NOTIFY_CHANGE_NAME");
+		if (flags & (~( 0x00000001 )))
+			proto_item_append_text(item, ", ");
+	}
+	flags&=(~( 0x00000001 ));
+
+	proto_tree_add_boolean(tree, hf_winreg_winreg_NotifyChangeType_REG_NOTIFY_CHANGE_ATTRIBUTES, tvb, offset-4, 4, flags);
+	if (flags&( 0x00000002 )){
+		proto_item_append_text(item, "REG_NOTIFY_CHANGE_ATTRIBUTES");
+		if (flags & (~( 0x00000002 )))
+			proto_item_append_text(item, ", ");
+	}
+	flags&=(~( 0x00000002 ));
+
+	proto_tree_add_boolean(tree, hf_winreg_winreg_NotifyChangeType_REG_NOTIFY_CHANGE_LAST_SET, tvb, offset-4, 4, flags);
+	if (flags&( 0x00000004 )){
+		proto_item_append_text(item, "REG_NOTIFY_CHANGE_LAST_SET");
+		if (flags & (~( 0x00000004 )))
+			proto_item_append_text(item, ", ");
+	}
+	flags&=(~( 0x00000004 ));
+
+	proto_tree_add_boolean(tree, hf_winreg_winreg_NotifyChangeType_REG_NOTIFY_CHANGE_SECURITY, tvb, offset-4, 4, flags);
+	if (flags&( 0x00000008 )){
+		proto_item_append_text(item, "REG_NOTIFY_CHANGE_SECURITY");
+		if (flags & (~( 0x00000008 )))
+			proto_item_append_text(item, ", ");
+	}
+	flags&=(~( 0x00000008 ));
+
+	if (flags) {
+		proto_item_append_text(item, "Unknown bitmap value 0x%x", flags);
+	}
+
+	return offset;
+}
+
+
+/* IDL: bitmap { */
+/* IDL: 	REG_WHOLE_HIVE_VOLATILE =  0x00000001 , */
+/* IDL: 	REG_REFRESH_HIVE =  0x00000002 , */
+/* IDL: 	REG_NO_LAZY_FLUSH =  0x00000004 , */
+/* IDL: 	REG_FORCE_RESTORE =  0x00000008 , */
+/* IDL: } */
+
+int
+winreg_dissect_bitmap_RestoreKeyFlags(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_)
+{
+	proto_item *item = NULL;
+	proto_tree *tree = NULL;
+
+	guint32 flags;
+	ALIGN_TO_4_BYTES;
+
+	if (parent_tree) {
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, 4, DREP_ENC_INTEGER(drep));
+		tree = proto_item_add_subtree(item,ett_winreg_winreg_RestoreKeyFlags);
+	}
+
+	offset = dissect_ndr_uint32(tvb, offset, pinfo, NULL, drep, -1, &flags);
+	proto_item_append_text(item, ": ");
+
+	if (!flags)
+		proto_item_append_text(item, "(No values set)");
+
+	proto_tree_add_boolean(tree, hf_winreg_winreg_RestoreKeyFlags_REG_WHOLE_HIVE_VOLATILE, tvb, offset-4, 4, flags);
+	if (flags&( 0x00000001 )){
+		proto_item_append_text(item, "REG_WHOLE_HIVE_VOLATILE");
+		if (flags & (~( 0x00000001 )))
+			proto_item_append_text(item, ", ");
+	}
+	flags&=(~( 0x00000001 ));
+
+	proto_tree_add_boolean(tree, hf_winreg_winreg_RestoreKeyFlags_REG_REFRESH_HIVE, tvb, offset-4, 4, flags);
+	if (flags&( 0x00000002 )){
+		proto_item_append_text(item, "REG_REFRESH_HIVE");
+		if (flags & (~( 0x00000002 )))
+			proto_item_append_text(item, ", ");
+	}
+	flags&=(~( 0x00000002 ));
+
+	proto_tree_add_boolean(tree, hf_winreg_winreg_RestoreKeyFlags_REG_NO_LAZY_FLUSH, tvb, offset-4, 4, flags);
+	if (flags&( 0x00000004 )){
+		proto_item_append_text(item, "REG_NO_LAZY_FLUSH");
+		if (flags & (~( 0x00000004 )))
+			proto_item_append_text(item, ", ");
+	}
+	flags&=(~( 0x00000004 ));
+
+	proto_tree_add_boolean(tree, hf_winreg_winreg_RestoreKeyFlags_REG_FORCE_RESTORE, tvb, offset-4, 4, flags);
+	if (flags&( 0x00000008 )){
+		proto_item_append_text(item, "REG_FORCE_RESTORE");
+		if (flags & (~( 0x00000008 )))
+			proto_item_append_text(item, ", ");
+	}
+	flags&=(~( 0x00000008 ));
+
+	if (flags) {
+		proto_item_append_text(item, "Unknown bitmap value 0x%x", flags);
+	}
+
+	return offset;
+}
+
+
+/* IDL: struct { */
+/* IDL: 	uint32 data_size; */
+/* IDL: 	KeySecurityData sec_data; */
+/* IDL: 	uint8 inherit; */
+/* IDL: } */
+
+static int
+winreg_dissect_element_KeySecurityAttribute_data_size(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, drep, hf_winreg_KeySecurityAttribute_data_size, 0);
+
+	return offset;
+}
+
+static int
+winreg_dissect_element_KeySecurityAttribute_sec_data(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = winreg_dissect_struct_KeySecurityData(tvb,offset,pinfo,tree,drep,hf_winreg_KeySecurityAttribute_sec_data,0);
+
+	return offset;
+}
+
+static int
+winreg_dissect_element_KeySecurityAttribute_inherit(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = PIDL_dissect_uint8(tvb, offset, pinfo, tree, drep, hf_winreg_KeySecurityAttribute_inherit, 0);
+
+	return offset;
+}
+
+int
+winreg_dissect_struct_KeySecurityAttribute(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_)
+{
+	proto_item *item = NULL;
+	proto_tree *tree = NULL;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
+	int old_offset;
+
+	ALIGN_TO_5_BYTES;
+
+	old_offset = offset;
+
+	if (parent_tree) {
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
+		tree = proto_item_add_subtree(item, ett_winreg_KeySecurityAttribute);
+	}
+	
+	offset = winreg_dissect_element_KeySecurityAttribute_data_size(tvb, offset, pinfo, tree, drep);
+
+	offset = winreg_dissect_element_KeySecurityAttribute_sec_data(tvb, offset, pinfo, tree, drep);
+
+	offset = winreg_dissect_element_KeySecurityAttribute_inherit(tvb, offset, pinfo, tree, drep);
+
+
+	proto_item_set_len(item, offset-old_offset);
+
+
+	if (di->call_data->flags & DCERPC_IS_NDR64) {
+		ALIGN_TO_5_BYTES;
+	}
+
+	return offset;
+}
+
+
+/* IDL: struct { */
+/* IDL: 	[unique(1)] winreg_ValNameBuf *ve_valuename; */
+/* IDL: 	uint32 ve_valuelen; */
+/* IDL: 	uint32 ve_valueptr; */
+/* IDL: 	winreg_Type ve_type; */
+/* IDL: } */
+
+static int
+winreg_dissect_element_QueryMultipleValue_ve_valuename(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = dissect_ndr_embedded_pointer(tvb, offset, pinfo, tree, drep, winreg_dissect_element_QueryMultipleValue_ve_valuename_, NDR_POINTER_UNIQUE, "Pointer to Ve Valuename (winreg_ValNameBuf)",hf_winreg_QueryMultipleValue_ve_valuename);
+
+	return offset;
+}
+
+static int
+winreg_dissect_element_QueryMultipleValue_ve_valuename_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = winreg_dissect_struct_ValNameBuf(tvb,offset,pinfo,tree,drep,hf_winreg_QueryMultipleValue_ve_valuename,0);
+
+	return offset;
+}
+
+static int
+winreg_dissect_element_QueryMultipleValue_ve_valuelen(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, drep, hf_winreg_QueryMultipleValue_ve_valuelen, 0);
+
+	return offset;
+}
+
+static int
+winreg_dissect_element_QueryMultipleValue_ve_valueptr(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, drep, hf_winreg_QueryMultipleValue_ve_valueptr, 0);
+
+	return offset;
+}
+
+static int
+winreg_dissect_element_QueryMultipleValue_ve_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset=misc_dissect_enum_winreg_Type(tvb, offset, pinfo, tree, drep, hf_winreg_QueryMultipleValue_ve_type, 0);
+
+	return offset;
+}
+
+int
+winreg_dissect_struct_QueryMultipleValue(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_)
+{
+	proto_item *item = NULL;
+	proto_tree *tree = NULL;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
+	int old_offset;
+
+	ALIGN_TO_5_BYTES;
+
+	old_offset = offset;
+
+	if (parent_tree) {
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
+		tree = proto_item_add_subtree(item, ett_winreg_QueryMultipleValue);
+	}
+	
+	offset = winreg_dissect_element_QueryMultipleValue_ve_valuename(tvb, offset, pinfo, tree, drep);
+
+	offset = winreg_dissect_element_QueryMultipleValue_ve_valuelen(tvb, offset, pinfo, tree, drep);
+
+	offset = winreg_dissect_element_QueryMultipleValue_ve_valueptr(tvb, offset, pinfo, tree, drep);
+
+	offset = winreg_dissect_element_QueryMultipleValue_ve_type(tvb, offset, pinfo, tree, drep);
+
+
+	proto_item_set_len(item, offset-old_offset);
+
+
+	if (di->call_data->flags & DCERPC_IS_NDR64) {
+		ALIGN_TO_5_BYTES;
+	}
+
+	return offset;
+}
+
+static int
+winreg_dissect_element_OpenHKCR_system_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, drep, winreg_dissect_element_OpenHKCR_system_name_, NDR_POINTER_UNIQUE, "Pointer to System Name (uint16)",hf_winreg_system_name);
 
 	return offset;
 }
@@ -1456,7 +1893,7 @@ winreg_dissect_element_CreateKey_keyclass(tvbuff_t *tvb _U_, int offset _U_, pac
 static int
 winreg_dissect_element_CreateKey_options(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, drep, hf_winreg_winreg_CreateKey_options, 0);
+	offset = winreg_dissect_bitmap_KeyOptions(tvb, offset, pinfo, tree, drep, hf_winreg_winreg_CreateKey_options, 0);
 
 	return offset;
 }
@@ -1521,7 +1958,7 @@ winreg_dissect_element_CreateKey_action_taken_(tvbuff_t *tvb _U_, int offset _U_
 /* IDL: [in] [ref] policy_handle *handle, */
 /* IDL: [in] winreg_String name, */
 /* IDL: [in] winreg_String keyclass, */
-/* IDL: [in] uint32 options, */
+/* IDL: [in] winreg_KeyOptions options, */
 /* IDL: [in] winreg_AccessMask access_mask, */
 /* IDL: [unique(1)] [in] winreg_SecBuf *secdesc, */
 /* IDL: [out] [ref] policy_handle *new_handle, */
@@ -1824,7 +2261,7 @@ winreg_dissect_element_EnumValue_enum_index(tvbuff_t *tvb _U_, int offset _U_, p
 static int
 winreg_dissect_element_EnumValue_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, drep, winreg_dissect_element_EnumValue_name_, NDR_POINTER_REF, "Pointer to Name (winreg_StringBuf)",hf_winreg_winreg_EnumValue_name);
+	offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, drep, winreg_dissect_element_EnumValue_name_, NDR_POINTER_REF, "Pointer to Name (winreg_ValNameBuf)",hf_winreg_winreg_EnumValue_name);
 
 	return offset;
 }
@@ -1832,7 +2269,7 @@ winreg_dissect_element_EnumValue_name(tvbuff_t *tvb _U_, int offset _U_, packet_
 static int
 winreg_dissect_element_EnumValue_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	offset = winreg_dissect_struct_StringBuf(tvb,offset,pinfo,tree,drep,hf_winreg_winreg_EnumValue_name,0);
+	offset = winreg_dissect_struct_ValNameBuf(tvb,offset,pinfo,tree,drep,hf_winreg_winreg_EnumValue_name,0);
 
 	return offset;
 }
@@ -1848,7 +2285,7 @@ winreg_dissect_element_EnumValue_type(tvbuff_t *tvb _U_, int offset _U_, packet_
 static int
 winreg_dissect_element_EnumValue_type_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	offset = winreg_dissect_enum_Type(tvb, offset, pinfo, tree, drep, hf_winreg_winreg_EnumValue_type, 0);
+	offset=misc_dissect_enum_winreg_Type(tvb, offset, pinfo, tree, drep, hf_winreg_winreg_EnumValue_type, 0);
 
 	return offset;
 }
@@ -1912,9 +2349,9 @@ winreg_dissect_element_EnumValue_length_(tvbuff_t *tvb _U_, int offset _U_, pack
 /* IDL: WERROR winreg_EnumValue( */
 /* IDL: [in] [ref] policy_handle *handle, */
 /* IDL: [in] uint32 enum_index, */
-/* IDL: [out] [in] [ref] winreg_StringBuf *name, */
+/* IDL: [out] [in] [ref] winreg_ValNameBuf *name, */
 /* IDL: [out] [unique(1)] [in] winreg_Type *type, */
-/* IDL: [out] [unique(1)] [in] [length_is(*length)] [size_is(*size)] uint8 *value, */
+/* IDL: [unique(1)] [out] [in] [range(0,0x4000000)] [length_is(length?*length:0)] [size_is(size?*size:0)] uint8 *value, */
 /* IDL: [out] [unique(1)] [in] uint32 *size, */
 /* IDL: [out] [unique(1)] [in] uint32 *length */
 /* IDL: ); */
@@ -2196,7 +2633,7 @@ winreg_dissect_element_NotifyChangeKeyValue_watch_subtree(tvbuff_t *tvb _U_, int
 static int
 winreg_dissect_element_NotifyChangeKeyValue_notify_filter(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, drep, hf_winreg_winreg_NotifyChangeKeyValue_notify_filter, 0);
+	offset = winreg_dissect_bitmap_NotifyChangeType(tvb, offset, pinfo, tree, drep, hf_winreg_winreg_NotifyChangeKeyValue_notify_filter, 0);
 
 	return offset;
 }
@@ -2236,7 +2673,7 @@ winreg_dissect_element_NotifyChangeKeyValue_unknown2(tvbuff_t *tvb _U_, int offs
 /* IDL: WERROR winreg_NotifyChangeKeyValue( */
 /* IDL: [in] [ref] policy_handle *handle, */
 /* IDL: [in] uint8 watch_subtree, */
-/* IDL: [in] uint32 notify_filter, */
+/* IDL: [in] winreg_NotifyChangeType notify_filter, */
 /* IDL: [in] uint32 unknown, */
 /* IDL: [in] winreg_String string1, */
 /* IDL: [in] winreg_String string2, */
@@ -2303,9 +2740,9 @@ winreg_dissect_element_OpenKey_keyname(tvbuff_t *tvb _U_, int offset _U_, packet
 }
 
 static int
-winreg_dissect_element_OpenKey_unknown(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+winreg_dissect_element_OpenKey_options(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, drep, hf_winreg_winreg_OpenKey_unknown, 0);
+	offset = winreg_dissect_bitmap_KeyOptions(tvb, offset, pinfo, tree, drep, hf_winreg_winreg_OpenKey_options, 0);
 
 	return offset;
 }
@@ -2337,7 +2774,7 @@ winreg_dissect_element_OpenKey_handle_(tvbuff_t *tvb _U_, int offset _U_, packet
 /* IDL: WERROR winreg_OpenKey( */
 /* IDL: [in] [ref] policy_handle *parent_handle, */
 /* IDL: [in] winreg_String keyname, */
-/* IDL: [in] uint32 unknown, */
+/* IDL: [in] winreg_KeyOptions options, */
 /* IDL: [in] winreg_AccessMask access_mask, */
 /* IDL: [out] [ref] policy_handle *handle */
 /* IDL: ); */
@@ -2367,7 +2804,7 @@ winreg_dissect_OpenKey_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *p
 	offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
 	offset = winreg_dissect_element_OpenKey_keyname(tvb, offset, pinfo, tree, drep);
 	offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
-	offset = winreg_dissect_element_OpenKey_unknown(tvb, offset, pinfo, tree, drep);
+	offset = winreg_dissect_element_OpenKey_options(tvb, offset, pinfo, tree, drep);
 	offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
 	offset = winreg_dissect_element_OpenKey_access_mask(tvb, offset, pinfo, tree, drep);
 	offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
@@ -2439,17 +2876,17 @@ winreg_dissect_element_QueryInfoKey_max_subkeylen_(tvbuff_t *tvb _U_, int offset
 }
 
 static int
-winreg_dissect_element_QueryInfoKey_max_subkeysize(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+winreg_dissect_element_QueryInfoKey_max_classlen(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, drep, winreg_dissect_element_QueryInfoKey_max_subkeysize_, NDR_POINTER_REF, "Pointer to Max Subkeysize (uint32)",hf_winreg_winreg_QueryInfoKey_max_subkeysize);
+	offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, drep, winreg_dissect_element_QueryInfoKey_max_classlen_, NDR_POINTER_REF, "Pointer to Max Classlen (uint32)",hf_winreg_winreg_QueryInfoKey_max_classlen);
 
 	return offset;
 }
 
 static int
-winreg_dissect_element_QueryInfoKey_max_subkeysize_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+winreg_dissect_element_QueryInfoKey_max_classlen_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, drep, hf_winreg_winreg_QueryInfoKey_max_subkeysize, 0);
+	offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, drep, hf_winreg_winreg_QueryInfoKey_max_classlen, 0);
 
 	return offset;
 }
@@ -2539,7 +2976,7 @@ winreg_dissect_element_QueryInfoKey_last_changed_time_(tvbuff_t *tvb _U_, int of
 /* IDL: [out] [in] [ref] winreg_String *classname, */
 /* IDL: [out] [ref] uint32 *num_subkeys, */
 /* IDL: [out] [ref] uint32 *max_subkeylen, */
-/* IDL: [out] [ref] uint32 *max_subkeysize, */
+/* IDL: [out] [ref] uint32 *max_classlen, */
 /* IDL: [out] [ref] uint32 *num_values, */
 /* IDL: [out] [ref] uint32 *max_valnamelen, */
 /* IDL: [out] [ref] uint32 *max_valbufsize, */
@@ -2562,7 +2999,7 @@ winreg_dissect_QueryInfoKey_response(tvbuff_t *tvb _U_, int offset _U_, packet_i
 	offset = winreg_dissect_element_QueryInfoKey_max_subkeylen(tvb, offset, pinfo, tree, drep);
 	offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
 
-	offset = winreg_dissect_element_QueryInfoKey_max_subkeysize(tvb, offset, pinfo, tree, drep);
+	offset = winreg_dissect_element_QueryInfoKey_max_classlen(tvb, offset, pinfo, tree, drep);
 	offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
 
 	offset = winreg_dissect_element_QueryInfoKey_num_values(tvb, offset, pinfo, tree, drep);
@@ -2618,7 +3055,15 @@ winreg_dissect_element_QueryValue_handle_(tvbuff_t *tvb _U_, int offset _U_, pac
 static int
 winreg_dissect_element_QueryValue_value_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	offset=cnf_dissect_winreg_String(tvb, offset, pinfo, tree, drep, 2|PIDL_SET_COL_INFO, hf_winreg_winreg_QueryValue_value_name);
+	offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, drep, winreg_dissect_element_QueryValue_value_name_, NDR_POINTER_REF, "Pointer to Value Name (winreg_String)",hf_winreg_winreg_QueryValue_value_name);
+
+	return offset;
+}
+
+static int
+winreg_dissect_element_QueryValue_value_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset=cnf_dissect_winreg_String(tvb, offset, pinfo, tree, drep, 0, hf_winreg_winreg_QueryValue_value_name);
 
 	return offset;
 }
@@ -2634,7 +3079,7 @@ winreg_dissect_element_QueryValue_type(tvbuff_t *tvb _U_, int offset _U_, packet
 static int
 winreg_dissect_element_QueryValue_type_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	offset = winreg_dissect_enum_Type(tvb, offset, pinfo, tree, drep, hf_winreg_winreg_QueryValue_type, 0);
+	offset=misc_dissect_enum_winreg_Type(tvb, offset, pinfo, tree, drep, hf_winreg_winreg_QueryValue_type, 0);
 
 	return offset;
 }
@@ -2664,44 +3109,44 @@ winreg_dissect_element_QueryValue_data__(tvbuff_t *tvb _U_, int offset _U_, pack
 }
 
 static int
-winreg_dissect_element_QueryValue_size(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+winreg_dissect_element_QueryValue_data_size(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, drep, winreg_dissect_element_QueryValue_size_, NDR_POINTER_UNIQUE, "Pointer to Size (uint32)",hf_winreg_winreg_QueryValue_size);
+	offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, drep, winreg_dissect_element_QueryValue_data_size_, NDR_POINTER_UNIQUE, "Pointer to Data Size (uint32)",hf_winreg_winreg_QueryValue_data_size);
 
 	return offset;
 }
 
 static int
-winreg_dissect_element_QueryValue_size_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+winreg_dissect_element_QueryValue_data_size_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, drep, hf_winreg_winreg_QueryValue_size, 0);
+	offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, drep, hf_winreg_winreg_QueryValue_data_size, 0);
 
 	return offset;
 }
 
 static int
-winreg_dissect_element_QueryValue_length(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+winreg_dissect_element_QueryValue_data_length(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, drep, winreg_dissect_element_QueryValue_length_, NDR_POINTER_UNIQUE, "Pointer to Length (uint32)",hf_winreg_winreg_QueryValue_length);
+	offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, drep, winreg_dissect_element_QueryValue_data_length_, NDR_POINTER_UNIQUE, "Pointer to Data Length (uint32)",hf_winreg_winreg_QueryValue_data_length);
 
 	return offset;
 }
 
 static int
-winreg_dissect_element_QueryValue_length_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+winreg_dissect_element_QueryValue_data_length_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, drep, hf_winreg_winreg_QueryValue_length, 0);
+	offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, drep, hf_winreg_winreg_QueryValue_data_length, 0);
 
 	return offset;
 }
 
 /* IDL: WERROR winreg_QueryValue( */
 /* IDL: [in] [ref] policy_handle *handle, */
-/* IDL: [in] winreg_String value_name, */
-/* IDL: [unique(1)] [out] [in] winreg_Type *type, */
-/* IDL: [unique(1)] [out] [in] [length_is(*length)] [size_is(*size)] uint8 *data, */
-/* IDL: [unique(1)] [out] [in] uint32 *size, */
-/* IDL: [unique(1)] [out] [in] uint32 *length */
+/* IDL: [in] [ref] winreg_String *value_name, */
+/* IDL: [out] [unique(1)] [in] winreg_Type *type, */
+/* IDL: [unique(1)] [out] [in] [range(0,0x4000000)] [length_is(data_length?*data_length:0)] [size_is(data_size?*data_size:0)] uint8 *data, */
+/* IDL: [out] [unique(1)] [in] uint32 *data_size, */
+/* IDL: [out] [unique(1)] [in] uint32 *data_length */
 /* IDL: ); */
 
 static int
@@ -2716,10 +3161,10 @@ winreg_dissect_QueryValue_response(tvbuff_t *tvb _U_, int offset _U_, packet_inf
 	offset = winreg_dissect_element_QueryValue_data(tvb, offset, pinfo, tree, drep);
 	offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
 
-	offset = winreg_dissect_element_QueryValue_size(tvb, offset, pinfo, tree, drep);
+	offset = winreg_dissect_element_QueryValue_data_size(tvb, offset, pinfo, tree, drep);
 	offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
 
-	offset = winreg_dissect_element_QueryValue_length(tvb, offset, pinfo, tree, drep);
+	offset = winreg_dissect_element_QueryValue_data_length(tvb, offset, pinfo, tree, drep);
 	offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
 
 	offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, hf_winreg_werror, &status);
@@ -2742,15 +3187,82 @@ winreg_dissect_QueryValue_request(tvbuff_t *tvb _U_, int offset _U_, packet_info
 	offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
 	offset = winreg_dissect_element_QueryValue_data(tvb, offset, pinfo, tree, drep);
 	offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
-	offset = winreg_dissect_element_QueryValue_size(tvb, offset, pinfo, tree, drep);
+	offset = winreg_dissect_element_QueryValue_data_size(tvb, offset, pinfo, tree, drep);
 	offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
-	offset = winreg_dissect_element_QueryValue_length(tvb, offset, pinfo, tree, drep);
+	offset = winreg_dissect_element_QueryValue_data_length(tvb, offset, pinfo, tree, drep);
 	offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
 	return offset;
 }
 
+static int
+winreg_dissect_element_ReplaceKey_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, drep, winreg_dissect_element_ReplaceKey_handle_, NDR_POINTER_REF, "Pointer to Handle (policy_handle)",hf_winreg_winreg_ReplaceKey_handle);
+
+	return offset;
+}
+
+static int
+winreg_dissect_element_ReplaceKey_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, drep, hf_winreg_winreg_ReplaceKey_handle, 0);
+
+	return offset;
+}
+
+static int
+winreg_dissect_element_ReplaceKey_subkey(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, drep, winreg_dissect_element_ReplaceKey_subkey_, NDR_POINTER_REF, "Pointer to Subkey (winreg_String)",hf_winreg_winreg_ReplaceKey_subkey);
+
+	return offset;
+}
+
+static int
+winreg_dissect_element_ReplaceKey_subkey_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset=cnf_dissect_winreg_String(tvb, offset, pinfo, tree, drep, 0, hf_winreg_winreg_ReplaceKey_subkey);
+
+	return offset;
+}
+
+static int
+winreg_dissect_element_ReplaceKey_new_file(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, drep, winreg_dissect_element_ReplaceKey_new_file_, NDR_POINTER_REF, "Pointer to New File (winreg_String)",hf_winreg_winreg_ReplaceKey_new_file);
+
+	return offset;
+}
+
+static int
+winreg_dissect_element_ReplaceKey_new_file_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset=cnf_dissect_winreg_String(tvb, offset, pinfo, tree, drep, 0, hf_winreg_winreg_ReplaceKey_new_file);
+
+	return offset;
+}
+
+static int
+winreg_dissect_element_ReplaceKey_old_file(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, drep, winreg_dissect_element_ReplaceKey_old_file_, NDR_POINTER_REF, "Pointer to Old File (winreg_String)",hf_winreg_winreg_ReplaceKey_old_file);
+
+	return offset;
+}
+
+static int
+winreg_dissect_element_ReplaceKey_old_file_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset=cnf_dissect_winreg_String(tvb, offset, pinfo, tree, drep, 0, hf_winreg_winreg_ReplaceKey_old_file);
+
+	return offset;
+}
+
 /* IDL: WERROR winreg_ReplaceKey( */
-/* IDL:  */
+/* IDL: [in] [ref] policy_handle *handle, */
+/* IDL: [in] [ref] winreg_String *subkey, */
+/* IDL: [in] [ref] winreg_String *new_file, */
+/* IDL: [in] [ref] winreg_String *old_file */
 /* IDL: ); */
 
 static int
@@ -2771,6 +3283,14 @@ static int
 winreg_dissect_ReplaceKey_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
 	pinfo->dcerpc_procedure_name="ReplaceKey";
+	offset = winreg_dissect_element_ReplaceKey_handle(tvb, offset, pinfo, tree, drep);
+	offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
+	offset = winreg_dissect_element_ReplaceKey_subkey(tvb, offset, pinfo, tree, drep);
+	offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
+	offset = winreg_dissect_element_ReplaceKey_new_file(tvb, offset, pinfo, tree, drep);
+	offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
+	offset = winreg_dissect_element_ReplaceKey_old_file(tvb, offset, pinfo, tree, drep);
+	offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
 	return offset;
 }
 
@@ -2809,7 +3329,7 @@ winreg_dissect_element_RestoreKey_filename_(tvbuff_t *tvb _U_, int offset _U_, p
 static int
 winreg_dissect_element_RestoreKey_flags(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, drep, hf_winreg_winreg_RestoreKey_flags, 0);
+	offset = winreg_dissect_bitmap_RestoreKeyFlags(tvb, offset, pinfo, tree, drep, hf_winreg_winreg_RestoreKey_flags, 0);
 
 	return offset;
 }
@@ -2817,7 +3337,7 @@ winreg_dissect_element_RestoreKey_flags(tvbuff_t *tvb _U_, int offset _U_, packe
 /* IDL: WERROR winreg_RestoreKey( */
 /* IDL: [in] [ref] policy_handle *handle, */
 /* IDL: [in] [ref] winreg_String *filename, */
-/* IDL: [in] uint32 flags */
+/* IDL: [in] winreg_RestoreKeyFlags flags */
 /* IDL: ); */
 
 static int
@@ -2945,9 +3465,9 @@ winreg_dissect_element_SetKeySecurity_handle_(tvbuff_t *tvb _U_, int offset _U_,
 }
 
 static int
-winreg_dissect_element_SetKeySecurity_access_mask(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+winreg_dissect_element_SetKeySecurity_sec_info(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	offset = winreg_dissect_bitmap_AccessMask(tvb, offset, pinfo, tree, drep, hf_winreg_winreg_SetKeySecurity_access_mask, 0);
+		offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, hf_winreg_winreg_GetKeySecurity_sec_info, NULL);
 
 	return offset;
 }
@@ -2970,7 +3490,7 @@ winreg_dissect_element_SetKeySecurity_sd_(tvbuff_t *tvb _U_, int offset _U_, pac
 
 /* IDL: WERROR winreg_SetKeySecurity( */
 /* IDL: [in] [ref] policy_handle *handle, */
-/* IDL: [in] winreg_AccessMask access_mask, */
+/* IDL: [in] security_secinfo sec_info, */
 /* IDL: [in] [ref] KeySecurityData *sd */
 /* IDL: ); */
 
@@ -2994,7 +3514,7 @@ winreg_dissect_SetKeySecurity_request(tvbuff_t *tvb _U_, int offset _U_, packet_
 	pinfo->dcerpc_procedure_name="SetKeySecurity";
 	offset = winreg_dissect_element_SetKeySecurity_handle(tvb, offset, pinfo, tree, drep);
 	offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
-	offset = winreg_dissect_element_SetKeySecurity_access_mask(tvb, offset, pinfo, tree, drep);
+	offset = winreg_dissect_element_SetKeySecurity_sec_info(tvb, offset, pinfo, tree, drep);
 	offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
 	offset = winreg_dissect_element_SetKeySecurity_sd(tvb, offset, pinfo, tree, drep);
 	offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
@@ -3028,7 +3548,7 @@ winreg_dissect_element_SetValue_name(tvbuff_t *tvb _U_, int offset _U_, packet_i
 static int
 winreg_dissect_element_SetValue_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	offset = winreg_dissect_enum_Type(tvb, offset, pinfo, tree, drep, hf_winreg_winreg_SetValue_type, 0);
+	offset=misc_dissect_enum_winreg_Type(tvb, offset, pinfo, tree, drep, hf_winreg_winreg_SetValue_type, 0);
 
 	return offset;
 }
@@ -3104,10 +3624,43 @@ winreg_dissect_SetValue_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *
 	return offset;
 }
 
-/* IDL: WERROR winreg_UnLoadKey( */
-/* IDL:  */
-/* IDL: ); */
-
+static int
+winreg_dissect_element_UnLoadKey_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, drep, winreg_dissect_element_UnLoadKey_handle_, NDR_POINTER_REF, "Pointer to Handle (policy_handle)",hf_winreg_winreg_UnLoadKey_handle);
+
+	return offset;
+}
+
+static int
+winreg_dissect_element_UnLoadKey_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, drep, hf_winreg_winreg_UnLoadKey_handle, 0);
+
+	return offset;
+}
+
+static int
+winreg_dissect_element_UnLoadKey_subkey(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, drep, winreg_dissect_element_UnLoadKey_subkey_, NDR_POINTER_REF, "Pointer to Subkey (winreg_String)",hf_winreg_winreg_UnLoadKey_subkey);
+
+	return offset;
+}
+
+static int
+winreg_dissect_element_UnLoadKey_subkey_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset=cnf_dissect_winreg_String(tvb, offset, pinfo, tree, drep, 0, hf_winreg_winreg_UnLoadKey_subkey);
+
+	return offset;
+}
+
+/* IDL: WERROR winreg_UnLoadKey( */
+/* IDL: [in] [ref] policy_handle *handle, */
+/* IDL: [in] [ref] winreg_String *subkey */
+/* IDL: ); */
+
 static int
 winreg_dissect_UnLoadKey_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
@@ -3126,6 +3679,10 @@ static int
 winreg_dissect_UnLoadKey_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
 	pinfo->dcerpc_procedure_name="UnLoadKey";
+	offset = winreg_dissect_element_UnLoadKey_handle(tvb, offset, pinfo, tree, drep);
+	offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
+	offset = winreg_dissect_element_UnLoadKey_subkey(tvb, offset, pinfo, tree, drep);
+	offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
 	return offset;
 }
 
@@ -3148,7 +3705,7 @@ winreg_dissect_element_InitiateSystemShutdown_hostname_(tvbuff_t *tvb _U_, int o
 static int
 winreg_dissect_element_InitiateSystemShutdown_message(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, drep, winreg_dissect_element_InitiateSystemShutdown_message_, NDR_POINTER_UNIQUE, "Pointer to Message (initshutdown_String)",hf_winreg_winreg_InitiateSystemShutdown_message);
+	offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, drep, winreg_dissect_element_InitiateSystemShutdown_message_, NDR_POINTER_UNIQUE, "Pointer to Message (lsa_StringLarge)",hf_winreg_winreg_InitiateSystemShutdown_message);
 
 	return offset;
 }
@@ -3156,7 +3713,7 @@ winreg_dissect_element_InitiateSystemShutdown_message(tvbuff_t *tvb _U_, int off
 static int
 winreg_dissect_element_InitiateSystemShutdown_message_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	offset = winreg_dissect_struct_initshutdown_String(tvb,offset,pinfo,tree,drep,hf_winreg_winreg_InitiateSystemShutdown_message,0);
+	offset=lsarpc_dissect_struct_lsa_StringLarge(tvb, offset, pinfo, tree, drep, hf_winreg_winreg_InitiateSystemShutdown_message, 0);
 
 	return offset;
 }
@@ -3178,19 +3735,19 @@ winreg_dissect_element_InitiateSystemShutdown_force_apps(tvbuff_t *tvb _U_, int
 }
 
 static int
-winreg_dissect_element_InitiateSystemShutdown_reboot(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+winreg_dissect_element_InitiateSystemShutdown_do_reboot(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	offset = PIDL_dissect_uint8(tvb, offset, pinfo, tree, drep, hf_winreg_winreg_InitiateSystemShutdown_reboot, 0);
+	offset = PIDL_dissect_uint8(tvb, offset, pinfo, tree, drep, hf_winreg_winreg_InitiateSystemShutdown_do_reboot, 0);
 
 	return offset;
 }
 
 /* IDL: WERROR winreg_InitiateSystemShutdown( */
 /* IDL: [unique(1)] [in] uint16 *hostname, */
-/* IDL: [unique(1)] [in] initshutdown_String *message, */
+/* IDL: [unique(1)] [in] lsa_StringLarge *message, */
 /* IDL: [in] uint32 timeout, */
 /* IDL: [in] uint8 force_apps, */
-/* IDL: [in] uint8 reboot */
+/* IDL: [in] uint8 do_reboot */
 /* IDL: ); */
 
 static int
@@ -3219,7 +3776,7 @@ winreg_dissect_InitiateSystemShutdown_request(tvbuff_t *tvb _U_, int offset _U_,
 	offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
 	offset = winreg_dissect_element_InitiateSystemShutdown_force_apps(tvb, offset, pinfo, tree, drep);
 	offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
-	offset = winreg_dissect_element_InitiateSystemShutdown_reboot(tvb, offset, pinfo, tree, drep);
+	offset = winreg_dissect_element_InitiateSystemShutdown_do_reboot(tvb, offset, pinfo, tree, drep);
 	offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
 	return offset;
 }
@@ -3495,25 +4052,49 @@ winreg_dissect_element_QueryMultipleValues_key_handle_(tvbuff_t *tvb _U_, int of
 }
 
 static int
-winreg_dissect_element_QueryMultipleValues_values(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+winreg_dissect_element_QueryMultipleValues_values_in(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, drep, winreg_dissect_element_QueryMultipleValues_values_in_, NDR_POINTER_REF, "Pointer to Values In (QueryMultipleValue)",hf_winreg_winreg_QueryMultipleValues_values_in);
+
+	return offset;
+}
+
+static int
+winreg_dissect_element_QueryMultipleValues_values_in_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = dissect_ndr_ucvarray(tvb, offset, pinfo, tree, drep, winreg_dissect_element_QueryMultipleValues_values_in__);
+
+	return offset;
+}
+
+static int
+winreg_dissect_element_QueryMultipleValues_values_in__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, drep, winreg_dissect_element_QueryMultipleValues_values_, NDR_POINTER_REF, "Pointer to Values (QueryMultipleValue)",hf_winreg_winreg_QueryMultipleValues_values);
+	offset = winreg_dissect_struct_QueryMultipleValue(tvb,offset,pinfo,tree,drep,hf_winreg_winreg_QueryMultipleValues_values_in,0);
 
 	return offset;
 }
 
 static int
-winreg_dissect_element_QueryMultipleValues_values_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+winreg_dissect_element_QueryMultipleValues_values_out(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	offset = dissect_ndr_ucvarray(tvb, offset, pinfo, tree, drep, winreg_dissect_element_QueryMultipleValues_values__);
+	offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, drep, winreg_dissect_element_QueryMultipleValues_values_out_, NDR_POINTER_REF, "Pointer to Values Out (QueryMultipleValue)",hf_winreg_winreg_QueryMultipleValues_values_out);
 
 	return offset;
 }
 
 static int
-winreg_dissect_element_QueryMultipleValues_values__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+winreg_dissect_element_QueryMultipleValues_values_out_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	offset = winreg_dissect_struct_QueryMultipleValue(tvb,offset,pinfo,tree,drep,hf_winreg_winreg_QueryMultipleValues_values,0);
+	offset = dissect_ndr_ucvarray(tvb, offset, pinfo, tree, drep, winreg_dissect_element_QueryMultipleValues_values_out__);
+
+	return offset;
+}
+
+static int
+winreg_dissect_element_QueryMultipleValues_values_out__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = winreg_dissect_struct_QueryMultipleValue(tvb,offset,pinfo,tree,drep,hf_winreg_winreg_QueryMultipleValues_values_out,0);
 
 	return offset;
 }
@@ -3568,9 +4149,10 @@ winreg_dissect_element_QueryMultipleValues_buffer_size_(tvbuff_t *tvb _U_, int o
 
 /* IDL: WERROR winreg_QueryMultipleValues( */
 /* IDL: [in] [ref] policy_handle *key_handle, */
-/* IDL: [out] [in] [ref] [length_is(num_values)] [size_is(num_values)] QueryMultipleValue *values, */
+/* IDL: [in] [ref] [length_is(num_values)] [size_is(num_values)] QueryMultipleValue *values_in, */
+/* IDL: [out] [ref] [length_is(num_values)] [size_is(num_values)] QueryMultipleValue *values_out, */
 /* IDL: [in] uint32 num_values, */
-/* IDL: [unique(1)] [out] [in] [length_is(*buffer_size)] [size_is(*buffer_size)] uint8 *buffer, */
+/* IDL: [out] [unique(1)] [in] [length_is(*buffer_size)] [size_is(*buffer_size)] uint8 *buffer, */
 /* IDL: [out] [in] [ref] uint32 *buffer_size */
 /* IDL: ); */
 
@@ -3580,7 +4162,7 @@ winreg_dissect_QueryMultipleValues_response(tvbuff_t *tvb _U_, int offset _U_, p
 	guint32 status;
 
 	pinfo->dcerpc_procedure_name="QueryMultipleValues";
-	offset = winreg_dissect_element_QueryMultipleValues_values(tvb, offset, pinfo, tree, drep);
+	offset = winreg_dissect_element_QueryMultipleValues_values_out(tvb, offset, pinfo, tree, drep);
 	offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
 
 	offset = winreg_dissect_element_QueryMultipleValues_buffer(tvb, offset, pinfo, tree, drep);
@@ -3603,7 +4185,7 @@ winreg_dissect_QueryMultipleValues_request(tvbuff_t *tvb _U_, int offset _U_, pa
 	pinfo->dcerpc_procedure_name="QueryMultipleValues";
 	offset = winreg_dissect_element_QueryMultipleValues_key_handle(tvb, offset, pinfo, tree, drep);
 	offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
-	offset = winreg_dissect_element_QueryMultipleValues_values(tvb, offset, pinfo, tree, drep);
+	offset = winreg_dissect_element_QueryMultipleValues_values_in(tvb, offset, pinfo, tree, drep);
 	offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
 	offset = winreg_dissect_element_QueryMultipleValues_num_values(tvb, offset, pinfo, tree, drep);
 	offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
@@ -3633,7 +4215,7 @@ winreg_dissect_element_InitiateSystemShutdownEx_hostname_(tvbuff_t *tvb _U_, int
 static int
 winreg_dissect_element_InitiateSystemShutdownEx_message(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, drep, winreg_dissect_element_InitiateSystemShutdownEx_message_, NDR_POINTER_UNIQUE, "Pointer to Message (initshutdown_String)",hf_winreg_winreg_InitiateSystemShutdownEx_message);
+	offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, drep, winreg_dissect_element_InitiateSystemShutdownEx_message_, NDR_POINTER_UNIQUE, "Pointer to Message (lsa_StringLarge)",hf_winreg_winreg_InitiateSystemShutdownEx_message);
 
 	return offset;
 }
@@ -3641,7 +4223,7 @@ winreg_dissect_element_InitiateSystemShutdownEx_message(tvbuff_t *tvb _U_, int o
 static int
 winreg_dissect_element_InitiateSystemShutdownEx_message_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	offset = winreg_dissect_struct_initshutdown_String(tvb,offset,pinfo,tree,drep,hf_winreg_winreg_InitiateSystemShutdownEx_message,0);
+	offset=lsarpc_dissect_struct_lsa_StringLarge(tvb, offset, pinfo, tree, drep, hf_winreg_winreg_InitiateSystemShutdownEx_message, 0);
 
 	return offset;
 }
@@ -3663,9 +4245,9 @@ winreg_dissect_element_InitiateSystemShutdownEx_force_apps(tvbuff_t *tvb _U_, in
 }
 
 static int
-winreg_dissect_element_InitiateSystemShutdownEx_reboot(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+winreg_dissect_element_InitiateSystemShutdownEx_do_reboot(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	offset = PIDL_dissect_uint8(tvb, offset, pinfo, tree, drep, hf_winreg_winreg_InitiateSystemShutdownEx_reboot, 0);
+	offset = PIDL_dissect_uint8(tvb, offset, pinfo, tree, drep, hf_winreg_winreg_InitiateSystemShutdownEx_do_reboot, 0);
 
 	return offset;
 }
@@ -3680,10 +4262,10 @@ winreg_dissect_element_InitiateSystemShutdownEx_reason(tvbuff_t *tvb _U_, int of
 
 /* IDL: WERROR winreg_InitiateSystemShutdownEx( */
 /* IDL: [unique(1)] [in] uint16 *hostname, */
-/* IDL: [unique(1)] [in] initshutdown_String *message, */
+/* IDL: [unique(1)] [in] lsa_StringLarge *message, */
 /* IDL: [in] uint32 timeout, */
 /* IDL: [in] uint8 force_apps, */
-/* IDL: [in] uint8 reboot, */
+/* IDL: [in] uint8 do_reboot, */
 /* IDL: [in] uint32 reason */
 /* IDL: ); */
 
@@ -3713,15 +4295,74 @@ winreg_dissect_InitiateSystemShutdownEx_request(tvbuff_t *tvb _U_, int offset _U
 	offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
 	offset = winreg_dissect_element_InitiateSystemShutdownEx_force_apps(tvb, offset, pinfo, tree, drep);
 	offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
-	offset = winreg_dissect_element_InitiateSystemShutdownEx_reboot(tvb, offset, pinfo, tree, drep);
+	offset = winreg_dissect_element_InitiateSystemShutdownEx_do_reboot(tvb, offset, pinfo, tree, drep);
 	offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
 	offset = winreg_dissect_element_InitiateSystemShutdownEx_reason(tvb, offset, pinfo, tree, drep);
 	offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
 	return offset;
 }
 
+static int
+winreg_dissect_element_SaveKeyEx_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, drep, winreg_dissect_element_SaveKeyEx_handle_, NDR_POINTER_REF, "Pointer to Handle (policy_handle)",hf_winreg_winreg_SaveKeyEx_handle);
+
+	return offset;
+}
+
+static int
+winreg_dissect_element_SaveKeyEx_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, drep, hf_winreg_winreg_SaveKeyEx_handle, 0);
+
+	return offset;
+}
+
+static int
+winreg_dissect_element_SaveKeyEx_filename(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, drep, winreg_dissect_element_SaveKeyEx_filename_, NDR_POINTER_REF, "Pointer to Filename (winreg_String)",hf_winreg_winreg_SaveKeyEx_filename);
+
+	return offset;
+}
+
+static int
+winreg_dissect_element_SaveKeyEx_filename_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset=cnf_dissect_winreg_String(tvb, offset, pinfo, tree, drep, 0, hf_winreg_winreg_SaveKeyEx_filename);
+
+	return offset;
+}
+
+static int
+winreg_dissect_element_SaveKeyEx_sec_attrib(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, drep, winreg_dissect_element_SaveKeyEx_sec_attrib_, NDR_POINTER_UNIQUE, "Pointer to Sec Attrib (KeySecurityAttribute)",hf_winreg_winreg_SaveKeyEx_sec_attrib);
+
+	return offset;
+}
+
+static int
+winreg_dissect_element_SaveKeyEx_sec_attrib_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = winreg_dissect_struct_KeySecurityAttribute(tvb,offset,pinfo,tree,drep,hf_winreg_winreg_SaveKeyEx_sec_attrib,0);
+
+	return offset;
+}
+
+static int
+winreg_dissect_element_SaveKeyEx_flags(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, drep, hf_winreg_winreg_SaveKeyEx_flags, 0);
+
+	return offset;
+}
+
 /* IDL: WERROR winreg_SaveKeyEx( */
-/* IDL:  */
+/* IDL: [in] [ref] policy_handle *handle, */
+/* IDL: [in] [ref] winreg_String *filename, */
+/* IDL: [unique(1)] [in] KeySecurityAttribute *sec_attrib, */
+/* IDL: [in] uint32 flags */
 /* IDL: ); */
 
 static int
@@ -3742,6 +4383,14 @@ static int
 winreg_dissect_SaveKeyEx_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
 	pinfo->dcerpc_procedure_name="SaveKeyEx";
+	offset = winreg_dissect_element_SaveKeyEx_handle(tvb, offset, pinfo, tree, drep);
+	offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
+	offset = winreg_dissect_element_SaveKeyEx_filename(tvb, offset, pinfo, tree, drep);
+	offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
+	offset = winreg_dissect_element_SaveKeyEx_sec_attrib(tvb, offset, pinfo, tree, drep);
+	offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
+	offset = winreg_dissect_element_SaveKeyEx_flags(tvb, offset, pinfo, tree, drep);
+	offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
 	return offset;
 }
 
@@ -3893,8 +4542,142 @@ winreg_dissect_OpenHKPN_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *
 	return offset;
 }
 
+static int
+winreg_dissect_element_QueryMultipleValues2_key_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, drep, winreg_dissect_element_QueryMultipleValues2_key_handle_, NDR_POINTER_REF, "Pointer to Key Handle (policy_handle)",hf_winreg_winreg_QueryMultipleValues2_key_handle);
+
+	return offset;
+}
+
+static int
+winreg_dissect_element_QueryMultipleValues2_key_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, drep, hf_winreg_winreg_QueryMultipleValues2_key_handle, 0);
+
+	return offset;
+}
+
+static int
+winreg_dissect_element_QueryMultipleValues2_values_in(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, drep, winreg_dissect_element_QueryMultipleValues2_values_in_, NDR_POINTER_REF, "Pointer to Values In (QueryMultipleValue)",hf_winreg_winreg_QueryMultipleValues2_values_in);
+
+	return offset;
+}
+
+static int
+winreg_dissect_element_QueryMultipleValues2_values_in_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = dissect_ndr_ucvarray(tvb, offset, pinfo, tree, drep, winreg_dissect_element_QueryMultipleValues2_values_in__);
+
+	return offset;
+}
+
+static int
+winreg_dissect_element_QueryMultipleValues2_values_in__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = winreg_dissect_struct_QueryMultipleValue(tvb,offset,pinfo,tree,drep,hf_winreg_winreg_QueryMultipleValues2_values_in,0);
+
+	return offset;
+}
+
+static int
+winreg_dissect_element_QueryMultipleValues2_values_out(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, drep, winreg_dissect_element_QueryMultipleValues2_values_out_, NDR_POINTER_REF, "Pointer to Values Out (QueryMultipleValue)",hf_winreg_winreg_QueryMultipleValues2_values_out);
+
+	return offset;
+}
+
+static int
+winreg_dissect_element_QueryMultipleValues2_values_out_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = dissect_ndr_ucvarray(tvb, offset, pinfo, tree, drep, winreg_dissect_element_QueryMultipleValues2_values_out__);
+
+	return offset;
+}
+
+static int
+winreg_dissect_element_QueryMultipleValues2_values_out__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = winreg_dissect_struct_QueryMultipleValue(tvb,offset,pinfo,tree,drep,hf_winreg_winreg_QueryMultipleValues2_values_out,0);
+
+	return offset;
+}
+
+static int
+winreg_dissect_element_QueryMultipleValues2_num_values(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, drep, hf_winreg_winreg_QueryMultipleValues2_num_values, 0);
+
+	return offset;
+}
+
+static int
+winreg_dissect_element_QueryMultipleValues2_buffer(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, drep, winreg_dissect_element_QueryMultipleValues2_buffer_, NDR_POINTER_UNIQUE, "Pointer to Buffer (uint8)",hf_winreg_winreg_QueryMultipleValues2_buffer);
+
+	return offset;
+}
+
+static int
+winreg_dissect_element_QueryMultipleValues2_buffer_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = dissect_ndr_ucvarray(tvb, offset, pinfo, tree, drep, winreg_dissect_element_QueryMultipleValues2_buffer__);
+
+	return offset;
+}
+
+static int
+winreg_dissect_element_QueryMultipleValues2_buffer__(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = PIDL_dissect_uint8(tvb, offset, pinfo, tree, drep, hf_winreg_winreg_QueryMultipleValues2_buffer, 0);
+
+	return offset;
+}
+
+static int
+winreg_dissect_element_QueryMultipleValues2_offered(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, drep, winreg_dissect_element_QueryMultipleValues2_offered_, NDR_POINTER_REF, "Pointer to Offered (uint32)",hf_winreg_winreg_QueryMultipleValues2_offered);
+
+	return offset;
+}
+
+static int
+winreg_dissect_element_QueryMultipleValues2_offered_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, drep, hf_winreg_winreg_QueryMultipleValues2_offered, 0);
+
+	return offset;
+}
+
+static int
+winreg_dissect_element_QueryMultipleValues2_needed(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, drep, winreg_dissect_element_QueryMultipleValues2_needed_, NDR_POINTER_REF, "Pointer to Needed (uint32)",hf_winreg_winreg_QueryMultipleValues2_needed);
+
+	return offset;
+}
+
+static int
+winreg_dissect_element_QueryMultipleValues2_needed_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, drep, hf_winreg_winreg_QueryMultipleValues2_needed, 0);
+
+	return offset;
+}
+
 /* IDL: WERROR winreg_QueryMultipleValues2( */
-/* IDL:  */
+/* IDL: [in] [ref] policy_handle *key_handle, */
+/* IDL: [in] [ref] [length_is(num_values)] [size_is(num_values)] QueryMultipleValue *values_in, */
+/* IDL: [out] [ref] [length_is(num_values)] [size_is(num_values)] QueryMultipleValue *values_out, */
+/* IDL: [in] uint32 num_values, */
+/* IDL: [out] [unique(1)] [in] [length_is(*offered)] [size_is(*offered)] uint8 *buffer, */
+/* IDL: [in] [ref] uint32 *offered, */
+/* IDL: [out] [ref] uint32 *needed */
 /* IDL: ); */
 
 static int
@@ -3903,6 +4686,15 @@ winreg_dissect_QueryMultipleValues2_response(tvbuff_t *tvb _U_, int offset _U_,
 	guint32 status;
 
 	pinfo->dcerpc_procedure_name="QueryMultipleValues2";
+	offset = winreg_dissect_element_QueryMultipleValues2_values_out(tvb, offset, pinfo, tree, drep);
+	offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
+
+	offset = winreg_dissect_element_QueryMultipleValues2_buffer(tvb, offset, pinfo, tree, drep);
+	offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
+
+	offset = winreg_dissect_element_QueryMultipleValues2_needed(tvb, offset, pinfo, tree, drep);
+	offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
+
 	offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, hf_winreg_werror, &status);
 
 	if (status != 0)
@@ -3915,6 +4707,100 @@ static int
 winreg_dissect_QueryMultipleValues2_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
 	pinfo->dcerpc_procedure_name="QueryMultipleValues2";
+	offset = winreg_dissect_element_QueryMultipleValues2_key_handle(tvb, offset, pinfo, tree, drep);
+	offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
+	offset = winreg_dissect_element_QueryMultipleValues2_values_in(tvb, offset, pinfo, tree, drep);
+	offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
+	offset = winreg_dissect_element_QueryMultipleValues2_num_values(tvb, offset, pinfo, tree, drep);
+	offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
+	offset = winreg_dissect_element_QueryMultipleValues2_buffer(tvb, offset, pinfo, tree, drep);
+	offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
+	offset = winreg_dissect_element_QueryMultipleValues2_offered(tvb, offset, pinfo, tree, drep);
+	offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
+	return offset;
+}
+
+static int
+winreg_dissect_element_DeleteKeyEx_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, drep, winreg_dissect_element_DeleteKeyEx_handle_, NDR_POINTER_REF, "Pointer to Handle (policy_handle)",hf_winreg_winreg_DeleteKeyEx_handle);
+
+	return offset;
+}
+
+static int
+winreg_dissect_element_DeleteKeyEx_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, drep, hf_winreg_winreg_DeleteKeyEx_handle, 0);
+
+	return offset;
+}
+
+static int
+winreg_dissect_element_DeleteKeyEx_key(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, drep, winreg_dissect_element_DeleteKeyEx_key_, NDR_POINTER_REF, "Pointer to Key (winreg_String)",hf_winreg_winreg_DeleteKeyEx_key);
+
+	return offset;
+}
+
+static int
+winreg_dissect_element_DeleteKeyEx_key_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset=cnf_dissect_winreg_String(tvb, offset, pinfo, tree, drep, 0, hf_winreg_winreg_DeleteKeyEx_key);
+
+	return offset;
+}
+
+static int
+winreg_dissect_element_DeleteKeyEx_access_mask(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = winreg_dissect_bitmap_AccessMask(tvb, offset, pinfo, tree, drep, hf_winreg_winreg_DeleteKeyEx_access_mask, 0);
+
+	return offset;
+}
+
+static int
+winreg_dissect_element_DeleteKeyEx_reserved(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, drep, hf_winreg_winreg_DeleteKeyEx_reserved, 0);
+
+	return offset;
+}
+
+/* IDL: WERROR winreg_DeleteKeyEx( */
+/* IDL: [in] [ref] policy_handle *handle, */
+/* IDL: [in] [ref] winreg_String *key, */
+/* IDL: [in] winreg_AccessMask access_mask, */
+/* IDL: [in] uint32 reserved */
+/* IDL: ); */
+
+static int
+winreg_dissect_DeleteKeyEx_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	guint32 status;
+
+	pinfo->dcerpc_procedure_name="DeleteKeyEx";
+	offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, hf_winreg_werror, &status);
+
+	if (status != 0)
+		col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x"));
+
+	return offset;
+}
+
+static int
+winreg_dissect_DeleteKeyEx_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	pinfo->dcerpc_procedure_name="DeleteKeyEx";
+	offset = winreg_dissect_element_DeleteKeyEx_handle(tvb, offset, pinfo, tree, drep);
+	offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
+	offset = winreg_dissect_element_DeleteKeyEx_key(tvb, offset, pinfo, tree, drep);
+	offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
+	offset = winreg_dissect_element_DeleteKeyEx_access_mask(tvb, offset, pinfo, tree, drep);
+	offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
+	offset = winreg_dissect_element_DeleteKeyEx_reserved(tvb, offset, pinfo, tree, drep);
+	offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
 	return offset;
 }
 
@@ -3990,6 +4876,8 @@ static dcerpc_sub_dissector winreg_dissectors[] = {
 	   winreg_dissect_OpenHKPN_request, winreg_dissect_OpenHKPN_response},
 	{ 34, "QueryMultipleValues2",
 	   winreg_dissect_QueryMultipleValues2_request, winreg_dissect_QueryMultipleValues2_response},
+	{ 35, "DeleteKeyEx",
+	   winreg_dissect_DeleteKeyEx_request, winreg_dissect_DeleteKeyEx_response},
 	{ 0, NULL, NULL, NULL }
 };
 
@@ -4002,102 +4890,72 @@ void proto_register_dcerpc_winreg(void)
 	  { "String2", "winreg.winreg_NotifyChangeKeyValue.string2", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
 	{ &hf_winreg_winreg_InitiateSystemShutdown_message, 
 	  { "Message", "winreg.winreg_InitiateSystemShutdown.message", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_winreg_KeySecurityData_size, 
-	  { "Size", "winreg.KeySecurityData.size", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
 	{ &hf_winreg_winreg_String_name, 
 	  { "Name", "winreg.winreg_String.name", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
 	{ &hf_winreg_winreg_InitiateSystemShutdownEx_message, 
 	  { "Message", "winreg.winreg_InitiateSystemShutdownEx.message", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_winreg_winreg_InitiateSystemShutdown_reboot, 
-	  { "Reboot", "winreg.winreg_InitiateSystemShutdown.reboot", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
 	{ &hf_winreg_winreg_EnumValue_enum_index, 
 	  { "Enum Index", "winreg.winreg_EnumValue.enum_index", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
 	{ &hf_winreg_access_mask, 
 	  { "Access Mask", "winreg.access_mask", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
-	{ &hf_winreg_winreg_QueryMultipleValues_key_handle, 
-	  { "Key Handle", "winreg.winreg_QueryMultipleValues.key_handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_winreg_winreg_LoadKey_keyname, 
-	  { "Keyname", "winreg.winreg_LoadKey.keyname", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_winreg_winreg_EnumKey_name, 
-	  { "Name", "winreg.winreg_EnumKey.name", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
 	{ &hf_winreg_winreg_CreateKey_options, 
-	  { "Options", "winreg.winreg_CreateKey.options", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_winreg_winreg_EnumValue_type, 
-	  { "Type", "winreg.winreg_EnumValue.type", FT_UINT32, BASE_DEC, VALS(winreg_winreg_Type_vals), 0, NULL, HFILL }},
+	  { "Options", "winreg.winreg_CreateKey.options", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
 	{ &hf_winreg_winreg_InitiateSystemShutdownEx_timeout, 
 	  { "Timeout", "winreg.winreg_InitiateSystemShutdownEx.timeout", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_winreg_winreg_EnumKey_last_changed_time, 
-	  { "Last Changed Time", "winreg.winreg_EnumKey.last_changed_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0, NULL, HFILL }},
-	{ &hf_winreg_winreg_QueryValue_size, 
-	  { "Size", "winreg.winreg_QueryValue.size", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_winreg_winreg_EnumValue_size, 
-	  { "Size", "winreg.winreg_EnumValue.size", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
 	{ &hf_winreg_handle, 
 	  { "Handle", "winreg.handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_winreg_winreg_SaveKey_sec_attrib, 
-	  { "Sec Attrib", "winreg.winreg_SaveKey.sec_attrib", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
 	{ &hf_winreg_winreg_QueryInfoKey_max_valnamelen, 
 	  { "Max Valnamelen", "winreg.winreg_QueryInfoKey.max_valnamelen", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
 	{ &hf_winreg_winreg_SecBuf_length, 
 	  { "Length", "winreg.winreg_SecBuf.length", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_winreg_winreg_InitiateSystemShutdownEx_reboot, 
-	  { "Reboot", "winreg.winreg_InitiateSystemShutdownEx.reboot", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_winreg_sd, 
-	  { "KeySecurityData", "winreg.sd", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_winreg_winreg_SaveKey_filename, 
-	  { "Filename", "winreg.winreg_SaveKey.filename", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_InitiateSystemShutdown_do_reboot, 
+	  { "Do Reboot", "winreg.winreg_InitiateSystemShutdown.do_reboot", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_DeleteKeyEx_handle, 
+	  { "Handle", "winreg.winreg_DeleteKeyEx.handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
 	{ &hf_winreg_winreg_QueryMultipleValues_buffer_size, 
 	  { "Buffer Size", "winreg.winreg_QueryMultipleValues.buffer_size", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_winreg_winreg_QueryValue_data, 
-	  { "Data", "winreg.winreg_QueryValue.data", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
 	{ &hf_winreg_winreg_CreateKey_new_handle, 
 	  { "New Handle", "winreg.winreg_CreateKey.new_handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_winreg_winreg_QueryInfoKey_max_subkeysize, 
-	  { "Max Subkeysize", "winreg.winreg_QueryInfoKey.max_subkeysize", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_winreg_winreg_InitiateSystemShutdown_hostname, 
-	  { "Hostname", "winreg.winreg_InitiateSystemShutdown.hostname", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_winreg_KeySecurityData_data, 
-	  { "Data", "winreg.KeySecurityData.data", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_QueryMultipleValues2_needed, 
+	  { "Needed", "winreg.winreg_QueryMultipleValues2.needed", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_QueryMultipleValue_ve_valuelen, 
+	  { "Ve Valuelen", "winreg.QueryMultipleValue.ve_valuelen", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
 	{ &hf_winreg_KeySecurityAttribute_sec_data, 
 	  { "Sec Data", "winreg.KeySecurityAttribute.sec_data", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_winreg_winreg_OpenKey_access_mask, 
-	  { "Access Mask", "winreg.winreg_OpenKey.access_mask", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
-	{ &hf_winreg_QueryMultipleValue_name, 
-	  { "Name", "winreg.QueryMultipleValue.name", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
 	{ &hf_winreg_winreg_GetKeySecurity_sec_info, 
-	  { "Sec Info", "winreg.winreg_GetKeySecurity.sec_info", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
+	  { "Sec Info", "winreg.winreg_GetKeySecurity.sec_info", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_SaveKeyEx_handle, 
+	  { "Handle", "winreg.winreg_SaveKeyEx.handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_KeyOptions_REG_OPTION_VOLATILE, 
+	  { "Reg Option Volatile", "winreg.winreg_KeyOptions.REG_OPTION_VOLATILE", FT_BOOLEAN, 32, TFS(&winreg_KeyOptions_REG_OPTION_VOLATILE_tfs), ( 0x00000001 ), NULL, HFILL }},
+	{ &hf_winreg_winreg_QueryMultipleValues2_num_values, 
+	  { "Num Values", "winreg.winreg_QueryMultipleValues2.num_values", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_SetKeySecurity_sec_info, 
+	  { "Sec Info", "winreg.winreg_SetKeySecurity.sec_info", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
 	{ &hf_winreg_winreg_StringBuf_size, 
 	  { "Size", "winreg.winreg_StringBuf.size", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
 	{ &hf_winreg_winreg_SecBuf_sd, 
 	  { "Sd", "winreg.winreg_SecBuf.sd", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
 	{ &hf_winreg_winreg_QueryInfoKey_secdescsize, 
 	  { "Secdescsize", "winreg.winreg_QueryInfoKey.secdescsize", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_winreg_winreg_OpenKey_keyname, 
-	  { "Keyname", "winreg.winreg_OpenKey.keyname", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_winreg_QueryMultipleValue_type, 
-	  { "Type", "winreg.QueryMultipleValue.type", FT_UINT32, BASE_DEC, VALS(winreg_winreg_Type_vals), 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_NotifyChangeType_REG_NOTIFY_CHANGE_SECURITY, 
+	  { "Reg Notify Change Security", "winreg.winreg_NotifyChangeType.REG_NOTIFY_CHANGE_SECURITY", FT_BOOLEAN, 32, TFS(&winreg_NotifyChangeType_REG_NOTIFY_CHANGE_SECURITY_tfs), ( 0x00000008 ), NULL, HFILL }},
 	{ &hf_winreg_winreg_SetValue_name, 
 	  { "Name", "winreg.winreg_SetValue.name", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
 	{ &hf_winreg_winreg_RestoreKey_flags, 
-	  { "Flags", "winreg.winreg_RestoreKey.flags", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_winreg_winreg_NotifyChangeKeyValue_watch_subtree, 
-	  { "Watch Subtree", "winreg.winreg_NotifyChangeKeyValue.watch_subtree", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+	  { "Flags", "winreg.winreg_RestoreKey.flags", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_QueryMultipleValue_ve_type, 
+	  { "Ve Type", "winreg.QueryMultipleValue.ve_type", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
 	{ &hf_winreg_winreg_CreateKey_secdesc, 
 	  { "Secdesc", "winreg.winreg_CreateKey.secdesc", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_DeleteKeyEx_reserved, 
+	  { "Reserved", "winreg.winreg_DeleteKeyEx.reserved", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
 	{ &hf_winreg_winreg_InitiateSystemShutdownEx_force_apps, 
 	  { "Force Apps", "winreg.winreg_InitiateSystemShutdownEx.force_apps", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
 	{ &hf_winreg_winreg_SetValue_type, 
-	  { "Type", "winreg.winreg_SetValue.type", FT_UINT32, BASE_DEC, VALS(winreg_winreg_Type_vals), 0, NULL, HFILL }},
-	{ &hf_winreg_winreg_CreateKey_name, 
-	  { "Name", "winreg.winreg_CreateKey.name", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_winreg_KeySecurityData_len, 
-	  { "Len", "winreg.KeySecurityData.len", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_winreg_winreg_String_name_len, 
-	  { "Name Len", "winreg.winreg_String.name_len", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
+	  { "Type", "winreg.winreg_SetValue.type", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
 	{ &hf_winreg_opnum, 
 	  { "Operation", "winreg.opnum", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_winreg_winreg_DeleteKey_key, 
-	  { "Key", "winreg.winreg_DeleteKey.key", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
 	{ &hf_winreg_winreg_EnumValue_name, 
 	  { "Name", "winreg.winreg_EnumValue.name", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
 	{ &hf_winreg_winreg_LoadKey_filename, 
@@ -4106,86 +4964,58 @@ void proto_register_dcerpc_winreg(void)
 	  { "Key Create Link", "winreg.winreg_AccessMask.KEY_CREATE_LINK", FT_BOOLEAN, 32, TFS(&winreg_AccessMask_KEY_CREATE_LINK_tfs), ( 0x00020 ), NULL, HFILL }},
 	{ &hf_winreg_winreg_DeleteValue_value, 
 	  { "Value", "winreg.winreg_DeleteValue.value", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_winreg_system_name, 
-	  { "System Name", "winreg.system_name", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_winreg_QueryMultipleValue_length, 
-	  { "Length", "winreg.QueryMultipleValue.length", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_winreg_winreg_QueryMultipleValues_num_values, 
-	  { "Num Values", "winreg.winreg_QueryMultipleValues.num_values", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_QueryMultipleValues2_offered, 
+	  { "Offered", "winreg.winreg_QueryMultipleValues2.offered", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_QueryMultipleValues_values_in, 
+	  { "Values In", "winreg.winreg_QueryMultipleValues.values_in", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
 	{ &hf_winreg_winreg_AccessMask_KEY_NOTIFY, 
 	  { "Key Notify", "winreg.winreg_AccessMask.KEY_NOTIFY", FT_BOOLEAN, 32, TFS(&winreg_AccessMask_KEY_NOTIFY_tfs), ( 0x00010 ), NULL, HFILL }},
-	{ &hf_winreg_KeySecurityAttribute_data_size, 
-	  { "Data Size", "winreg.KeySecurityAttribute.data_size", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
 	{ &hf_winreg_winreg_OpenKey_parent_handle, 
 	  { "Parent Handle", "winreg.winreg_OpenKey.parent_handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_winreg_winreg_StringBuf_name, 
-	  { "Name", "winreg.winreg_StringBuf.name", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_winreg_winreg_NotifyChangeKeyValue_unknown2, 
-	  { "Unknown2", "winreg.winreg_NotifyChangeKeyValue.unknown2", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
 	{ &hf_winreg_winreg_QueryInfoKey_num_subkeys, 
 	  { "Num Subkeys", "winreg.winreg_QueryInfoKey.num_subkeys", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_winreg_sd_offset, 
-	  { "Offset", "winreg.sd.offset", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
 	{ &hf_winreg_winreg_AccessMask_KEY_WOW64_32KEY, 
 	  { "Key Wow64 32key", "winreg.winreg_AccessMask.KEY_WOW64_32KEY", FT_BOOLEAN, 32, TFS(&winreg_AccessMask_KEY_WOW64_32KEY_tfs), ( 0x00200 ), NULL, HFILL }},
-	{ &hf_winreg_winreg_StringBuf_length, 
-	  { "Length", "winreg.winreg_StringBuf.length", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_SaveKeyEx_sec_attrib, 
+	  { "Sec Attrib", "winreg.winreg_SaveKeyEx.sec_attrib", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
 	{ &hf_winreg_winreg_QueryInfoKey_last_changed_time, 
 	  { "Last Changed Time", "winreg.winreg_QueryInfoKey.last_changed_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_KeyOptions_REG_OPTION_OPEN_LINK, 
+	  { "Reg Option Open Link", "winreg.winreg_KeyOptions.REG_OPTION_OPEN_LINK", FT_BOOLEAN, 32, TFS(&winreg_KeyOptions_REG_OPTION_OPEN_LINK_tfs), ( 0x00000008 ), NULL, HFILL }},
 	{ &hf_winreg_winreg_OpenHKPD_access_mask, 
 	  { "Access Mask", "winreg.winreg_OpenHKPD.access_mask", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
 	{ &hf_winreg_winreg_AbortSystemShutdown_server, 
 	  { "Server", "winreg.winreg_AbortSystemShutdown.server", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
 	{ &hf_winreg_winreg_QueryValue_type, 
-	  { "Type", "winreg.winreg_QueryValue.type", FT_UINT32, BASE_DEC, VALS(winreg_winreg_Type_vals), 0, NULL, HFILL }},
+	  { "Type", "winreg.winreg_QueryValue.type", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
 	{ &hf_winreg_sd_actual_size, 
 	  { "Actual Size", "winreg.sd.actual_size", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_winreg_winreg_String_name_size, 
-	  { "Name Size", "winreg.winreg_String.name_size", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_winreg_winreg_NotifyChangeKeyValue_unknown, 
-	  { "Unknown", "winreg.winreg_NotifyChangeKeyValue.unknown", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_winreg_winreg_QueryValue_length, 
-	  { "Length", "winreg.winreg_QueryValue.length", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_winreg_winreg_AccessMask_KEY_CREATE_SUB_KEY, 
-	  { "Key Create Sub Key", "winreg.winreg_AccessMask.KEY_CREATE_SUB_KEY", FT_BOOLEAN, 32, TFS(&winreg_AccessMask_KEY_CREATE_SUB_KEY_tfs), ( 0x00004 ), NULL, HFILL }},
-	{ &hf_winreg_winreg_OpenKey_unknown, 
-	  { "Unknown", "winreg.winreg_OpenKey.unknown", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_winreg_winreg_RestoreKey_filename, 
-	  { "Filename", "winreg.winreg_RestoreKey.filename", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_winreg_winreg_QueryInfoKey_max_valbufsize, 
-	  { "Max Valbufsize", "winreg.winreg_QueryInfoKey.max_valbufsize", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_winreg_winreg_InitiateSystemShutdownEx_reason, 
-	  { "Reason", "winreg.winreg_InitiateSystemShutdownEx.reason", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_RestoreKeyFlags_REG_FORCE_RESTORE, 
+	  { "Reg Force Restore", "winreg.winreg_RestoreKeyFlags.REG_FORCE_RESTORE", FT_BOOLEAN, 32, TFS(&winreg_RestoreKeyFlags_REG_FORCE_RESTORE_tfs), ( 0x00000008 ), NULL, HFILL }},
 	{ &hf_winreg_winreg_SecBuf_inherit, 
 	  { "Inherit", "winreg.winreg_SecBuf.inherit", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
 	{ &hf_winreg_winreg_SetValue_size, 
 	  { "Size", "winreg.winreg_SetValue.size", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_winreg_winreg_EnumValue_length, 
-	  { "Length", "winreg.winreg_EnumValue.length", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_winreg_winreg_QueryMultipleValues_values, 
-	  { "Values", "winreg.winreg_QueryMultipleValues.values", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_winreg_winreg_QueryInfoKey_max_subkeylen, 
-	  { "Max Subkeylen", "winreg.winreg_QueryInfoKey.max_subkeylen", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_winreg_winreg_InitiateSystemShutdown_timeout, 
-	  { "Timeout", "winreg.winreg_InitiateSystemShutdown.timeout", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_winreg_winreg_InitiateSystemShutdownEx_hostname, 
-	  { "Hostname", "winreg.winreg_InitiateSystemShutdownEx.hostname", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
 	{ &hf_winreg_winreg_SaveKey_handle, 
 	  { "Handle", "winreg.winreg_SaveKey.handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_winreg_KeySecurityAttribute_inherit, 
-	  { "Inherit", "winreg.KeySecurityAttribute.inherit", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_winreg_werror, 
-	  { "Windows Error", "winreg.werror", FT_UINT32, BASE_HEX, VALS(WERR_errors), 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_NotifyChangeType_REG_NOTIFY_CHANGE_LAST_SET, 
+	  { "Reg Notify Change Last Set", "winreg.winreg_NotifyChangeType.REG_NOTIFY_CHANGE_LAST_SET", FT_BOOLEAN, 32, TFS(&winreg_NotifyChangeType_REG_NOTIFY_CHANGE_LAST_SET_tfs), ( 0x00000004 ), NULL, HFILL }},
+	{ &hf_winreg_winreg_ReplaceKey_handle, 
+	  { "Handle", "winreg.winreg_ReplaceKey.handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
 	{ &hf_winreg_winreg_GetVersion_version, 
 	  { "Version", "winreg.winreg_GetVersion.version", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_ReplaceKey_old_file, 
+	  { "Old File", "winreg.winreg_ReplaceKey.old_file", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
 	{ &hf_winreg_winreg_AccessMask_KEY_QUERY_VALUE, 
 	  { "Key Query Value", "winreg.winreg_AccessMask.KEY_QUERY_VALUE", FT_BOOLEAN, 32, TFS(&winreg_AccessMask_KEY_QUERY_VALUE_tfs), ( 0x00001 ), NULL, HFILL }},
 	{ &hf_winreg_winreg_CreateKey_action_taken, 
 	  { "Action Taken", "winreg.winreg_CreateKey.action_taken", FT_UINT32, BASE_DEC, VALS(winreg_winreg_CreateAction_vals), 0, NULL, HFILL }},
 	{ &hf_winreg_winreg_QueryInfoKey_num_values, 
 	  { "Num Values", "winreg.winreg_QueryInfoKey.num_values", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_winreg_winreg_EnumKey_keyclass, 
-	  { "Keyclass", "winreg.winreg_EnumKey.keyclass", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_RestoreKeyFlags_REG_WHOLE_HIVE_VOLATILE, 
+	  { "Reg Whole Hive Volatile", "winreg.winreg_RestoreKeyFlags.REG_WHOLE_HIVE_VOLATILE", FT_BOOLEAN, 32, TFS(&winreg_RestoreKeyFlags_REG_WHOLE_HIVE_VOLATILE_tfs), ( 0x00000001 ), NULL, HFILL }},
+	{ &hf_winreg_winreg_NotifyChangeType_REG_NOTIFY_CHANGE_NAME, 
+	  { "Reg Notify Change Name", "winreg.winreg_NotifyChangeType.REG_NOTIFY_CHANGE_NAME", FT_BOOLEAN, 32, TFS(&winreg_NotifyChangeType_REG_NOTIFY_CHANGE_NAME_tfs), ( 0x00000001 ), NULL, HFILL }},
 	{ &hf_winreg_winreg_AccessMask_KEY_SET_VALUE, 
 	  { "Key Set Value", "winreg.winreg_AccessMask.KEY_SET_VALUE", FT_BOOLEAN, 32, TFS(&winreg_AccessMask_KEY_SET_VALUE_tfs), ( 0x00002 ), NULL, HFILL }},
 	{ &hf_winreg_winreg_EnumKey_enum_index, 
@@ -4194,42 +5024,179 @@ void proto_register_dcerpc_winreg(void)
 	  { "Handle", "winreg.winreg_RestoreKey.handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
 	{ &hf_winreg_winreg_SetValue_data, 
 	  { "Data", "winreg.winreg_SetValue.data", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_winreg_winreg_CreateKey_keyclass, 
-	  { "Keyclass", "winreg.winreg_CreateKey.keyclass", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
 	{ &hf_winreg_winreg_InitiateSystemShutdown_force_apps, 
 	  { "Force Apps", "winreg.winreg_InitiateSystemShutdown.force_apps", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_winreg_winreg_EnumValue_value, 
-	  { "Value", "winreg.winreg_EnumValue.value", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
 	{ &hf_winreg_winreg_NotifyChangeKeyValue_string1, 
 	  { "String1", "winreg.winreg_NotifyChangeKeyValue.string1", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_SaveKeyEx_flags, 
+	  { "Flags", "winreg.winreg_SaveKeyEx.flags", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
 	{ &hf_winreg_winreg_QueryMultipleValues_buffer, 
 	  { "Buffer", "winreg.winreg_QueryMultipleValues.buffer", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_winreg_winreg_SetKeySecurity_access_mask, 
-	  { "Access Mask", "winreg.winreg_SetKeySecurity.access_mask", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
-	{ &hf_winreg_winreg_QueryValue_value_name, 
-	  { "Value Name", "winreg.winreg_QueryValue.value_name", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
 	{ &hf_winreg_winreg_QueryInfoKey_classname, 
 	  { "Classname", "winreg.winreg_QueryInfoKey.classname", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
 	{ &hf_winreg_winreg_AccessMask_KEY_WOW64_64KEY, 
 	  { "Key Wow64 64key", "winreg.winreg_AccessMask.KEY_WOW64_64KEY", FT_BOOLEAN, 32, TFS(&winreg_AccessMask_KEY_WOW64_64KEY_tfs), ( 0x00100 ), NULL, HFILL }},
-	{ &hf_winreg_winreg_OpenHKCU_access_mask, 
-	  { "Access Mask", "winreg.winreg_OpenHKCU.access_mask", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_ReplaceKey_subkey, 
+	  { "Subkey", "winreg.winreg_ReplaceKey.subkey", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
 	{ &hf_winreg_sd_max_size, 
 	  { "Max Size", "winreg.sd.max_size", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_QueryInfoKey_max_classlen, 
+	  { "Max Classlen", "winreg.winreg_QueryInfoKey.max_classlen", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_ValNameBuf_length, 
+	  { "Length", "winreg.winreg_ValNameBuf.length", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
 	{ &hf_winreg_winreg_NotifyChangeKeyValue_notify_filter, 
-	  { "Notify Filter", "winreg.winreg_NotifyChangeKeyValue.notify_filter", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_winreg_QueryMultipleValue_offset, 
-	  { "Offset", "winreg.QueryMultipleValue.offset", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+	  { "Notify Filter", "winreg.winreg_NotifyChangeKeyValue.notify_filter", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_UnLoadKey_subkey, 
+	  { "Subkey", "winreg.winreg_UnLoadKey.subkey", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_ReplaceKey_new_file, 
+	  { "New File", "winreg.winreg_ReplaceKey.new_file", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_SaveKeyEx_filename, 
+	  { "Filename", "winreg.winreg_SaveKeyEx.filename", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_QueryMultipleValue_ve_valuename, 
+	  { "Ve Valuename", "winreg.QueryMultipleValue.ve_valuename", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_QueryMultipleValues2_key_handle, 
+	  { "Key Handle", "winreg.winreg_QueryMultipleValues2.key_handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_KeySecurityData_size, 
+	  { "Size", "winreg.KeySecurityData.size", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_KeyOptions_REG_OPTION_BACKUP_RESTORE, 
+	  { "Reg Option Backup Restore", "winreg.winreg_KeyOptions.REG_OPTION_BACKUP_RESTORE", FT_BOOLEAN, 32, TFS(&winreg_KeyOptions_REG_OPTION_BACKUP_RESTORE_tfs), ( 0x00000004 ), NULL, HFILL }},
+	{ &hf_winreg_winreg_EnumKey_name, 
+	  { "Name", "winreg.winreg_EnumKey.name", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_LoadKey_keyname, 
+	  { "Keyname", "winreg.winreg_LoadKey.keyname", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_QueryMultipleValues_key_handle, 
+	  { "Key Handle", "winreg.winreg_QueryMultipleValues.key_handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_EnumValue_type, 
+	  { "Type", "winreg.winreg_EnumValue.type", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_EnumKey_last_changed_time, 
+	  { "Last Changed Time", "winreg.winreg_EnumKey.last_changed_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_EnumValue_size, 
+	  { "Size", "winreg.winreg_EnumValue.size", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_SaveKey_sec_attrib, 
+	  { "Sec Attrib", "winreg.winreg_SaveKey.sec_attrib", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_sd, 
+	  { "KeySecurityData", "winreg.sd", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_KeyOptions_REG_OPTION_CREATE_LINK, 
+	  { "Reg Option Create Link", "winreg.winreg_KeyOptions.REG_OPTION_CREATE_LINK", FT_BOOLEAN, 32, TFS(&winreg_KeyOptions_REG_OPTION_CREATE_LINK_tfs), ( 0x00000002 ), NULL, HFILL }},
+	{ &hf_winreg_winreg_OpenKey_options, 
+	  { "Options", "winreg.winreg_OpenKey.options", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_SaveKey_filename, 
+	  { "Filename", "winreg.winreg_SaveKey.filename", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_QueryValue_data, 
+	  { "Data", "winreg.winreg_QueryValue.data", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_QueryMultipleValues2_buffer, 
+	  { "Buffer", "winreg.winreg_QueryMultipleValues2.buffer", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_InitiateSystemShutdown_hostname, 
+	  { "Hostname", "winreg.winreg_InitiateSystemShutdown.hostname", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_UnLoadKey_handle, 
+	  { "Handle", "winreg.winreg_UnLoadKey.handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_QueryMultipleValues_values_out, 
+	  { "Values Out", "winreg.winreg_QueryMultipleValues.values_out", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_KeySecurityData_data, 
+	  { "Data", "winreg.KeySecurityData.data", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_OpenKey_access_mask, 
+	  { "Access Mask", "winreg.winreg_OpenKey.access_mask", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_OpenKey_keyname, 
+	  { "Keyname", "winreg.winreg_OpenKey.keyname", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_InitiateSystemShutdownEx_do_reboot, 
+	  { "Do Reboot", "winreg.winreg_InitiateSystemShutdownEx.do_reboot", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_NotifyChangeKeyValue_watch_subtree, 
+	  { "Watch Subtree", "winreg.winreg_NotifyChangeKeyValue.watch_subtree", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_DeleteKeyEx_access_mask, 
+	  { "Access Mask", "winreg.winreg_DeleteKeyEx.access_mask", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_DeleteKeyEx_key, 
+	  { "Key", "winreg.winreg_DeleteKeyEx.key", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_QueryValue_data_length, 
+	  { "Data Length", "winreg.winreg_QueryValue.data_length", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_KeySecurityData_len, 
+	  { "Len", "winreg.KeySecurityData.len", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_ValNameBuf_size, 
+	  { "Size", "winreg.winreg_ValNameBuf.size", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_CreateKey_name, 
+	  { "Name", "winreg.winreg_CreateKey.name", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_NotifyChangeType_REG_NOTIFY_CHANGE_ATTRIBUTES, 
+	  { "Reg Notify Change Attributes", "winreg.winreg_NotifyChangeType.REG_NOTIFY_CHANGE_ATTRIBUTES", FT_BOOLEAN, 32, TFS(&winreg_NotifyChangeType_REG_NOTIFY_CHANGE_ATTRIBUTES_tfs), ( 0x00000002 ), NULL, HFILL }},
+	{ &hf_winreg_winreg_String_name_len, 
+	  { "Name Len", "winreg.winreg_String.name_len", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_DeleteKey_key, 
+	  { "Key", "winreg.winreg_DeleteKey.key", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_QueryValue_data_size, 
+	  { "Data Size", "winreg.winreg_QueryValue.data_size", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_system_name, 
+	  { "System Name", "winreg.system_name", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_QueryMultipleValue_ve_valueptr, 
+	  { "Ve Valueptr", "winreg.QueryMultipleValue.ve_valueptr", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_KeySecurityAttribute_data_size, 
+	  { "Data Size", "winreg.KeySecurityAttribute.data_size", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_QueryMultipleValues_num_values, 
+	  { "Num Values", "winreg.winreg_QueryMultipleValues.num_values", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_StringBuf_name, 
+	  { "Name", "winreg.winreg_StringBuf.name", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_NotifyChangeKeyValue_unknown2, 
+	  { "Unknown2", "winreg.winreg_NotifyChangeKeyValue.unknown2", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_sd_offset, 
+	  { "Offset", "winreg.sd.offset", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_ValNameBuf_name, 
+	  { "Name", "winreg.winreg_ValNameBuf.name", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_StringBuf_length, 
+	  { "Length", "winreg.winreg_StringBuf.length", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_QueryMultipleValues2_values_in, 
+	  { "Values In", "winreg.winreg_QueryMultipleValues2.values_in", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_String_name_size, 
+	  { "Name Size", "winreg.winreg_String.name_size", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_NotifyChangeKeyValue_unknown, 
+	  { "Unknown", "winreg.winreg_NotifyChangeKeyValue.unknown", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_AccessMask_KEY_CREATE_SUB_KEY, 
+	  { "Key Create Sub Key", "winreg.winreg_AccessMask.KEY_CREATE_SUB_KEY", FT_BOOLEAN, 32, TFS(&winreg_AccessMask_KEY_CREATE_SUB_KEY_tfs), ( 0x00004 ), NULL, HFILL }},
+	{ &hf_winreg_winreg_RestoreKey_filename, 
+	  { "Filename", "winreg.winreg_RestoreKey.filename", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_RestoreKeyFlags_REG_REFRESH_HIVE, 
+	  { "Reg Refresh Hive", "winreg.winreg_RestoreKeyFlags.REG_REFRESH_HIVE", FT_BOOLEAN, 32, TFS(&winreg_RestoreKeyFlags_REG_REFRESH_HIVE_tfs), ( 0x00000002 ), NULL, HFILL }},
+	{ &hf_winreg_winreg_QueryInfoKey_max_valbufsize, 
+	  { "Max Valbufsize", "winreg.winreg_QueryInfoKey.max_valbufsize", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_InitiateSystemShutdownEx_reason, 
+	  { "Reason", "winreg.winreg_InitiateSystemShutdownEx.reason", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_EnumValue_length, 
+	  { "Length", "winreg.winreg_EnumValue.length", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_QueryInfoKey_max_subkeylen, 
+	  { "Max Subkeylen", "winreg.winreg_QueryInfoKey.max_subkeylen", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_InitiateSystemShutdown_timeout, 
+	  { "Timeout", "winreg.winreg_InitiateSystemShutdown.timeout", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_InitiateSystemShutdownEx_hostname, 
+	  { "Hostname", "winreg.winreg_InitiateSystemShutdownEx.hostname", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_KeySecurityAttribute_inherit, 
+	  { "Inherit", "winreg.KeySecurityAttribute.inherit", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_werror, 
+	  { "Windows Error", "winreg.werror", FT_UINT32, BASE_HEX, VALS(WERR_errors), 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_QueryMultipleValues2_values_out, 
+	  { "Values Out", "winreg.winreg_QueryMultipleValues2.values_out", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_EnumKey_keyclass, 
+	  { "Keyclass", "winreg.winreg_EnumKey.keyclass", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_CreateKey_keyclass, 
+	  { "Keyclass", "winreg.winreg_CreateKey.keyclass", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_EnumValue_value, 
+	  { "Value", "winreg.winreg_EnumValue.value", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_OpenHKCU_access_mask, 
+	  { "Access Mask", "winreg.winreg_OpenHKCU.access_mask", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_QueryValue_value_name, 
+	  { "Value Name", "winreg.winreg_QueryValue.value_name", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
+	{ &hf_winreg_winreg_RestoreKeyFlags_REG_NO_LAZY_FLUSH, 
+	  { "Reg No Lazy Flush", "winreg.winreg_RestoreKeyFlags.REG_NO_LAZY_FLUSH", FT_BOOLEAN, 32, TFS(&winreg_RestoreKeyFlags_REG_NO_LAZY_FLUSH_tfs), ( 0x00000004 ), NULL, HFILL }},
 	};
 
 
 	static gint *ett[] = {
 		&ett_dcerpc_winreg,
+		&ett_winreg_security_secinfo,
 		&ett_winreg_winreg_AccessMask,
 		&ett_winreg_winreg_String,
 		&ett_winreg_KeySecurityData,
 		&ett_winreg_winreg_SecBuf,
+		&ett_winreg_winreg_KeyOptions,
 		&ett_winreg_winreg_StringBuf,
+		&ett_winreg_winreg_ValNameBuf,
+		&ett_winreg_winreg_NotifyChangeType,
+		&ett_winreg_winreg_RestoreKeyFlags,
 		&ett_winreg_KeySecurityAttribute,
 		&ett_winreg_QueryMultipleValue,
 	};
diff --git a/epan/dissectors/packet-dcerpc-winreg.h b/epan/dissectors/packet-dcerpc-winreg.h
index 5490c2b..fe10b09 100644
--- a/epan/dissectors/packet-dcerpc-winreg.h
+++ b/epan/dissectors/packet-dcerpc-winreg.h
@@ -13,33 +13,36 @@
 */
 
 
+#include "packet-dcerpc-misc.h"
+
 #ifndef __PACKET_DCERPC_WINREG_H
 #define __PACKET_DCERPC_WINREG_H
 
+#define REG_KEY_READ	( (STANDARD_RIGHTS_READ_ACCESS|KEY_QUERY_VALUE|KEY_ENUMERATE_SUB_KEYS|KEY_NOTIFY) )
+
+#define REG_KEY_EXECUTE	( REG_KEY_READ )
+
+#define REG_KEY_WRITE	( (STANDARD_RIGHTS_WRITE_ACCESS|KEY_SET_VALUE|KEY_CREATE_SUB_KEY) )
+
+#define REG_KEY_ALL	( (STANDARD_RIGHTS_REQUIRED_ACCESS|REG_KEY_READ|REG_KEY_WRITE|KEY_CREATE_LINK) )
+
+#define REG_OPTION_NON_VOLATILE	( 0x00000000 )
+
+int winreg_dissect_bitmap_security_secinfo(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_);
 int winreg_dissect_bitmap_AccessMask(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_);
-#define REG_NONE (0)
-#define REG_SZ (1)
-#define REG_EXPAND_SZ (2)
-#define REG_BINARY (3)
-#define REG_DWORD (4)
-#define REG_DWORD_BIG_ENDIAN (5)
-#define REG_LINK (6)
-#define REG_MULTI_SZ (7)
-#define REG_RESOURCE_LIST (8)
-#define REG_FULL_RESOURCE_DESCRIPTOR (9)
-#define REG_RESOURCE_REQUIREMENTS_LIST (10)
-#define REG_QWORD (11)
-extern const value_string winreg_winreg_Type_vals[];
-int winreg_dissect_enum_Type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 *param _U_);
 int winreg_dissect_struct_String(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_);
 int winreg_dissect_struct_KeySecurityData(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_);
 int winreg_dissect_struct_SecBuf(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_);
+int winreg_dissect_bitmap_KeyOptions(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_);
 #define REG_ACTION_NONE (0)
 #define REG_CREATED_NEW_KEY (1)
 #define REG_OPENED_EXISTING_KEY (2)
 extern const value_string winreg_winreg_CreateAction_vals[];
 int winreg_dissect_enum_CreateAction(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 *param _U_);
 int winreg_dissect_struct_StringBuf(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_);
+int winreg_dissect_struct_ValNameBuf(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_);
+int winreg_dissect_bitmap_NotifyChangeType(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_);
+int winreg_dissect_bitmap_RestoreKeyFlags(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_);
 int winreg_dissect_struct_KeySecurityAttribute(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_);
 int winreg_dissect_struct_QueryMultipleValue(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_);
 #endif /* __PACKET_DCERPC_WINREG_H */
-- 
1.8.1.2

>From 45877598a54ab45100ca6e6334e4f8c9def0759c Mon Sep 17 00:00:00 2001
From: Matthieu Patou <[email protected]>
Date: Sun, 6 Oct 2013 18:25:07 -0700
Subject: [PATCH 14/21] Update the idl and cnf for winreg

Signed-off-by: Matthieu Patou <[email protected]>
---
 epan/dissectors/pidl/winreg.cnf |  16 +---
 epan/dissectors/pidl/winreg.idl | 199 +++++++++++++++++++++++++++-------------
 2 files changed, 140 insertions(+), 75 deletions(-)

diff --git a/epan/dissectors/pidl/winreg.cnf b/epan/dissectors/pidl/winreg.cnf
index 9c9238f..9ffefca 100644
--- a/epan/dissectors/pidl/winreg.cnf
+++ b/epan/dissectors/pidl/winreg.cnf
@@ -1,3 +1,5 @@
+TYPE lsa_StringLarge "offset=lsarpc_dissect_struct_lsa_StringLarge(tvb, offset, pinfo, tree, drep, @[email protected], @[email protected]);" FT_NONE BASE_NONE 0 NULL NULL
+TYPE winreg_Type "offset=misc_dissect_enum_winreg_Type(tvb, offset, pinfo, tree, drep, @[email protected], @[email protected]);" FT_NONE BASE_NONE 0 NULL NULL
 IMPORT security_secinfo 	offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, hf_winreg_winreg_GetKeySecurity_sec_info, NULL);
 
 
@@ -133,6 +135,7 @@ MANUAL winreg_dissect_bitmap_AccessMask
 
 
 CODE START
+ #include "packet-dcerpc-lsa.h"
 static void
 winreg_specific_rights(tvbuff_t *tvb, gint offset, proto_tree *tree, guint32 access)
 {
@@ -159,7 +162,7 @@ winreg_dissect_element_KeySecurityData_data_(tvbuff_t *tvb, int offset, packet_i
 	guint32 len;
 	dcerpc_info *di;
 
-	di=pinfo->private_data;
+	di=(dcerpc_info*)pinfo->private_data;
 	if(di->conformant_run){
 		/*just a run to handle conformant arrays, nothing to dissect */
 		return offset;
@@ -190,17 +193,6 @@ winreg_dissect_bitmap_AccessMask(tvbuff_t *tvb, int offset, packet_info *pinfo,
 	return offset;
 }
 
-/* FIXME: pidl generates the wrong name for external symbols */
-static int
-winreg_dissect_struct_initshutdown_String(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *parent_tree, guint8 *drep, int hf_index, guint32 param)
-{
-        #include "packet-dcerpc-initshutdown.h"
-	return initshutdown_dissect_struct_String(tvb, offset, pinfo, parent_tree, drep, hf_index, param);
-}
-
-
-
-
 /* winreg_String :
  *	typedef [public,noejs] struct {
  *		[value(strlen_m_term(name)*2)] uint16 name_len;
diff --git a/epan/dissectors/pidl/winreg.idl b/epan/dissectors/pidl/winreg.idl
index 4a75d5f..829a643 100644
--- a/epan/dissectors/pidl/winreg.idl
+++ b/epan/dissectors/pidl/winreg.idl
@@ -2,46 +2,51 @@
   winreg interface definition
 */
 
-/* import "lsa.idl", "initshutdown.idl", "security.idl";*/
+/*import "lsa.idl", "security.idl",*/
+import "misc.idl";
 
 [ 
   uuid("338cd001-2244-31f1-aaaa-900038001003"),
   version(1.0),
   endpoint("ncacn_np:[\\pipe\\winreg]","ncacn_ip_tcp:","ncalrpc:"),
   pointer_default(unique),
-  pointer_default_top(unique),
   helpstring("Remote Registry Service")
 ] interface winreg
 {
-	declare bitmap security_secinfo;
+	typedef bitmap security_secinfo security_secinfo;
+
+	/*
+	 * Access Bits for registry ACLS
+	 */
 
 	typedef [bitmap32bit] bitmap {
 		KEY_QUERY_VALUE 		= 0x00001,
 		KEY_SET_VALUE 			= 0x00002,
 		KEY_CREATE_SUB_KEY 		= 0x00004,
-		KEY_ENUMERATE_SUB_KEYS 	= 0x00008,
-		KEY_NOTIFY 				= 0x00010,
+		KEY_ENUMERATE_SUB_KEYS		= 0x00008,
+		KEY_NOTIFY			= 0x00010,
 		KEY_CREATE_LINK 		= 0x00020,
 		KEY_WOW64_64KEY 		= 0x00100,
 		KEY_WOW64_32KEY 		= 0x00200
 	} winreg_AccessMask;
 
-	typedef [public,v1_enum] enum {
-		REG_NONE                       = 0,
-		REG_SZ                         = 1,
-		REG_EXPAND_SZ                  = 2,
-		REG_BINARY                     = 3,
-		REG_DWORD                      = 4,
-		REG_DWORD_BIG_ENDIAN           = 5,
-		REG_LINK                       = 6,
-		REG_MULTI_SZ                   = 7,
-		REG_RESOURCE_LIST              = 8,
-		REG_FULL_RESOURCE_DESCRIPTOR   = 9,
-		REG_RESOURCE_REQUIREMENTS_LIST = 10,
-		REG_QWORD                      = 11
-	} winreg_Type;
-
-	typedef [public,noejs] struct {
+	const int REG_KEY_READ = (	STANDARD_RIGHTS_READ_ACCESS	|
+					KEY_QUERY_VALUE			|
+					KEY_ENUMERATE_SUB_KEYS 		|
+					KEY_NOTIFY);
+
+	const int REG_KEY_EXECUTE = REG_KEY_READ;
+
+	const int REG_KEY_WRITE = (	STANDARD_RIGHTS_WRITE_ACCESS	|
+					KEY_SET_VALUE	 		|
+					KEY_CREATE_SUB_KEY);
+
+	const int REG_KEY_ALL = (	STANDARD_RIGHTS_REQUIRED_ACCESS |
+					REG_KEY_READ 			|
+					REG_KEY_WRITE 			|
+					KEY_CREATE_LINK);
+
+	typedef [public] struct {
 		[value(strlen_m_term(name)*2)] uint16 name_len;
 		[value(strlen_m_term(name)*2)] uint16 name_size;
 		[string,charset(UTF16)] uint16 *name;
@@ -50,7 +55,7 @@
 	/******************/
 	/* Function: 0x00 */
 	WERROR winreg_OpenHKCR(
-		[in]      uint16 *system_name,
+		[in,unique] uint16 *system_name,
 		[in]      winreg_AccessMask access_mask,
 		[out,ref] policy_handle *handle
 	);
@@ -58,7 +63,7 @@
 	/******************/
 	/* Function: 0x01 */
 	WERROR winreg_OpenHKCU(
-	        [in]      uint16 *system_name,
+	        [in,unique] uint16 *system_name,
 		[in]      winreg_AccessMask access_mask,
 		[out,ref] policy_handle *handle
 	);
@@ -66,7 +71,7 @@
 	/******************/
 	/* Function: 0x02 */
 	[public] WERROR winreg_OpenHKLM(
-		[in]      uint16 *system_name,
+		[in,unique] uint16 *system_name,
 		[in]      winreg_AccessMask access_mask,
 		[out,ref] policy_handle *handle
 	);
@@ -74,7 +79,7 @@
 	/******************/
 	/* Function: 0x03 */
 	WERROR winreg_OpenHKPD(
-		[in]      uint16 *system_name,
+		[in,unique] uint16 *system_name,
 		[in]      winreg_AccessMask access_mask,
 		[out,ref] policy_handle *handle
 	);
@@ -82,7 +87,7 @@
 	/******************/
 	/* Function: 0x04 */
 	WERROR winreg_OpenHKU(
-		[in]      uint16 *system_name,
+		[in,unique] uint16 *system_name,
 		[in]      winreg_AccessMask access_mask,
 		[out,ref] policy_handle *handle
 	);
@@ -108,6 +113,15 @@
 		boolean8  inherit;
 	} winreg_SecBuf;
 
+	const int REG_OPTION_NON_VOLATILE = 0x00000000;
+
+	typedef [bitmap32bit] bitmap {
+		REG_OPTION_VOLATILE		= 0x00000001,
+		REG_OPTION_CREATE_LINK		= 0x00000002,
+		REG_OPTION_BACKUP_RESTORE	= 0x00000004,
+		REG_OPTION_OPEN_LINK		= 0x00000008
+	} winreg_KeyOptions;
+
 	typedef [v1_enum] enum {
 		REG_ACTION_NONE         = 0, /* used by caller */
 		REG_CREATED_NEW_KEY     = 1,
@@ -118,7 +132,7 @@
 		[in,ref] policy_handle *handle,
 		[in] winreg_String name,
 		[in] winreg_String keyclass,
-		[in] uint32 options,
+		[in] winreg_KeyOptions options,
 		[in] winreg_AccessMask access_mask,
 		[in,unique] winreg_SecBuf *secdesc,
 		[out,ref] policy_handle *new_handle,
@@ -140,7 +154,7 @@
 	);
 
 	typedef struct {
-		[value(strlen_m_term(name)*2)] uint16 length; 
+		[value(strlen_m_term_null(name)*2)] uint16 length;
 		/* size cannot be auto-set by value() as it is the
 		   amount of space the server is allowed to use for this
 		   string in the reply, not its current size */
@@ -158,15 +172,24 @@
 		[in,out,unique] NTTIME           *last_changed_time
 	);
 
+	typedef struct {
+		[value(strlen_m_term(name)*2)] uint16 length;
+		/* size cannot be auto-set by value() as it is the
+		   amount of space the server is allowed to use for this
+		   string in the reply, not its current size */
+		uint16 size;
+		[size_is(size/2),length_is(length/2),charset(UTF16)] uint16 *name;
+	} winreg_ValNameBuf;
+
 	/******************/
 	/* Function: 0x0a */
 
 	[public] WERROR winreg_EnumValue(
 		[in,ref]        policy_handle *handle,
 		[in]            uint32 enum_index,
-		[in,out,ref]    winreg_StringBuf *name,
+		[in,out,ref]    winreg_ValNameBuf *name,
 		[in,out,unique] winreg_Type *type,
-		[in,out,unique,size_is(*size),length_is(*length)] uint8 *value,
+		[in,out,unique,size_is(size ? *size : 0),length_is(length ? *length : 0),range(0,0x4000000)] uint8 *value,
 		[in,out,unique] uint32 *size,
 		[in,out,unique] uint32 *length
 	);
@@ -189,19 +212,26 @@
 	/* Function: 0x0d */
 	WERROR winreg_LoadKey(
 		[in,ref] policy_handle *handle,
-		[in] winreg_String *keyname,
-		[in] winreg_String *filename
+		[in,unique] winreg_String *keyname,
+		[in,unique] winreg_String *filename
 	);
 
 	/******************/
 	/* Function: 0x0e */
+	typedef [public,bitmap32bit] bitmap {
+		REG_NOTIFY_CHANGE_NAME		= 0x00000001,
+		REG_NOTIFY_CHANGE_ATTRIBUTES	= 0x00000002,
+		REG_NOTIFY_CHANGE_LAST_SET	= 0x00000004,
+		REG_NOTIFY_CHANGE_SECURITY	= 0x00000008
+	} winreg_NotifyChangeType;
+
 	[public] WERROR winreg_NotifyChangeKeyValue(
 		[in,ref] policy_handle *handle,
-		[in] uint8 watch_subtree,
-		[in] uint32 notify_filter,
+		[in] boolean8 watch_subtree,
+		[in] winreg_NotifyChangeType notify_filter,
 		[in] uint32 unknown,
 		[in] winreg_String string1,
-		[in] winreg_String string2, 
+		[in] winreg_String string2,
 		[in] uint32 unknown2
 	);
 
@@ -210,7 +240,7 @@
 	[public] WERROR winreg_OpenKey(
 		[in,ref] policy_handle *parent_handle,
 		[in] winreg_String keyname,
-		[in] uint32 unknown,
+		[in] winreg_KeyOptions options,
 		[in] winreg_AccessMask access_mask,
 		[out,ref] policy_handle *handle
 	);
@@ -222,7 +252,7 @@
 		[in,out,ref] winreg_String *classname,
 		[out,ref] uint32 *num_subkeys,
 		[out,ref] uint32 *max_subkeylen,
-		[out,ref] uint32 *max_subkeysize,
+		[out,ref] uint32 *max_classlen,
 		[out,ref] uint32 *num_values,
 		[out,ref] uint32 *max_valnamelen,
 		[out,ref] uint32 *max_valbufsize,
@@ -234,24 +264,36 @@
 	/* Function: 0x11 */
 	[public] WERROR winreg_QueryValue(
 		[in,ref] policy_handle *handle,
-		[in] winreg_String value_name,
-		[in,out] winreg_Type *type,
-		[in,out,size_is(*size),length_is(*length)] uint8 *data,
-		[in,out] uint32 *size,
-		[in,out] uint32 *length
+		[in,ref] winreg_String *value_name,
+		[in,out,unique] winreg_Type *type,
+		[in,out,unique,size_is(data_size ? *data_size : 0),length_is(data_length ? *data_length : 0),range(0,0x4000000)] uint8 *data,
+		[in,out,unique] uint32 *data_size,
+		[in,out,unique] uint32 *data_length
 	);
 
 	/******************/
 	/* Function: 0x12 */
 	WERROR winreg_ReplaceKey(
+		[in,ref] policy_handle *handle,
+		[in,ref] winreg_String *subkey,
+		[in,ref] winreg_String *new_file,
+		[in,ref] winreg_String *old_file
 	);
 
 	/******************/
 	/* Function: 0x13 */
+
+	typedef [public,bitmap32bit] bitmap {
+		REG_WHOLE_HIVE_VOLATILE		= 0x00000001,
+		REG_REFRESH_HIVE 		= 0x00000002,
+		REG_NO_LAZY_FLUSH		= 0x00000004,
+		REG_FORCE_RESTORE		= 0x00000008
+	} winreg_RestoreKeyFlags;
+
 	WERROR winreg_RestoreKey(
 		[in,ref] policy_handle *handle,
 		[in,ref] winreg_String *filename,
-		[in]     uint32 flags 
+		[in]     winreg_RestoreKeyFlags flags
 	);
 
 	/******************/
@@ -273,7 +315,7 @@
 	/* Function: 0x15 */
 	WERROR winreg_SetKeySecurity(
 		[in,ref] policy_handle *handle,
-		[in] winreg_AccessMask access_mask,
+		[in] security_secinfo sec_info,
 		[in,ref] KeySecurityData *sd
 	);
 
@@ -290,22 +332,28 @@
 	/******************/
 	/* Function: 0x17 */
 	WERROR winreg_UnLoadKey(
+		[in,ref] policy_handle *handle,
+		[in,ref] winreg_String *subkey
 	);
 
 	/******************/
 	/* Function: 0x18 */
 	WERROR winreg_InitiateSystemShutdown(
-		[in]	uint16 *hostname,
-		[in]	initshutdown_String *message,
+		[in,unique] uint16 *hostname,
+		/*
+		 * Note: lsa_String and winreg_String both result
+		 *       in WERR_INVALID_PARAM
+		 */
+		[in,unique] lsa_StringLarge *message,
 		[in]	uint32 timeout,
 		[in]	uint8 force_apps,
-		[in]	uint8 reboot
+		[in]	uint8 do_reboot
 	);
 
 	/******************/
 	/* Function: 0x19 */
 	WERROR winreg_AbortSystemShutdown(
-		[in]	uint16 *server
+		[in,unique] uint16 *server
 	);
 
 	/******************/
@@ -318,7 +366,7 @@
 	/******************/
 	/* Function: 0x1b */
 	WERROR winreg_OpenHKCC(
-		[in]      uint16 *system_name,
+		[in,unique] uint16 *system_name,
 		[in]      winreg_AccessMask access_mask,
 		[out,ref] policy_handle *handle
 	);
@@ -326,48 +374,57 @@
 	/******************/
 	/* Function: 0x1c */
 	WERROR winreg_OpenHKDD(
-		[in]      uint16 *system_name,
+		[in,unique] uint16 *system_name,
 		[in]      winreg_AccessMask access_mask,
 		[out,ref] policy_handle *handle
 	);
 
 	typedef struct {
-		winreg_String *name;
-		winreg_Type type;
-		uint32 offset;
-		uint32 length;
+		winreg_ValNameBuf *ve_valuename;
+		uint32 ve_valuelen;
+		uint32 ve_valueptr;
+		winreg_Type ve_type;
 	} QueryMultipleValue;
-	
+
 	/******************/
 	/* Function: 0x1d */
 	[public] WERROR winreg_QueryMultipleValues(
 		[in,ref] policy_handle *key_handle, 
-		[in,out,ref,size_is(num_values),length_is(num_values)] QueryMultipleValue *values,
+		[in,ref,size_is(num_values),length_is(num_values)] QueryMultipleValue *values_in,
+		[out,ref,size_is(num_values),length_is(num_values)] QueryMultipleValue *values_out,
 		[in] uint32 num_values,
-		[in,out,size_is(*buffer_size),length_is(*buffer_size)] uint8 *buffer,
+		[in,out,unique,size_is(*buffer_size),length_is(*buffer_size)] uint8 *buffer,
 		[in,out,ref] uint32 *buffer_size
 	);
 
 	/******************/
 	/* Function: 0x1e */
 	WERROR winreg_InitiateSystemShutdownEx(
-		[in] uint16 *hostname,
-		[in] initshutdown_String *message,
+		[in,unique] uint16 *hostname,
+		/*
+		 * Note: lsa_String and winreg_String both result
+		 *       in WERR_INVALID_PARAM
+		 */
+		[in,unique] lsa_StringLarge *message,
 		[in] uint32 timeout,
 		[in] uint8 force_apps,
-		[in] uint8 reboot,
+		[in] uint8 do_reboot,
 		[in] uint32 reason
 	);
 
 	/******************/
 	/* Function: 0x1f */
 	WERROR winreg_SaveKeyEx(
+		[in,ref] policy_handle *handle,
+		[in,ref] winreg_String *filename,
+		[in,unique] KeySecurityAttribute *sec_attrib,
+		[in] uint32 flags
 	);
 
 	/******************/
 	/* Function: 0x20 */
 	WERROR winreg_OpenHKPT(
-		[in]      uint16 *system_name,
+		[in,unique] uint16 *system_name,
 		[in]      winreg_AccessMask access_mask,
 		[out,ref] policy_handle *handle
 	);
@@ -375,13 +432,29 @@
 	/******************/
 	/* Function: 0x21 */
 	WERROR winreg_OpenHKPN(
-		[in]      uint16 *system_name,
+		[in,unique] uint16 *system_name,
 		[in]      winreg_AccessMask access_mask,
 		[out,ref] policy_handle *handle
 	);
 
 	/******************/
 	/* Function: 0x22 */
-	WERROR winreg_QueryMultipleValues2(
+	[public] WERROR winreg_QueryMultipleValues2(
+		[in,ref] policy_handle *key_handle,
+		[in,ref,size_is(num_values),length_is(num_values)] QueryMultipleValue *values_in,
+		[out,ref,size_is(num_values),length_is(num_values)] QueryMultipleValue *values_out,
+		[in] uint32 num_values,
+		[in,out,unique,size_is(*offered),length_is(*offered)] uint8 *buffer,
+		[in,ref] uint32 *offered,
+		[out,ref] uint32 *needed
+	);
+
+	/******************/
+	/* Function: 0x23 */
+	WERROR winreg_DeleteKeyEx(
+		[in,ref] policy_handle *handle,
+		[in,ref] winreg_String *key,
+		[in] winreg_AccessMask access_mask,
+		[in] uint32 reserved
 	);
 }
-- 
1.8.1.2

>From 5027ba25de81b2d0d480c2484bb116aa4dcbaca3 Mon Sep 17 00:00:00 2001
From: Matthieu Patou <[email protected]>
Date: Sun, 6 Oct 2013 18:35:48 -0700
Subject: [PATCH 13/21] Generate misc.idl related files

---
 epan/dissectors/packet-dcerpc-misc.c | 625 +++++++++++++++++++++++++++++++++++
 1 file changed, 625 insertions(+)
 create mode 100644 epan/dissectors/packet-dcerpc-misc.c

diff --git a/epan/dissectors/packet-dcerpc-misc.c b/epan/dissectors/packet-dcerpc-misc.c
new file mode 100644
index 0000000..0e4bf26
--- /dev/null
+++ b/epan/dissectors/packet-dcerpc-misc.c
@@ -0,0 +1,625 @@
+/* DO NOT EDIT
+	This filter was automatically generated
+	from misc.idl and misc.cnf.
+	
+	Pidl is a perl based IDL compiler for DCE/RPC idl files. 
+	It is maintained by the Samba team, not the Wireshark team.
+	Instructions on how to download and install Pidl can be 
+	found at http://wiki.wireshark.org/Pidl
+
+	$Id$
+*/
+
+
+#include "config.h"
+#ifdef _MSC_VER
+#pragma warning(disable:4005)
+#pragma warning(disable:4013)
+#pragma warning(disable:4018)
+#pragma warning(disable:4101)
+#endif
+
+#include <glib.h>
+#include <string.h>
+#include <epan/packet.h>
+
+#include "packet-dcerpc.h"
+#include "packet-dcerpc-nt.h"
+#include "packet-windows-common.h"
+#include "packet-dcerpc-misc.h"
+
+/* Ett declarations */
+static gint ett_dcerpc_misc = -1;
+static gint ett_misc_GUID = -1;
+static gint ett_misc_ndr_syntax_id = -1;
+static gint ett_misc_policy_handle = -1;
+static gint ett_misc_KRB5_EDATA_NTSTATUS = -1;
+static gint ett_misc_winreg_Data = -1;
+
+
+/* Header field declarations */
+static gint hf_misc_GUID_time_mid = -1;
+static gint hf_misc_winreg_Data_value = -1;
+static gint hf_misc_GUID_time_low = -1;
+static gint hf_misc_KRB5_EDATA_NTSTATUS_unknown2 = -1;
+static gint hf_misc_GUID_time_hi_and_version = -1;
+static gint hf_misc_KRB5_EDATA_NTSTATUS_ntstatus = -1;
+static gint hf_misc_GUID_node = -1;
+static gint hf_misc_winreg_Data_string = -1;
+static gint hf_misc_winreg_Data_data = -1;
+static gint hf_misc_winreg_Data_binary = -1;
+static gint hf_misc_policy_handle_uuid = -1;
+static gint hf_misc_KRB5_EDATA_NTSTATUS_unknown1 = -1;
+static gint hf_misc_policy_handle_handle_type = -1;
+static gint hf_misc_ndr_syntax_id_uuid = -1;
+static gint hf_misc_opnum = -1;
+static gint hf_misc_GUID_clock_seq = -1;
+static gint hf_misc_winreg_Data_string_array = -1;
+static gint hf_misc_ndr_syntax_id_if_version = -1;
+
+static gint proto_dcerpc_misc = -1;
+/* Version information */
+
+
+static e_uuid_t uuid_dcerpc_misc = {
+	0x12345678, 0x1234, 0x1234,
+	{ 0x12, 0x34, 0xab, 0xcd, 0xef, 0x12, 0x34, 0x56 }
+};
+static guint16 ver_dcerpc_misc = 1;
+
+static int misc_dissect_element_GUID_time_low(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int misc_dissect_element_GUID_time_mid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int misc_dissect_element_GUID_time_hi_and_version(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int misc_dissect_element_GUID_clock_seq(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int misc_dissect_element_GUID_clock_seq_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int misc_dissect_element_GUID_node(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int misc_dissect_element_GUID_node_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int misc_dissect_element_ndr_syntax_id_uuid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int misc_dissect_element_ndr_syntax_id_if_version(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int misc_dissect_element_policy_handle_handle_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int misc_dissect_element_policy_handle_uuid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+const value_string misc_netr_SchannelType_vals[] = {
+	{ SEC_CHAN_NULL, "SEC_CHAN_NULL" },
+	{ SEC_CHAN_LOCAL, "SEC_CHAN_LOCAL" },
+	{ SEC_CHAN_WKSTA, "SEC_CHAN_WKSTA" },
+	{ SEC_CHAN_DNS_DOMAIN, "SEC_CHAN_DNS_DOMAIN" },
+	{ SEC_CHAN_DOMAIN, "SEC_CHAN_DOMAIN" },
+	{ SEC_CHAN_LANMAN, "SEC_CHAN_LANMAN" },
+	{ SEC_CHAN_BDC, "SEC_CHAN_BDC" },
+	{ SEC_CHAN_RODC, "SEC_CHAN_RODC" },
+{ 0, NULL }
+};
+static int misc_dissect_element_KRB5_EDATA_NTSTATUS_ntstatus(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int misc_dissect_element_KRB5_EDATA_NTSTATUS_unknown1(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int misc_dissect_element_KRB5_EDATA_NTSTATUS_unknown2(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+const value_string misc_winreg_Type_vals[] = {
+	{ REG_NONE, "REG_NONE" },
+	{ REG_SZ, "REG_SZ" },
+	{ REG_EXPAND_SZ, "REG_EXPAND_SZ" },
+	{ REG_BINARY, "REG_BINARY" },
+	{ REG_DWORD, "REG_DWORD" },
+	{ REG_DWORD_BIG_ENDIAN, "REG_DWORD_BIG_ENDIAN" },
+	{ REG_LINK, "REG_LINK" },
+	{ REG_MULTI_SZ, "REG_MULTI_SZ" },
+	{ REG_RESOURCE_LIST, "REG_RESOURCE_LIST" },
+	{ REG_FULL_RESOURCE_DESCRIPTOR, "REG_FULL_RESOURCE_DESCRIPTOR" },
+	{ REG_RESOURCE_REQUIREMENTS_LIST, "REG_RESOURCE_REQUIREMENTS_LIST" },
+	{ REG_QWORD, "REG_QWORD" },
+{ 0, NULL }
+};
+static int misc_dissect_element_winreg_Data_string(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int misc_dissect_element_winreg_Data_string(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int misc_dissect_element_winreg_Data_binary(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int misc_dissect_element_winreg_Data_value(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int misc_dissect_element_winreg_Data_value(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int misc_dissect_element_winreg_Data_string_array(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int misc_dissect_element_winreg_Data_data(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int
+misc_dissect_element_winreg_Data_string(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = dissect_null_term_wstring(tvb, offset, pinfo, tree, drep, hf_misc_winreg_Data_string , 0);
+	return offset;
+}
+static int
+misc_dissect_element_winreg_Data_value(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, drep, hf_misc_winreg_Data_value, 0);
+	return offset;
+}
+static int
+misc_dissect_struct_string_array(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_)
+{
+    /* We don't do it yet */
+    return offset;
+}
+
+
+/* IDL: struct { */
+/* IDL: 	uint32 time_low; */
+/* IDL: 	uint16 time_mid; */
+/* IDL: 	uint16 time_hi_and_version; */
+/* IDL: 	uint8 clock_seq[2]; */
+/* IDL: 	uint8 node[6]; */
+/* IDL: } */
+
+static int
+misc_dissect_element_GUID_time_low(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, drep, hf_misc_GUID_time_low, 0);
+
+	return offset;
+}
+
+static int
+misc_dissect_element_GUID_time_mid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = PIDL_dissect_uint16(tvb, offset, pinfo, tree, drep, hf_misc_GUID_time_mid, 0);
+
+	return offset;
+}
+
+static int
+misc_dissect_element_GUID_time_hi_and_version(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = PIDL_dissect_uint16(tvb, offset, pinfo, tree, drep, hf_misc_GUID_time_hi_and_version, 0);
+
+	return offset;
+}
+
+static int
+misc_dissect_element_GUID_clock_seq(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	int i;
+	for (i = 0; i < 2; i++)
+		offset = misc_dissect_element_GUID_clock_seq_(tvb, offset, pinfo, tree, drep);
+
+	return offset;
+}
+
+static int
+misc_dissect_element_GUID_clock_seq_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = PIDL_dissect_uint8(tvb, offset, pinfo, tree, drep, hf_misc_GUID_clock_seq, 0);
+
+	return offset;
+}
+
+static int
+misc_dissect_element_GUID_node(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	int i;
+	for (i = 0; i < 6; i++)
+		offset = misc_dissect_element_GUID_node_(tvb, offset, pinfo, tree, drep);
+
+	return offset;
+}
+
+static int
+misc_dissect_element_GUID_node_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = PIDL_dissect_uint8(tvb, offset, pinfo, tree, drep, hf_misc_GUID_node, 0);
+
+	return offset;
+}
+
+int
+misc_dissect_struct_GUID(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_)
+{
+	proto_item *item = NULL;
+	proto_tree *tree = NULL;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
+	int old_offset;
+
+	ALIGN_TO_4_BYTES;
+
+	old_offset = offset;
+
+	if (parent_tree) {
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
+		tree = proto_item_add_subtree(item, ett_misc_GUID);
+	}
+	
+	offset = misc_dissect_element_GUID_time_low(tvb, offset, pinfo, tree, drep);
+
+	offset = misc_dissect_element_GUID_time_mid(tvb, offset, pinfo, tree, drep);
+
+	offset = misc_dissect_element_GUID_time_hi_and_version(tvb, offset, pinfo, tree, drep);
+
+	offset = misc_dissect_element_GUID_clock_seq(tvb, offset, pinfo, tree, drep);
+
+	offset = misc_dissect_element_GUID_node(tvb, offset, pinfo, tree, drep);
+
+
+	proto_item_set_len(item, offset-old_offset);
+
+
+	if (di->call_data->flags & DCERPC_IS_NDR64) {
+		ALIGN_TO_4_BYTES;
+	}
+
+	return offset;
+}
+
+
+/* IDL: struct { */
+/* IDL: 	GUID uuid; */
+/* IDL: 	uint32 if_version; */
+/* IDL: } */
+
+static int
+misc_dissect_element_ndr_syntax_id_uuid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = dissect_ndr_uuid_t(tvb, offset, pinfo, tree, drep, hf_misc_ndr_syntax_id_uuid, NULL);
+
+	return offset;
+}
+
+static int
+misc_dissect_element_ndr_syntax_id_if_version(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, drep, hf_misc_ndr_syntax_id_if_version, 0);
+
+	return offset;
+}
+
+int
+misc_dissect_struct_ndr_syntax_id(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_)
+{
+	proto_item *item = NULL;
+	proto_tree *tree = NULL;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
+	int old_offset;
+
+	ALIGN_TO_4_BYTES;
+
+	old_offset = offset;
+
+	if (parent_tree) {
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
+		tree = proto_item_add_subtree(item, ett_misc_ndr_syntax_id);
+	}
+	
+	offset = misc_dissect_element_ndr_syntax_id_uuid(tvb, offset, pinfo, tree, drep);
+
+	offset = misc_dissect_element_ndr_syntax_id_if_version(tvb, offset, pinfo, tree, drep);
+
+
+	proto_item_set_len(item, offset-old_offset);
+
+
+	if (di->call_data->flags & DCERPC_IS_NDR64) {
+		ALIGN_TO_4_BYTES;
+	}
+
+	return offset;
+}
+
+
+/* IDL: struct { */
+/* IDL: 	uint32 handle_type; */
+/* IDL: 	GUID uuid; */
+/* IDL: } */
+
+static int
+misc_dissect_element_policy_handle_handle_type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, drep, hf_misc_policy_handle_handle_type, 0);
+
+	return offset;
+}
+
+static int
+misc_dissect_element_policy_handle_uuid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = dissect_ndr_uuid_t(tvb, offset, pinfo, tree, drep, hf_misc_policy_handle_uuid, NULL);
+
+	return offset;
+}
+
+int
+misc_dissect_struct_policy_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_)
+{
+	proto_item *item = NULL;
+	proto_tree *tree = NULL;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
+	int old_offset;
+
+	ALIGN_TO_4_BYTES;
+
+	old_offset = offset;
+
+	if (parent_tree) {
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
+		tree = proto_item_add_subtree(item, ett_misc_policy_handle);
+	}
+	
+	offset = misc_dissect_element_policy_handle_handle_type(tvb, offset, pinfo, tree, drep);
+
+	offset = misc_dissect_element_policy_handle_uuid(tvb, offset, pinfo, tree, drep);
+
+
+	proto_item_set_len(item, offset-old_offset);
+
+
+	if (di->call_data->flags & DCERPC_IS_NDR64) {
+		ALIGN_TO_4_BYTES;
+	}
+
+	return offset;
+}
+
+
+/* IDL: enum { */
+/* IDL: 	SEC_CHAN_NULL=0, */
+/* IDL: 	SEC_CHAN_LOCAL=1, */
+/* IDL: 	SEC_CHAN_WKSTA=2, */
+/* IDL: 	SEC_CHAN_DNS_DOMAIN=3, */
+/* IDL: 	SEC_CHAN_DOMAIN=4, */
+/* IDL: 	SEC_CHAN_LANMAN=5, */
+/* IDL: 	SEC_CHAN_BDC=6, */
+/* IDL: 	SEC_CHAN_RODC=7, */
+/* IDL: } */
+
+int
+misc_dissect_enum_netr_SchannelType(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 *param _U_)
+{
+	guint1632 parameter=0;
+	if(param){
+		parameter=(guint1632)*param;
+	}
+	offset = dissect_ndr_uint1632(tvb, offset, pinfo, tree, drep, hf_index, &parameter);
+	if(param){
+		*param=(guint32)parameter;
+	}
+	return offset;
+}
+
+
+/* IDL: struct { */
+/* IDL: 	NTSTATUS ntstatus; */
+/* IDL: 	uint32 unknown1; */
+/* IDL: 	uint32 unknown2; */
+/* IDL: } */
+
+static int
+misc_dissect_element_KRB5_EDATA_NTSTATUS_ntstatus(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, drep, hf_misc_KRB5_EDATA_NTSTATUS_ntstatus, 0);
+
+	return offset;
+}
+
+static int
+misc_dissect_element_KRB5_EDATA_NTSTATUS_unknown1(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, drep, hf_misc_KRB5_EDATA_NTSTATUS_unknown1, 0);
+
+	return offset;
+}
+
+static int
+misc_dissect_element_KRB5_EDATA_NTSTATUS_unknown2(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, drep, hf_misc_KRB5_EDATA_NTSTATUS_unknown2, 0);
+
+	return offset;
+}
+
+int
+misc_dissect_struct_KRB5_EDATA_NTSTATUS(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_)
+{
+	proto_item *item = NULL;
+	proto_tree *tree = NULL;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
+	int old_offset;
+
+	ALIGN_TO_4_BYTES;
+
+	old_offset = offset;
+
+	if (parent_tree) {
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
+		tree = proto_item_add_subtree(item, ett_misc_KRB5_EDATA_NTSTATUS);
+	}
+	
+	offset = misc_dissect_element_KRB5_EDATA_NTSTATUS_ntstatus(tvb, offset, pinfo, tree, drep);
+
+	offset = misc_dissect_element_KRB5_EDATA_NTSTATUS_unknown1(tvb, offset, pinfo, tree, drep);
+
+	offset = misc_dissect_element_KRB5_EDATA_NTSTATUS_unknown2(tvb, offset, pinfo, tree, drep);
+
+
+	proto_item_set_len(item, offset-old_offset);
+
+
+	if (di->call_data->flags & DCERPC_IS_NDR64) {
+		ALIGN_TO_4_BYTES;
+	}
+
+	return offset;
+}
+
+
+/* IDL: enum { */
+/* IDL: 	REG_NONE=0, */
+/* IDL: 	REG_SZ=1, */
+/* IDL: 	REG_EXPAND_SZ=2, */
+/* IDL: 	REG_BINARY=3, */
+/* IDL: 	REG_DWORD=4, */
+/* IDL: 	REG_DWORD_BIG_ENDIAN=5, */
+/* IDL: 	REG_LINK=6, */
+/* IDL: 	REG_MULTI_SZ=7, */
+/* IDL: 	REG_RESOURCE_LIST=8, */
+/* IDL: 	REG_FULL_RESOURCE_DESCRIPTOR=9, */
+/* IDL: 	REG_RESOURCE_REQUIREMENTS_LIST=10, */
+/* IDL: 	REG_QWORD=11, */
+/* IDL: } */
+
+int
+misc_dissect_enum_winreg_Type(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 *param _U_)
+{
+	guint32 parameter=0;
+	if(param){
+		parameter=(guint32)*param;
+	}
+	offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, hf_index, &parameter);
+	if(param){
+		*param=(guint32)parameter;
+	}
+	return offset;
+}
+
+
+/* IDL: [public(1)] [nodiscriminant(1)] [flag(LIBNDR_FLAG_LITTLE_ENDIAN)] union { */
+/* IDL: [case(REG_NONE)] [case(REG_NONE)] EMPTY ; */
+/* IDL: [case(REG_SZ)] [flag(LIBNDR_FLAG_STR_NULLTERM)] [case(REG_SZ)] string string; */
+/* IDL: [case(REG_EXPAND_SZ)] [flag(LIBNDR_FLAG_STR_NULLTERM)] [case(REG_EXPAND_SZ)] string string; */
+/* IDL: [case(REG_BINARY)] [flag(LIBNDR_FLAG_REMAINING)] [case(REG_BINARY)] DATA_BLOB binary; */
+/* IDL: [case(REG_DWORD)] [case(REG_DWORD)] uint32 value; */
+/* IDL: [case(REG_DWORD_BIG_ENDIAN)] [flag(LIBNDR_FLAG_BIGENDIAN)] [case(REG_DWORD_BIG_ENDIAN)] uint32 value; */
+/* IDL: [case(REG_MULTI_SZ)] [flag(LIBNDR_FLAG_STR_NULLTERM)] [case(REG_MULTI_SZ)] string_array string_array; */
+/* IDL: [default] ; */
+/* IDL: } */
+
+static int
+misc_dissect_element_winreg_Data_binary(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = dissect_ndr_datablob(tvb, offset, pinfo, tree, drep, hf_misc_winreg_Data_binary, 1);
+
+	return offset;
+}
+
+static int
+misc_dissect_element_winreg_Data_string_array(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = misc_dissect_struct_string_array(tvb,offset,pinfo,tree,drep,hf_misc_winreg_Data_string_array,0);
+
+	return offset;
+}
+
+static int
+misc_dissect_element_winreg_Data_data(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = dissect_ndr_datablob(tvb, offset, pinfo, tree, drep, hf_misc_winreg_Data_data, 1);
+
+	return offset;
+}
+
+static int
+misc_dissect_winreg_Data(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_)
+{
+	proto_item *item = NULL;
+	proto_tree *tree = NULL;
+	int old_offset;
+	guint32 level = param;
+
+	old_offset = offset;
+	if (parent_tree) {
+		item = proto_tree_add_text(parent_tree, tvb, offset, -1, "winreg_Data");
+		tree = proto_item_add_subtree(item, ett_misc_winreg_Data);
+	}
+
+	switch(level) {
+		case REG_NONE:
+		break;
+
+		case REG_SZ:
+			offset = misc_dissect_element_winreg_Data_string(tvb, offset, pinfo, tree, drep);
+		break;
+
+		case REG_EXPAND_SZ:
+			offset = misc_dissect_element_winreg_Data_string(tvb, offset, pinfo, tree, drep);
+		break;
+
+		case REG_BINARY:
+			offset = misc_dissect_element_winreg_Data_binary(tvb, offset, pinfo, tree, drep);
+		break;
+
+		case REG_DWORD:
+			offset = misc_dissect_element_winreg_Data_value(tvb, offset, pinfo, tree, drep);
+		break;
+
+		case REG_DWORD_BIG_ENDIAN:
+			offset = misc_dissect_element_winreg_Data_value(tvb, offset, pinfo, tree, drep);
+		break;
+
+		case REG_MULTI_SZ:
+			offset = misc_dissect_element_winreg_Data_string_array(tvb, offset, pinfo, tree, drep);
+		break;
+
+		default:
+			offset = misc_dissect_element_winreg_Data_data(tvb, offset, pinfo, tree, drep);
+		break;
+	}
+	proto_item_set_len(item, offset-old_offset);
+
+
+	return offset;
+}
+
+static dcerpc_sub_dissector misc_dissectors[] = {
+	{ 0, NULL, NULL, NULL }
+};
+
+void proto_register_dcerpc_misc(void)
+{
+	static hf_register_info hf[] = {
+	{ &hf_misc_GUID_time_mid, 
+	  { "Time Mid", "misc.GUID.time_mid", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_misc_winreg_Data_value, 
+	  { "Value", "misc.winreg_Data.value", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_misc_GUID_time_low, 
+	  { "Time Low", "misc.GUID.time_low", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_misc_KRB5_EDATA_NTSTATUS_unknown2, 
+	  { "Unknown2", "misc.KRB5_EDATA_NTSTATUS.unknown2", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_misc_GUID_time_hi_and_version, 
+	  { "Time Hi And Version", "misc.GUID.time_hi_and_version", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_misc_KRB5_EDATA_NTSTATUS_ntstatus, 
+	  { "Ntstatus", "misc.KRB5_EDATA_NTSTATUS.ntstatus", FT_UINT32, BASE_DEC, VALS(NT_errors), 0, NULL, HFILL }},
+	{ &hf_misc_GUID_node, 
+	  { "Node", "misc.GUID.node", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_misc_winreg_Data_string, 
+	  { "String", "misc.winreg_Data.string", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
+	{ &hf_misc_winreg_Data_data, 
+	  { "Data", "misc.winreg_Data.data", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
+	{ &hf_misc_winreg_Data_binary, 
+	  { "Binary", "misc.winreg_Data.binary", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
+	{ &hf_misc_policy_handle_uuid, 
+	  { "Uuid", "misc.policy_handle.uuid", FT_GUID, BASE_NONE, NULL, 0, NULL, HFILL }},
+	{ &hf_misc_KRB5_EDATA_NTSTATUS_unknown1, 
+	  { "Unknown1", "misc.KRB5_EDATA_NTSTATUS.unknown1", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_misc_policy_handle_handle_type, 
+	  { "Handle Type", "misc.policy_handle.handle_type", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_misc_ndr_syntax_id_uuid, 
+	  { "Uuid", "misc.ndr_syntax_id.uuid", FT_GUID, BASE_NONE, NULL, 0, NULL, HFILL }},
+	{ &hf_misc_opnum, 
+	  { "Operation", "misc.opnum", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_misc_GUID_clock_seq, 
+	  { "Clock Seq", "misc.GUID.clock_seq", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_misc_winreg_Data_string_array, 
+	  { "String Array", "misc.winreg_Data.string_array", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
+	{ &hf_misc_ndr_syntax_id_if_version, 
+	  { "If Version", "misc.ndr_syntax_id.if_version", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+	};
+
+
+	static gint *ett[] = {
+		&ett_dcerpc_misc,
+		&ett_misc_GUID,
+		&ett_misc_ndr_syntax_id,
+		&ett_misc_policy_handle,
+		&ett_misc_KRB5_EDATA_NTSTATUS,
+		&ett_misc_winreg_Data,
+	};
+
+	proto_dcerpc_misc = proto_register_protocol("MISC (pidl)", "MISC", "misc");
+	proto_register_field_array(proto_dcerpc_misc, hf, array_length (hf));
+	proto_register_subtree_array(ett, array_length(ett));
+}
+
+void proto_reg_handoff_dcerpc_misc(void)
+{
+	dcerpc_init_uuid(proto_dcerpc_misc, ett_dcerpc_misc,
+		&uuid_dcerpc_misc, ver_dcerpc_misc,
+		misc_dissectors, hf_misc_opnum);
+}
-- 
1.8.1.2

>From 698bb48552ce4a4db3d2b441a9aeb6a96596a7cf Mon Sep 17 00:00:00 2001
From: Matthieu Patou <[email protected]>
Date: Sun, 6 Oct 2013 18:20:52 -0700
Subject: [PATCH 12/21] Add packet-dcerpc-misc.c to the list of build files

Signed-off-by: Matthieu Patou <[email protected]>
---
 epan/CMakeLists.txt             | 1 +
 epan/dissectors/Makefile.common | 1 +
 2 files changed, 2 insertions(+)

diff --git a/epan/CMakeLists.txt b/epan/CMakeLists.txt
index 25fd2ff..98f1a53 100644
--- a/epan/CMakeLists.txt
+++ b/epan/CMakeLists.txt
@@ -173,6 +173,7 @@ set(DIRTY_PIDL_DISSECTOR_SRC
 	dissectors/packet-dcerpc-eventlog.c
 	dissectors/packet-dcerpc-lsa.c
 	dissectors/packet-dcerpc-mapi.c
+	dissectors/packet-dcerpc-misc.c
 	dissectors/packet-dcerpc-winreg.c
 )
 set(ASN1_DISSECTOR_SRC
diff --git a/epan/dissectors/Makefile.common b/epan/dissectors/Makefile.common
index 1b6e631..aa2fbcd 100644
--- a/epan/dissectors/Makefile.common
+++ b/epan/dissectors/Makefile.common
@@ -70,6 +70,7 @@ DIRTY_PIDL_DISSECTOR_SRC = \
 	packet-dcerpc-eventlog.c \
 	packet-dcerpc-lsa.c \
 	packet-dcerpc-mapi.c \
+	packet-dcerpc-misc.c	\
 	packet-dcerpc-winreg.c
 
 #
-- 
1.8.1.2

>From db1df40c54ce2dc3a0f3c350c82f4a1e38d5b2b3 Mon Sep 17 00:00:00 2001
From: Matthieu Patou <[email protected]>
Date: Sun, 6 Oct 2013 18:20:36 -0700
Subject: [PATCH 11/21] Update cnf and idl for misc interface

Signed-off-by: Matthieu Patou <[email protected]>
---
 epan/dissectors/pidl/misc.cnf | 28 ++++++++++++++++++++++++++++
 epan/dissectors/pidl/misc.idl |  6 +++---
 2 files changed, 31 insertions(+), 3 deletions(-)
 create mode 100644 epan/dissectors/pidl/misc.cnf

diff --git a/epan/dissectors/pidl/misc.cnf b/epan/dissectors/pidl/misc.cnf
new file mode 100644
index 0000000..fd76832
--- /dev/null
+++ b/epan/dissectors/pidl/misc.cnf
@@ -0,0 +1,28 @@
+MANUAL misc_dissect_element_winreg_Data_value
+MANUAL misc_dissect_element_winreg_Data_string
+
+CODE START
+
+static int
+misc_dissect_element_winreg_Data_string(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = dissect_null_term_wstring(tvb, offset, pinfo, tree, drep, hf_misc_winreg_Data_string , 0);
+
+	return offset;
+}
+
+static int
+misc_dissect_element_winreg_Data_value(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, drep, hf_misc_winreg_Data_value, 0);
+
+	return offset;
+}
+
+static int
+misc_dissect_struct_string_array(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_)
+{
+    /* We don't do it yet */
+    return offset;
+}
+CODE END
diff --git a/epan/dissectors/pidl/misc.idl b/epan/dissectors/pidl/misc.idl
index d37e515..c306f35 100644
--- a/epan/dissectors/pidl/misc.idl
+++ b/epan/dissectors/pidl/misc.idl
@@ -4,10 +4,10 @@
   miscellaneous IDL structures
 */
 
-
 [
-	pyhelper("librpc/ndr/py_misc.c"),
-	pointer_default(unique)
+  uuid("12345678-1234-1234-1234-abcdef123456"),
+  version(1.0),
+  pointer_default(unique)
 ]
 interface misc
 {
-- 
1.8.1.2

>From 6591da8635c883e2d1a0f38527e25c54d748ad62 Mon Sep 17 00:00:00 2001
From: Matthieu Patou <[email protected]>
Date: Sun, 22 Sep 2013 22:27:11 -0700
Subject: [PATCH 10/21] frsrpc: Regenerate frsrpc due to changes in the pidl
 generator and frsrpc idl

Signed-off-by: Matthieu Patou <[email protected]>
---
 epan/dissectors/packet-dcerpc-frsrpc.c | 314 ++++++++++++++++++++++++++-------
 epan/dissectors/pidl/frsrpc.cnf        |   6 +-
 epan/dissectors/pidl/frsrpc.idl        |  28 ++-
 3 files changed, 262 insertions(+), 86 deletions(-)

diff --git a/epan/dissectors/packet-dcerpc-frsrpc.c b/epan/dissectors/packet-dcerpc-frsrpc.c
index fa4ab73..2731df1 100644
--- a/epan/dissectors/packet-dcerpc-frsrpc.c
+++ b/epan/dissectors/packet-dcerpc-frsrpc.c
@@ -12,7 +12,6 @@
 
 
 #include "config.h"
-
 #ifdef _MSC_VER
 #pragma warning(disable:4005)
 #pragma warning(disable:4013)
@@ -742,16 +741,19 @@ frsrpc_dissect_struct_frsrpc_CommPktChunkCtr(tvbuff_t *tvb, int offset, packet_i
 static int
 frsrpc_dissect_element_CommPktChunkGuidName_guid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
-	guint32 size;
+	dcerpc_info *di = (dcerpc_info*)pinfo->private_data;
+	guint3264 size;
 	int conformant = di->conformant_run;
 	tvbuff_t *subtvb;
 
 	if (!conformant) {
-		offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, hf_frsrpc_frsrpc_CommPktChunkGuidName_guid_, &size);
+		guint32 saved_flags = di->call_data->flags;
+		offset = dissect_ndr_uint3264(tvb, offset, pinfo, tree, drep, hf_frsrpc_frsrpc_CommPktChunkGuidName_guid_, &size);
+		di->call_data->flags &= ~DCERPC_IS_NDR64;
 		subtvb = tvb_new_subset(tvb, offset, size, -1);
 		frsrpc_dissect_element_CommPktChunkGuidName_guid_(subtvb, 0, pinfo, tree, drep);
 		offset += size;
+		di->call_data->flags = saved_flags;
 	}
 
 	return offset;
@@ -768,16 +770,19 @@ frsrpc_dissect_element_CommPktChunkGuidName_guid_(tvbuff_t *tvb _U_, int offset
 static int
 frsrpc_dissect_element_CommPktChunkGuidName_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
-	guint32 size;
+	dcerpc_info *di = (dcerpc_info*)pinfo->private_data;
+	guint3264 size;
 	int conformant = di->conformant_run;
 	tvbuff_t *subtvb;
 
 	if (!conformant) {
-		offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, hf_frsrpc_frsrpc_CommPktChunkGuidName_name_, &size);
+		guint32 saved_flags = di->call_data->flags;
+		offset = dissect_ndr_uint3264(tvb, offset, pinfo, tree, drep, hf_frsrpc_frsrpc_CommPktChunkGuidName_name_, &size);
+		di->call_data->flags &= ~DCERPC_IS_NDR64;
 		subtvb = tvb_new_subset(tvb, offset, size, -1);
 		frsrpc_dissect_element_CommPktChunkGuidName_name_(subtvb, 0, pinfo, tree, drep);
 		offset += size;
+		di->call_data->flags = saved_flags;
 	}
 
 	return offset;
@@ -802,7 +807,7 @@ frsrpc_dissect_struct_CommPktChunkGuidName(tvbuff_t *tvb _U_, int offset _U_, pa
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_frsrpc_frsrpc_CommPktChunkGuidName);
 	}
 	
@@ -852,7 +857,7 @@ frsrpc_dissect_struct_CommPktGSVN(tvbuff_t *tvb _U_, int offset _U_, packet_info
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_frsrpc_frsrpc_CommPktGSVN);
 	}
 	
@@ -903,7 +908,7 @@ frsrpc_dissect_bitmap_CommPktCoCmdFlags(tvbuff_t *tvb _U_, int offset _U_, packe
 	ALIGN_TO_4_BYTES;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, 4, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, 4, DREP_ENC_INTEGER(drep));
 		tree = proto_item_add_subtree(item,ett_frsrpc_frsrpc_CommPktCoCmdFlags);
 	}
 
@@ -1081,7 +1086,7 @@ frsrpc_dissect_bitmap_CommPktCoCmdIFlags(tvbuff_t *tvb _U_, int offset _U_, pack
 	ALIGN_TO_4_BYTES;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, 4, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, 4, DREP_ENC_INTEGER(drep));
 		tree = proto_item_add_subtree(item,ett_frsrpc_frsrpc_CommPktCoCmdIFlags);
 	}
 
@@ -1190,7 +1195,7 @@ frsrpc_dissect_bitmap_CommPktCoCmdContentCmd(tvbuff_t *tvb _U_, int offset _U_,
 	ALIGN_TO_4_BYTES;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, 4, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, 4, DREP_ENC_INTEGER(drep));
 		tree = proto_item_add_subtree(item,ett_frsrpc_frsrpc_CommPktCoCmdContentCmd);
 	}
 
@@ -1731,7 +1736,7 @@ frsrpc_dissect_struct_CommPktChangeOrderCommand(tvbuff_t *tvb _U_, int offset _U
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_frsrpc_frsrpc_CommPktChangeOrderCommand);
 	}
 	
@@ -1903,7 +1908,7 @@ frsrpc_dissect_struct_CommPktDataExtensionChecksum(tvbuff_t *tvb _U_, int offset
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_frsrpc_frsrpc_CommPktDataExtensionChecksum);
 	}
 	
@@ -1986,7 +1991,7 @@ frsrpc_dissect_struct_CommPktDataExtensionRetryTimeout(tvbuff_t *tvb _U_, int of
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_frsrpc_frsrpc_CommPktDataExtensionRetryTimeout);
 	}
 	
@@ -2102,7 +2107,7 @@ frsrpc_dissect_struct_CommPktCoRecordExtensionWin2k(tvbuff_t *tvb _U_, int offse
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_frsrpc_frsrpc_CommPktCoRecordExtensionWin2k);
 	}
 	
@@ -2227,7 +2232,7 @@ frsrpc_dissect_struct_CommPktChangeOrderRecordExtension(tvbuff_t *tvb _U_, int o
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_frsrpc_frsrpc_CommPktChangeOrderRecordExtension);
 	}
 	
@@ -2332,7 +2337,7 @@ frsrpc_dissect_enum_CommPktChunkType(tvbuff_t *tvb _U_, int offset _U_, packet_i
 /* IDL: [case(FRSRPC_COMM_PKT_CHUNK_JOIN_TIME)] [subcontext(4)] [case(FRSRPC_COMM_PKT_CHUNK_JOIN_TIME)] NTTIME join_time; */
 /* IDL: [case(FRSRPC_COMM_PKT_CHUNK_REPLICA_VERSION_GUID)] [subcontext(4)] [case(FRSRPC_COMM_PKT_CHUNK_REPLICA_VERSION_GUID)] GUID replica_version_guid; */
 /* IDL: [case(FRSRPC_COMM_PKT_CHUNK_COMPRESSION_GUID)] [case(FRSRPC_COMM_PKT_CHUNK_COMPRESSION_GUID)] GUID compression_guid; */
-/* IDL: [case(FRSRPC_COMM_PKT_CHUNK_BLOCK)] [case(FRSRPC_COMM_PKT_CHUNK_BLOCK)] DATA_BLOB block; */
+/* IDL: [case(FRSRPC_COMM_PKT_CHUNK_BLOCK)] [flag(LIBNDR_FLAG_REMAINING)] [case(FRSRPC_COMM_PKT_CHUNK_BLOCK)] DATA_BLOB block; */
 /* IDL: [case(FRSRPC_COMM_PKT_CHUNK_BLOCK_SIZE)] [case(FRSRPC_COMM_PKT_CHUNK_BLOCK_SIZE)] hyper block_size; */
 /* IDL: [case(FRSRPC_COMM_PKT_CHUNK_FILE_SIZE)] [case(FRSRPC_COMM_PKT_CHUNK_FILE_SIZE)] hyper file_size; */
 /* IDL: [case(FRSRPC_COMM_PKT_CHUNK_FILE_OFFSET)] [case(FRSRPC_COMM_PKT_CHUNK_FILE_OFFSET)] hyper file_offset; */
@@ -2404,16 +2409,19 @@ frsrpc_dissect_element_CommPktChunkData_connection(tvbuff_t *tvb _U_, int offset
 static int
 frsrpc_dissect_element_CommPktChunkData_join_guid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
-	guint32 size;
+	dcerpc_info *di = (dcerpc_info*)pinfo->private_data;
+	guint3264 size;
 	int conformant = di->conformant_run;
 	tvbuff_t *subtvb;
 
 	if (!conformant) {
-		offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, hf_frsrpc_frsrpc_CommPktChunkData_join_guid_, &size);
+		guint32 saved_flags = di->call_data->flags;
+		offset = dissect_ndr_uint3264(tvb, offset, pinfo, tree, drep, hf_frsrpc_frsrpc_CommPktChunkData_join_guid_, &size);
+		di->call_data->flags &= ~DCERPC_IS_NDR64;
 		subtvb = tvb_new_subset(tvb, offset, size, -1);
 		frsrpc_dissect_element_CommPktChunkData_join_guid_(subtvb, 0, pinfo, tree, drep);
 		offset += size;
+		di->call_data->flags = saved_flags;
 	}
 
 	return offset;
@@ -2438,16 +2446,19 @@ frsrpc_dissect_element_CommPktChunkData_last_join_time(tvbuff_t *tvb _U_, int of
 static int
 frsrpc_dissect_element_CommPktChunkData_vvector(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
-	guint32 size;
+	dcerpc_info *di = (dcerpc_info*)pinfo->private_data;
+	guint3264 size;
 	int conformant = di->conformant_run;
 	tvbuff_t *subtvb;
 
 	if (!conformant) {
-		offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, hf_frsrpc_frsrpc_CommPktChunkData_vvector_, &size);
+		guint32 saved_flags = di->call_data->flags;
+		offset = dissect_ndr_uint3264(tvb, offset, pinfo, tree, drep, hf_frsrpc_frsrpc_CommPktChunkData_vvector_, &size);
+		di->call_data->flags &= ~DCERPC_IS_NDR64;
 		subtvb = tvb_new_subset(tvb, offset, size, -1);
 		frsrpc_dissect_element_CommPktChunkData_vvector_(subtvb, 0, pinfo, tree, drep);
 		offset += size;
+		di->call_data->flags = saved_flags;
 	}
 
 	return offset;
@@ -2464,16 +2475,19 @@ frsrpc_dissect_element_CommPktChunkData_vvector_(tvbuff_t *tvb _U_, int offset _
 static int
 frsrpc_dissect_element_CommPktChunkData_join_time(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
-	guint32 size;
+	dcerpc_info *di = (dcerpc_info*)pinfo->private_data;
+	guint3264 size;
 	int conformant = di->conformant_run;
 	tvbuff_t *subtvb;
 
 	if (!conformant) {
-		offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, hf_frsrpc_frsrpc_CommPktChunkData_join_time_, &size);
+		guint32 saved_flags = di->call_data->flags;
+		offset = dissect_ndr_uint3264(tvb, offset, pinfo, tree, drep, hf_frsrpc_frsrpc_CommPktChunkData_join_time_, &size);
+		di->call_data->flags &= ~DCERPC_IS_NDR64;
 		subtvb = tvb_new_subset(tvb, offset, size, -1);
 		frsrpc_dissect_element_CommPktChunkData_join_time_(subtvb, 0, pinfo, tree, drep);
 		offset += size;
+		di->call_data->flags = saved_flags;
 	}
 
 	return offset;
@@ -2490,16 +2504,19 @@ frsrpc_dissect_element_CommPktChunkData_join_time_(tvbuff_t *tvb _U_, int offset
 static int
 frsrpc_dissect_element_CommPktChunkData_replica_version_guid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
-	guint32 size;
+	dcerpc_info *di = (dcerpc_info*)pinfo->private_data;
+	guint3264 size;
 	int conformant = di->conformant_run;
 	tvbuff_t *subtvb;
 
 	if (!conformant) {
-		offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, hf_frsrpc_frsrpc_CommPktChunkData_replica_version_guid_, &size);
+		guint32 saved_flags = di->call_data->flags;
+		offset = dissect_ndr_uint3264(tvb, offset, pinfo, tree, drep, hf_frsrpc_frsrpc_CommPktChunkData_replica_version_guid_, &size);
+		di->call_data->flags &= ~DCERPC_IS_NDR64;
 		subtvb = tvb_new_subset(tvb, offset, size, -1);
 		frsrpc_dissect_element_CommPktChunkData_replica_version_guid_(subtvb, 0, pinfo, tree, drep);
 		offset += size;
+		di->call_data->flags = saved_flags;
 	}
 
 	return offset;
@@ -2524,7 +2541,7 @@ frsrpc_dissect_element_CommPktChunkData_compression_guid(tvbuff_t *tvb _U_, int
 static int
 frsrpc_dissect_element_CommPktChunkData_block(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	offset = dissect_ndr_datablob(tvb, offset, pinfo, tree, drep, hf_frsrpc_frsrpc_CommPktChunkData_block, 0);
+	offset = dissect_ndr_datablob(tvb, offset, pinfo, tree, drep, hf_frsrpc_frsrpc_CommPktChunkData_block, 1);
 
 	return offset;
 }
@@ -2556,16 +2573,19 @@ frsrpc_dissect_element_CommPktChunkData_file_offset(tvbuff_t *tvb _U_, int offse
 static int
 frsrpc_dissect_element_CommPktChunkData_gvsn(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
-	guint32 size;
+	dcerpc_info *di = (dcerpc_info*)pinfo->private_data;
+	guint3264 size;
 	int conformant = di->conformant_run;
 	tvbuff_t *subtvb;
 
 	if (!conformant) {
-		offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, hf_frsrpc_frsrpc_CommPktChunkData_gvsn_, &size);
+		guint32 saved_flags = di->call_data->flags;
+		offset = dissect_ndr_uint3264(tvb, offset, pinfo, tree, drep, hf_frsrpc_frsrpc_CommPktChunkData_gvsn_, &size);
+		di->call_data->flags &= ~DCERPC_IS_NDR64;
 		subtvb = tvb_new_subset(tvb, offset, size, -1);
 		frsrpc_dissect_element_CommPktChunkData_gvsn_(subtvb, 0, pinfo, tree, drep);
 		offset += size;
+		di->call_data->flags = saved_flags;
 	}
 
 	return offset;
@@ -2582,16 +2602,19 @@ frsrpc_dissect_element_CommPktChunkData_gvsn_(tvbuff_t *tvb _U_, int offset _U_,
 static int
 frsrpc_dissect_element_CommPktChunkData_co_guid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
-	guint32 size;
+	dcerpc_info *di = (dcerpc_info*)pinfo->private_data;
+	guint3264 size;
 	int conformant = di->conformant_run;
 	tvbuff_t *subtvb;
 
 	if (!conformant) {
-		offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, hf_frsrpc_frsrpc_CommPktChunkData_co_guid_, &size);
+		guint32 saved_flags = di->call_data->flags;
+		offset = dissect_ndr_uint3264(tvb, offset, pinfo, tree, drep, hf_frsrpc_frsrpc_CommPktChunkData_co_guid_, &size);
+		di->call_data->flags &= ~DCERPC_IS_NDR64;
 		subtvb = tvb_new_subset(tvb, offset, size, -1);
 		frsrpc_dissect_element_CommPktChunkData_co_guid_(subtvb, 0, pinfo, tree, drep);
 		offset += size;
+		di->call_data->flags = saved_flags;
 	}
 
 	return offset;
@@ -2616,16 +2639,19 @@ frsrpc_dissect_element_CommPktChunkData_co_sequnence_number(tvbuff_t *tvb _U_, i
 static int
 frsrpc_dissect_element_CommPktChunkData_remote_co(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
-	guint32 size;
+	dcerpc_info *di = (dcerpc_info*)pinfo->private_data;
+	guint3264 size;
 	int conformant = di->conformant_run;
 	tvbuff_t *subtvb;
 
 	if (!conformant) {
-		offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, hf_frsrpc_frsrpc_CommPktChunkData_remote_co_, &size);
+		guint32 saved_flags = di->call_data->flags;
+		offset = dissect_ndr_uint3264(tvb, offset, pinfo, tree, drep, hf_frsrpc_frsrpc_CommPktChunkData_remote_co_, &size);
+		di->call_data->flags &= ~DCERPC_IS_NDR64;
 		subtvb = tvb_new_subset(tvb, offset, size, -1);
 		frsrpc_dissect_element_CommPktChunkData_remote_co_(subtvb, 0, pinfo, tree, drep);
 		offset += size;
+		di->call_data->flags = saved_flags;
 	}
 
 	return offset;
@@ -2642,16 +2668,19 @@ frsrpc_dissect_element_CommPktChunkData_remote_co_(tvbuff_t *tvb _U_, int offset
 static int
 frsrpc_dissect_element_CommPktChunkData_co_ext_win2k(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
-	guint32 size;
+	dcerpc_info *di = (dcerpc_info*)pinfo->private_data;
+	guint3264 size;
 	int conformant = di->conformant_run;
 	tvbuff_t *subtvb;
 
 	if (!conformant) {
-		offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, hf_frsrpc_frsrpc_CommPktChunkData_co_ext_win2k_, &size);
+		guint32 saved_flags = di->call_data->flags;
+		offset = dissect_ndr_uint3264(tvb, offset, pinfo, tree, drep, hf_frsrpc_frsrpc_CommPktChunkData_co_ext_win2k_, &size);
+		di->call_data->flags &= ~DCERPC_IS_NDR64;
 		subtvb = tvb_new_subset(tvb, offset, size, -1);
 		frsrpc_dissect_element_CommPktChunkData_co_ext_win2k_(subtvb, 0, pinfo, tree, drep);
 		offset += size;
+		di->call_data->flags = saved_flags;
 	}
 
 	return offset;
@@ -2814,16 +2843,19 @@ frsrpc_dissect_element_CommPktChunk_type(tvbuff_t *tvb _U_, int offset _U_, pack
 static int
 frsrpc_dissect_element_CommPktChunk_data(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_, guint1632 *type)
 {
-	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
-	guint32 size;
+	dcerpc_info *di = (dcerpc_info*)pinfo->private_data;
+	guint3264 size;
 	int conformant = di->conformant_run;
 	tvbuff_t *subtvb;
 
 	if (!conformant) {
-		offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, hf_frsrpc_frsrpc_CommPktChunk_data_, &size);
+		guint32 saved_flags = di->call_data->flags;
+		offset = dissect_ndr_uint3264(tvb, offset, pinfo, tree, drep, hf_frsrpc_frsrpc_CommPktChunk_data_, &size);
+		di->call_data->flags &= ~DCERPC_IS_NDR64;
 		subtvb = tvb_new_subset(tvb, offset, size, -1);
 		frsrpc_dissect_element_CommPktChunk_data_(subtvb, 0, pinfo, tree, drep, type);
 		offset += size;
+		di->call_data->flags = saved_flags;
 	}
 
 	return offset;
@@ -2899,8 +2931,8 @@ frsrpc_dissect_enum_CommPktMinor(tvbuff_t *tvb _U_, int offset _U_, packet_info
 /* IDL: 	[value(ndr_size_frsrpc_CommPktChunkCtr(r->ctr,ndr->flags))] [range(0,262144)] uint32 pkt_len; */
 /* IDL: 	[value(0)] uint32 upk_len; */
 /* IDL: 	[unique(1)] [subcontext_size(pkt_len)] [subcontext(4)] frsrpc_CommPktChunkCtr *ctr; */
-/* IDL: 	[value(0)] uint32 data_name; */
-/* IDL: 	[value(0)] uint32 data_handle; */
+/* IDL: 	[value(0)] uint3264 data_name; */
+/* IDL: 	[value(0)] uint3264 data_handle; */
 /* IDL: } */
 
 static int
@@ -2962,16 +2994,19 @@ frsrpc_dissect_element_FrsSendCommPktReq_ctr(tvbuff_t *tvb _U_, int offset _U_,
 static int
 frsrpc_dissect_element_FrsSendCommPktReq_ctr_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
-	guint32 size;
+	dcerpc_info *di = (dcerpc_info*)pinfo->private_data;
+	guint3264 size;
 	int conformant = di->conformant_run;
 	tvbuff_t *subtvb;
 
 	if (!conformant) {
-		offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, hf_frsrpc_frsrpc_FrsSendCommPktReq_ctr_, &size);
+		guint32 saved_flags = di->call_data->flags;
+		offset = dissect_ndr_uint3264(tvb, offset, pinfo, tree, drep, hf_frsrpc_frsrpc_FrsSendCommPktReq_ctr_, &size);
+		di->call_data->flags &= ~DCERPC_IS_NDR64;
 		subtvb = tvb_new_subset(tvb, offset, size, -1);
 		frsrpc_dissect_element_FrsSendCommPktReq_ctr__(subtvb, 0, pinfo, tree, drep);
 		offset += size;
+		di->call_data->flags = saved_flags;
 	}
 
 	return offset;
@@ -2988,7 +3023,7 @@ frsrpc_dissect_element_FrsSendCommPktReq_ctr__(tvbuff_t *tvb _U_, int offset _U_
 static int
 frsrpc_dissect_element_FrsSendCommPktReq_data_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, drep, hf_frsrpc_frsrpc_FrsSendCommPktReq_data_name, 0);
+	offset = dissect_ndr_uint3264(tvb, offset, pinfo, tree, drep, hf_frsrpc_frsrpc_FrsSendCommPktReq_data_name, NULL);
 
 	return offset;
 }
@@ -2996,7 +3031,7 @@ frsrpc_dissect_element_FrsSendCommPktReq_data_name(tvbuff_t *tvb _U_, int offset
 static int
 frsrpc_dissect_element_FrsSendCommPktReq_data_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, drep, hf_frsrpc_frsrpc_FrsSendCommPktReq_data_handle, 0);
+	offset = dissect_ndr_uint3264(tvb, offset, pinfo, tree, drep, hf_frsrpc_frsrpc_FrsSendCommPktReq_data_handle, NULL);
 
 	return offset;
 }
@@ -3014,7 +3049,7 @@ frsrpc_dissect_struct_FrsSendCommPktReq(tvbuff_t *tvb _U_, int offset _U_, packe
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_frsrpc_frsrpc_FrsSendCommPktReq);
 	}
 	
@@ -3396,16 +3431,19 @@ frsrpc_dissect_element_FrsStartPromotionParent_connection_guid(tvbuff_t *tvb _U_
 static int
 frsrpc_dissect_element_FrsStartPromotionParent_connection_guid_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
-	guint32 size;
+	dcerpc_info *di = (dcerpc_info*)pinfo->private_data;
+	guint3264 size;
 	int conformant = di->conformant_run;
 	tvbuff_t *subtvb;
 
 	if (!conformant) {
-		offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, hf_frsrpc_frsrpc_FrsStartPromotionParent_connection_guid_, &size);
+		guint32 saved_flags = di->call_data->flags;
+		offset = dissect_ndr_uint3264(tvb, offset, pinfo, tree, drep, hf_frsrpc_frsrpc_FrsStartPromotionParent_connection_guid_, &size);
+		di->call_data->flags &= ~DCERPC_IS_NDR64;
 		subtvb = tvb_new_subset(tvb, offset, size, -1);
 		frsrpc_dissect_element_FrsStartPromotionParent_connection_guid__(subtvb, 0, pinfo, tree, drep);
 		offset += size;
+		di->call_data->flags = saved_flags;
 	}
 
 	return offset;
@@ -3430,16 +3468,19 @@ frsrpc_dissect_element_FrsStartPromotionParent_partner_guid(tvbuff_t *tvb _U_, i
 static int
 frsrpc_dissect_element_FrsStartPromotionParent_partner_guid_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
-	guint32 size;
+	dcerpc_info *di = (dcerpc_info*)pinfo->private_data;
+	guint3264 size;
 	int conformant = di->conformant_run;
 	tvbuff_t *subtvb;
 
 	if (!conformant) {
-		offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, hf_frsrpc_frsrpc_FrsStartPromotionParent_partner_guid_, &size);
+		guint32 saved_flags = di->call_data->flags;
+		offset = dissect_ndr_uint3264(tvb, offset, pinfo, tree, drep, hf_frsrpc_frsrpc_FrsStartPromotionParent_partner_guid_, &size);
+		di->call_data->flags &= ~DCERPC_IS_NDR64;
 		subtvb = tvb_new_subset(tvb, offset, size, -1);
 		frsrpc_dissect_element_FrsStartPromotionParent_partner_guid__(subtvb, 0, pinfo, tree, drep);
 		offset += size;
+		di->call_data->flags = saved_flags;
 	}
 
 	return offset;
@@ -3464,16 +3505,19 @@ frsrpc_dissect_element_FrsStartPromotionParent_parent_guid(tvbuff_t *tvb _U_, in
 static int
 frsrpc_dissect_element_FrsStartPromotionParent_parent_guid_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
-	guint32 size;
+	dcerpc_info *di = (dcerpc_info*)pinfo->private_data;
+	guint3264 size;
 	int conformant = di->conformant_run;
 	tvbuff_t *subtvb;
 
 	if (!conformant) {
-		offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, hf_frsrpc_frsrpc_FrsStartPromotionParent_parent_guid_, &size);
+		guint32 saved_flags = di->call_data->flags;
+		offset = dissect_ndr_uint3264(tvb, offset, pinfo, tree, drep, hf_frsrpc_frsrpc_FrsStartPromotionParent_parent_guid_, &size);
+		di->call_data->flags &= ~DCERPC_IS_NDR64;
 		subtvb = tvb_new_subset(tvb, offset, size, -1);
 		frsrpc_dissect_element_FrsStartPromotionParent_parent_guid__(subtvb, 0, pinfo, tree, drep);
 		offset += size;
+		di->call_data->flags = saved_flags;
 	}
 
 	return offset;
@@ -3575,6 +3619,132 @@ frsrpc_dissect_FrsNOP_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pi
 	return offset;
 }
 
+/* IDL: void FRSRPC_BACKUP_COMPLETE( */
+/* IDL:  */
+/* IDL: ); */
+
+static int
+frsrpc_dissect_FRSRPC_BACKUP_COMPLETE_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	pinfo->dcerpc_procedure_name="FRSRPC_BACKUP_COMPLETE";
+	return offset;
+}
+
+static int
+frsrpc_dissect_FRSRPC_BACKUP_COMPLETE_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	pinfo->dcerpc_procedure_name="FRSRPC_BACKUP_COMPLETE";
+	return offset;
+}
+
+/* IDL: void FRSRPC_BACKUP_COMPLETE_5( */
+/* IDL:  */
+/* IDL: ); */
+
+static int
+frsrpc_dissect_FRSRPC_BACKUP_COMPLETE_5_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	pinfo->dcerpc_procedure_name="FRSRPC_BACKUP_COMPLETE_5";
+	return offset;
+}
+
+static int
+frsrpc_dissect_FRSRPC_BACKUP_COMPLETE_5_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	pinfo->dcerpc_procedure_name="FRSRPC_BACKUP_COMPLETE_5";
+	return offset;
+}
+
+/* IDL: void FRSRPC_BACKUP_COMPLETE_6( */
+/* IDL:  */
+/* IDL: ); */
+
+static int
+frsrpc_dissect_FRSRPC_BACKUP_COMPLETE_6_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	pinfo->dcerpc_procedure_name="FRSRPC_BACKUP_COMPLETE_6";
+	return offset;
+}
+
+static int
+frsrpc_dissect_FRSRPC_BACKUP_COMPLETE_6_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	pinfo->dcerpc_procedure_name="FRSRPC_BACKUP_COMPLETE_6";
+	return offset;
+}
+
+/* IDL: void FRSRPC_BACKUP_COMPLETE_7( */
+/* IDL:  */
+/* IDL: ); */
+
+static int
+frsrpc_dissect_FRSRPC_BACKUP_COMPLETE_7_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	pinfo->dcerpc_procedure_name="FRSRPC_BACKUP_COMPLETE_7";
+	return offset;
+}
+
+static int
+frsrpc_dissect_FRSRPC_BACKUP_COMPLETE_7_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	pinfo->dcerpc_procedure_name="FRSRPC_BACKUP_COMPLETE_7";
+	return offset;
+}
+
+/* IDL: void FRSRPC_BACKUP_COMPLETE_8( */
+/* IDL:  */
+/* IDL: ); */
+
+static int
+frsrpc_dissect_FRSRPC_BACKUP_COMPLETE_8_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	pinfo->dcerpc_procedure_name="FRSRPC_BACKUP_COMPLETE_8";
+	return offset;
+}
+
+static int
+frsrpc_dissect_FRSRPC_BACKUP_COMPLETE_8_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	pinfo->dcerpc_procedure_name="FRSRPC_BACKUP_COMPLETE_8";
+	return offset;
+}
+
+/* IDL: void FRSRPC_BACKUP_COMPLETE_9( */
+/* IDL:  */
+/* IDL: ); */
+
+static int
+frsrpc_dissect_FRSRPC_BACKUP_COMPLETE_9_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	pinfo->dcerpc_procedure_name="FRSRPC_BACKUP_COMPLETE_9";
+	return offset;
+}
+
+static int
+frsrpc_dissect_FRSRPC_BACKUP_COMPLETE_9_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	pinfo->dcerpc_procedure_name="FRSRPC_BACKUP_COMPLETE_9";
+	return offset;
+}
+
+/* IDL: void FRSRPC_VERIFY_PROMOTION_PARENT_EX( */
+/* IDL:  */
+/* IDL: ); */
+
+static int
+frsrpc_dissect_FRSRPC_VERIFY_PROMOTION_PARENT_EX_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	pinfo->dcerpc_procedure_name="FRSRPC_VERIFY_PROMOTION_PARENT_EX";
+	return offset;
+}
+
+static int
+frsrpc_dissect_FRSRPC_VERIFY_PROMOTION_PARENT_EX_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+{
+	pinfo->dcerpc_procedure_name="FRSRPC_VERIFY_PROMOTION_PARENT_EX";
+	return offset;
+}
+
 
 static dcerpc_sub_dissector frsrpc_dissectors[] = {
 	{ 0, "FrsSendCommPkt",
@@ -3585,6 +3755,20 @@ static dcerpc_sub_dissector frsrpc_dissectors[] = {
 	   frsrpc_dissect_FrsStartPromotionParent_request, frsrpc_dissect_FrsStartPromotionParent_response},
 	{ 3, "FrsNOP",
 	   frsrpc_dissect_FrsNOP_request, frsrpc_dissect_FrsNOP_response},
+	{ 4, "FRSRPC_BACKUP_COMPLETE",
+	   frsrpc_dissect_FRSRPC_BACKUP_COMPLETE_request, frsrpc_dissect_FRSRPC_BACKUP_COMPLETE_response},
+	{ 5, "FRSRPC_BACKUP_COMPLETE_5",
+	   frsrpc_dissect_FRSRPC_BACKUP_COMPLETE_5_request, frsrpc_dissect_FRSRPC_BACKUP_COMPLETE_5_response},
+	{ 6, "FRSRPC_BACKUP_COMPLETE_6",
+	   frsrpc_dissect_FRSRPC_BACKUP_COMPLETE_6_request, frsrpc_dissect_FRSRPC_BACKUP_COMPLETE_6_response},
+	{ 7, "FRSRPC_BACKUP_COMPLETE_7",
+	   frsrpc_dissect_FRSRPC_BACKUP_COMPLETE_7_request, frsrpc_dissect_FRSRPC_BACKUP_COMPLETE_7_response},
+	{ 8, "FRSRPC_BACKUP_COMPLETE_8",
+	   frsrpc_dissect_FRSRPC_BACKUP_COMPLETE_8_request, frsrpc_dissect_FRSRPC_BACKUP_COMPLETE_8_response},
+	{ 9, "FRSRPC_BACKUP_COMPLETE_9",
+	   frsrpc_dissect_FRSRPC_BACKUP_COMPLETE_9_request, frsrpc_dissect_FRSRPC_BACKUP_COMPLETE_9_response},
+	{ 10, "FRSRPC_VERIFY_PROMOTION_PARENT_EX",
+	   frsrpc_dissect_FRSRPC_VERIFY_PROMOTION_PARENT_EX_request, frsrpc_dissect_FRSRPC_VERIFY_PROMOTION_PARENT_EX_response},
 	{ 0, NULL, NULL, NULL }
 };
 
@@ -3778,7 +3962,7 @@ void proto_register_dcerpc_frsrpc(void)
 	{ &hf_frsrpc_frsrpc_CommPktChunkData_join_guid, 
 	  { "Join Guid", "frsrpc.frsrpc_CommPktChunkData.join_guid", FT_GUID, BASE_NONE, NULL, 0, NULL, HFILL }},
 	{ &hf_frsrpc_frsrpc_FrsVerifyPromotionParent___ndr_guid_size, 
-	  { "Ndr Guid Size", "frsrpc.frsrpc_FrsVerifyPromotionParent.__ndr_guid_size", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+	  { "  Ndr Guid Size", "frsrpc.frsrpc_FrsVerifyPromotionParent.__ndr_guid_size", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
 	{ &hf_frsrpc_frsrpc_FrsSendCommPktReq_data_handle, 
 	  { "Data Handle", "frsrpc.frsrpc_FrsSendCommPktReq.data_handle", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
 	{ &hf_frsrpc_frsrpc_CommPktChangeOrderCommand_content_cmd, 
@@ -3798,7 +3982,7 @@ void proto_register_dcerpc_frsrpc(void)
 	{ &hf_frsrpc_frsrpc_CommPktChangeOrderCommand_spare2guid_p1, 
 	  { "Spare2guid P1", "frsrpc.frsrpc_CommPktChangeOrderCommand.spare2guid_p1", FT_UINT64, BASE_DEC, NULL, 0, NULL, HFILL }},
 	{ &hf_frsrpc_frsrpc_FrsStartPromotionParent___ndr_guid_size, 
-	  { "Ndr Guid Size", "frsrpc.frsrpc_FrsStartPromotionParent.__ndr_guid_size", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+	  { "  Ndr Guid Size", "frsrpc.frsrpc_FrsStartPromotionParent.__ndr_guid_size", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
 	{ &hf_frsrpc_frsrpc_CommPktChunkData_gvsn_, 
 	  { "Subcontext length", "frsrpc.frsrpc_CommPktChunkData.subcontext", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
 	{ &hf_frsrpc_frsrpc_CommPktChunkData_replica_version_guid, 
diff --git a/epan/dissectors/pidl/frsrpc.cnf b/epan/dissectors/pidl/frsrpc.cnf
index d49aa7c..72d2754 100644
--- a/epan/dissectors/pidl/frsrpc.cnf
+++ b/epan/dissectors/pidl/frsrpc.cnf
@@ -14,7 +14,7 @@ CODE START
 static int
 frsrpc_dissect_element_CommPktChangeOrderCommand_file_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int conformant = di->conformant_run;
 
 	if (!conformant) {
@@ -35,7 +35,7 @@ frsrpc_dissect_struct_CommPktChunk(tvbuff_t *tvb _U_, int offset _U_, packet_inf
 	const char *s = NULL;
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 
@@ -100,7 +100,7 @@ frsrpc_dissect_struct_frsrpc_CommPktChunkCtr(tvbuff_t *tvb, int offset, packet_i
 {
 	guint32 nb_chunk = 0;
 	guint32 remaining = tvb_length_remaining(tvb, offset);
-	dcerpc_info *di = pinfo->private_data;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int align_status = di->no_align;
 
 	if (remaining > 0) {
diff --git a/epan/dissectors/pidl/frsrpc.idl b/epan/dissectors/pidl/frsrpc.idl
index 5dad888..a235702 100644
--- a/epan/dissectors/pidl/frsrpc.idl
+++ b/epan/dissectors/pidl/frsrpc.idl
@@ -281,7 +281,7 @@ interface frsrpc
 		[case(FRSRPC_COMM_PKT_CHUNK_COMPRESSION_GUID)]
 			GUID compression_guid;
 		[case(FRSRPC_COMM_PKT_CHUNK_BLOCK)]
-			DATA_BLOB block;
+			[flag(NDR_REMAINING)] DATA_BLOB block;
 		[case(FRSRPC_COMM_PKT_CHUNK_BLOCK_SIZE)]
 			hyper block_size;
 		[case(FRSRPC_COMM_PKT_CHUNK_FILE_SIZE)]
@@ -343,8 +343,8 @@ interface frsrpc
 		[value(0)] uint32 upk_len;
 		[subcontext(4),subcontext_size(pkt_len)]
 			frsrpc_CommPktChunkCtr *ctr;
-		[value(0)] uint32 data_name;
-		[value(0)] uint32 data_handle;
+		[value(0)] uint3264 data_name;
+		[value(0)] uint3264 data_handle;
 	} frsrpc_FrsSendCommPktReq;
 
 	WERROR frsrpc_FrsSendCommPkt(
@@ -392,39 +392,31 @@ interface frsrpc
 	/* Function 0x03 */
 	WERROR frsrpc_FrsNOP();
 
-	/*
-	 *For Op from 4 to 10 Microsoft use
-	 *the notation OpnumxxNotUsedOnWire
-	 *where xx is the number of the OP.
-	 *They are only declared in the IDL of MS-FRS1.pdf.
-	 *Not in the core of the document.
-	 */
-
 	/*****************/
 	/* Function 0x04 */
-	/*[todo] void FRSRPC_BACKUP_COMPLETE();*/
+	[todo] void FRSRPC_BACKUP_COMPLETE();
 
 	/*****************/
 	/* Function 0x05 */
-	/*[todo] void FRSRPC_BACKUP_COMPLETE_5();*/
+	[todo] void FRSRPC_BACKUP_COMPLETE_5();
 
 	/*****************/
 	/* Function 0x06 */
-	/*[todo] void FRSRPC_BACKUP_COMPLETE_6();*/
+	[todo] void FRSRPC_BACKUP_COMPLETE_6();
 
 	/*****************/
 	/* Function 0x07 */
-	/*[todo] void FRSRPC_BACKUP_COMPLETE_7();*/
+	[todo] void FRSRPC_BACKUP_COMPLETE_7();
 
 	/*****************/
 	/* Function 0x08 */
-	/*[todo] void FRSRPC_BACKUP_COMPLETE_8();*/
+	[todo] void FRSRPC_BACKUP_COMPLETE_8();
 
 	/*****************/
 	/* Function 0x09 */
-	/*[todo] void FRSRPC_BACKUP_COMPLETE_9();*/
+	[todo] void FRSRPC_BACKUP_COMPLETE_9();
 
 	/*****************/
 	/* Function 0x0a */
-	/*[todo] void FRSRPC_VERIFY_PROMOTION_PARENT_EX();*/
+	[todo] void FRSRPC_VERIFY_PROMOTION_PARENT_EX();
 }
-- 
1.8.1.2

>From 8c1ca75de6f06adb1be6caa02632fdaf51084edb Mon Sep 17 00:00:00 2001
From: Matthieu Patou <[email protected]>
Date: Sun, 6 Oct 2013 17:49:59 -0700
Subject: [PATCH 09/21] Add regenerated eventlog files

Signed-off-by: Matthieu Patou <[email protected]>
---
 epan/dissectors/packet-dcerpc-eventlog.c | 41 +++++++++++++++++++++++---------
 1 file changed, 30 insertions(+), 11 deletions(-)

diff --git a/epan/dissectors/packet-dcerpc-eventlog.c b/epan/dissectors/packet-dcerpc-eventlog.c
index 9cd5bf4..5adbd00 100644
--- a/epan/dissectors/packet-dcerpc-eventlog.c
+++ b/epan/dissectors/packet-dcerpc-eventlog.c
@@ -12,7 +12,6 @@
 
 
 #include "config.h"
-
 #ifdef _MSC_VER
 #pragma warning(disable:4005)
 #pragma warning(disable:4013)
@@ -408,7 +407,7 @@ eventlog_dissect_element_Record_strings(tvbuff_t *tvb, int offset, packet_info *
 		int len;
 		len=eventlog_get_unicode_string_length(tvb, string_offset);
 		str=tvb_get_faked_unicode(wmem_packet_scope(), tvb, string_offset, len, TRUE);
-		proto_tree_add_string_format_value(tree, hf_eventlog_Record_string, tvb, string_offset, len*2, str, "%s", str);
+		proto_tree_add_string_format(tree, hf_eventlog_Record_string, tvb, string_offset, len*2, str, "string: %s", str);
 		string_offset+=len*2;
 	
 		num_of_strings--;
@@ -434,7 +433,7 @@ eventlog_dissect_bitmap_eventlogReadFlags(tvbuff_t *tvb _U_, int offset _U_, pac
 	ALIGN_TO_4_BYTES;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, 4, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, 4, DREP_ENC_INTEGER(drep));
 		tree = proto_item_add_subtree(item,ett_eventlog_eventlogReadFlags);
 	}
 
@@ -503,7 +502,7 @@ eventlog_dissect_bitmap_eventlogEventTypes(tvbuff_t *tvb _U_, int offset _U_, pa
 	ALIGN_TO_4_BYTES;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, 4, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, 4, DREP_ENC_INTEGER(drep));
 		tree = proto_item_add_subtree(item,ett_eventlog_eventlogEventTypes);
 	}
 
@@ -595,6 +594,7 @@ eventlog_dissect_struct_OpenUnknown0(tvbuff_t *tvb _U_, int offset _U_, packet_i
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_2_BYTES;
@@ -602,7 +602,7 @@ eventlog_dissect_struct_OpenUnknown0(tvbuff_t *tvb _U_, int offset _U_, packet_i
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_eventlog_eventlog_OpenUnknown0);
 	}
 	
@@ -613,6 +613,11 @@ eventlog_dissect_struct_OpenUnknown0(tvbuff_t *tvb _U_, int offset _U_, packet_i
 
 	proto_item_set_len(item, offset-old_offset);
 
+
+	if (di->call_data->flags & DCERPC_IS_NDR64) {
+		ALIGN_TO_2_BYTES;
+	}
+
 	return offset;
 }
 
@@ -739,6 +744,7 @@ eventlog_dissect_element_Record_data_offset(tvbuff_t *tvb _U_, int offset _U_, p
 static int
 eventlog_dissect_element_Record_strings_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
+	offset = dissect_null_term_wstring(tvb, offset, pinfo, tree, drep, hf_eventlog_eventlog_Record_strings , 0);
 
 	return offset;
 }
@@ -746,6 +752,7 @@ eventlog_dissect_element_Record_strings_(tvbuff_t *tvb _U_, int offset _U_, pack
 static int
 eventlog_dissect_element_Record_raw_data(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
+	offset = dissect_null_term_string(tvb, offset, pinfo, tree, drep, hf_eventlog_eventlog_Record_raw_data , 0);
 
 	return offset;
 }
@@ -755,6 +762,7 @@ eventlog_dissect_struct_Record(tvbuff_t *tvb _U_, int offset _U_, packet_info *p
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_4_BYTES;
@@ -762,7 +770,7 @@ eventlog_dissect_struct_Record(tvbuff_t *tvb _U_, int offset _U_, packet_info *p
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_eventlog_eventlog_Record);
 	}
 	
@@ -809,6 +817,11 @@ eventlog_dissect_struct_Record(tvbuff_t *tvb _U_, int offset _U_, packet_info *p
 
 	proto_item_set_len(item, offset-old_offset);
 
+
+	if (di->call_data->flags & DCERPC_IS_NDR64) {
+		ALIGN_TO_4_BYTES;
+	}
+
 	return offset;
 }
 
@@ -839,6 +852,7 @@ eventlog_dissect_struct_ChangeUnknown0(tvbuff_t *tvb _U_, int offset _U_, packet
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_4_BYTES;
@@ -846,7 +860,7 @@ eventlog_dissect_struct_ChangeUnknown0(tvbuff_t *tvb _U_, int offset _U_, packet
 	old_offset = offset;
 
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_eventlog_eventlog_ChangeUnknown0);
 	}
 	
@@ -857,6 +871,11 @@ eventlog_dissect_struct_ChangeUnknown0(tvbuff_t *tvb _U_, int offset _U_, packet
 
 	proto_item_set_len(item, offset-old_offset);
 
+
+	if (di->call_data->flags & DCERPC_IS_NDR64) {
+		ALIGN_TO_4_BYTES;
+	}
+
 	return offset;
 }
 
@@ -2302,7 +2321,7 @@ void proto_register_dcerpc_eventlog(void)
 	{ &hf_eventlog_eventlog_OpenEventLogW_unknown0, 
 	  { "Unknown0", "eventlog.eventlog_OpenEventLogW.unknown0", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
 	{ &hf_eventlog_eventlog_Record_computer_name, 
-	  { "Computer Name", "eventlog.eventlog_Record.computer_name", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
+	  { "Computer Name", "eventlog.eventlog_Record.computer_name", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
 	{ &hf_eventlog_eventlog_RegisterEventSourceW_handle, 
 	  { "Handle", "eventlog.eventlog_RegisterEventSourceW.handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
 	{ &hf_eventlog_eventlog_GetNumRecords_handle, 
@@ -2348,7 +2367,7 @@ void proto_register_dcerpc_eventlog(void)
 	{ &hf_eventlog_eventlog_BackupEventLogW_handle, 
 	  { "Handle", "eventlog.eventlog_BackupEventLogW.handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
 	{ &hf_eventlog_eventlog_Record_raw_data, 
-	  { "Raw Data", "eventlog.eventlog_Record.raw_data", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
+	  { "Raw Data", "eventlog.eventlog_Record.raw_data", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
 	{ &hf_eventlog_eventlog_RegisterEventSourceW_unknown0, 
 	  { "Unknown0", "eventlog.eventlog_RegisterEventSourceW.unknown0", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
 	{ &hf_eventlog_eventlog_CloseEventLog_handle, 
@@ -2366,7 +2385,7 @@ void proto_register_dcerpc_eventlog(void)
 	{ &hf_eventlog_eventlog_OpenEventLogW_MinorVersion, 
 	  { "Minorversion", "eventlog.eventlog_OpenEventLogW.MinorVersion", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
 	{ &hf_eventlog_eventlog_Record_source_name, 
-	  { "Source Name", "eventlog.eventlog_Record.source_name", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
+	  { "Source Name", "eventlog.eventlog_Record.source_name", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
 	{ &hf_eventlog_eventlog_GetLogIntormation_handle, 
 	  { "Handle", "eventlog.eventlog_GetLogIntormation.handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
 	{ &hf_eventlog_Record_length, 
@@ -2376,7 +2395,7 @@ void proto_register_dcerpc_eventlog(void)
 	{ &hf_eventlog_eventlog_GetOldestRecord_oldest, 
 	  { "Oldest", "eventlog.eventlog_GetOldestRecord.oldest", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
 	{ &hf_eventlog_eventlog_Record_strings, 
-	  { "Strings", "eventlog.eventlog_Record.strings", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
+	  { "Strings", "eventlog.eventlog_Record.strings", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
 	{ &hf_eventlog_eventlog_Record_record_number, 
 	  { "Record Number", "eventlog.eventlog_Record.record_number", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
 	{ &hf_eventlog_eventlog_OpenEventLogW_handle, 
-- 
1.8.1.2

>From 2275711013469ed206c9e38b66115a4e69d230be Mon Sep 17 00:00:00 2001
From: Matthieu Patou <[email protected]>
Date: Sun, 6 Oct 2013 17:48:42 -0700
Subject: [PATCH 08/21] Add regenerated files for initshutdown

Signed-off-by: Matthieu Patou <[email protected]>
---
 epan/dissectors/packet-dcerpc-initshutdown.c | 339 +++++++++++++++------------
 epan/dissectors/packet-dcerpc-initshutdown.h |  44 +++-
 2 files changed, 230 insertions(+), 153 deletions(-)

diff --git a/epan/dissectors/packet-dcerpc-initshutdown.c b/epan/dissectors/packet-dcerpc-initshutdown.c
index 4551fb2..1606a30 100644
--- a/epan/dissectors/packet-dcerpc-initshutdown.c
+++ b/epan/dissectors/packet-dcerpc-initshutdown.c
@@ -12,7 +12,6 @@
 
 
 #include "config.h"
-
 #ifdef _MSC_VER
 #pragma warning(disable:4005)
 #pragma warning(disable:4013)
@@ -31,30 +30,26 @@
 
 /* Ett declarations */
 static gint ett_dcerpc_initshutdown = -1;
-static gint ett_initshutdown_initshutdown_String_sub = -1;
-static gint ett_initshutdown_initshutdown_String = -1;
+static gint ett_initshutdown_initshutdown_ReasonFlags = -1;
 
 
 /* Header field declarations */
-static gint hf_initshutdown_initshutdown_String_name_len = -1;
+static gint hf_initshutdown_initshutdown_InitEx_do_reboot = -1;
+static gint hf_initshutdown_initshutdown_InitEx_force_apps = -1;
+static gint hf_initshutdown_initshutdown_ReasonFlags_SHTDN_REASON_FLAG_PLANNED = -1;
+static gint hf_initshutdown_initshutdown_ReasonFlags_SHTDN_REASON_FLAG_USER_DEFINED = -1;
+static gint hf_initshutdown_initshutdown_InitEx_timeout = -1;
+static gint hf_initshutdown_initshutdown_InitEx_hostname = -1;
+static gint hf_initshutdown_werror = -1;
 static gint hf_initshutdown_initshutdown_Abort_server = -1;
-static gint hf_initshutdown_initshutdown_Init_message = -1;
+static gint hf_initshutdown_opnum = -1;
 static gint hf_initshutdown_initshutdown_Init_hostname = -1;
-static gint hf_initshutdown_initshutdown_InitEx_reboot = -1;
 static gint hf_initshutdown_initshutdown_InitEx_reason = -1;
-static gint hf_initshutdown_initshutdown_String_name_size = -1;
 static gint hf_initshutdown_initshutdown_Init_timeout = -1;
-static gint hf_initshutdown_initshutdown_InitEx_hostname = -1;
-static gint hf_initshutdown_initshutdown_InitEx_message = -1;
-static gint hf_initshutdown_initshutdown_String_name = -1;
-static gint hf_initshutdown_initshutdown_Init_reboot = -1;
-static gint hf_initshutdown_opnum = -1;
 static gint hf_initshutdown_initshutdown_Init_force_apps = -1;
-static gint hf_initshutdown_initshutdown_String_sub_name = -1;
-static gint hf_initshutdown_werror = -1;
-static gint hf_initshutdown_initshutdown_String_sub_name_size = -1;
-static gint hf_initshutdown_initshutdown_InitEx_force_apps = -1;
-static gint hf_initshutdown_initshutdown_InitEx_timeout = -1;
+static gint hf_initshutdown_initshutdown_Init_do_reboot = -1;
+static gint hf_initshutdown_initshutdown_Init_message = -1;
+static gint hf_initshutdown_initshutdown_InitEx_message = -1;
 
 static gint proto_dcerpc_initshutdown = -1;
 /* Version information */
@@ -66,19 +61,62 @@ static e_uuid_t uuid_dcerpc_initshutdown = {
 };
 static guint16 ver_dcerpc_initshutdown = 1;
 
-static int initshutdown_dissect_element_String_sub_name_size(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
-static int initshutdown_dissect_element_String_sub_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
-static int initshutdown_dissect_element_String_name_len(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
-static int initshutdown_dissect_element_String_name_size(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
-static int initshutdown_dissect_element_String_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
-static int initshutdown_dissect_element_String_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+const value_string initshutdown_initshutdown_ReasonMajor_vals[] = {
+	{ SHTDN_REASON_MAJOR_OTHER, "SHTDN_REASON_MAJOR_OTHER" },
+	{ SHTDN_REASON_MAJOR_HARDWARE, "SHTDN_REASON_MAJOR_HARDWARE" },
+	{ SHTDN_REASON_MAJOR_OPERATINGSYSTEM, "SHTDN_REASON_MAJOR_OPERATINGSYSTEM" },
+	{ SHTDN_REASON_MAJOR_SOFTWARE, "SHTDN_REASON_MAJOR_SOFTWARE" },
+	{ SHTDN_REASON_MAJOR_APPLICATION, "SHTDN_REASON_MAJOR_APPLICATION" },
+	{ SHTDN_REASON_MAJOR_SYSTEM, "SHTDN_REASON_MAJOR_SYSTEM" },
+	{ SHTDN_REASON_MAJOR_POWER, "SHTDN_REASON_MAJOR_POWER" },
+	{ SHTDN_REASON_MAJOR_LEGACY_API, "SHTDN_REASON_MAJOR_LEGACY_API" },
+{ 0, NULL }
+};
+const value_string initshutdown_initshutdown_ReasonMinor_vals[] = {
+	{ SHTDN_REASON_MINOR_OTHER, "SHTDN_REASON_MINOR_OTHER" },
+	{ SHTDN_REASON_MINOR_MAINTENANCE, "SHTDN_REASON_MINOR_MAINTENANCE" },
+	{ SHTDN_REASON_MINOR_INSTALLATION, "SHTDN_REASON_MINOR_INSTALLATION" },
+	{ SHTDN_REASON_MINOR_UPGRADE, "SHTDN_REASON_MINOR_UPGRADE" },
+	{ SHTDN_REASON_MINOR_RECONFIG, "SHTDN_REASON_MINOR_RECONFIG" },
+	{ SHTDN_REASON_MINOR_HUNG, "SHTDN_REASON_MINOR_HUNG" },
+	{ SHTDN_REASON_MINOR_UNSTABLE, "SHTDN_REASON_MINOR_UNSTABLE" },
+	{ SHTDN_REASON_MINOR_DISK, "SHTDN_REASON_MINOR_DISK" },
+	{ SHTDN_REASON_MINOR_PROCESSOR, "SHTDN_REASON_MINOR_PROCESSOR" },
+	{ SHTDN_REASON_MINOR_NETWORKCARD, "SHTDN_REASON_MINOR_NETWORKCARD" },
+	{ SHTDN_REASON_MINOR_POWER_SUPPLY, "SHTDN_REASON_MINOR_POWER_SUPPLY" },
+	{ SHTDN_REASON_MINOR_CORDUNPLUGGED, "SHTDN_REASON_MINOR_CORDUNPLUGGED" },
+	{ SHTDN_REASON_MINOR_ENVIRONMENT, "SHTDN_REASON_MINOR_ENVIRONMENT" },
+	{ SHTDN_REASON_MINOR_HARDWARE_DRIVER, "SHTDN_REASON_MINOR_HARDWARE_DRIVER" },
+	{ SHTDN_REASON_MINOR_OTHERDRIVER, "SHTDN_REASON_MINOR_OTHERDRIVER" },
+	{ SHTDN_REASON_MINOR_BLUESCREEN, "SHTDN_REASON_MINOR_BLUESCREEN" },
+	{ SHTDN_REASON_MINOR_SERVICEPACK, "SHTDN_REASON_MINOR_SERVICEPACK" },
+	{ SHTDN_REASON_MINOR_HOTFIX, "SHTDN_REASON_MINOR_HOTFIX" },
+	{ SHTDN_REASON_MINOR_SECURITYFIX, "SHTDN_REASON_MINOR_SECURITYFIX" },
+	{ SHTDN_REASON_MINOR_SECURITY, "SHTDN_REASON_MINOR_SECURITY" },
+	{ SHTDN_REASON_MINOR_NETWORK_CONNECTIVITY, "SHTDN_REASON_MINOR_NETWORK_CONNECTIVITY" },
+	{ SHTDN_REASON_MINOR_WMI, "SHTDN_REASON_MINOR_WMI" },
+	{ SHTDN_REASON_MINOR_SERVICEPACK_UNINSTALL, "SHTDN_REASON_MINOR_SERVICEPACK_UNINSTALL" },
+	{ SHTDN_REASON_MINOR_HOTFIX_UNINSTALL, "SHTDN_REASON_MINOR_HOTFIX_UNINSTALL" },
+	{ SHTDN_REASON_MINOR_SECURITYFIX_UNINSTALL, "SHTDN_REASON_MINOR_SECURITYFIX_UNINSTALL" },
+	{ SHTDN_REASON_MINOR_MMC, "SHTDN_REASON_MINOR_MMC" },
+	{ SHTDN_REASON_MINOR_TERMSRV, "SHTDN_REASON_MINOR_TERMSRV" },
+{ 0, NULL }
+};
+static const true_false_string initshutdown_ReasonFlags_SHTDN_REASON_FLAG_USER_DEFINED_tfs = {
+   "SHTDN_REASON_FLAG_USER_DEFINED is SET",
+   "SHTDN_REASON_FLAG_USER_DEFINED is NOT SET",
+};
+static const true_false_string initshutdown_ReasonFlags_SHTDN_REASON_FLAG_PLANNED_tfs = {
+   "SHTDN_REASON_FLAG_PLANNED is SET",
+   "SHTDN_REASON_FLAG_PLANNED is NOT SET",
+};
 static int initshutdown_dissect_element_Init_hostname(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int initshutdown_dissect_element_Init_hostname_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int initshutdown_dissect_element_Init_message(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int initshutdown_dissect_element_Init_message_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int initshutdown_dissect_element_Init_timeout(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int initshutdown_dissect_element_Init_force_apps(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
-static int initshutdown_dissect_element_Init_reboot(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int initshutdown_dissect_element_Init_do_reboot(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int initshutdown_dissect_element_Abort_server(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int initshutdown_dissect_element_Abort_server_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int initshutdown_dissect_element_InitEx_hostname(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
@@ -87,119 +125,125 @@ static int initshutdown_dissect_element_InitEx_message(tvbuff_t *tvb _U_, int of
 static int initshutdown_dissect_element_InitEx_message_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int initshutdown_dissect_element_InitEx_timeout(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int initshutdown_dissect_element_InitEx_force_apps(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
-static int initshutdown_dissect_element_InitEx_reboot(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int initshutdown_dissect_element_InitEx_do_reboot(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 static int initshutdown_dissect_element_InitEx_reason(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 
 
-/* IDL: struct { */
-/* IDL: 	[value(strlen_m_term(name))] uint32 name_size; */
-/* IDL: 	[flag(LIBNDR_FLAG_STR_LEN4|LIBNDR_FLAG_STR_NOTERM)] string name; */
+/* IDL: enum { */
+/* IDL: 	SHTDN_REASON_MAJOR_OTHER=0x00000000, */
+/* IDL: 	SHTDN_REASON_MAJOR_HARDWARE=0x00010000, */
+/* IDL: 	SHTDN_REASON_MAJOR_OPERATINGSYSTEM=0x00020000, */
+/* IDL: 	SHTDN_REASON_MAJOR_SOFTWARE=0x00030000, */
+/* IDL: 	SHTDN_REASON_MAJOR_APPLICATION=0x00040000, */
+/* IDL: 	SHTDN_REASON_MAJOR_SYSTEM=0x00050000, */
+/* IDL: 	SHTDN_REASON_MAJOR_POWER=0x00060000, */
+/* IDL: 	SHTDN_REASON_MAJOR_LEGACY_API=0x00070000, */
 /* IDL: } */
 
-static int
-initshutdown_dissect_element_String_sub_name_size(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
-{
-	offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, drep, hf_initshutdown_initshutdown_String_sub_name_size, 0);
-
-	return offset;
-}
-
-static int
-initshutdown_dissect_element_String_sub_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
-{
-
-	return offset;
-}
-
 int
-initshutdown_dissect_struct_String_sub(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_)
+initshutdown_dissect_enum_ReasonMajor(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 *param _U_)
 {
-	proto_item *item = NULL;
-	proto_tree *tree = NULL;
-	int old_offset;
-
-	ALIGN_TO_4_BYTES;
-
-	old_offset = offset;
-
-	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
-		tree = proto_item_add_subtree(item, ett_initshutdown_initshutdown_String_sub);
+	guint32 parameter=0;
+	if(param){
+		parameter=(guint32)*param;
+	}
+	offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, hf_index, &parameter);
+	if(param){
+		*param=(guint32)parameter;
 	}
-	
-	offset = initshutdown_dissect_element_String_sub_name_size(tvb, offset, pinfo, tree, drep);
-
-	offset = initshutdown_dissect_element_String_sub_name(tvb, offset, pinfo, tree, drep);
-
-
-	proto_item_set_len(item, offset-old_offset);
-
 	return offset;
 }
 
 
-/* IDL: struct { */
-/* IDL: 	[value(strlen_m(name->name)*2)] uint16 name_len; */
-/* IDL: 	[value(strlen_m_term(name->name)*2)] uint16 name_size; */
-/* IDL: 	[unique(1)] initshutdown_String_sub *name; */
+/* IDL: enum { */
+/* IDL: 	SHTDN_REASON_MINOR_OTHER=0x00000000, */
+/* IDL: 	SHTDN_REASON_MINOR_MAINTENANCE=0x00000001, */
+/* IDL: 	SHTDN_REASON_MINOR_INSTALLATION=0x00000002, */
+/* IDL: 	SHTDN_REASON_MINOR_UPGRADE=0x00000003, */
+/* IDL: 	SHTDN_REASON_MINOR_RECONFIG=0x00000004, */
+/* IDL: 	SHTDN_REASON_MINOR_HUNG=0x00000005, */
+/* IDL: 	SHTDN_REASON_MINOR_UNSTABLE=0x00000006, */
+/* IDL: 	SHTDN_REASON_MINOR_DISK=0x00000007, */
+/* IDL: 	SHTDN_REASON_MINOR_PROCESSOR=0x00000008, */
+/* IDL: 	SHTDN_REASON_MINOR_NETWORKCARD=0x00000009, */
+/* IDL: 	SHTDN_REASON_MINOR_POWER_SUPPLY=0x0000000a, */
+/* IDL: 	SHTDN_REASON_MINOR_CORDUNPLUGGED=0x0000000b, */
+/* IDL: 	SHTDN_REASON_MINOR_ENVIRONMENT=0x0000000c, */
+/* IDL: 	SHTDN_REASON_MINOR_HARDWARE_DRIVER=0x0000000d, */
+/* IDL: 	SHTDN_REASON_MINOR_OTHERDRIVER=0x0000000e, */
+/* IDL: 	SHTDN_REASON_MINOR_BLUESCREEN=0x0000000f, */
+/* IDL: 	SHTDN_REASON_MINOR_SERVICEPACK=0x00000010, */
+/* IDL: 	SHTDN_REASON_MINOR_HOTFIX=0x00000011, */
+/* IDL: 	SHTDN_REASON_MINOR_SECURITYFIX=0x00000012, */
+/* IDL: 	SHTDN_REASON_MINOR_SECURITY=0x00000013, */
+/* IDL: 	SHTDN_REASON_MINOR_NETWORK_CONNECTIVITY=0x00000014, */
+/* IDL: 	SHTDN_REASON_MINOR_WMI=0x00000015, */
+/* IDL: 	SHTDN_REASON_MINOR_SERVICEPACK_UNINSTALL=0x00000016, */
+/* IDL: 	SHTDN_REASON_MINOR_HOTFIX_UNINSTALL=0x00000017, */
+/* IDL: 	SHTDN_REASON_MINOR_SECURITYFIX_UNINSTALL=0x00000018, */
+/* IDL: 	SHTDN_REASON_MINOR_MMC=0x00000019, */
+/* IDL: 	SHTDN_REASON_MINOR_TERMSRV=0x00000020, */
 /* IDL: } */
 
-static int
-initshutdown_dissect_element_String_name_len(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
-{
-	offset = PIDL_dissect_uint16(tvb, offset, pinfo, tree, drep, hf_initshutdown_initshutdown_String_name_len, 0);
-
-	return offset;
-}
-
-static int
-initshutdown_dissect_element_String_name_size(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
-{
-	offset = PIDL_dissect_uint16(tvb, offset, pinfo, tree, drep, hf_initshutdown_initshutdown_String_name_size, 0);
-
-	return offset;
-}
-
-static int
-initshutdown_dissect_element_String_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+int
+initshutdown_dissect_enum_ReasonMinor(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 *param _U_)
 {
-	offset = dissect_ndr_embedded_pointer(tvb, offset, pinfo, tree, drep, initshutdown_dissect_element_String_name_, NDR_POINTER_UNIQUE, "Pointer to Name (initshutdown_String_sub)",hf_initshutdown_initshutdown_String_name);
-
+	guint32 parameter=0;
+	if(param){
+		parameter=(guint32)*param;
+	}
+	offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, hf_index, &parameter);
+	if(param){
+		*param=(guint32)parameter;
+	}
 	return offset;
 }
 
-static int
-initshutdown_dissect_element_String_name_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
-{
-	offset = initshutdown_dissect_struct_String_sub(tvb,offset,pinfo,tree,drep,hf_initshutdown_initshutdown_String_name,0);
 
-	return offset;
-}
+/* IDL: bitmap { */
+/* IDL: 	SHTDN_REASON_FLAG_USER_DEFINED =  0x40000000 , */
+/* IDL: 	SHTDN_REASON_FLAG_PLANNED =  0x80000000 , */
+/* IDL: } */
 
 int
-initshutdown_dissect_struct_String(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_)
+initshutdown_dissect_bitmap_ReasonFlags(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_)
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	int old_offset;
 
+	guint32 flags;
 	ALIGN_TO_4_BYTES;
 
-	old_offset = offset;
-
 	if (parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
-		tree = proto_item_add_subtree(item, ett_initshutdown_initshutdown_String);
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, 4, DREP_ENC_INTEGER(drep));
+		tree = proto_item_add_subtree(item,ett_initshutdown_initshutdown_ReasonFlags);
 	}
-	
-	offset = initshutdown_dissect_element_String_name_len(tvb, offset, pinfo, tree, drep);
 
-	offset = initshutdown_dissect_element_String_name_size(tvb, offset, pinfo, tree, drep);
+	offset = dissect_ndr_uint32(tvb, offset, pinfo, NULL, drep, -1, &flags);
+	proto_item_append_text(item, ": ");
+
+	if (!flags)
+		proto_item_append_text(item, "(No values set)");
 
-	offset = initshutdown_dissect_element_String_name(tvb, offset, pinfo, tree, drep);
+	proto_tree_add_boolean(tree, hf_initshutdown_initshutdown_ReasonFlags_SHTDN_REASON_FLAG_USER_DEFINED, tvb, offset-4, 4, flags);
+	if (flags&( 0x40000000 )){
+		proto_item_append_text(item, "SHTDN_REASON_FLAG_USER_DEFINED");
+		if (flags & (~( 0x40000000 )))
+			proto_item_append_text(item, ", ");
+	}
+	flags&=(~( 0x40000000 ));
 
+	proto_tree_add_boolean(tree, hf_initshutdown_initshutdown_ReasonFlags_SHTDN_REASON_FLAG_PLANNED, tvb, offset-4, 4, flags);
+	if (flags&( 0x80000000 )){
+		proto_item_append_text(item, "SHTDN_REASON_FLAG_PLANNED");
+		if (flags & (~( 0x80000000 )))
+			proto_item_append_text(item, ", ");
+	}
+	flags&=(~( 0x80000000 ));
 
-	proto_item_set_len(item, offset-old_offset);
+	if (flags) {
+		proto_item_append_text(item, "Unknown bitmap value 0x%x", flags);
+	}
 
 	return offset;
 }
@@ -223,7 +267,7 @@ initshutdown_dissect_element_Init_hostname_(tvbuff_t *tvb _U_, int offset _U_, p
 static int
 initshutdown_dissect_element_Init_message(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, drep, initshutdown_dissect_element_Init_message_, NDR_POINTER_UNIQUE, "Pointer to Message (initshutdown_String)",hf_initshutdown_initshutdown_Init_message);
+	offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, drep, initshutdown_dissect_element_Init_message_, NDR_POINTER_UNIQUE, "Pointer to Message (lsa_StringLarge)",hf_initshutdown_initshutdown_Init_message);
 
 	return offset;
 }
@@ -231,7 +275,7 @@ initshutdown_dissect_element_Init_message(tvbuff_t *tvb _U_, int offset _U_, pac
 static int
 initshutdown_dissect_element_Init_message_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	offset = initshutdown_dissect_struct_String(tvb,offset,pinfo,tree,drep,hf_initshutdown_initshutdown_Init_message,0);
+	offset=lsarpc_dissect_struct_lsa_StringLarge(tvb, offset, pinfo, tree, drep, hf_initshutdown_initshutdown_Init_message, 0);
 
 	return offset;
 }
@@ -253,19 +297,19 @@ initshutdown_dissect_element_Init_force_apps(tvbuff_t *tvb _U_, int offset _U_,
 }
 
 static int
-initshutdown_dissect_element_Init_reboot(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+initshutdown_dissect_element_Init_do_reboot(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	offset = PIDL_dissect_uint8(tvb, offset, pinfo, tree, drep, hf_initshutdown_initshutdown_Init_reboot, 0);
+	offset = PIDL_dissect_uint8(tvb, offset, pinfo, tree, drep, hf_initshutdown_initshutdown_Init_do_reboot, 0);
 
 	return offset;
 }
 
 /* IDL: WERROR initshutdown_Init( */
-/* IDL: [in] [unique(1)] uint16 *hostname, */
-/* IDL: [in] [unique(1)] initshutdown_String *message, */
+/* IDL: [unique(1)] [in] uint16 *hostname, */
+/* IDL: [unique(1)] [in] lsa_StringLarge *message, */
 /* IDL: [in] uint32 timeout, */
 /* IDL: [in] uint8 force_apps, */
-/* IDL: [in] uint8 reboot */
+/* IDL: [in] uint8 do_reboot */
 /* IDL: ); */
 
 static int
@@ -294,7 +338,7 @@ initshutdown_dissect_Init_request(tvbuff_t *tvb _U_, int offset _U_, packet_info
 	offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
 	offset = initshutdown_dissect_element_Init_force_apps(tvb, offset, pinfo, tree, drep);
 	offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
-	offset = initshutdown_dissect_element_Init_reboot(tvb, offset, pinfo, tree, drep);
+	offset = initshutdown_dissect_element_Init_do_reboot(tvb, offset, pinfo, tree, drep);
 	offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
 	return offset;
 }
@@ -316,7 +360,7 @@ initshutdown_dissect_element_Abort_server_(tvbuff_t *tvb _U_, int offset _U_, pa
 }
 
 /* IDL: WERROR initshutdown_Abort( */
-/* IDL: [in] [unique(1)] uint16 *server */
+/* IDL: [unique(1)] [in] uint16 *server */
 /* IDL: ); */
 
 static int
@@ -361,7 +405,7 @@ initshutdown_dissect_element_InitEx_hostname_(tvbuff_t *tvb _U_, int offset _U_,
 static int
 initshutdown_dissect_element_InitEx_message(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, drep, initshutdown_dissect_element_InitEx_message_, NDR_POINTER_UNIQUE, "Pointer to Message (initshutdown_String)",hf_initshutdown_initshutdown_InitEx_message);
+	offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, drep, initshutdown_dissect_element_InitEx_message_, NDR_POINTER_UNIQUE, "Pointer to Message (lsa_StringLarge)",hf_initshutdown_initshutdown_InitEx_message);
 
 	return offset;
 }
@@ -369,7 +413,7 @@ initshutdown_dissect_element_InitEx_message(tvbuff_t *tvb _U_, int offset _U_, p
 static int
 initshutdown_dissect_element_InitEx_message_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	offset = initshutdown_dissect_struct_String(tvb,offset,pinfo,tree,drep,hf_initshutdown_initshutdown_InitEx_message,0);
+	offset=lsarpc_dissect_struct_lsa_StringLarge(tvb, offset, pinfo, tree, drep, hf_initshutdown_initshutdown_InitEx_message, 0);
 
 	return offset;
 }
@@ -391,9 +435,9 @@ initshutdown_dissect_element_InitEx_force_apps(tvbuff_t *tvb _U_, int offset _U_
 }
 
 static int
-initshutdown_dissect_element_InitEx_reboot(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
+initshutdown_dissect_element_InitEx_do_reboot(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
-	offset = PIDL_dissect_uint8(tvb, offset, pinfo, tree, drep, hf_initshutdown_initshutdown_InitEx_reboot, 0);
+	offset = PIDL_dissect_uint8(tvb, offset, pinfo, tree, drep, hf_initshutdown_initshutdown_InitEx_do_reboot, 0);
 
 	return offset;
 }
@@ -407,11 +451,11 @@ initshutdown_dissect_element_InitEx_reason(tvbuff_t *tvb _U_, int offset _U_, pa
 }
 
 /* IDL: WERROR initshutdown_InitEx( */
-/* IDL: [in] [unique(1)] uint16 *hostname, */
-/* IDL: [in] [unique(1)] initshutdown_String *message, */
+/* IDL: [unique(1)] [in] uint16 *hostname, */
+/* IDL: [unique(1)] [in] lsa_StringLarge *message, */
 /* IDL: [in] uint32 timeout, */
 /* IDL: [in] uint8 force_apps, */
-/* IDL: [in] uint8 reboot, */
+/* IDL: [in] uint8 do_reboot, */
 /* IDL: [in] uint32 reason */
 /* IDL: ); */
 
@@ -441,7 +485,7 @@ initshutdown_dissect_InitEx_request(tvbuff_t *tvb _U_, int offset _U_, packet_in
 	offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
 	offset = initshutdown_dissect_element_InitEx_force_apps(tvb, offset, pinfo, tree, drep);
 	offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
-	offset = initshutdown_dissect_element_InitEx_reboot(tvb, offset, pinfo, tree, drep);
+	offset = initshutdown_dissect_element_InitEx_do_reboot(tvb, offset, pinfo, tree, drep);
 	offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
 	offset = initshutdown_dissect_element_InitEx_reason(tvb, offset, pinfo, tree, drep);
 	offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
@@ -462,51 +506,44 @@ static dcerpc_sub_dissector initshutdown_dissectors[] = {
 void proto_register_dcerpc_initshutdown(void)
 {
 	static hf_register_info hf[] = {
-	{ &hf_initshutdown_initshutdown_String_name_len, 
-	  { "Name Len", "initshutdown.initshutdown_String.name_len", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_initshutdown_initshutdown_InitEx_do_reboot, 
+	  { "Do Reboot", "initshutdown.initshutdown_InitEx.do_reboot", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_initshutdown_initshutdown_InitEx_force_apps, 
+	  { "Force Apps", "initshutdown.initshutdown_InitEx.force_apps", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_initshutdown_initshutdown_ReasonFlags_SHTDN_REASON_FLAG_PLANNED, 
+	  { "Shtdn Reason Flag Planned", "initshutdown.initshutdown_ReasonFlags.SHTDN_REASON_FLAG_PLANNED", FT_BOOLEAN, 32, TFS(&initshutdown_ReasonFlags_SHTDN_REASON_FLAG_PLANNED_tfs), ( 0x80000000 ), NULL, HFILL }},
+	{ &hf_initshutdown_initshutdown_ReasonFlags_SHTDN_REASON_FLAG_USER_DEFINED, 
+	  { "Shtdn Reason Flag User Defined", "initshutdown.initshutdown_ReasonFlags.SHTDN_REASON_FLAG_USER_DEFINED", FT_BOOLEAN, 32, TFS(&initshutdown_ReasonFlags_SHTDN_REASON_FLAG_USER_DEFINED_tfs), ( 0x40000000 ), NULL, HFILL }},
+	{ &hf_initshutdown_initshutdown_InitEx_timeout, 
+	  { "Timeout", "initshutdown.initshutdown_InitEx.timeout", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_initshutdown_initshutdown_InitEx_hostname, 
+	  { "Hostname", "initshutdown.initshutdown_InitEx.hostname", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_initshutdown_werror, 
+	  { "Windows Error", "initshutdown.werror", FT_UINT32, BASE_HEX, VALS(WERR_errors), 0, NULL, HFILL }},
 	{ &hf_initshutdown_initshutdown_Abort_server, 
 	  { "Server", "initshutdown.initshutdown_Abort.server", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_initshutdown_initshutdown_Init_message, 
-	  { "Message", "initshutdown.initshutdown_Init.message", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
+	{ &hf_initshutdown_opnum, 
+	  { "Operation", "initshutdown.opnum", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
 	{ &hf_initshutdown_initshutdown_Init_hostname, 
 	  { "Hostname", "initshutdown.initshutdown_Init.hostname", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_initshutdown_initshutdown_InitEx_reboot, 
-	  { "Reboot", "initshutdown.initshutdown_InitEx.reboot", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
 	{ &hf_initshutdown_initshutdown_InitEx_reason, 
 	  { "Reason", "initshutdown.initshutdown_InitEx.reason", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_initshutdown_initshutdown_String_name_size, 
-	  { "Name Size", "initshutdown.initshutdown_String.name_size", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
 	{ &hf_initshutdown_initshutdown_Init_timeout, 
 	  { "Timeout", "initshutdown.initshutdown_Init.timeout", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_initshutdown_initshutdown_InitEx_hostname, 
-	  { "Hostname", "initshutdown.initshutdown_InitEx.hostname", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_initshutdown_initshutdown_InitEx_message, 
-	  { "Message", "initshutdown.initshutdown_InitEx.message", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_initshutdown_initshutdown_String_name, 
-	  { "Name", "initshutdown.initshutdown_String.name", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_initshutdown_initshutdown_Init_reboot, 
-	  { "Reboot", "initshutdown.initshutdown_Init.reboot", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_initshutdown_opnum, 
-	  { "Operation", "initshutdown.opnum", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
 	{ &hf_initshutdown_initshutdown_Init_force_apps, 
 	  { "Force Apps", "initshutdown.initshutdown_Init.force_apps", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_initshutdown_initshutdown_String_sub_name, 
-	  { "Name", "initshutdown.initshutdown_String_sub.name", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
-	{ &hf_initshutdown_werror, 
-	  { "Windows Error", "initshutdown.werror", FT_UINT32, BASE_HEX, VALS(WERR_errors), 0, NULL, HFILL }},
-	{ &hf_initshutdown_initshutdown_String_sub_name_size, 
-	  { "Name Size", "initshutdown.initshutdown_String_sub.name_size", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_initshutdown_initshutdown_InitEx_force_apps, 
-	  { "Force Apps", "initshutdown.initshutdown_InitEx.force_apps", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
-	{ &hf_initshutdown_initshutdown_InitEx_timeout, 
-	  { "Timeout", "initshutdown.initshutdown_InitEx.timeout", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_initshutdown_initshutdown_Init_do_reboot, 
+	  { "Do Reboot", "initshutdown.initshutdown_Init.do_reboot", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+	{ &hf_initshutdown_initshutdown_Init_message, 
+	  { "Message", "initshutdown.initshutdown_Init.message", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
+	{ &hf_initshutdown_initshutdown_InitEx_message, 
+	  { "Message", "initshutdown.initshutdown_InitEx.message", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
 	};
 
 
 	static gint *ett[] = {
 		&ett_dcerpc_initshutdown,
-		&ett_initshutdown_initshutdown_String_sub,
-		&ett_initshutdown_initshutdown_String,
+		&ett_initshutdown_initshutdown_ReasonFlags,
 	};
 
 	proto_dcerpc_initshutdown = proto_register_protocol("Init shutdown service", "INITSHUTDOWN", "initshutdown");
diff --git a/epan/dissectors/packet-dcerpc-initshutdown.h b/epan/dissectors/packet-dcerpc-initshutdown.h
index bcf9fde..0d7255a 100644
--- a/epan/dissectors/packet-dcerpc-initshutdown.h
+++ b/epan/dissectors/packet-dcerpc-initshutdown.h
@@ -13,9 +13,49 @@
 */
 
 
+#include "packet-dcerpc-lsa.h"
+
 #ifndef __PACKET_DCERPC_INITSHUTDOWN_H
 #define __PACKET_DCERPC_INITSHUTDOWN_H
 
-int initshutdown_dissect_struct_String_sub(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_);
-int initshutdown_dissect_struct_String(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_);
+#define SHTDN_REASON_MAJOR_OTHER (0x00000000)
+#define SHTDN_REASON_MAJOR_HARDWARE (0x00010000)
+#define SHTDN_REASON_MAJOR_OPERATINGSYSTEM (0x00020000)
+#define SHTDN_REASON_MAJOR_SOFTWARE (0x00030000)
+#define SHTDN_REASON_MAJOR_APPLICATION (0x00040000)
+#define SHTDN_REASON_MAJOR_SYSTEM (0x00050000)
+#define SHTDN_REASON_MAJOR_POWER (0x00060000)
+#define SHTDN_REASON_MAJOR_LEGACY_API (0x00070000)
+extern const value_string initshutdown_initshutdown_ReasonMajor_vals[];
+int initshutdown_dissect_enum_ReasonMajor(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 *param _U_);
+#define SHTDN_REASON_MINOR_OTHER (0x00000000)
+#define SHTDN_REASON_MINOR_MAINTENANCE (0x00000001)
+#define SHTDN_REASON_MINOR_INSTALLATION (0x00000002)
+#define SHTDN_REASON_MINOR_UPGRADE (0x00000003)
+#define SHTDN_REASON_MINOR_RECONFIG (0x00000004)
+#define SHTDN_REASON_MINOR_HUNG (0x00000005)
+#define SHTDN_REASON_MINOR_UNSTABLE (0x00000006)
+#define SHTDN_REASON_MINOR_DISK (0x00000007)
+#define SHTDN_REASON_MINOR_PROCESSOR (0x00000008)
+#define SHTDN_REASON_MINOR_NETWORKCARD (0x00000009)
+#define SHTDN_REASON_MINOR_POWER_SUPPLY (0x0000000a)
+#define SHTDN_REASON_MINOR_CORDUNPLUGGED (0x0000000b)
+#define SHTDN_REASON_MINOR_ENVIRONMENT (0x0000000c)
+#define SHTDN_REASON_MINOR_HARDWARE_DRIVER (0x0000000d)
+#define SHTDN_REASON_MINOR_OTHERDRIVER (0x0000000e)
+#define SHTDN_REASON_MINOR_BLUESCREEN (0x0000000f)
+#define SHTDN_REASON_MINOR_SERVICEPACK (0x00000010)
+#define SHTDN_REASON_MINOR_HOTFIX (0x00000011)
+#define SHTDN_REASON_MINOR_SECURITYFIX (0x00000012)
+#define SHTDN_REASON_MINOR_SECURITY (0x00000013)
+#define SHTDN_REASON_MINOR_NETWORK_CONNECTIVITY (0x00000014)
+#define SHTDN_REASON_MINOR_WMI (0x00000015)
+#define SHTDN_REASON_MINOR_SERVICEPACK_UNINSTALL (0x00000016)
+#define SHTDN_REASON_MINOR_HOTFIX_UNINSTALL (0x00000017)
+#define SHTDN_REASON_MINOR_SECURITYFIX_UNINSTALL (0x00000018)
+#define SHTDN_REASON_MINOR_MMC (0x00000019)
+#define SHTDN_REASON_MINOR_TERMSRV (0x00000020)
+extern const value_string initshutdown_initshutdown_ReasonMinor_vals[];
+int initshutdown_dissect_enum_ReasonMinor(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 *param _U_);
+int initshutdown_dissect_bitmap_ReasonFlags(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_);
 #endif /* __PACKET_DCERPC_INITSHUTDOWN_H */
-- 
1.8.1.2

>From 3a6695881f126013183ddcbb3f0d689b514f9618 Mon Sep 17 00:00:00 2001
From: Matthieu Patou <[email protected]>
Date: Sun, 6 Oct 2013 17:07:16 -0700
Subject: [PATCH 05/21] Update the generated file for dssetup

Signed-off-by: Matthieu Patou <[email protected]>
---
 epan/dissectors/packet-dcerpc-dssetup.c | 308 +++++++++++++++++++++-----------
 epan/dissectors/packet-dcerpc-dssetup.h |  20 ++-
 2 files changed, 211 insertions(+), 117 deletions(-)

diff --git a/epan/dissectors/packet-dcerpc-dssetup.c b/epan/dissectors/packet-dcerpc-dssetup.c
index 456930f..075ce72 100644
--- a/epan/dissectors/packet-dcerpc-dssetup.c
+++ b/epan/dissectors/packet-dcerpc-dssetup.c
@@ -12,6 +12,12 @@
 
 
 #include "config.h"
+#ifdef _MSC_VER
+#pragma warning(disable:4005)
+#pragma warning(disable:4013)
+#pragma warning(disable:4018)
+#pragma warning(disable:4101)
+#endif
 
 #include <glib.h>
 #include <string.h>
@@ -88,15 +94,15 @@ static const true_false_string dssetup_DsRoleFlags_DS_ROLE_PRIMARY_DOMAIN_GUID_P
    "DS_ROLE_PRIMARY_DOMAIN_GUID_PRESENT is SET",
    "DS_ROLE_PRIMARY_DOMAIN_GUID_PRESENT is NOT SET",
 };
-static int dssetup_dissect_element_DsRolePrimaryDomInfoBasic_role(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep);
-static int dssetup_dissect_element_DsRolePrimaryDomInfoBasic_flags(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep);
-static int dssetup_dissect_element_DsRolePrimaryDomInfoBasic_domain(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep);
-static int dssetup_dissect_element_DsRolePrimaryDomInfoBasic_domain_(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep);
-static int dssetup_dissect_element_DsRolePrimaryDomInfoBasic_dns_domain(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep);
-static int dssetup_dissect_element_DsRolePrimaryDomInfoBasic_dns_domain_(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep);
-static int dssetup_dissect_element_DsRolePrimaryDomInfoBasic_forest(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep);
-static int dssetup_dissect_element_DsRolePrimaryDomInfoBasic_forest_(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep);
-static int dssetup_dissect_element_DsRolePrimaryDomInfoBasic_domain_guid(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep);
+static int dssetup_dissect_element_DsRolePrimaryDomInfoBasic_role(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int dssetup_dissect_element_DsRolePrimaryDomInfoBasic_flags(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int dssetup_dissect_element_DsRolePrimaryDomInfoBasic_domain(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int dssetup_dissect_element_DsRolePrimaryDomInfoBasic_domain_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int dssetup_dissect_element_DsRolePrimaryDomInfoBasic_dns_domain(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int dssetup_dissect_element_DsRolePrimaryDomInfoBasic_dns_domain_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int dssetup_dissect_element_DsRolePrimaryDomInfoBasic_forest(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int dssetup_dissect_element_DsRolePrimaryDomInfoBasic_forest_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int dssetup_dissect_element_DsRolePrimaryDomInfoBasic_domain_guid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 const value_string dssetup_dssetup_DsUpgrade_vals[] = {
 	{ DS_ROLE_NOT_UPGRADING, "DS_ROLE_NOT_UPGRADING" },
 	{ DS_ROLE_UPGRADING, "DS_ROLE_UPGRADING" },
@@ -108,53 +114,62 @@ const value_string dssetup_dssetup_DsPrevious_vals[] = {
 	{ DS_ROLE_PREVIOUS_BACKUP, "DS_ROLE_PREVIOUS_BACKUP" },
 { 0, NULL }
 };
-static int dssetup_dissect_element_DsRoleUpgradeStatus_upgrading(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep);
-static int dssetup_dissect_element_DsRoleUpgradeStatus_previous_role(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep);
+static int dssetup_dissect_element_DsRoleUpgradeStatus_upgrading(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int dssetup_dissect_element_DsRoleUpgradeStatus_previous_role(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 const value_string dssetup_dssetup_DsRoleOp_vals[] = {
 	{ DS_ROLE_OP_IDLE, "DS_ROLE_OP_IDLE" },
 	{ DS_ROLE_OP_ACTIVE, "DS_ROLE_OP_ACTIVE" },
 	{ DS_ROLE_OP_NEEDS_REBOOT, "DS_ROLE_OP_NEEDS_REBOOT" },
 { 0, NULL }
 };
-static int dssetup_dissect_element_DsRoleOpStatus_status(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep);
+static int dssetup_dissect_element_DsRoleOpStatus_status(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
 const value_string dssetup_dssetup_DsRoleInfoLevel_vals[] = {
 	{ DS_ROLE_BASIC_INFORMATION, "DS_ROLE_BASIC_INFORMATION" },
 	{ DS_ROLE_UPGRADE_STATUS, "DS_ROLE_UPGRADE_STATUS" },
 	{ DS_ROLE_OP_STATUS, "DS_ROLE_OP_STATUS" },
 { 0, NULL }
 };
-static int dssetup_dissect_element_DsRoleInfo_basic(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep);
-static int dssetup_dissect_element_DsRoleInfo_upgrade(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep);
-static int dssetup_dissect_element_DsRoleInfo_opstatus(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep);
-static int dssetup_dissect_element_DsRoleGetPrimaryDomainInformation_level(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep);
-static int dssetup_dissect_element_DsRoleGetPrimaryDomainInformation_info(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep);
-static int dssetup_dissect_element_DsRoleGetPrimaryDomainInformation_info_(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep);
-
-/* IDL: typedef enum { */
+static int dssetup_dissect_element_DsRoleInfo_basic(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int dssetup_dissect_element_DsRoleInfo_upgrade(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int dssetup_dissect_element_DsRoleInfo_opstatus(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int dssetup_dissect_element_DsRoleGetPrimaryDomainInformation_level(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int dssetup_dissect_element_DsRoleGetPrimaryDomainInformation_info(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+static int dssetup_dissect_element_DsRoleGetPrimaryDomainInformation_info_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_);
+
+
+/* IDL: enum { */
 /* IDL: 	DS_ROLE_STANDALONE_WORKSTATION=0, */
 /* IDL: 	DS_ROLE_MEMBER_WORKSTATION=1, */
 /* IDL: 	DS_ROLE_STANDALONE_SERVER=2, */
 /* IDL: 	DS_ROLE_MEMBER_SERVER=3, */
 /* IDL: 	DS_ROLE_BACKUP_DC=4, */
 /* IDL: 	DS_ROLE_PRIMARY_DC=5, */
-/* IDL: } dssetup_DsRole; */
+/* IDL: } */
 
 int
-dssetup_dissect_enum_DsRole(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep, int hf_index, guint32 param _U_)
+dssetup_dissect_enum_DsRole(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 *param _U_)
 {
-	offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, hf_index, NULL);
+	guint1632 parameter=0;
+	if(param){
+		parameter=(guint1632)*param;
+	}
+	offset = dissect_ndr_uint1632(tvb, offset, pinfo, tree, drep, hf_index, &parameter);
+	if(param){
+		*param=(guint32)parameter;
+	}
 	return offset;
 }
 
-/* IDL: typedef bitmap { */
+
+/* IDL: bitmap { */
 /* IDL: 	DS_ROLE_PRIMARY_DS_RUNNING =  0x00000001 , */
 /* IDL: 	DS_ROLE_PRIMARY_DS_MIXED_MODE =  0x00000002 , */
 /* IDL: 	DS_ROLE_UPGRADE_IN_PROGRESS =  0x00000004 , */
 /* IDL: 	DS_ROLE_PRIMARY_DOMAIN_GUID_PRESENT =  0x01000000 , */
-/* IDL: } dssetup_DsRoleFlags; */
+/* IDL: } */
 
 int
-dssetup_dissect_bitmap_DsRoleFlags(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *parent_tree, guint8 *drep, int hf_index, guint32 param _U_)
+dssetup_dissect_bitmap_DsRoleFlags(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_)
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
@@ -162,8 +177,8 @@ dssetup_dissect_bitmap_DsRoleFlags(tvbuff_t *tvb, int offset, packet_info *pinfo
 	guint32 flags;
 	ALIGN_TO_4_BYTES;
 
-	if(parent_tree) {
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, 4, TRUE);
+	if (parent_tree) {
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, 4, DREP_ENC_INTEGER(drep));
 		tree = proto_item_add_subtree(item,ett_dssetup_dssetup_DsRoleFlags);
 	}
 
@@ -205,24 +220,25 @@ dssetup_dissect_bitmap_DsRoleFlags(tvbuff_t *tvb, int offset, packet_info *pinfo
 	}
 	flags&=(~( 0x01000000 ));
 
-	if(flags){
+	if (flags) {
 		proto_item_append_text(item, "Unknown bitmap value 0x%x", flags);
 	}
 
 	return offset;
 }
 
-/* IDL: typedef struct { */
+
+/* IDL: struct { */
 /* IDL: 	dssetup_DsRole role; */
 /* IDL: 	dssetup_DsRoleFlags flags; */
-/* IDL: 	[unique(1)] uint16 *domain; */
-/* IDL: 	[unique(1)] uint16 *dns_domain; */
-/* IDL: 	[unique(1)] uint16 *forest; */
+/* IDL: 	[unique(1)] [charset(UTF16)] uint16 *domain; */
+/* IDL: 	[unique(1)] [charset(UTF16)] uint16 *dns_domain; */
+/* IDL: 	[unique(1)] [charset(UTF16)] uint16 *forest; */
 /* IDL: 	GUID domain_guid; */
-/* IDL: } dssetup_DsRolePrimaryDomInfoBasic; */
+/* IDL: } */
 
 static int
-dssetup_dissect_element_DsRolePrimaryDomInfoBasic_role(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep)
+dssetup_dissect_element_DsRolePrimaryDomInfoBasic_role(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
 	offset = dssetup_dissect_enum_DsRole(tvb, offset, pinfo, tree, drep, hf_dssetup_dssetup_DsRolePrimaryDomInfoBasic_role, 0);
 
@@ -230,7 +246,7 @@ dssetup_dissect_element_DsRolePrimaryDomInfoBasic_role(tvbuff_t *tvb, int offset
 }
 
 static int
-dssetup_dissect_element_DsRolePrimaryDomInfoBasic_flags(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep)
+dssetup_dissect_element_DsRolePrimaryDomInfoBasic_flags(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
 	offset = dssetup_dissect_bitmap_DsRoleFlags(tvb, offset, pinfo, tree, drep, hf_dssetup_dssetup_DsRolePrimaryDomInfoBasic_flags, 0);
 
@@ -238,7 +254,7 @@ dssetup_dissect_element_DsRolePrimaryDomInfoBasic_flags(tvbuff_t *tvb, int offse
 }
 
 static int
-dssetup_dissect_element_DsRolePrimaryDomInfoBasic_domain(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep)
+dssetup_dissect_element_DsRolePrimaryDomInfoBasic_domain(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
 	offset = dissect_ndr_embedded_pointer(tvb, offset, pinfo, tree, drep, dssetup_dissect_element_DsRolePrimaryDomInfoBasic_domain_, NDR_POINTER_UNIQUE, "Pointer to Domain (uint16)",hf_dssetup_dssetup_DsRolePrimaryDomInfoBasic_domain);
 
@@ -246,7 +262,7 @@ dssetup_dissect_element_DsRolePrimaryDomInfoBasic_domain(tvbuff_t *tvb, int offs
 }
 
 static int
-dssetup_dissect_element_DsRolePrimaryDomInfoBasic_domain_(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep)
+dssetup_dissect_element_DsRolePrimaryDomInfoBasic_domain_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
 	char *data;
 
@@ -257,7 +273,7 @@ dssetup_dissect_element_DsRolePrimaryDomInfoBasic_domain_(tvbuff_t *tvb, int off
 }
 
 static int
-dssetup_dissect_element_DsRolePrimaryDomInfoBasic_dns_domain(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep)
+dssetup_dissect_element_DsRolePrimaryDomInfoBasic_dns_domain(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
 	offset = dissect_ndr_embedded_pointer(tvb, offset, pinfo, tree, drep, dssetup_dissect_element_DsRolePrimaryDomInfoBasic_dns_domain_, NDR_POINTER_UNIQUE, "Pointer to Dns Domain (uint16)",hf_dssetup_dssetup_DsRolePrimaryDomInfoBasic_dns_domain);
 
@@ -265,7 +281,7 @@ dssetup_dissect_element_DsRolePrimaryDomInfoBasic_dns_domain(tvbuff_t *tvb, int
 }
 
 static int
-dssetup_dissect_element_DsRolePrimaryDomInfoBasic_dns_domain_(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep)
+dssetup_dissect_element_DsRolePrimaryDomInfoBasic_dns_domain_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
 	char *data;
 
@@ -276,7 +292,7 @@ dssetup_dissect_element_DsRolePrimaryDomInfoBasic_dns_domain_(tvbuff_t *tvb, int
 }
 
 static int
-dssetup_dissect_element_DsRolePrimaryDomInfoBasic_forest(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep)
+dssetup_dissect_element_DsRolePrimaryDomInfoBasic_forest(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
 	offset = dissect_ndr_embedded_pointer(tvb, offset, pinfo, tree, drep, dssetup_dissect_element_DsRolePrimaryDomInfoBasic_forest_, NDR_POINTER_UNIQUE, "Pointer to Forest (uint16)",hf_dssetup_dssetup_DsRolePrimaryDomInfoBasic_forest);
 
@@ -284,7 +300,7 @@ dssetup_dissect_element_DsRolePrimaryDomInfoBasic_forest(tvbuff_t *tvb, int offs
 }
 
 static int
-dssetup_dissect_element_DsRolePrimaryDomInfoBasic_forest_(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep)
+dssetup_dissect_element_DsRolePrimaryDomInfoBasic_forest_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
 	char *data;
 
@@ -295,7 +311,7 @@ dssetup_dissect_element_DsRolePrimaryDomInfoBasic_forest_(tvbuff_t *tvb, int off
 }
 
 static int
-dssetup_dissect_element_DsRolePrimaryDomInfoBasic_domain_guid(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep)
+dssetup_dissect_element_DsRolePrimaryDomInfoBasic_domain_guid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
 	offset = dissect_ndr_uuid_t(tvb, offset, pinfo, tree, drep, hf_dssetup_dssetup_DsRolePrimaryDomInfoBasic_domain_guid, NULL);
 
@@ -303,18 +319,19 @@ dssetup_dissect_element_DsRolePrimaryDomInfoBasic_domain_guid(tvbuff_t *tvb, int
 }
 
 int
-dssetup_dissect_struct_DsRolePrimaryDomInfoBasic(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *parent_tree, guint8 *drep, int hf_index, guint32 param _U_)
+dssetup_dissect_struct_DsRolePrimaryDomInfoBasic(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_)
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
-	ALIGN_TO_4_BYTES;
+	ALIGN_TO_5_BYTES;
 
 	old_offset = offset;
 
-	if(parent_tree){
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+	if (parent_tree) {
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_dssetup_dssetup_DsRolePrimaryDomInfoBasic);
 	}
 	
@@ -333,41 +350,63 @@ dssetup_dissect_struct_DsRolePrimaryDomInfoBasic(tvbuff_t *tvb, int offset, pack
 
 	proto_item_set_len(item, offset-old_offset);
 
+
+	if (di->call_data->flags & DCERPC_IS_NDR64) {
+		ALIGN_TO_5_BYTES;
+	}
+
 	return offset;
 }
 
-/* IDL: typedef enum { */
+
+/* IDL: enum { */
 /* IDL: 	DS_ROLE_NOT_UPGRADING=0, */
 /* IDL: 	DS_ROLE_UPGRADING=1, */
-/* IDL: } dssetup_DsUpgrade; */
+/* IDL: } */
 
 int
-dssetup_dissect_enum_DsUpgrade(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep, int hf_index, guint32 param _U_)
+dssetup_dissect_enum_DsUpgrade(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 *param _U_)
 {
-	offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, hf_index, NULL);
+	guint32 parameter=0;
+	if(param){
+		parameter=(guint32)*param;
+	}
+	offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, hf_index, &parameter);
+	if(param){
+		*param=(guint32)parameter;
+	}
 	return offset;
 }
 
-/* IDL: typedef enum { */
+
+/* IDL: enum { */
 /* IDL: 	DS_ROLE_PREVIOUS_UNKNOWN=0, */
 /* IDL: 	DS_ROLE_PREVIOUS_PRIMARY=1, */
 /* IDL: 	DS_ROLE_PREVIOUS_BACKUP=2, */
-/* IDL: } dssetup_DsPrevious; */
+/* IDL: } */
 
 int
-dssetup_dissect_enum_DsPrevious(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep, int hf_index, guint32 param _U_)
+dssetup_dissect_enum_DsPrevious(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 *param _U_)
 {
-	offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, hf_index, NULL);
+	guint1632 parameter=0;
+	if(param){
+		parameter=(guint1632)*param;
+	}
+	offset = dissect_ndr_uint1632(tvb, offset, pinfo, tree, drep, hf_index, &parameter);
+	if(param){
+		*param=(guint32)parameter;
+	}
 	return offset;
 }
 
-/* IDL: typedef struct { */
+
+/* IDL: struct { */
 /* IDL: 	dssetup_DsUpgrade upgrading; */
 /* IDL: 	dssetup_DsPrevious previous_role; */
-/* IDL: } dssetup_DsRoleUpgradeStatus; */
+/* IDL: } */
 
 static int
-dssetup_dissect_element_DsRoleUpgradeStatus_upgrading(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep)
+dssetup_dissect_element_DsRoleUpgradeStatus_upgrading(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
 	offset = dssetup_dissect_enum_DsUpgrade(tvb, offset, pinfo, tree, drep, hf_dssetup_dssetup_DsRoleUpgradeStatus_upgrading, 0);
 
@@ -375,7 +414,7 @@ dssetup_dissect_element_DsRoleUpgradeStatus_upgrading(tvbuff_t *tvb, int offset,
 }
 
 static int
-dssetup_dissect_element_DsRoleUpgradeStatus_previous_role(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep)
+dssetup_dissect_element_DsRoleUpgradeStatus_previous_role(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
 	offset = dssetup_dissect_enum_DsPrevious(tvb, offset, pinfo, tree, drep, hf_dssetup_dssetup_DsRoleUpgradeStatus_previous_role, 0);
 
@@ -383,18 +422,19 @@ dssetup_dissect_element_DsRoleUpgradeStatus_previous_role(tvbuff_t *tvb, int off
 }
 
 int
-dssetup_dissect_struct_DsRoleUpgradeStatus(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *parent_tree, guint8 *drep, int hf_index, guint32 param _U_)
+dssetup_dissect_struct_DsRoleUpgradeStatus(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_)
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
 	ALIGN_TO_4_BYTES;
 
 	old_offset = offset;
 
-	if(parent_tree){
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+	if (parent_tree) {
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_dssetup_dssetup_DsRoleUpgradeStatus);
 	}
 	
@@ -405,28 +445,42 @@ dssetup_dissect_struct_DsRoleUpgradeStatus(tvbuff_t *tvb, int offset, packet_inf
 
 	proto_item_set_len(item, offset-old_offset);
 
+
+	if (di->call_data->flags & DCERPC_IS_NDR64) {
+		ALIGN_TO_4_BYTES;
+	}
+
 	return offset;
 }
 
-/* IDL: typedef enum { */
+
+/* IDL: enum { */
 /* IDL: 	DS_ROLE_OP_IDLE=0, */
 /* IDL: 	DS_ROLE_OP_ACTIVE=1, */
 /* IDL: 	DS_ROLE_OP_NEEDS_REBOOT=2, */
-/* IDL: } dssetup_DsRoleOp; */
+/* IDL: } */
 
 int
-dssetup_dissect_enum_DsRoleOp(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep, int hf_index, guint32 param _U_)
+dssetup_dissect_enum_DsRoleOp(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 *param _U_)
 {
-	offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, hf_index, NULL);
+	guint1632 parameter=0;
+	if(param){
+		parameter=(guint1632)*param;
+	}
+	offset = dissect_ndr_uint1632(tvb, offset, pinfo, tree, drep, hf_index, &parameter);
+	if(param){
+		*param=(guint32)parameter;
+	}
 	return offset;
 }
 
-/* IDL: typedef struct { */
+
+/* IDL: struct { */
 /* IDL: 	dssetup_DsRoleOp status; */
-/* IDL: } dssetup_DsRoleOpStatus; */
+/* IDL: } */
 
 static int
-dssetup_dissect_element_DsRoleOpStatus_status(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep)
+dssetup_dissect_element_DsRoleOpStatus_status(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
 	offset = dssetup_dissect_enum_DsRoleOp(tvb, offset, pinfo, tree, drep, hf_dssetup_dssetup_DsRoleOpStatus_status, 0);
 
@@ -434,18 +488,19 @@ dssetup_dissect_element_DsRoleOpStatus_status(tvbuff_t *tvb, int offset, packet_
 }
 
 int
-dssetup_dissect_struct_DsRoleOpStatus(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *parent_tree, guint8 *drep, int hf_index, guint32 param _U_)
+dssetup_dissect_struct_DsRoleOpStatus(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_)
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
+	dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
 	int old_offset;
 
-	ALIGN_TO_2_BYTES;
+	ALIGN_TO_3_BYTES;
 
 	old_offset = offset;
 
-	if(parent_tree){
-		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE);
+	if (parent_tree) {
+		item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
 		tree = proto_item_add_subtree(item, ett_dssetup_dssetup_DsRoleOpStatus);
 	}
 	
@@ -454,30 +509,44 @@ dssetup_dissect_struct_DsRoleOpStatus(tvbuff_t *tvb, int offset, packet_info *pi
 
 	proto_item_set_len(item, offset-old_offset);
 
+
+	if (di->call_data->flags & DCERPC_IS_NDR64) {
+		ALIGN_TO_3_BYTES;
+	}
+
 	return offset;
 }
 
-/* IDL: typedef enum { */
+
+/* IDL: enum { */
 /* IDL: 	DS_ROLE_BASIC_INFORMATION=1, */
 /* IDL: 	DS_ROLE_UPGRADE_STATUS=2, */
 /* IDL: 	DS_ROLE_OP_STATUS=3, */
-/* IDL: } dssetup_DsRoleInfoLevel; */
+/* IDL: } */
 
 int
-dssetup_dissect_enum_DsRoleInfoLevel(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep, int hf_index, guint32 param _U_)
+dssetup_dissect_enum_DsRoleInfoLevel(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 *param _U_)
 {
-	offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, hf_index, NULL);
+	guint1632 parameter=0;
+	if(param){
+		parameter=(guint1632)*param;
+	}
+	offset = dissect_ndr_uint1632(tvb, offset, pinfo, tree, drep, hf_index, &parameter);
+	if(param){
+		*param=(guint32)parameter;
+	}
 	return offset;
 }
 
-/* IDL: typedef [switch_type(dssetup_DsRoleInfoLevel)] union { */
+
+/* IDL: [switch_type(dssetup_DsRoleInfoLevel)] union { */
 /* IDL: [case(DS_ROLE_BASIC_INFORMATION)] [case(DS_ROLE_BASIC_INFORMATION)] dssetup_DsRolePrimaryDomInfoBasic basic; */
 /* IDL: [case(DS_ROLE_UPGRADE_STATUS)] [case(DS_ROLE_UPGRADE_STATUS)] dssetup_DsRoleUpgradeStatus upgrade; */
 /* IDL: [case(DS_ROLE_OP_STATUS)] [case(DS_ROLE_OP_STATUS)] dssetup_DsRoleOpStatus opstatus; */
-/* IDL: } dssetup_DsRoleInfo; */
+/* IDL: } */
 
 static int
-dssetup_dissect_element_DsRoleInfo_basic(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep)
+dssetup_dissect_element_DsRoleInfo_basic(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
 	offset = dssetup_dissect_struct_DsRolePrimaryDomInfoBasic(tvb,offset,pinfo,tree,drep,hf_dssetup_dssetup_DsRoleInfo_basic,0);
 
@@ -485,7 +554,7 @@ dssetup_dissect_element_DsRoleInfo_basic(tvbuff_t *tvb, int offset, packet_info
 }
 
 static int
-dssetup_dissect_element_DsRoleInfo_upgrade(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep)
+dssetup_dissect_element_DsRoleInfo_upgrade(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
 	offset = dssetup_dissect_struct_DsRoleUpgradeStatus(tvb,offset,pinfo,tree,drep,hf_dssetup_dssetup_DsRoleInfo_upgrade,0);
 
@@ -493,7 +562,7 @@ dssetup_dissect_element_DsRoleInfo_upgrade(tvbuff_t *tvb, int offset, packet_inf
 }
 
 static int
-dssetup_dissect_element_DsRoleInfo_opstatus(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep)
+dssetup_dissect_element_DsRoleInfo_opstatus(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
 	offset = dssetup_dissect_struct_DsRoleOpStatus(tvb,offset,pinfo,tree,drep,hf_dssetup_dssetup_DsRoleInfo_opstatus,0);
 
@@ -501,22 +570,22 @@ dssetup_dissect_element_DsRoleInfo_opstatus(tvbuff_t *tvb, int offset, packet_in
 }
 
 static int
-dssetup_dissect_DsRoleInfo(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *parent_tree, guint8 *drep, int hf_index, guint32 param _U_)
+dssetup_dissect_DsRoleInfo(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_)
 {
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
 	int old_offset;
-	guint16 level;
-
-	ALIGN_TO_4_BYTES;
+	guint1632 level;
 
 	old_offset = offset;
-	if(parent_tree){
+	if (parent_tree) {
 		item = proto_tree_add_text(parent_tree, tvb, offset, -1, "dssetup_DsRoleInfo");
 		tree = proto_item_add_subtree(item, ett_dssetup_dssetup_DsRoleInfo);
 	}
 
-	offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, hf_index, &level);
+	offset = dissect_ndr_uint1632(tvb, offset, pinfo, tree, drep, hf_index, &level);
+	ALIGN_TO_5_BYTES;
+
 	switch(level) {
 		case DS_ROLE_BASIC_INFORMATION:
 			offset = dssetup_dissect_element_DsRoleInfo_basic(tvb, offset, pinfo, tree, drep);
@@ -532,10 +601,11 @@ dssetup_dissect_DsRoleInfo(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_
 	}
 	proto_item_set_len(item, offset-old_offset);
 
+
 	return offset;
 }
 static int
-dssetup_dissect_element_DsRoleGetPrimaryDomainInformation_level(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep)
+dssetup_dissect_element_DsRoleGetPrimaryDomainInformation_level(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
 	offset = dssetup_dissect_enum_DsRoleInfoLevel(tvb, offset, pinfo, tree, drep, hf_dssetup_dssetup_DsRoleGetPrimaryDomainInformation_level, 0);
 
@@ -543,7 +613,7 @@ dssetup_dissect_element_DsRoleGetPrimaryDomainInformation_level(tvbuff_t *tvb, i
 }
 
 static int
-dssetup_dissect_element_DsRoleGetPrimaryDomainInformation_info(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep)
+dssetup_dissect_element_DsRoleGetPrimaryDomainInformation_info(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
 	offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, drep, dssetup_dissect_element_DsRoleGetPrimaryDomainInformation_info_, NDR_POINTER_UNIQUE, "Pointer to Info (dssetup_DsRoleInfo)",hf_dssetup_dssetup_DsRoleGetPrimaryDomainInformation_info);
 
@@ -551,7 +621,7 @@ dssetup_dissect_element_DsRoleGetPrimaryDomainInformation_info(tvbuff_t *tvb, in
 }
 
 static int
-dssetup_dissect_element_DsRoleGetPrimaryDomainInformation_info_(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep)
+dssetup_dissect_element_DsRoleGetPrimaryDomainInformation_info_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
 	offset = dssetup_dissect_DsRoleInfo(tvb, offset, pinfo, tree, drep, hf_dssetup_dssetup_DsRoleGetPrimaryDomainInformation_info, 0);
 
@@ -560,7 +630,7 @@ dssetup_dissect_element_DsRoleGetPrimaryDomainInformation_info_(tvbuff_t *tvb, i
 
 /* IDL: WERROR dssetup_DsRoleGetPrimaryDomainInformation( */
 /* IDL: [in] dssetup_DsRoleInfoLevel level, */
-/* IDL: [unique(1)] [out] [switch_is(level)] dssetup_DsRoleInfo *info */
+/* IDL: [out] [unique(1)] [switch_is(level)] dssetup_DsRoleInfo *info */
 /* IDL: ); */
 
 static int
@@ -568,13 +638,14 @@ dssetup_dissect_DsRoleGetPrimaryDomainInformation_response(tvbuff_t *tvb _U_, in
 {
 	guint32 status;
 
+	pinfo->dcerpc_procedure_name="DsRoleGetPrimaryDomainInformation";
 	offset = dssetup_dissect_element_DsRoleGetPrimaryDomainInformation_info(tvb, offset, pinfo, tree, drep);
 	offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
 
 	offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, hf_dssetup_werror, &status);
 
 	if (status != 0)
-		col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, DOS_errors, "Unknown DOS error 0x%08x"));
+		col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x"));
 
 	return offset;
 }
@@ -582,6 +653,7 @@ dssetup_dissect_DsRoleGetPrimaryDomainInformation_response(tvbuff_t *tvb _U_, in
 static int
 dssetup_dissect_DsRoleGetPrimaryDomainInformation_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
+	pinfo->dcerpc_procedure_name="DsRoleGetPrimaryDomainInformation";
 	offset = dssetup_dissect_element_DsRoleGetPrimaryDomainInformation_level(tvb, offset, pinfo, tree, drep);
 	offset = dissect_deferred_pointers(pinfo, tvb, offset, drep);
 	return offset;
@@ -596,10 +668,11 @@ dssetup_dissect_DsRoleDnsNameToFlatName_response(tvbuff_t *tvb _U_, int offset _
 {
 	guint32 status;
 
+	pinfo->dcerpc_procedure_name="DsRoleDnsNameToFlatName";
 	offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, hf_dssetup_werror, &status);
 
 	if (status != 0)
-		col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, DOS_errors, "Unknown DOS error 0x%08x"));
+		col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x"));
 
 	return offset;
 }
@@ -607,6 +680,7 @@ dssetup_dissect_DsRoleDnsNameToFlatName_response(tvbuff_t *tvb _U_, int offset _
 static int
 dssetup_dissect_DsRoleDnsNameToFlatName_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
+	pinfo->dcerpc_procedure_name="DsRoleDnsNameToFlatName";
 	return offset;
 }
 
@@ -619,10 +693,11 @@ dssetup_dissect_DsRoleDcAsDc_response(tvbuff_t *tvb _U_, int offset _U_, packet_
 {
 	guint32 status;
 
+	pinfo->dcerpc_procedure_name="DsRoleDcAsDc";
 	offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, hf_dssetup_werror, &status);
 
 	if (status != 0)
-		col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, DOS_errors, "Unknown DOS error 0x%08x"));
+		col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x"));
 
 	return offset;
 }
@@ -630,6 +705,7 @@ dssetup_dissect_DsRoleDcAsDc_response(tvbuff_t *tvb _U_, int offset _U_, packet_
 static int
 dssetup_dissect_DsRoleDcAsDc_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
+	pinfo->dcerpc_procedure_name="DsRoleDcAsDc";
 	return offset;
 }
 
@@ -642,10 +718,11 @@ dssetup_dissect_DsRoleDcAsReplica_response(tvbuff_t *tvb _U_, int offset _U_, pa
 {
 	guint32 status;
 
+	pinfo->dcerpc_procedure_name="DsRoleDcAsReplica";
 	offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, hf_dssetup_werror, &status);
 
 	if (status != 0)
-		col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, DOS_errors, "Unknown DOS error 0x%08x"));
+		col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x"));
 
 	return offset;
 }
@@ -653,6 +730,7 @@ dssetup_dissect_DsRoleDcAsReplica_response(tvbuff_t *tvb _U_, int offset _U_, pa
 static int
 dssetup_dissect_DsRoleDcAsReplica_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
+	pinfo->dcerpc_procedure_name="DsRoleDcAsReplica";
 	return offset;
 }
 
@@ -665,10 +743,11 @@ dssetup_dissect_DsRoleDemoteDc_response(tvbuff_t *tvb _U_, int offset _U_, packe
 {
 	guint32 status;
 
+	pinfo->dcerpc_procedure_name="DsRoleDemoteDc";
 	offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, hf_dssetup_werror, &status);
 
 	if (status != 0)
-		col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, DOS_errors, "Unknown DOS error 0x%08x"));
+		col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x"));
 
 	return offset;
 }
@@ -676,6 +755,7 @@ dssetup_dissect_DsRoleDemoteDc_response(tvbuff_t *tvb _U_, int offset _U_, packe
 static int
 dssetup_dissect_DsRoleDemoteDc_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
+	pinfo->dcerpc_procedure_name="DsRoleDemoteDc";
 	return offset;
 }
 
@@ -688,10 +768,11 @@ dssetup_dissect_DsRoleGetDcOperationProgress_response(tvbuff_t *tvb _U_, int off
 {
 	guint32 status;
 
+	pinfo->dcerpc_procedure_name="DsRoleGetDcOperationProgress";
 	offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, hf_dssetup_werror, &status);
 
 	if (status != 0)
-		col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, DOS_errors, "Unknown DOS error 0x%08x"));
+		col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x"));
 
 	return offset;
 }
@@ -699,6 +780,7 @@ dssetup_dissect_DsRoleGetDcOperationProgress_response(tvbuff_t *tvb _U_, int off
 static int
 dssetup_dissect_DsRoleGetDcOperationProgress_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
+	pinfo->dcerpc_procedure_name="DsRoleGetDcOperationProgress";
 	return offset;
 }
 
@@ -711,10 +793,11 @@ dssetup_dissect_DsRoleGetDcOperationResults_response(tvbuff_t *tvb _U_, int offs
 {
 	guint32 status;
 
+	pinfo->dcerpc_procedure_name="DsRoleGetDcOperationResults";
 	offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, hf_dssetup_werror, &status);
 
 	if (status != 0)
-		col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, DOS_errors, "Unknown DOS error 0x%08x"));
+		col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x"));
 
 	return offset;
 }
@@ -722,6 +805,7 @@ dssetup_dissect_DsRoleGetDcOperationResults_response(tvbuff_t *tvb _U_, int offs
 static int
 dssetup_dissect_DsRoleGetDcOperationResults_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
+	pinfo->dcerpc_procedure_name="DsRoleGetDcOperationResults";
 	return offset;
 }
 
@@ -734,10 +818,11 @@ dssetup_dissect_DsRoleCancel_response(tvbuff_t *tvb _U_, int offset _U_, packet_
 {
 	guint32 status;
 
+	pinfo->dcerpc_procedure_name="DsRoleCancel";
 	offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, hf_dssetup_werror, &status);
 
 	if (status != 0)
-		col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, DOS_errors, "Unknown DOS error 0x%08x"));
+		col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x"));
 
 	return offset;
 }
@@ -745,6 +830,7 @@ dssetup_dissect_DsRoleCancel_response(tvbuff_t *tvb _U_, int offset _U_, packet_
 static int
 dssetup_dissect_DsRoleCancel_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
+	pinfo->dcerpc_procedure_name="DsRoleCancel";
 	return offset;
 }
 
@@ -757,10 +843,11 @@ dssetup_dissect_DsRoleServerSaveStateForUpgrade_response(tvbuff_t *tvb _U_, int
 {
 	guint32 status;
 
+	pinfo->dcerpc_procedure_name="DsRoleServerSaveStateForUpgrade";
 	offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, hf_dssetup_werror, &status);
 
 	if (status != 0)
-		col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, DOS_errors, "Unknown DOS error 0x%08x"));
+		col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x"));
 
 	return offset;
 }
@@ -768,6 +855,7 @@ dssetup_dissect_DsRoleServerSaveStateForUpgrade_response(tvbuff_t *tvb _U_, int
 static int
 dssetup_dissect_DsRoleServerSaveStateForUpgrade_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
+	pinfo->dcerpc_procedure_name="DsRoleServerSaveStateForUpgrade";
 	return offset;
 }
 
@@ -780,10 +868,11 @@ dssetup_dissect_DsRoleUpgradeDownlevelServer_response(tvbuff_t *tvb _U_, int off
 {
 	guint32 status;
 
+	pinfo->dcerpc_procedure_name="DsRoleUpgradeDownlevelServer";
 	offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, hf_dssetup_werror, &status);
 
 	if (status != 0)
-		col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, DOS_errors, "Unknown DOS error 0x%08x"));
+		col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x"));
 
 	return offset;
 }
@@ -791,6 +880,7 @@ dssetup_dissect_DsRoleUpgradeDownlevelServer_response(tvbuff_t *tvb _U_, int off
 static int
 dssetup_dissect_DsRoleUpgradeDownlevelServer_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
+	pinfo->dcerpc_procedure_name="DsRoleUpgradeDownlevelServer";
 	return offset;
 }
 
@@ -803,10 +893,11 @@ dssetup_dissect_DsRoleAbortDownlevelServerUpgrade_response(tvbuff_t *tvb _U_, in
 {
 	guint32 status;
 
+	pinfo->dcerpc_procedure_name="DsRoleAbortDownlevelServerUpgrade";
 	offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, hf_dssetup_werror, &status);
 
 	if (status != 0)
-		col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, DOS_errors, "Unknown DOS error 0x%08x"));
+		col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x"));
 
 	return offset;
 }
@@ -814,6 +905,7 @@ dssetup_dissect_DsRoleAbortDownlevelServerUpgrade_response(tvbuff_t *tvb _U_, in
 static int
 dssetup_dissect_DsRoleAbortDownlevelServerUpgrade_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_)
 {
+	pinfo->dcerpc_procedure_name="DsRoleAbortDownlevelServerUpgrade";
 	return offset;
 }
 
@@ -848,19 +940,19 @@ void proto_register_dcerpc_dssetup(void)
 {
 	static hf_register_info hf[] = {
 	{ &hf_dssetup_dssetup_DsRoleGetPrimaryDomainInformation_level, 
-	  { "Level", "dssetup.dssetup_DsRoleGetPrimaryDomainInformation.level", FT_UINT16, BASE_DEC, VALS(dssetup_dssetup_DsRoleInfoLevel_vals), 0, NULL, HFILL }},
+	  { "Level", "dssetup.dssetup_DsRoleGetPrimaryDomainInformation.level", FT_UINT1632, BASE_DEC, VALS(dssetup_dssetup_DsRoleInfoLevel_vals), 0, NULL, HFILL }},
 	{ &hf_dssetup_opnum, 
 	  { "Operation", "dssetup.opnum", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
 	{ &hf_dssetup_dssetup_DsRolePrimaryDomInfoBasic_flags, 
 	  { "Flags", "dssetup.dssetup_DsRolePrimaryDomInfoBasic.flags", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
 	{ &hf_dssetup_dssetup_DsRoleUpgradeStatus_previous_role, 
-	  { "Previous Role", "dssetup.dssetup_DsRoleUpgradeStatus.previous_role", FT_UINT16, BASE_DEC, VALS(dssetup_dssetup_DsPrevious_vals), 0, NULL, HFILL }},
+	  { "Previous Role", "dssetup.dssetup_DsRoleUpgradeStatus.previous_role", FT_UINT1632, BASE_DEC, VALS(dssetup_dssetup_DsPrevious_vals), 0, NULL, HFILL }},
 	{ &hf_dssetup_dssetup_DsRoleInfo_opstatus, 
 	  { "Opstatus", "dssetup.dssetup_DsRoleInfo.opstatus", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
 	{ &hf_dssetup_dssetup_DsRolePrimaryDomInfoBasic_domain_guid, 
 	  { "Domain Guid", "dssetup.dssetup_DsRolePrimaryDomInfoBasic.domain_guid", FT_GUID, BASE_NONE, NULL, 0, NULL, HFILL }},
 	{ &hf_dssetup_dssetup_DsRoleOpStatus_status, 
-	  { "Status", "dssetup.dssetup_DsRoleOpStatus.status", FT_UINT16, BASE_DEC, VALS(dssetup_dssetup_DsRoleOp_vals), 0, NULL, HFILL }},
+	  { "Status", "dssetup.dssetup_DsRoleOpStatus.status", FT_UINT1632, BASE_DEC, VALS(dssetup_dssetup_DsRoleOp_vals), 0, NULL, HFILL }},
 	{ &hf_dssetup_dssetup_DsRoleInfo_upgrade, 
 	  { "Upgrade", "dssetup.dssetup_DsRoleInfo.upgrade", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
 	{ &hf_dssetup_dssetup_DsRoleGetPrimaryDomainInformation_info, 
@@ -872,7 +964,7 @@ void proto_register_dcerpc_dssetup(void)
 	{ &hf_dssetup_dssetup_DsRoleInfo_basic, 
 	  { "Basic", "dssetup.dssetup_DsRoleInfo.basic", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
 	{ &hf_dssetup_dssetup_DsRolePrimaryDomInfoBasic_role, 
-	  { "Role", "dssetup.dssetup_DsRolePrimaryDomInfoBasic.role", FT_UINT16, BASE_DEC, VALS(dssetup_dssetup_DsRole_vals), 0, NULL, HFILL }},
+	  { "Role", "dssetup.dssetup_DsRolePrimaryDomInfoBasic.role", FT_UINT1632, BASE_DEC, VALS(dssetup_dssetup_DsRole_vals), 0, NULL, HFILL }},
 	{ &hf_dssetup_dssetup_DsRoleFlags_DS_ROLE_PRIMARY_DS_RUNNING, 
 	  { "Ds Role Primary Ds Running", "dssetup.dssetup_DsRoleFlags.DS_ROLE_PRIMARY_DS_RUNNING", FT_BOOLEAN, 32, TFS(&dssetup_DsRoleFlags_DS_ROLE_PRIMARY_DS_RUNNING_tfs), ( 0x00000001 ), NULL, HFILL }},
 	{ &hf_dssetup_dssetup_DsRolePrimaryDomInfoBasic_dns_domain, 
@@ -882,7 +974,7 @@ void proto_register_dcerpc_dssetup(void)
 	{ &hf_dssetup_dssetup_DsRolePrimaryDomInfoBasic_domain, 
 	  { "Domain", "dssetup.dssetup_DsRolePrimaryDomInfoBasic.domain", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
 	{ &hf_dssetup_werror, 
-	  { "Windows Error", "dssetup.werror", FT_UINT32, BASE_HEX, VALS(DOS_errors), 0, NULL, HFILL }},
+	  { "Windows Error", "dssetup.werror", FT_UINT32, BASE_HEX, VALS(WERR_errors), 0, NULL, HFILL }},
 	{ &hf_dssetup_dssetup_DsRoleFlags_DS_ROLE_PRIMARY_DS_MIXED_MODE, 
 	  { "Ds Role Primary Ds Mixed Mode", "dssetup.dssetup_DsRoleFlags.DS_ROLE_PRIMARY_DS_MIXED_MODE", FT_BOOLEAN, 32, TFS(&dssetup_DsRoleFlags_DS_ROLE_PRIMARY_DS_MIXED_MODE_tfs), ( 0x00000002 ), NULL, HFILL }},
 	{ &hf_dssetup_dssetup_DsRolePrimaryDomInfoBasic_forest, 
diff --git a/epan/dissectors/packet-dcerpc-dssetup.h b/epan/dissectors/packet-dcerpc-dssetup.h
index 5a0e7c1..f815890 100644
--- a/epan/dissectors/packet-dcerpc-dssetup.h
+++ b/epan/dissectors/packet-dcerpc-dssetup.h
@@ -13,6 +13,8 @@
 */
 
 
+#include "packet-dcerpc-misc.h"
+
 #ifndef __PACKET_DCERPC_DSSETUP_H
 #define __PACKET_DCERPC_DSSETUP_H
 
@@ -23,28 +25,28 @@
 #define DS_ROLE_BACKUP_DC (4)
 #define DS_ROLE_PRIMARY_DC (5)
 extern const value_string dssetup_dssetup_DsRole_vals[];
-int dssetup_dissect_enum_DsRole(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep, int hf_index, guint32 param);
-int dssetup_dissect_bitmap_DsRoleFlags(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep, int hf_index, guint32 param);
-int dssetup_dissect_struct_DsRolePrimaryDomInfoBasic(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *parent_tree, guint8 *drep, int hf_index, guint32 param _U_);
+int dssetup_dissect_enum_DsRole(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 *param _U_);
+int dssetup_dissect_bitmap_DsRoleFlags(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_);
+int dssetup_dissect_struct_DsRolePrimaryDomInfoBasic(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_);
 #define DS_ROLE_NOT_UPGRADING (0)
 #define DS_ROLE_UPGRADING (1)
 extern const value_string dssetup_dssetup_DsUpgrade_vals[];
-int dssetup_dissect_enum_DsUpgrade(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep, int hf_index, guint32 param);
+int dssetup_dissect_enum_DsUpgrade(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 *param _U_);
 #define DS_ROLE_PREVIOUS_UNKNOWN (0)
 #define DS_ROLE_PREVIOUS_PRIMARY (1)
 #define DS_ROLE_PREVIOUS_BACKUP (2)
 extern const value_string dssetup_dssetup_DsPrevious_vals[];
-int dssetup_dissect_enum_DsPrevious(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep, int hf_index, guint32 param);
-int dssetup_dissect_struct_DsRoleUpgradeStatus(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *parent_tree, guint8 *drep, int hf_index, guint32 param _U_);
+int dssetup_dissect_enum_DsPrevious(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 *param _U_);
+int dssetup_dissect_struct_DsRoleUpgradeStatus(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_);
 #define DS_ROLE_OP_IDLE (0)
 #define DS_ROLE_OP_ACTIVE (1)
 #define DS_ROLE_OP_NEEDS_REBOOT (2)
 extern const value_string dssetup_dssetup_DsRoleOp_vals[];
-int dssetup_dissect_enum_DsRoleOp(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep, int hf_index, guint32 param);
-int dssetup_dissect_struct_DsRoleOpStatus(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *parent_tree, guint8 *drep, int hf_index, guint32 param _U_);
+int dssetup_dissect_enum_DsRoleOp(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 *param _U_);
+int dssetup_dissect_struct_DsRoleOpStatus(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_);
 #define DS_ROLE_BASIC_INFORMATION (1)
 #define DS_ROLE_UPGRADE_STATUS (2)
 #define DS_ROLE_OP_STATUS (3)
 extern const value_string dssetup_dssetup_DsRoleInfoLevel_vals[];
-int dssetup_dissect_enum_DsRoleInfoLevel(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep, int hf_index, guint32 param);
+int dssetup_dissect_enum_DsRoleInfoLevel(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_, int hf_index _U_, guint32 *param _U_);
 #endif /* __PACKET_DCERPC_DSSETUP_H */
-- 
1.8.1.2