Add 'net rpc group add'. For this parse_samr.c had to be changed: The
[samba.git] / source / include / rpc_samr.h
index f31beaaf84b2065f0397e5f614131e0e6074df34..111e62c3553315899438394a71626d123b6cac89 100644 (file)
@@ -1,10 +1,12 @@
 /* 
-   Unix SMB/Netbios implementation.
-   Version 1.9.
+   Unix SMB/CIFS implementation.
    SMB parameters and setup
    Copyright (C) Andrew Tridgell              1992-2000
    Copyright (C) Luke Kenneth Casson Leighton 1996-2000
    Copyright (C) Paul Ashton                  1997-2000
+   Copyright (C) Jean François Micouleau      1998-2001
+   Copyright (C) Jim McDonough <jmcd@us.ibm.com> 2002
+   
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
 #ifndef _RPC_SAMR_H /* _RPC_SAMR_H */
 #define _RPC_SAMR_H 
 
-
 #include "rpc_misc.h"
 
-
 /*******************************************************************
  the following information comes from a QuickView on samsrv.dll,
  and gives an idea of exactly what is needed:
@@ -79,7 +79,7 @@ SamrTestPrivateFunctionsUser
 
 #define SAMR_CONNECT_ANON      0x00
 #define SAMR_CLOSE_HND         0x01
-#define SAMR_UNKNOWN_2         0x02 /* set sec object? */
+#define SAMR_SET_SEC_OBJECT    0x02
 #define SAMR_QUERY_SEC_OBJECT  0x03
 
 #define SAMR_UNKNOWN_4         0x04 /* profile info? */
@@ -87,6 +87,7 @@ SamrTestPrivateFunctionsUser
 #define SAMR_ENUM_DOMAINS      0x06
 #define SAMR_OPEN_DOMAIN       0x07
 #define SAMR_QUERY_DOMAIN_INFO 0x08
+#define SAMR_SET_DOMAIN_INFO   0x09
 
 #define SAMR_CREATE_DOM_GROUP  0x0a
 #define SAMR_ENUM_DOM_GROUPS   0x0b
@@ -126,8 +127,8 @@ SamrTestPrivateFunctionsUser
 #define SAMR_UNKNOWN_2a        0x2a
 #define SAMR_UNKNOWN_2b        0x2b
 #define SAMR_GET_USRDOM_PWINFO 0x2c
-#define SAMR_UNKNOWN_2D        0x2d
-#define SAMR_UNKNOWN_2e        0x2e
+#define SAMR_REMOVE_SID_FOREIGN_DOMAIN        0x2d
+#define SAMR_UNKNOWN_2E        0x2e /* looks like an alias for SAMR_QUERY_DOMAIN_INFO */
 #define SAMR_UNKNOWN_2f        0x2f
 #define SAMR_QUERY_DISPINFO3   0x30 /* Alias for SAMR_QUERY_DISPINFO
                                       with info level 3 */
@@ -143,8 +144,7 @@ SamrTestPrivateFunctionsUser
 #define SAMR_GET_DOM_PWINFO    0x38
 #define SAMR_CONNECT           0x39
 #define SAMR_SET_USERINFO      0x3A
