From d5bf977a820c716978f30c20b58aab75e944cd5f Mon Sep 17 00:00:00 2001
From: =?utf-8?q?G=C3=BCnther=20Deschner?= <gd@samba.org>
Date: Thu, 17 Jan 2008 09:49:10 +0100
Subject: [PATCH] Add samba3 [out,ref] pointer massage to samr&netlogon idl.

Guenther
---
 source/librpc/idl/netlogon.idl |  101 ++++++++++++++++++++--------------------
 source/librpc/idl/samr.idl     |   86 +++++++++++++++++----------------
 2 files changed, 94 insertions(+), 93 deletions(-)

diff --git a/source/librpc/idl/netlogon.idl b/source/librpc/idl/netlogon.idl
index dcbb647..c5d97c0 100644
--- a/source/librpc/idl/netlogon.idl
+++ b/source/librpc/idl/netlogon.idl
@@ -4,7 +4,7 @@
   who contributed!
 */
 
-import "lsa.idl", "samr.idl", "security.idl", "nbt.idl";
+import "lsa.idl", "samr.idl", "security.idl";
 
 #include "idl_types.h"
 
@@ -46,7 +46,7 @@ interface netlogon
 		[in]   [string,charset(UTF16)] uint16 *server_name,
 		[in]   [string,charset(UTF16)] uint16 account_name[],
 		[in]   [string,charset(UTF16)] uint16 workstation[],
-		[out]  netr_UasInfo *info
+		[out,ref]  netr_UasInfo *info
 		);
 
 
@@ -62,7 +62,7 @@ interface netlogon
 		[in] [string,charset(UTF16)] uint16 *server_name,
 		[in] [string,charset(UTF16)] uint16 account_name[],
 		[in] [string,charset(UTF16)] uint16 workstation[],
-		[out] netr_UasLogoffInfo info
+		[out,ref] netr_UasLogoffInfo *info
 		);
 
 
@@ -246,8 +246,8 @@ interface netlogon
 		[in]  uint16 logon_level,
 		[in]  [switch_is(logon_level)] netr_LogonLevel logon,
 		[in]  uint16 validation_level,
-		[out] [switch_is(validation_level)] netr_Validation validation,
-		[out] uint8 authoritative
+		[out,ref] [switch_is(validation_level)] netr_Validation *validation,
+		[out,ref] uint8 *authoritative
 		);
 
 
@@ -268,7 +268,7 @@ interface netlogon
 	/*****************/
 	/* Function 0x04 */
 
-	[public] NTSTATUS netr_ServerReqChallenge(
+	NTSTATUS netr_ServerReqChallenge(
 		[in,string,charset(UTF16)] uint16 *server_name,
 		[in,string,charset(UTF16)] uint16 computer_name[],
 		[in,out,ref] netr_Credential *credentials
@@ -299,7 +299,7 @@ interface netlogon
 		[in]  [string,charset(UTF16)] uint16 computer_name[],
 		[in]  netr_Authenticator credential,
 		[in]  samr_Password new_password,
-		[out] netr_Authenticator return_authenticator
+		[out,ref] netr_Authenticator *return_authenticator
 		);
 
 
@@ -680,11 +680,11 @@ interface netlogon
 		[in]      [string,charset(UTF16)] uint16 logon_server[],
 		[in]      [string,charset(UTF16)] uint16 computername[],
 		[in]      netr_Authenticator credential,
-		[in,out]  netr_Authenticator return_authenticator,
+		[in,out,ref]  netr_Authenticator *return_authenticator,
 		[in]      netr_SamDatabaseID database_id,
-		[in,out]  udlong sequence_num,
+		[in,out,ref]  udlong *sequence_num,
 		[in]      uint32 preferredmaximumlength,
-		[out]     netr_DELTA_ENUM_ARRAY *delta_enum_array
+		[out,ref]     netr_DELTA_ENUM_ARRAY *delta_enum_array
 		);
 
 
@@ -695,11 +695,11 @@ interface netlogon
 		[in]     [string,charset(UTF16)] uint16 logon_server[],
 		[in]     [string,charset(UTF16)] uint16 computername[],
 		[in]     netr_Authenticator credential,
-		[in,out] netr_Authenticator return_authenticator,
+		[in,out,ref] netr_Authenticator *return_authenticator,
 		[in]     netr_SamDatabaseID database_id,
-		[in,out] uint32 sync_context,
+		[in,out,ref] uint32 *sync_context,
 		[in]     uint32 preferredmaximumlength,
-		[out]    netr_DELTA_ENUM_ARRAY *delta_enum_array
+		[out,ref]    netr_DELTA_ENUM_ARRAY *delta_enum_array
 		);
 
 
@@ -722,15 +722,15 @@ interface netlogon
 		[in]     [string,charset(UTF16)] uint16 *logon_server,
 		[in]     [string,charset(UTF16)] uint16 computername[],
 		[in]     netr_Authenticator credential,
-		[in,out] netr_Authenticator return_authenticator,
+		[in,out,ref] netr_Authenticator *return_authenticator,
 		[in]     netr_UAS_INFO_0 uas,
 		[in]     uint32 count,
 		[in]     uint32 level,
 		[in]     uint32 buffersize,
-		[out,subcontext(4)] netr_AccountBuffer buffer,
-		[out]    uint32 count_returned,
-		[out]    uint32 total_entries,
-		[out]    netr_UAS_INFO_0 recordid
+		[out,ref,subcontext(4)] netr_AccountBuffer *buffer,
+		[out,ref]    uint32 *count_returned,
+		[out,ref]    uint32 *total_entries,
+		[out,ref]    netr_UAS_INFO_0 *recordid
 		);
 
 
@@ -741,25 +741,25 @@ interface netlogon
 		[in]      [string,charset(UTF16)] uint16 *logon_server,
 		[in]      [string,charset(UTF16)] uint16 computername[],
 		[in]      netr_Authenticator credential,
-		[in,out]  netr_Authenticator return_authenticator,
+		[in,out,ref]  netr_Authenticator *return_authenticator,
 		[in]      uint32 reference,
 		[in]      uint32 level,
 		[in]      uint32 buffersize,
-		[out,subcontext(4)] netr_AccountBuffer buffer,
-		[out]     uint32 count_returned,
-		[out]     uint32 total_entries,
-		[out]     uint32 next_reference,
-		[in,out]  netr_UAS_INFO_0 recordid
+		[out,ref,subcontext(4)] netr_AccountBuffer *buffer,
+		[out,ref]     uint32 *count_returned,
+		[out,ref]     uint32 *total_entries,
+		[out,ref]     uint32 *next_reference,
+		[in,out,ref]  netr_UAS_INFO_0 *recordid
 		);
 
 
 	/*****************/
 	/* Function 0x0B */
 
-	WERROR netr_GetDcName(
+	NTSTATUS netr_GetDcName(
 		[in]  [string,charset(UTF16)] uint16 logon_server[],
 		[in]  [string,charset(UTF16)] uint16 *domainname,
-		[out] [string,charset(UTF16)] uint16 *dcname
+		[out,ref] [string,charset(UTF16)] uint16 **dcname
 		);
 
 	/*****************/
@@ -805,7 +805,7 @@ interface netlogon
 		[in]   [string,charset(UTF16)] uint16 *logon_server,
 		[in]   netr_LogonControlCode function_code,
 		[in]   uint32 level,
-		[out,switch_is(level)]  netr_CONTROL_QUERY_INFORMATION info
+		[out,ref,switch_is(level)]  netr_CONTROL_QUERY_INFORMATION *info
 		);
 
 
@@ -815,7 +815,7 @@ interface netlogon
 	WERROR netr_GetAnyDCName(
 		[in]  [string,charset(UTF16)] uint16 *logon_server,
 		[in]  [string,charset(UTF16)] uint16 *domainname,
-		[out] [string,charset(UTF16)] uint16 *dcname
+		[out,ref] [string,charset(UTF16)] uint16 **dcname
 		);
 
 