-
-
+#define SAMR_CONNECT4          0x3E
 
 typedef struct logon_hours_info
 {
@@ -183,15 +183,21 @@ typedef struct sam_user_info_23
 
        uint32 acb_info; /* account info (ACB_xxxx bit-mask) */
 
-       uint32 unknown_3; /* 0x09f8 27fa */
+       uint32 fields_present; /* 0x09f8 27fa */
 
        uint16 logon_divs; /* 0x0000 00a8 which is 168 which is num hrs in a week */
        /* uint8 pad[2] */
        uint32 ptr_logon_hrs; /* pointer to logon hours */
 
-       uint8 padding1[8];
+       /* Was unknown_5. */
+       uint16 bad_password_count;
+       uint16 logon_count;
 
-       uint32 unknown_5;     /* 0x0001 0000 */
+       uint8 padding1[6];
+               
+       uint8 passmustchange; /* 0x00 must change = 0x01 */
+
+       uint8 padding2;
 
        uint8 pass[516];
 
@@ -217,6 +223,7 @@ typedef struct sam_user_info_23
 typedef struct sam_user_info_24
 {
        uint8 pass[516];
+       uint16 pw_len;
 } SAM_USER_INFO_24;
 
 /*
@@ -301,15 +308,22 @@ typedef struct sam_user_info_21
 
        uint32 acb_info; /* account info (ACB_xxxx bit-mask) */
 
-       uint32 unknown_3; /* 0x00ff ffff */
+       /* Was unknown_3 */
+       uint32 fields_present; /* 0x00ff ffff */
 
        uint16 logon_divs; /* 0x0000 00a8 which is 168 which is num hrs in a week */
        /* uint8 pad[2] */
        uint32 ptr_logon_hrs; /* unknown pointer */
 
-       uint32 unknown_5;     /* 0x0002 0000 */
+       /* Was unknown_5. */
+       uint16 bad_password_count;
+       uint16 logon_count;
+
+       uint8 padding1[6];
+               
+       uint8 passmustchange; /* 0x00 must change = 0x01 */
 
-       uint8 padding1[8];
+       uint8 padding2;
 
        UNISTR2 uni_user_name;    /* username unicode string */
        UNISTR2 uni_full_name;    /* user's full name unicode string */
@@ -329,6 +343,8 @@ typedef struct sam_user_info_21
 
 } SAM_USER_INFO_21;
 
+#define PASS_MUST_CHANGE_AT_NEXT_LOGON 0x01
+#define PASS_DONT_CHANGE_AT_NEXT_LOGON 0x00
 
 /* SAM_USER_INFO_20 */
 typedef struct sam_user_info_20
@@ -410,7 +426,7 @@ typedef struct q_samr_close_hnd_info
 typedef struct r_samr_close_hnd_info
 {
        POLICY_HND pol;       /* policy handle */
-       uint32 status;         /* return status */
+       NTSTATUS status;         /* return status */
 
 } SAMR_R_CLOSE_HND;
 
@@ -437,10 +453,30 @@ typedef struct r_samr_usrdom_pwinfo_info
        uint16 unknown_0; /* 0000 */
        uint16 unknown_1; /* 0x0016 or 0x0015 */
        uint32 unknown_2; /* 0x0000 0000 */
-       uint32 status; 
+       NTSTATUS status; 
 
 } SAMR_R_GET_USRDOM_PWINFO;
 
+/****************************************************************************
+SAMR_Q_SET_SEC_OBJ - info level 4.
+*****************************************************************************/
+
+/* SAMR_Q_SET_SEC_OBJ - */
+typedef struct q_samr_set_sec_obj_info
+{
+       POLICY_HND pol;          /* policy handle */
+       uint32 sec_info;         /* xxxx_SECURITY_INFORMATION 0x0000 0004 */
+       SEC_DESC_BUF *buf;
+
+} SAMR_Q_SET_SEC_OBJ;
+
+/* SAMR_R_SET_SEC_OBJ - */
+typedef struct r_samr_set_sec_obj_info
+{
+       NTSTATUS status;         /* return status */
+
+} SAMR_R_SET_SEC_OBJ;
+
 
 /****************************************************************************
 SAMR_Q_QUERY_SEC_OBJ - info level 4.  returns SIDs.
@@ -460,7 +496,7 @@ typedef struct r_samr_query_sec_obj_info
        uint32 ptr;
        SEC_DESC_BUF *buf;
 
-       uint32 status;         /* return status */
+       NTSTATUS status;         /* return status */
 
 } SAMR_R_QUERY_SEC_OBJ;
 
@@ -479,8 +515,10 @@ typedef struct q_samr_query_domain_info
 
 typedef struct sam_unknown_info_3_info
 {
-       uint32 unknown_0; /* 0x0000 0000 */
-       uint32 unknown_1; /* 0x8000 0000 */
+       NTTIME logout;  
+       /* 0x8000 0000 */ /* DON'T forcibly disconnect remote users from server when logon hours expire*/
+
+       /* 0x0000 0000 */ /* forcibly disconnect remote users from server when logon hours expire*/
 
 } SAM_UNK_INFO_3;
 