@@ -834,7 +834,7 @@ interface netlogon
 		[in]    uint32 function_code,
 		[in]    uint32 level,
 		[in][switch_is(function_code)] netr_CONTROL_DATA_INFORMATION  data,
-		[out][switch_is(level)]        netr_CONTROL_QUERY_INFORMATION query
+		[out,ref][switch_is(level)]        netr_CONTROL_QUERY_INFORMATION *query
 		);
 
 
@@ -865,12 +865,12 @@ interface netlogon
 		[in]     [string,charset(UTF16)] uint16 logon_server[],
 		[in]     [string,charset(UTF16)] uint16 computername[],
 		[in]     netr_Authenticator credential,
-		[in,out] netr_Authenticator return_authenticator,
+		[in,out,ref] netr_Authenticator *return_authenticator,
 		[in]     netr_SamDatabaseID database_id,
 		[in]     uint16 restart_state,
-		[in,out] uint32 sync_context,
+		[in,out,ref] uint32 *sync_context,
 		[in]     uint32 preferredmaximumlength,
-		[out]    netr_DELTA_ENUM_ARRAY *delta_enum_array
+		[out,ref]    netr_DELTA_ENUM_ARRAY *delta_enum_array
 		);
 
 
@@ -883,10 +883,10 @@ interface netlogon
 		[in]     [string,charset(UTF16)] uint16 logon_server[],
 		[in]     [string,charset(UTF16)] uint16 computername[],
 		[in]     netr_Authenticator credential,
-		[in,out] netr_Authenticator return_authenticator,
+		[in,out,ref] netr_Authenticator *return_authenticator,
 		[in][size_is(change_log_entry_size)] uint8 *change_log_entry,
 		[in]     uint32 change_log_entry_size,
-		[out]    netr_DELTA_ENUM_ARRAY *delta_enum_array
+		[out,ref]    netr_DELTA_ENUM_ARRAY *delta_enum_array
 		);
 
 
@@ -898,7 +898,7 @@ interface netlogon
 		[in]   uint32 function_code,
 		[in]   uint32 level,
 		[in][switch_is(function_code)] netr_CONTROL_DATA_INFORMATION  data,
-		[out][switch_is(level)]        netr_CONTROL_QUERY_INFORMATION query
+		[out,ref][switch_is(level)]	netr_CONTROL_QUERY_INFORMATION *query
 		);
 
 	/*****************/
@@ -978,7 +978,7 @@ interface netlogon
 		[in] GUID *domain_guid,
 		[in] GUID *site_guid,
 		[in] netr_DsRGetDCName_flags flags,
-		[out] netr_DsRGetDCNameInfo *info
+		[out,ref] netr_DsRGetDCNameInfo *info
 		);
 
 	/*****************/
@@ -1003,7 +1003,7 @@ interface netlogon
 
 	/****************/
 	/* Function 0x1a */
-	[public] NTSTATUS netr_ServerAuthenticate3(
+	NTSTATUS netr_ServerAuthenticate3(
 		[in]         [string,charset(UTF16)] uint16 *server_name,
 		[in]         [string,charset(UTF16)] uint16 account_name[],
 		[in]         netr_SchannelType secure_channel_type,
@@ -1022,14 +1022,14 @@ interface netlogon
 		[in] GUID *domain_guid,
 		[in] [string,charset(UTF16)] uint16 *site_name,
 		[in] netr_DsRGetDCName_flags flags,
-		[out] netr_DsRGetDCNameInfo *info
+		[out,ref] netr_DsRGetDCNameInfo *info
 		);
 
 	/****************/
 	/* Function 0x1c */
 	WERROR netr_DsRGetSiteName(
 		[in] [string,charset(UTF16)] uint16 *computer_name,
-		[out] [string,charset(UTF16)] uint16 *site
+		[out,ref] [string,charset(UTF16)] uint16 **site
 		);
 
 	/****************/
@@ -1090,7 +1090,7 @@ interface netlogon
 		[in,out,ref] netr_Authenticator *return_authenticator,
 		[in]	     uint32 level,
 		[in,switch_is(level)] netr_DomainQuery query,
-		[out,switch_is(level)] netr_DomainInfo info
+		[out,ref,switch_is(level)] netr_DomainInfo *info
 		);
 
 	typedef [flag(NDR_PAHEX)] struct {
@@ -1107,7 +1107,7 @@ interface netlogon
 		[in]  [string,charset(UTF16)] uint16 computer_name[],
 		[in]  netr_Authenticator credential,
 		[in]  netr_CryptPassword new_password,
-		[out] netr_Authenticator return_authenticator
+		[out,ref] netr_Authenticator *return_authenticator
 		);
 
 	/****************/
@@ -1155,7 +1155,7 @@ interface netlogon
 		[in] GUID *domain_guid,
 		[in] [string,charset(UTF16)] uint16 *site_name,
 		[in] netr_DsRGetDCName_flags flags,
-		[out] netr_DsRGetDCNameInfo *info
+		[out,ref] netr_DsRGetDCNameInfo *info
 		);
 
 	/****************/
@@ -1236,7 +1236,7 @@ interface netlogon
 
 	WERROR netr_DsrGetDcSiteCoverageW(
 		[in] [string,charset(UTF16)] uint16 *server_name,
-		[out] DcSitesCtr *ctr
+		[out,ref] DcSitesCtr *ctr
 		);
 
 	/****************/
@@ -1247,9 +1247,9 @@ interface netlogon
 		[in]  uint16 logon_level,
 		[in]  [switch_is(logon_level)] netr_LogonLevel logon,
 		[in]  uint16 validation_level,
-		[out] [switch_is(validation_level)] netr_Validation validation,
-		[out] uint8 authoritative,
-		[in,out] uint32 flags
+		[out,ref] [switch_is(validation_level)] netr_Validation *validation,
+		[out,ref] uint8 *authoritative,
+		[in,out,ref] uint32 *flags
 		);
 
 	/****************/
@@ -1258,8 +1258,7 @@ interface netlogon
 	WERROR netr_DsrEnumerateDomainTrusts(
 		[in]                 [string,charset(UTF16)] uint16           *server_name,
 		[in]                 netr_TrustFlags  trust_flags,
-		[out]                uint32           count,
-		[out,size_is(count)] netr_DomainTrust *trusts
+		[out,ref]           netr_DomainTrustList **trusts
 		);
 
 
@@ -1315,9 +1314,9 @@ interface netlogon
 		[in]  uint16 logon_level,
 		[in]  [switch_is(logon_level)] netr_LogonLevel logon,
 		[in]  uint16 validation_level,
-		[out] [switch_is(validation_level)] netr_Validation validation,
-		[out] uint8 authoritative,
-		[in,out] uint32 flags
+		[out,ref] [switch_is(validation_level)] netr_Validation *validation,
+		[out,ref] uint8 *authoritative,
+		[in,out,ref] uint32 *flags
 		);
 
 	/****************/
diff --git a/source/librpc/idl/samr.idl b/source/librpc/idl/samr.idl
index b6d2b9f..baf61c6 100644
--- a/source/librpc/idl/samr.idl
+++ b/source/librpc/idl/samr.idl
@@ -125,7 +125,7 @@ import "misc.idl", "lsa.idl", "security.idl";
 	NTSTATUS samr_QuerySecurity (
 		[in,ref]          policy_handle *handle,
 		[in]              security_secinfo sec_info,
-		[out]             sec_desc_buf *sdbuf
+		[out,ref]         sec_desc_buf *sdbuf
 		);
 
 	/******************/