@@ -501,12 +539,9 @@ typedef struct sam_unknown_info_7_info
 
 typedef struct sam_unknown_info_12_inf
 {
-       uint32 unknown_0; /* 0xcf1d cc00 */
-       uint32 unknown_1; /* 0xffff fffb */
-       uint32 unknown_2; /* 0xcf1d cc00 */
-       uint32 unknown_3; /* 0xffff fffb */
-       
-       uint32 unknown_4; /* 0x8a88 0000 */
+       NTTIME duration;
+       NTTIME reset_count;
+       uint16 bad_attempt_lockout;
 
 } SAM_UNK_INFO_12;
 
@@ -550,9 +585,11 @@ typedef struct sam_unknown_info_2_inf
 
 typedef struct sam_unknown_info_1_inf
 {
-       uint8 padding[12]; /* 12 bytes zeros */
-       uint32 unknown_1; /* 0x8000 0000 */
-       uint32 unknown_2; /* 0x0000 0000 */
+       uint16 min_length_password;
+       uint16 password_history;
+       uint32 flag;
+       NTTIME expire;
+       NTTIME min_passwordage;
 
 } SAM_UNK_INFO_1;
 
@@ -582,7 +619,7 @@ typedef struct r_samr_query_domain_info
 
        SAM_UNK_CTR *ctr;
 
-       uint32 status;         /* return status */
+       NTSTATUS status;         /* return status */
 
 } SAMR_R_QUERY_DOMAIN_INFO;
 
@@ -604,7 +641,7 @@ typedef struct r_samr_lookup_domain_info
        uint32   ptr_sid;
        DOM_SID2 dom_sid;
 
-       uint32 status;
+       NTSTATUS status;
 
 } SAMR_R_LOOKUP_DOMAIN;
 
@@ -630,11 +667,14 @@ typedef struct q_samr_open_domain_info
 typedef struct r_samr_open_domain_info
 {
        POLICY_HND domain_pol; /* policy handle associated with the SID */
-       uint32 status;         /* return status */
+       NTSTATUS status;         /* return status */
 
 } SAMR_R_OPEN_DOMAIN;
 
-#define MAX_SAM_ENTRIES 50
+#define MAX_SAM_ENTRIES_W2K 0x400
+#define MAX_SAM_ENTRIES_W95 50
+/* The following should be the greater of the preceeding two. */
+#define MAX_SAM_ENTRIES MAX_SAM_ENTRIES_W2K
 
 typedef struct samr_entry_info
 {
@@ -670,7 +710,7 @@ typedef struct r_samr_enum_domains_info
 
        uint32 num_entries4;
 
-       uint32 status;
+       NTSTATUS status;
 
 } SAMR_R_ENUM_DOMAINS;
 
@@ -704,7 +744,7 @@ typedef struct r_samr_enum_dom_users_info
 
        uint32 num_entries4;
 
-       uint32 status;
+       NTSTATUS status;
 
 } SAMR_R_ENUM_DOM_USERS;
 
@@ -738,7 +778,7 @@ typedef struct r_samr_enum_dom_groups_info
 
        uint32 num_entries4;
 
-       uint32 status;
+       NTSTATUS status;
 
 } SAMR_R_ENUM_DOM_GROUPS;
 
@@ -772,7 +812,7 @@ typedef struct r_samr_enum_dom_aliases_info
 
        uint32 num_entries4;
 
-       uint32 status;
+       NTSTATUS status;
 
 } SAMR_R_ENUM_DOM_ALIASES;
 
@@ -785,7 +825,6 @@ typedef struct samr_entry_info1
 
        uint32 rid_user;
        uint16 acb_info;
-       uint16 pad;
 
        UNIHDR hdr_acct_name;
        UNIHDR hdr_user_name;
@@ -817,7 +856,6 @@ typedef struct samr_entry_info2
 
        uint32 rid_user;
        uint16 acb_info;
-       uint16 pad;
 
        UNIHDR hdr_srv_name;
        UNIHDR hdr_srv_desc;
@@ -963,7 +1001,7 @@ typedef struct r_samr_query_dispinfo_info
 
        SAM_DISPINFO_CTR *ctr;
 
-       uint32 status;
+       NTSTATUS status;
 
 } SAMR_R_QUERY_DISPINFO;
 
@@ -980,7 +1018,7 @@ typedef struct q_samr_delete_dom_group_info
 typedef struct r_samr_delete_dom_group_info
 {
        POLICY_HND pol;       /* policy handle */
-       uint32 status;        /* return status */
+       NTSTATUS status;        /* return status */
 
 } SAMR_R_DELETE_DOM_GROUP;
 
@@ -1003,7 +1041,7 @@ typedef struct r_samr_create_dom_group_info
        POLICY_HND pol;        /* policy handle */
 
        uint32 rid;    
-       uint32 status;    
+       NTSTATUS status;    
 
 } SAMR_R_CREATE_DOM_GROUP;
 
@@ -1030,8 +1068,15 @@ typedef struct samr_group_info1
 
 } GROUP_INFO1;
 
+typedef struct samr_group_info3
+{
+       uint32 unknown_1; /* 0x0000 0003 - number of group members? */
+
+} GROUP_INFO3;
+
 typedef struct samr_group_info4
 {
+       uint16 level;
        UNIHDR hdr_acct_desc;
        UNISTR2 uni_acct_desc;
 
@@ -1041,12 +1086,12 @@ typedef struct samr_group_info4
 typedef struct group_info_ctr
 {
        uint16 switch_value1;
-       uint16 switch_value2;
 
        union
        {
-               GROUP_INFO4 info4;
                GROUP_INFO1 info1;
+               GROUP_INFO3 info3;
+               GROUP_INFO4 info4;
 
        } group;
 
@@ -1058,7 +1103,7 @@ typedef struct r_samr_query_groupinfo_info
        uint32 ptr;        
        GROUP_INFO_CTR *ctr;
 
-       uint32 status;
+       NTSTATUS status;
 
 } SAMR_R_QUERY_GROUPINFO;
 
@@ -1074,7 +1119,7 @@ typedef struct q_samr_set_group_info
 /* SAMR_R_SET_GROUPINFO - SAM Group Info */
 typedef struct r_samr_set_group_info
 {
-       uint32 status;
+       NTSTATUS status;
 
 } SAMR_R_SET_GROUPINFO;
 
@@ -1091,7 +1136,7 @@ typedef struct q_samr_delete_dom_alias_info
 typedef struct r_samr_delete_dom_alias_info
 {
        POLICY_HND pol;       /* policy handle */
-       uint32 status;        /* return status */
+       NTSTATUS status;        /* return status */
 
 } SAMR_R_DELETE_DOM_ALIAS;
 
@@ -1114,7 +1159,7 @@ typedef struct r_samr_create_dom_alias_info
        POLICY_HND alias_pol;        /* policy handle */
 
        uint32 rid;    
-       uint32 status;    
+       NTSTATUS status;    
 
 } SAMR_R_CREATE_DOM_ALIAS;
 
@@ -1127,6 +1172,16 @@ typedef struct q_samr_query_alias_info
 
 } SAMR_Q_QUERY_ALIASINFO;
 
+typedef struct samr_alias_info1
+{
+       UNIHDR hdr_acct_name;
+       UNIHDR hdr_acct_desc;
+       uint32 num_member;
+       UNISTR2 uni_acct_name;
+       UNISTR2 uni_acct_desc;
+
+} ALIAS_INFO1;
+
 typedef struct samr_alias_info3
 {
        UNIHDR hdr_acct_desc;
@@ -1142,6 +1197,7 @@ typedef struct alias_info_ctr
 
        union
        {
+               ALIAS_INFO1 info1;
                ALIAS_INFO3 info3;
 
        } alias;
@@ -1154,7 +1210,7 @@ typedef struct r_samr_query_aliasinfo_info
        uint32 ptr;        
        ALIAS_INFO_CTR ctr;
 
-       uint32 status;
+       NTSTATUS status;
 
 } SAMR_R_QUERY_ALIASINFO;
 