@@ -143,7 +143,7 @@ import "misc.idl", "lsa.idl", "security.idl";
 	NTSTATUS samr_LookupDomain (
 		[in,ref]  policy_handle *connect_handle,		
 		[in,ref]  lsa_String *domain_name,
-		[out]     dom_sid2 *sid
+		[out,ref] dom_sid2 *sid
 		);
 
 
@@ -164,8 +164,8 @@ import "misc.idl", "lsa.idl", "security.idl";
 		[in,ref]      policy_handle *connect_handle,
 		[in,out,ref]  uint32 *resume_handle,
 		[in]          uint32 buf_size,
-		[out]         samr_SamArray *sam,
-		[out]         uint32 num_entries
+		[out,ref]     samr_SamArray *sam,
+		[out,ref]     uint32 *num_entries
 		);
 
 
@@ -288,7 +288,7 @@ import "misc.idl", "lsa.idl", "security.idl";
 	NTSTATUS samr_QueryDomainInfo(
 		[in,ref]      policy_handle *domain_handle,
 		[in]          uint16 level,
-		[out,switch_is(level)] samr_DomainInfo *info
+		[out,ref,switch_is(level)] samr_DomainInfo *info
 		);
 
 	/************************/
@@ -321,8 +321,8 @@ import "misc.idl", "lsa.idl", "security.idl";
 		[in,ref]      policy_handle *domain_handle,
 		[in,out,ref]  uint32 *resume_handle,
 		[in]          uint32 max_size,
-		[out]         samr_SamArray *sam,
-		[out]         uint32 num_entries
+		[out,ref]     samr_SamArray *sam,
+		[out,ref]     uint32 *num_entries
 		);
 
 	/************************/
@@ -349,8 +349,8 @@ import "misc.idl", "lsa.idl", "security.idl";
 		[in,out,ref]  uint32 *resume_handle,
 		[in]          samr_AcctFlags acct_flags,
 		[in]          uint32 max_size,
-		[out]         samr_SamArray *sam,
-		[out]         uint32 num_entries
+		[out,ref]     samr_SamArray *sam,
+		[out,ref]     uint32 *num_entries
 		);
 
 	/************************/
@@ -369,8 +369,8 @@ import "misc.idl", "lsa.idl", "security.idl";
 		[in,ref]      policy_handle *domain_handle,
 		[in,out,ref]  uint32 *resume_handle,
 		[in]          samr_AcctFlags acct_flags,
-		[out]         samr_SamArray *sam,
-		[out]         uint32 num_entries
+		[out,ref]     samr_SamArray *sam,
+		[out,ref]     uint32 *num_entries
 		);
 
 	/************************/
@@ -394,8 +394,8 @@ import "misc.idl", "lsa.idl", "security.idl";
 		[in,ref]      policy_handle *domain_handle,
 		[in,range(0,1000)] uint32 num_names,
 		[in,size_is(1000),length_is(num_names)] lsa_String names[],
-		[out]         samr_Ids rids,
-		[out]         samr_Ids types
+		[out,ref]     samr_Ids *rids,
+		[out,ref]     samr_Ids *types
 		);
 
 
@@ -405,8 +405,8 @@ import "misc.idl", "lsa.idl", "security.idl";
 		[in,ref]      policy_handle *domain_handle,
 		[in,range(0,1000)] uint32 num_rids,
 		[in,size_is(1000),length_is(num_rids)] uint32 rids[],
-		[out]         lsa_Strings names,
-		[out]         samr_Ids types
+		[out,ref]     lsa_Strings *names,
+		[out,ref]     samr_Ids *types
 		);
 
 	/************************/
@@ -466,7 +466,7 @@ import "misc.idl", "lsa.idl", "security.idl";
 	NTSTATUS samr_QueryGroupInfo(
 		[in,ref]                  policy_handle *group_handle,
 		[in]                      samr_GroupInfoEnum level,
-		[out,switch_is(level)]    samr_GroupInfo *info
+		[out,ref,switch_is(level)] samr_GroupInfo *info
 		);
 
 	/************************/