@@ -1170,7 +1226,7 @@ typedef struct q_samr_set_alias_info
 /* SAMR_R_SET_ALIASINFO - SAM alias info */
 typedef struct r_samr_set_aliasinfo_info
 {
-       uint32 status;
+       NTSTATUS status;
 
 } SAMR_R_SET_ALIASINFO;
 
@@ -1192,7 +1248,7 @@ typedef struct r_samr_query_usergroup_info
 
        DOM_GID *gid; /* group info */
 
-       uint32 status;         /* return status */
+       NTSTATUS status;         /* return status */
 
 } SAMR_R_QUERY_USERGROUPS;
 
@@ -1231,7 +1287,7 @@ typedef struct q_samr_set_user_info2
 /* SAMR_R_SET_USERINFO2 - set sam info */
 typedef struct r_samr_set_user_info2
 {
-       uint32 status;         /* return status */
+       NTSTATUS status;         /* return status */
 
 } SAMR_R_SET_USERINFO2;
 
@@ -1247,7 +1303,7 @@ typedef struct q_samr_set_user_info
 /* SAMR_R_SET_USERINFO - set sam info */
 typedef struct r_samr_set_user_info
 {
-       uint32 status;         /* return status */
+       NTSTATUS status;         /* return status */
 
 } SAMR_R_SET_USERINFO;
 
@@ -1266,7 +1322,7 @@ typedef struct r_samr_query_user_info
        uint32 ptr;            /* pointer */
        SAM_USERINFO_CTR *ctr;
 
-       uint32 status;         /* return status */
+       NTSTATUS status;         /* return status */
 
 } SAMR_R_QUERY_USERINFO;
 
@@ -1302,7 +1358,7 @@ typedef struct r_samr_query_useraliases_info
        uint32 num_entries2; 
        uint32 *rid; /* domain RIDs being looked up */
 
-       uint32 status; /* return code */
+       NTSTATUS status; /* return code */
 
 } SAMR_R_QUERY_USERALIASES;
 
@@ -1341,7 +1397,7 @@ typedef struct r_samr_lookup_names_info
 
        uint32 *types; /* SID_ENUM type */
 
-       uint32 status; /* return code */
+       NTSTATUS status; /* return code */
 
 } SAMR_R_LOOKUP_NAMES;
 
@@ -1386,7 +1442,7 @@ typedef struct r_samr_lookup_rids_info
 
        uint32 *type; /* SID_ENUM type */
 
-       uint32 status;
+       NTSTATUS status;
 
 } SAMR_R_LOOKUP_RIDS;
 
@@ -1405,7 +1461,7 @@ typedef struct q_samr_open_user_info
 typedef struct r_samr_open_user_info
 {
        POLICY_HND user_pol;       /* policy handle associated with unknown id */
-       uint32 status;         /* return status */
+       NTSTATUS status;         /* return status */
 
 } SAMR_R_OPEN_USER;
 
@@ -1429,9 +1485,9 @@ typedef struct r_samr_create_user_info
 {
        POLICY_HND user_pol;       /* policy handle associated with user */
 
-       uint32 unknown_0;     /* 0x0007 03ff */
+       uint32 access_granted;
        uint32 user_rid;      /* user RID */
-       uint32 status;         /* return status */
+       NTSTATUS status;         /* return status */
 
 } SAMR_R_CREATE_USER;
 
@@ -1448,7 +1504,7 @@ typedef struct q_samr_delete_dom_user_info
 typedef struct r_samr_delete_dom_user_info
 {
        POLICY_HND pol;       /* policy handle */
-       uint32 status;        /* return status */
+       NTSTATUS status;        /* return status */
 
 } SAMR_R_DELETE_DOM_USER;
 
@@ -1476,7 +1532,7 @@ typedef struct r_samr_query_groupmem_info
        uint32 num_attrs;
        uint32 *attr;
 