@@ -509,7 +509,7 @@ import "misc.idl", "lsa.idl", "security.idl";
 
 	NTSTATUS samr_QueryGroupMember(
 		[in,ref]  policy_handle *group_handle,
-		[out]     samr_RidTypeArray *rids
+		[out,ref] samr_RidTypeArray *rids
 		);
 
 
@@ -563,7 +563,7 @@ import "misc.idl", "lsa.idl", "security.idl";
 	NTSTATUS samr_QueryAliasInfo(
 		[in,ref]                  policy_handle  *alias_handle,
 		[in]                      samr_AliasInfoEnum      level,
-		[out,switch_is(level)]    samr_AliasInfo *info
+		[out,ref,switch_is(level)] samr_AliasInfo *info
 		);
 
 	/************************/
@@ -862,7 +862,7 @@ import "misc.idl", "lsa.idl", "security.idl";
 	[public] NTSTATUS samr_QueryUserInfo(
 		[in,ref]                  policy_handle *user_handle,
 		[in]                      uint16 level,
-		[out,switch_is(level)]    samr_UserInfo *info
+		[out,ref,switch_is(level)] samr_UserInfo *info
 		);
 
 
@@ -913,7 +913,7 @@ import "misc.idl", "lsa.idl", "security.idl";
 
 	NTSTATUS samr_GetGroupsForUser(
 		[in,ref]   policy_handle *user_handle,
-		[out]      samr_RidWithAttributeArray  *rids
+		[out,ref]  samr_RidWithAttributeArray  *rids
 		);
 
 	/************************/
@@ -983,9 +983,9 @@ import "misc.idl", "lsa.idl", "security.idl";
 		[in]        uint32 start_idx,
 		[in]        uint32 max_entries,
 		[in]        uint32 buf_size,
-		[out]       uint32 total_size,
-		[out]       uint32 returned_size,
-		[out,switch_is(level)] samr_DispInfo info
+		[out,ref]   uint32 *total_size,
+		[out,ref]   uint32 *returned_size,
+		[out,ref,switch_is(level)] samr_DispInfo *info
 		);
 
 
@@ -1005,7 +1005,7 @@ import "misc.idl", "lsa.idl", "security.idl";
 		[in,ref]    policy_handle *domain_handle,
 		[in]        uint16 level,
 		[in]        lsa_String name,
-		[out]       uint32 idx
+		[out,ref]   uint32 *idx
 		);
 
 
@@ -1042,7 +1042,7 @@ import "misc.idl", "lsa.idl", "security.idl";
 
 	[public] NTSTATUS samr_GetUserPwInfo(
 		[in,ref]    policy_handle *user_handle,
-		[out]       samr_PwInfo info
+		[out,ref]   samr_PwInfo *info
 		);
 
 	/************************/
@@ -1061,7 +1061,7 @@ import "misc.idl", "lsa.idl", "security.idl";
 	NTSTATUS samr_QueryDomainInfo2(
 		[in,ref]      policy_handle *domain_handle,
 		[in]          uint16 level,
-		[out,switch_is(level)] samr_DomainInfo *info
+		[out,ref,switch_is(level)] samr_DomainInfo *info
 		);
 
 	/************************/
@@ -1073,7 +1073,7 @@ import "misc.idl", "lsa.idl", "security.idl";
 	NTSTATUS samr_QueryUserInfo2(
 		[in,ref]                  policy_handle *user_handle,
 		[in]                      uint16 level,
-		[out,switch_is(level)]    samr_UserInfo *info
+		[out,ref,switch_is(level)]    samr_UserInfo *info
 		);
 
 	/************************/
@@ -1088,9 +1088,9 @@ import "misc.idl", "lsa.idl", "security.idl";
 		[in]        uint32 start_idx,
 		[in]        uint32 max_entries,
 		[in]        uint32 buf_size,
-		[out]       uint32 total_size,
-		[out]       uint32 returned_size,
-		[out,switch_is(level)] samr_DispInfo info
+		[out,ref]   uint32 *total_size,
+		[out,ref]   uint32 *returned_size,
+		[out,ref,switch_is(level)] samr_DispInfo *info
 		);
 
 	/************************/
@@ -1103,7 +1103,7 @@ import "misc.idl", "lsa.idl", "security.idl";
 		[in,ref]    policy_handle *domain_handle,
 		[in]        uint16 level,
 		[in]        lsa_String name,
-		[out]       uint32 idx
+		[out,ref]   uint32 *idx
 		);
 
 
@@ -1132,9 +1132,9 @@ import "misc.idl", "lsa.idl", "security.idl";
 		[in]        uint32 start_idx,
 		[in]        uint32 max_entries,
 		[in]        uint32 buf_size,
-		[out]       uint32 total_size,
-		[out]       uint32 returned_size,
-		[out,switch_is(level)] samr_DispInfo info
+		[out,ref]   uint32 *total_size,
+		[out,ref]   uint32 *returned_size,
+		[out,ref,switch_is(level)] samr_DispInfo *info
 		);
 
 	/************************/
@@ -1177,7 +1177,7 @@ import "misc.idl", "lsa.idl", "security.idl";
 	/* Function    0x38     */
 	NTSTATUS samr_GetDomPwInfo(
 		[in]        lsa_String *domain_name,
-		[out]       samr_PwInfo info
+		[out,ref]   samr_PwInfo *info
 		);
 
 	/************************/
@@ -1215,7 +1215,7 @@ import "misc.idl", "lsa.idl", "security.idl";
 	/* Function    0x3c     */
 	NTSTATUS samr_GetBootKeyInformation(
 		[in,ref]   policy_handle *domain_handle,
-		[out]      uint32 unknown
+		[out,ref]  uint32 *unknown
 		);
 
 	/************************/
@@ -1257,8 +1257,8 @@ import "misc.idl", "lsa.idl", "security.idl";
 		[in]              samr_CryptPassword *lm_password,
 		[in]              samr_Password *lm_verifier,
 		[in]              samr_CryptPassword *password3,
-		[out]             samr_DomInfo1 *dominfo,
-		[out]             samr_ChangeReject *reject
+		[out,ref]         samr_DomInfo1 *dominfo,
+		[out,ref]         samr_ChangeReject *reject
 		);
 
 	/************************/
@@ -1276,8 +1276,10 @@ import "misc.idl", "lsa.idl", "security.idl";
 	[public] NTSTATUS samr_Connect5(
 		[in,string,charset(UTF16)] uint16 *system_name,
 		[in]       samr_ConnectAccessMask  access_mask,
-		[in,out]   uint32             level,
-		[in,out,switch_is(level),ref] samr_ConnectInfo *info,
+		[in]       uint32             level_in,
+		[in,ref,switch_is(level_in)] samr_ConnectInfo *info_in,
+		[out,ref]  uint32             *level_out,
+		[out,ref,switch_is(*level_out)] samr_ConnectInfo *info_out,
 		[out,ref]  policy_handle      *connect_handle
 		);
 
@@ -1286,7 +1288,7 @@ import "misc.idl", "lsa.idl", "security.idl";
 	NTSTATUS samr_RidToSid(
 		[in,ref]    policy_handle *domain_handle,
 		[in]        uint32        rid,
-		[out]       dom_sid2      *sid
+		[out,ref]   dom_sid2      *sid
 		);
 
 
@@ -1401,6 +1403,6 @@ import "misc.idl", "lsa.idl", "security.idl";
 	NTSTATUS samr_ValidatePassword(
 		[in] samr_ValidatePasswordLevel level,
 		[in,switch_is(level)] samr_ValidatePasswordReq req,
-		[out,switch_is(level)] samr_ValidatePasswordRep *rep
+		[out,ref,switch_is(level)] samr_ValidatePasswordRep *rep
 		);
 }
-- 
1.5.3.7