-       uint32 status;
+       NTSTATUS status;
 
 } SAMR_R_QUERY_GROUPMEM;
 
@@ -1485,7 +1541,6 @@ typedef struct r_samr_query_groupmem_info
 typedef struct q_samr_del_group_mem_info
 {
        POLICY_HND pol;       /* policy handle */
-
        uint32 rid;         /* rid */
 
 } SAMR_Q_DEL_GROUPMEM;
@@ -1494,7 +1549,7 @@ typedef struct q_samr_del_group_mem_info
 /* SAMR_R_DEL_GROUPMEM - probably an del group member */
 typedef struct r_samr_del_group_mem_info
 {
-       uint32 status;         /* return status */
+       NTSTATUS status;         /* return status */
 
 } SAMR_R_DEL_GROUPMEM;
 
@@ -1513,7 +1568,7 @@ typedef struct q_samr_add_group_mem_info
 /* SAMR_R_ADD_GROUPMEM - probably an add group member */
 typedef struct r_samr_add_group_mem_info
 {
-       uint32 status;         /* return status */
+       NTSTATUS status;         /* return status */
 
 } SAMR_R_ADD_GROUPMEM;
 
@@ -1532,7 +1587,7 @@ typedef struct q_samr_open_group_info
 typedef struct r_samr_open_group_info
 {
        POLICY_HND pol;       /* policy handle */
-       uint32 status;         /* return status */
+       NTSTATUS status;         /* return status */
 
 } SAMR_R_OPEN_GROUP;
 
@@ -1554,7 +1609,7 @@ typedef struct r_samr_query_aliasmem_info
 
        DOM_SID2 *sid;
 
-       uint32 status;
+       NTSTATUS status;
 
 } SAMR_R_QUERY_ALIASMEM;
 
@@ -1572,7 +1627,7 @@ typedef struct q_samr_add_alias_mem_info
 /* SAMR_R_ADD_ALIASMEM - add alias member */
 typedef struct r_samr_add_alias_mem_info
 {
-       uint32 status;         /* return status */
+       NTSTATUS status;         /* return status */
 
 } SAMR_R_ADD_ALIASMEM;
 
@@ -1590,7 +1645,7 @@ typedef struct q_samr_del_alias_mem_info
 /* SAMR_R_DEL_ALIASMEM - delete alias member */
 typedef struct r_samr_del_alias_mem_info
 {
-       uint32 status;         /* return status */
+       NTSTATUS status;         /* return status */
 
 } SAMR_R_DEL_ALIASMEM;
 
@@ -1611,7 +1666,7 @@ typedef struct q_samr_open_alias_info
 typedef struct r_samr_open_alias_info
 {
        POLICY_HND pol;       /* policy handle */
-       uint32 status;         /* return status */
+       NTSTATUS status;         /* return status */
 
 } SAMR_R_OPEN_ALIAS;
 
@@ -1630,7 +1685,7 @@ typedef struct q_samr_connect_anon_info
 typedef struct r_samr_connect_anon_info
 {
        POLICY_HND connect_pol;       /* policy handle */
-       uint32 status;         /* return status */
+       NTSTATUS status;         /* return status */
 
 } SAMR_R_CONNECT_ANON;
 
@@ -1649,10 +1704,23 @@ typedef struct q_samr_connect_info
 typedef struct r_samr_connect_info
 {
     POLICY_HND connect_pol;       /* policy handle */
-       uint32 status;         /* return status */
+       NTSTATUS status;         /* return status */
 
 } SAMR_R_CONNECT;
 
+/* SAMR_Q_CONNECT4 */
+typedef struct q_samr_connect4_info
+{
+       uint32 ptr_srv_name; /* pointer to server name */
+       UNISTR2 uni_srv_name;
+
+       uint32 unk_0; /* possible server name type, 1 for IP num, 2 for name */
+       uint32 access_mask;
+} SAMR_Q_CONNECT4;
+
+/* SAMR_R_CONNECT4 - same format as connect */
+typedef struct r_samr_connect_info SAMR_R_CONNECT4;       
+
 /* SAMR_Q_GET_DOM_PWINFO */
 typedef struct q_samr_get_dom_pwinfo
 {
@@ -1665,10 +1733,17 @@ typedef struct q_samr_get_dom_pwinfo
 /* SAMR_R_GET_DOM_PWINFO */
 typedef struct r_samr_get_dom_pwinfo
 {
-       uint16 unk_0;
-       uint16 unk_1;
-       uint16 unk_2;
-       uint32 status;
+       /*
+        * Previously this was 3 uint16's.  However, after some tests
+        * it appears that the data len for the signing needs to be 16.
+        * Not sure how 3 unit16's ever worked since the length always
+        * turned out to 12.  3 uint32's + NT_STATUS == 16 bytes.  Tested
+        * using NT and 2k.  --jerry
+        */
+       uint32 unk_0;
+       uint32 unk_1;
+       uint32 unk_2;
+       NTSTATUS status;
 
 } SAMR_R_GET_DOM_PWINFO;
 
@@ -1712,26 +1787,26 @@ typedef struct q_samr_chgpasswd_user_info
 /* SAMR_R_CHGPASSWD_USER */
 typedef struct r_samr_chgpasswd_user_info
 {
-       uint32 status; /* 0 == OK, C000006A (NT_STATUS_WRONG_PASSWORD) */
+       NTSTATUS status; /* 0 == OK, C000006A (NT_STATUS_WRONG_PASSWORD) */
 
 } SAMR_R_CHGPASSWD_USER;
 
 
-/* SAMR_Q_UNKNOWN_2D */
-typedef struct q_samr_unknown_2d_info
+/* SAMR_Q_REMOVE_SID_FOREIGN_DOMAIN */
+typedef struct q_samr_remove_sid_foreign_domain_info
 {
        POLICY_HND dom_pol;   /* policy handle */
        DOM_SID2 sid;         /* SID */
 
-} SAMR_Q_UNKNOWN_2D;
+} SAMR_Q_REMOVE_SID_FOREIGN_DOMAIN;
 
 
-/* SAMR_R_UNKNOWN_2D - probably an open */
-typedef struct r_samr_unknown_2d_info
+/* SAMR_R_REMOVE_SID_FOREIGN_DOMAIN */
+typedef struct r_samr_remove_sid_foreign_domain_info
 {
-       uint32 status;         /* return status */
+       NTSTATUS status;         /* return status */
 
-} SAMR_R_UNKNOWN_2D;
+} SAMR_R_REMOVE_SID_FOREIGN_DOMAIN;
 
 
 
@@ -1749,5 +1824,39 @@ typedef struct sid_info_3
 
 } DOM_SID3;
 
-#endif /* _RPC_SAMR_H */
+/* SAMR_Q_UNKNOWN_2E */
+typedef struct q_samr_unknown_2e_info
+{
+       POLICY_HND domain_pol;   /* policy handle */
+       uint16 switch_value;
 
+} SAMR_Q_UNKNOWN_2E;
+
+/* SAMR_R_UNKNOWN_2E */
+typedef struct r_samr_unknown_2e_info
+{
+       uint32 ptr_0;
+       uint16 switch_value;
+       SAM_UNK_CTR *ctr;
+       NTSTATUS status;         /* return status */
+
+} SAMR_R_UNKNOWN_2E;
+
+/* SAMR_Q_SET_DOMAIN_INFO */
+typedef struct q_samr_set_domain_info
+{
+       POLICY_HND domain_pol;   /* policy handle */
+       uint16 switch_value0;
+       uint16 switch_value;
+       SAM_UNK_CTR *ctr;
+
+} SAMR_Q_SET_DOMAIN_INFO;
+
+/* SAMR_R_SET_DOMAIN_INFO */
+typedef struct r_samr_set_domain_info
+{
+       NTSTATUS status;         /* return status */
+
+} SAMR_R_SET_DOMAIN_INFO;
+
+#endif /* _RPC_SAMR_H */