s4-srvsvc: merge srvsvc_NetFileEnum from s3 idl.
[ira/wip.git] / source4 / librpc / idl / srvsvc.idl
index c3f0bd51a78c33c4f3ba0470e667a64719bc2dd7..a3b46c218a1a8450d590db9f63bc86bd704f5a09 100644 (file)
@@ -9,7 +9,6 @@ import "security.idl", "svcctl.idl";
   version(3.0),
   endpoint("ncacn_np:[\\pipe\\srvsvc]", "ncacn_ip_tcp:", "ncalrpc:"),
   pointer_default(unique),
-  pointer_default_top(unique),
   helpstring("Server Service")
 ] interface srvsvc
 {
@@ -52,30 +51,34 @@ import "security.idl", "svcctl.idl";
                [default] ;
        } srvsvc_NetCharDevCtr;
 
+       typedef struct {
+               uint32 level;
+               [switch_is(level)] srvsvc_NetCharDevCtr ctr;
+       } srvsvc_NetCharDevInfoCtr;
+
        /******************/
        /* Function: 0x00 */
        WERROR srvsvc_NetCharDevEnum(
-               [in]   [string,charset(UTF16)] uint16 *server_unc, 
-               [in,out]   uint32 level,
-               [in,out,switch_is(level)]   srvsvc_NetCharDevCtr ctr,
+               [in,unique]   [string,charset(UTF16)] uint16 *server_unc,
+               [in,out,ref]  srvsvc_NetCharDevInfoCtr *info_ctr,
                [in]   uint32 max_buffer,
-               [out]   uint32 totalentries,
-               [in,out]   uint32 *resume_handle
+               [out,ref]   uint32 *totalentries,
+               [in,out,unique]   uint32 *resume_handle
                );
 
        /******************/
        /* Function: 0x01 */
        WERROR srvsvc_NetCharDevGetInfo(
-               [in]   [string,charset(UTF16)] uint16 *server_unc,
+               [in,unique] [string,charset(UTF16)] uint16 *server_unc,
                [in]   [string,charset(UTF16)] uint16 device_name[],
                [in]   uint32 level,
-               [out,switch_is(level)]   srvsvc_NetCharDevInfo info
+               [out,ref,switch_is(level)]   srvsvc_NetCharDevInfo *info
                );
 
        /******************/
        /* Function: 0x02 */
        WERROR srvsvc_NetCharDevControl(
-               [in]   [string,charset(UTF16)] uint16 *server_unc,
+               [in,unique] [string,charset(UTF16)] uint16 *server_unc,
                [in]   [string,charset(UTF16)] uint16 device_name[],
                [in]   uint32 opcode
                );
@@ -117,49 +120,53 @@ import "security.idl", "svcctl.idl";
                [default] ;
        } srvsvc_NetCharDevQCtr;
 
+       typedef struct {
+               uint32 level;
+               [switch_is(level)] srvsvc_NetCharDevQCtr ctr;
+       } srvsvc_NetCharDevQInfoCtr;
+
        /******************/
        /* Function: 0x03 */
        WERROR srvsvc_NetCharDevQEnum(
-               [in]   [string,charset(UTF16)] uint16 *server_unc,
-               [in]   [string,charset(UTF16)] uint16 *user,
-               [in,out]   uint32 level,
-               [in,out,switch_is(level)]   srvsvc_NetCharDevQCtr ctr,
+               [in,unique]   [string,charset(UTF16)] uint16 *server_unc,
+               [in,unique]   [string,charset(UTF16)] uint16 *user,
+               [in,out,ref]  srvsvc_NetCharDevQInfoCtr *info_ctr,
                [in]   uint32 max_buffer,
-               [out]   uint32 totalentries,
-               [in,out]   uint32 *resume_handle
+               [out,ref]   uint32 *totalentries,
+               [in,out,unique]   uint32 *resume_handle
                );
 
        /******************/
        /* Function: 0x04 */
        WERROR srvsvc_NetCharDevQGetInfo(
-               [in]   [string,charset(UTF16)] uint16 *server_unc,
+               [in,unique] [string,charset(UTF16)] uint16 *server_unc,
                [in]   [string,charset(UTF16)] uint16 queue_name[],
                [in]   [string,charset(UTF16)] uint16 user[],
                [in]   uint32 level,
-               [out,switch_is(level)]   srvsvc_NetCharDevQInfo info
+               [out,switch_is(level),ref]   srvsvc_NetCharDevQInfo *info
                );
 
        /******************/
        /* Function: 0x05 */
        WERROR srvsvc_NetCharDevQSetInfo(
-               [in]   [string,charset(UTF16)] uint16 *server_unc,
+               [in,unique] [string,charset(UTF16)] uint16 *server_unc,
                [in]   [string,charset(UTF16)] uint16 queue_name[],
                [in]   uint32 level,
                [in,switch_is(level)]   srvsvc_NetCharDevQInfo info,
-               [in,out]   uint32 *parm_error
+               [in,out,unique]   uint32 *parm_error
                );
 
        /******************/
        /* Function: 0x06 */
        WERROR srvsvc_NetCharDevQPurge(
-               [in]   [string,charset(UTF16)] uint16 *server_unc,
+               [in,unique] [string,charset(UTF16)] uint16 *server_unc,
                [in]   [string,charset(UTF16)] uint16 queue_name[]
                );
 
        /******************/
        /* Function: 0x07 */
        WERROR srvsvc_NetCharDevQPurgeSelf(
-               [in]   [string,charset(UTF16)] uint16 *server_unc,
+               [in,unique] [string,charset(UTF16)] uint16 *server_unc,
                [in]   [string,charset(UTF16)] uint16 queue_name[],
                [in]   [string,charset(UTF16)] uint16 computer_name[]
                );
@@ -197,16 +204,20 @@ import "security.idl", "svcctl.idl";
                [default] ;
        } srvsvc_NetConnCtr;
 
+       typedef struct {
+               uint32 level;
+               [switch_is(level)] srvsvc_NetConnCtr ctr;
+       } srvsvc_NetConnInfoCtr;
+
        /******************/
        /* Function: 0x08 */
        WERROR srvsvc_NetConnEnum(
-               [in]   [string,charset(UTF16)] uint16 *server_unc,
-               [in]   [string,charset(UTF16)] uint16 *path,
-               [in,out]   uint32 level,
-               [in,out,switch_is(level)]   srvsvc_NetConnCtr ctr,
+               [in,unique]   [string,charset(UTF16)] uint16 *server_unc,
+               [in,unique]   [string,charset(UTF16)] uint16 *path,
+               [in,out,ref]  srvsvc_NetConnInfoCtr *info_ctr,
                [in]   uint32 max_buffer,
-               [out]   uint32 totalentries,
-               [in,out]   uint32 *resume_handle
+               [out,ref]   uint32 *totalentries,
+               [in,out,unique]   uint32 *resume_handle
                );
 
 /**************************/
@@ -246,32 +257,36 @@ import "security.idl", "svcctl.idl";
                [default] ;
        } srvsvc_NetFileCtr;
 
+       typedef struct {
+               uint32 level;
+               [switch_is(level)] srvsvc_NetFileCtr ctr;
+       } srvsvc_NetFileInfoCtr;
+
        /******************/
        /* Function: 0x09 */
        WERROR srvsvc_NetFileEnum(
-               [in]   [string,charset(UTF16)] uint16 *server_unc,
-               [in]   [string,charset(UTF16)] uint16 *path,
-               [in]   [string,charset(UTF16)] uint16 *user,
-               [in,out]   uint32 level,
-               [in,out,switch_is(level)]   srvsvc_NetFileCtr ctr,
+               [in,unique]   [string,charset(UTF16)] uint16 *server_unc,
+               [in,unique]   [string,charset(UTF16)] uint16 *path,
+               [in,unique]   [string,charset(UTF16)] uint16 *user,
+               [in,out,ref]   srvsvc_NetFileInfoCtr *info_ctr,
                [in]   uint32 max_buffer,
-               [out]   uint32 totalentries,
-               [in,out]   uint32 *resume_handle
+               [out,ref]   uint32 *totalentries,
+               [in,out,unique]   uint32 *resume_handle
                );
 
        /******************/
        /* Function: 0x0a */
        WERROR srvsvc_NetFileGetInfo(
-               [in]   [string,charset(UTF16)] uint16 *server_unc,
+               [in,unique]   [string,charset(UTF16)] uint16 *server_unc,
                [in]   uint32 fid,
                [in]   uint32 level,
-               [out,switch_is(level)]   srvsvc_NetFileInfo info
+               [out,switch_is(level),ref]   srvsvc_NetFileInfo *info
                );
 
        /******************/
        /* Function: 0x0b */
        WERROR srvsvc_NetFileClose(
-               [in]   [string,charset(UTF16)] uint16 *server_unc,
+               [in,unique]   [string,charset(UTF16)] uint16 *server_unc,
                [in]   uint32 fid       
                );
 
@@ -355,23 +370,29 @@ import "security.idl", "svcctl.idl";
 
        /******************/
        /* Function: 0x0c */
+
+       typedef struct {
+               uint32 level;
+               [switch_is(level)] srvsvc_NetSessCtr ctr;
+       } srvsvc_NetSessInfoCtr;
+
        WERROR srvsvc_NetSessEnum(
-               [in]   [string,charset(UTF16)] uint16 *server_unc,
-               [in]   [string,charset(UTF16)] uint16 *client,
-               [in]   [string,charset(UTF16)] uint16 *user,
+               [in,unique]   [string,charset(UTF16)] uint16 *server_unc,
+               [in,unique]   [string,charset(UTF16)] uint16 *client,
+               [in,unique]   [string,charset(UTF16)] uint16 *user,
                [in,out]   uint32 level,
                [in,out,switch_is(level)]   srvsvc_NetSessCtr ctr,
                [in]   uint32 max_buffer,
                [out]   uint32 totalentries,
-               [in,out]   uint32 *resume_handle
+               [in,out,unique]   uint32 *resume_handle
                );
 
        /******************/
        /* Function: 0x0d */
        WERROR srvsvc_NetSessDel(
-               [in]   [string,charset(UTF16)] uint16 *server_unc,
-               [in]   [string,charset(UTF16)] uint16 *client,
-               [in]   [string,charset(UTF16)] uint16 *user
+               [in,unique]   [string,charset(UTF16)] uint16 *server_unc,
+               [in,unique]   [string,charset(UTF16)] uint16 *client,
+               [in,unique]   [string,charset(UTF16)] uint16 *user
                );
 
 /**************************/
@@ -401,12 +422,22 @@ import "security.idl", "svcctl.idl";
                [string,charset(UTF16)] uint16 *name;
        } srvsvc_NetShareInfo0;
 
+       typedef struct {
+               uint32 count;
+               [size_is(count)] srvsvc_NetShareInfo0 *array;
+       } srvsvc_NetShareCtr0;
+
        typedef struct {
                [string,charset(UTF16)] uint16 *name;
                srvsvc_ShareType type;
                [string,charset(UTF16)] uint16 *comment;
        } srvsvc_NetShareInfo1;
 
+       typedef struct {
+               uint32 count;
+               [size_is(count)] srvsvc_NetShareInfo1 *array;
+       } srvsvc_NetShareCtr1;
+
        typedef struct {
                [string,charset(UTF16)] uint16 *name;
                srvsvc_ShareType type;
@@ -418,6 +449,11 @@ import "security.idl", "svcctl.idl";
                [string,charset(UTF16)] uint16 *password;
        } srvsvc_NetShareInfo2;
 
+       typedef struct {
+               uint32 count;
+               [size_is(count)] srvsvc_NetShareInfo2 *array;
+       } srvsvc_NetShareCtr2;
+
        typedef struct {
                [string,charset(UTF16)] uint16 *name;
                srvsvc_ShareType type;
@@ -425,27 +461,36 @@ import "security.idl", "svcctl.idl";
                uint32 csc_policy;
        } srvsvc_NetShareInfo501;
 
+       typedef struct {
+               uint32 count;
+               [size_is(count)] srvsvc_NetShareInfo501 *array;
+       } srvsvc_NetShareCtr501;
+
        typedef struct {
                [string,charset(UTF16)] uint16 *name;
                srvsvc_ShareType type;
                [string,charset(UTF16)] uint16 *comment;
                uint32 permissions;
-               int32 max_users;
+               uint32 max_users;
                uint32 current_users;
                [string,charset(UTF16)] uint16 *path;
                [string,charset(UTF16)] uint16 *password;
-               /* maybe here is a struct sec_desc_buf following */
-               uint32 unknown;
-               [subcontext(4)] security_descriptor *sd;
+               sec_desc_buf sd_buf;
        } srvsvc_NetShareInfo502;
 
+       typedef struct {
+               uint32 count;
+               [size_is(count)] srvsvc_NetShareInfo502 *array;
+       } srvsvc_NetShareCtr502;
+
        typedef struct {
                [string,charset(UTF16)] uint16 *comment;
        } srvsvc_NetShareInfo1004;
 
        typedef struct {
-               int32 max_users;
-       } srvsvc_NetShareInfo1006;
+               uint32 count;
+               [size_is(count)] srvsvc_NetShareInfo1004 *array;
+       } srvsvc_NetShareCtr1004;
 
        typedef bitmap {
                SHARE_1005_IN_DFS               = 0x00000001,
@@ -459,65 +504,25 @@ import "security.idl", "svcctl.idl";
                NetShareInfo1005Flags dfs_flags;
        } srvsvc_NetShareInfo1005;
 
-       typedef struct {
-               uint32 flags;
-               [string,charset(UTF16)] uint16 *alternate_directory_name;
-       } srvsvc_NetShareInfo1007;
-
-       typedef union {
-               [case(0)] srvsvc_NetShareInfo0 *info0;
-               [case(1)] srvsvc_NetShareInfo1 *info1;
-               [case(2)] srvsvc_NetShareInfo2 *info2;
-               [case(501)] srvsvc_NetShareInfo501 *info501;
-               [case(502)] srvsvc_NetShareInfo502 *info502;
-               [case(1004)] srvsvc_NetShareInfo1004 *info1004;
-               [case(1005)] srvsvc_NetShareInfo1005 *info1005;
-               [case(1006)] srvsvc_NetShareInfo1006 *info1006;
-               [case(1007)] srvsvc_NetShareInfo1007 *info1007;
-               [case(1501)] sec_desc_buf *info1501;
-               [default] ;
-       } srvsvc_NetShareInfo;
-
-       typedef struct {
-               uint32 count;
-               [size_is(count)] srvsvc_NetShareInfo0 *array;
-       } srvsvc_NetShareCtr0;
-
-       typedef struct {
-               uint32 count;
-               [size_is(count)] srvsvc_NetShareInfo1 *array;
-       } srvsvc_NetShareCtr1;
-
-       typedef struct {
-               uint32 count;
-               [size_is(count)] srvsvc_NetShareInfo2 *array;
-       } srvsvc_NetShareCtr2;
-
-       typedef struct {
-               uint32 count;
-               [size_is(count)] srvsvc_NetShareInfo501 *array;
-       } srvsvc_NetShareCtr501;
-
-       typedef struct {
-               uint32 count;
-               [size_is(count)] srvsvc_NetShareInfo502 *array;
-       } srvsvc_NetShareCtr502;
-
-       typedef struct {
-               uint32 count;
-               [size_is(count)] srvsvc_NetShareInfo1004 *array;
-       } srvsvc_NetShareCtr1004;
-
        typedef struct {
                uint32 count;
                [size_is(count)] srvsvc_NetShareInfo1005 *array;
        } srvsvc_NetShareCtr1005;
 
+       typedef struct {
+               uint32 max_users;
+       } srvsvc_NetShareInfo1006;
+
        typedef struct {
                uint32 count;
                [size_is(count)] srvsvc_NetShareInfo1006 *array;
        } srvsvc_NetShareCtr1006;
 
+       typedef struct {
+               uint32 flags;
+               [string,charset(UTF16)] uint16 *alternate_directory_name;
+       } srvsvc_NetShareInfo1007;
+
        typedef struct {
                uint32 count;
                [size_is(count)] srvsvc_NetShareInfo1007 *array;
@@ -528,6 +533,20 @@ import "security.idl", "svcctl.idl";
                [size_is(count)] sec_desc_buf *array;
        } srvsvc_NetShareCtr1501;
 
+       typedef union {
+               [case(0)] srvsvc_NetShareInfo0 *info0;
+               [case(1)] srvsvc_NetShareInfo1 *info1;
+               [case(2)] srvsvc_NetShareInfo2 *info2;
+               [case(501)] srvsvc_NetShareInfo501 *info501;
+               [case(502)] srvsvc_NetShareInfo502 *info502;
+               [case(1004)] srvsvc_NetShareInfo1004 *info1004;
+               [case(1005)] srvsvc_NetShareInfo1005 *info1005;
+               [case(1006)] srvsvc_NetShareInfo1006 *info1006;
+               [case(1007)] srvsvc_NetShareInfo1007 *info1007;
+               [case(1501)] sec_desc_buf *info1501;
+               [default] ;
+       } srvsvc_NetShareInfo;
+
        typedef union {
                [case(0)] srvsvc_NetShareCtr0 *ctr0;
                [case(1)] srvsvc_NetShareCtr1 *ctr1;
@@ -542,49 +561,54 @@ import "security.idl", "svcctl.idl";
                [default] ;
        } srvsvc_NetShareCtr;
 
+       typedef struct {
+               uint32 level;
+               [switch_is(level)] srvsvc_NetShareCtr ctr;
+       } srvsvc_NetShareInfoCtr;
+
        /******************/
        /* Function: 0x0e */
        WERROR srvsvc_NetShareAdd(
-               [in]   [string,charset(UTF16)] uint16 *server_unc,
+               [in,unique]   [string,charset(UTF16)] uint16 *server_unc,
                [in]   uint32 level,
-               [in,switch_is(level)] srvsvc_NetShareInfo info,
-               [in,out]   uint32 *parm_error
+               [in,ref,switch_is(level)] srvsvc_NetShareInfo *info,
+               [in,out,unique]   uint32 *parm_error
                );
 
        /******************/
        /* Function: 0x0f */
        WERROR srvsvc_NetShareEnumAll (
-               [in]   [string,charset(UTF16)] uint16 *server_unc,
+               [in,unique]   [string,charset(UTF16)] uint16 *server_unc,
                [in,out]   uint32 level,
                [in,out,switch_is(level)] srvsvc_NetShareCtr ctr,
                [in]   uint32 max_buffer,
                [out]  uint32 totalentries,
-               [in,out]   uint32 *resume_handle
+               [in,out,unique]   uint32 *resume_handle
                );
 
        /******************/
        /* Function: 0x10 */
        WERROR srvsvc_NetShareGetInfo(
-               [in]   [string,charset(UTF16)] uint16 *server_unc,
+               [in,unique]   [string,charset(UTF16)] uint16 *server_unc,
                [in]   [string,charset(UTF16)] uint16 share_name[],
                [in]   uint32 level,
-               [out,switch_is(level)] srvsvc_NetShareInfo info
+               [out,ref,switch_is(level)] srvsvc_NetShareInfo *info
                );
 
        /******************/
        /* Function: 0x11 */
        WERROR srvsvc_NetShareSetInfo(
-               [in]   [string,charset(UTF16)] uint16 *server_unc,
+               [in,unique]   [string,charset(UTF16)] uint16 *server_unc,
                [in]   [string,charset(UTF16)] uint16 share_name[],
                [in]   uint32 level,
-               [in,switch_is(level)] srvsvc_NetShareInfo info,
-               [in,out]   uint32 *parm_error
+               [in,ref,switch_is(level)] srvsvc_NetShareInfo *info,
+               [in,out,unique]   uint32 *parm_error
                );
 
        /******************/
        /* Function: 0x12 */
        WERROR srvsvc_NetShareDel(
-               [in]   [string,charset(UTF16)] uint16 *server_unc,
+               [in,unique]   [string,charset(UTF16)] uint16 *server_unc,
                [in]   [string,charset(UTF16)] uint16 share_name[],
                [in]   uint32 reserved
                );
@@ -592,7 +616,7 @@ import "security.idl", "svcctl.idl";
        /******************/
        /* Function: 0x13 */
        WERROR srvsvc_NetShareDelSticky(
-               [in]   [string,charset(UTF16)] uint16 *server_unc,
+               [in,unique]   [string,charset(UTF16)] uint16 *server_unc,
                [in]   [string,charset(UTF16)] uint16 share_name[],
                [in]   uint32 reserved
                );
@@ -600,9 +624,9 @@ import "security.idl", "svcctl.idl";
        /******************/
        /* Function: 0x14 */
        WERROR srvsvc_NetShareCheck(
-               [in]   [string,charset(UTF16)] uint16 *server_unc,
+               [in,unique]   [string,charset(UTF16)] uint16 *server_unc,
                [in]   [string,charset(UTF16)] uint16 device_name[],
-               [out]  srvsvc_ShareType type
+               [out,ref]  srvsvc_ShareType *type
                );
 
 /**************************/
@@ -666,6 +690,7 @@ import "security.idl", "svcctl.idl";
                uint32 sessreqs;
                uint32 opensearch;
                uint32 activelocks;
+               uint32 numreqbufs;
                uint32 sizereqbufs;
                uint32 numbigbufs;
                uint32 numfiletasks;
@@ -699,6 +724,7 @@ import "security.idl", "svcctl.idl";
                uint32 sessreqs;
                uint32 opensearch;
                uint32 activelocks;
+               uint32 numreqbufs;
                uint32 sizereqbufs;
                uint32 numbigbufs;
                uint32 numfiletasks;
@@ -1110,25 +1136,34 @@ import "security.idl", "svcctl.idl";
        /******************/
        /* Function: 0x15 */
        WERROR srvsvc_NetSrvGetInfo(
-               [in]   [string,charset(UTF16)] uint16 *server_unc,
+               [in,unique]   [string,charset(UTF16)] uint16 *server_unc,
                [in]   uint32 level,
-               [out,switch_is(level)] srvsvc_NetSrvInfo info
+               [out,ref,switch_is(level)] srvsvc_NetSrvInfo *info
                );
 
        /******************/
        /* Function: 0x16 */
        WERROR srvsvc_NetSrvSetInfo(
-               [in]   [string,charset(UTF16)] uint16 *server_unc,
+               [in,unique]   [string,charset(UTF16)] uint16 *server_unc,
                [in]   uint32 level,
-               [in,switch_is(level)] srvsvc_NetSrvInfo info,
-               [in,out]   uint32 *parm_error
+               [in,ref,switch_is(level)] srvsvc_NetSrvInfo *info,
+               [in,out,unique]   uint32 *parm_error
                );
 
 /**************************/
 /* srvsvc_NetDisk         */
 /**************************/
        typedef struct {
-               [flag(STR_LEN4)] string disk;
+               /*
+                * In theory this should be:
+                *      [charset(UTF16),string] uint16 annotation[3]
+                * But midl treats this as:
+                *      [charset(UTF16),string] uint16 annotation[]
+                * and pidl doesn't support this yet
+                */
+               [value(0)] uint32 __disk_offset;
+               [value(strlen(disk)+1)] uint32 __disk_length;
+               [charset(UTF16)] uint16 disk[__disk_length];
        } srvsvc_NetDiskInfo0;
 
        typedef struct {
@@ -1139,12 +1174,12 @@ import "security.idl", "svcctl.idl";
        /******************/
        /* Function: 0x17 */
        WERROR srvsvc_NetDiskEnum(
-               [in]      [string,charset(UTF16)] uint16 *server_unc,
+               [in,unique]      [string,charset(UTF16)] uint16 *server_unc,
                [in]      uint32 level,
-               [in,out]  srvsvc_NetDiskInfo info,
+               [in,out,ref]  srvsvc_NetDiskInfo *info,
                [in]      uint32 maxlen,
-               [out]     uint32 totalentries,
-               [in,out]  uint32 *resume_handle
+               [out,ref]     uint32 *totalentries,
+               [in,out,unique]  uint32 *resume_handle
                );
 
 /**************************/
@@ -1173,11 +1208,11 @@ import "security.idl", "svcctl.idl";
        /******************/
        /* Function: 0x18 */
        WERROR srvsvc_NetServerStatisticsGet(
-               [in]      [string,charset(UTF16)] uint16 *server_unc,
-               [in]      [string,charset(UTF16)] uint16 *service,
+               [in,unique]      [string,charset(UTF16)] uint16 *server_unc,
+               [in,unique]      [string,charset(UTF16)] uint16 *service,
                [in]      uint32 level,
                [in]      uint32 options,
-               [out]     srvsvc_Statistics stat
+               [out,ref]     srvsvc_Statistics **stats
                );
 
 /**************************/
@@ -1194,7 +1229,7 @@ import "security.idl", "svcctl.idl";
        /******************/
        /* Function: 0x19 */
        WERROR srvsvc_NetTransportAdd(
-               [in]   [string,charset(UTF16)] uint16 *server_unc,
+               [in,unique]   [string,charset(UTF16)] uint16 *server_unc,
                [in] uint32 level,
                [in,switch_is(level)]   srvsvc_NetTransportInfo info
                );
@@ -1258,23 +1293,27 @@ import "security.idl", "svcctl.idl";
                [default];
        } srvsvc_NetTransportCtr;
 
+       typedef struct {
+               uint32 level;
+               [switch_is(level)] srvsvc_NetTransportCtr ctr;
+       } srvsvc_NetTransportInfoCtr;
+
        /******************/
        /* Function: 0x1a */
        WERROR srvsvc_NetTransportEnum(
-               [in]   [string,charset(UTF16)] uint16 *server_unc,
-               [in,out] uint32 level,
-               [in,out,switch_is(level)]   srvsvc_NetTransportCtr transports,
+               [in,unique]   [string,charset(UTF16)] uint16 *server_unc,
+               [in,out,ref] srvsvc_NetTransportInfoCtr *transports,
                [in]   uint32 max_buffer,
-               [out]   uint32 totalentries,
-               [in,out]   uint32 *resume_handle
+               [out,ref]   uint32 *totalentries,
+               [in,out,unique]   uint32 *resume_handle
                );
 
        /******************/
        /* Function: 0x1b */
        WERROR srvsvc_NetTransportDel(
-               [in]   [string,charset(UTF16)] uint16 *server_unc,
+               [in,unique]   [string,charset(UTF16)] uint16 *server_unc,
                [in]    uint32 level,
-               [in,switch_is(level)]   srvsvc_NetTransportInfo info
+               [in]    srvsvc_NetTransportInfo0 *info0
                );
 
 /**************************/
@@ -1298,8 +1337,8 @@ import "security.idl", "svcctl.idl";
        /******************/
        /* Function: 0x1c */
        WERROR srvsvc_NetRemoteTOD(
-               [in]   [string,charset(UTF16)] uint16 *server_unc,
-               [out]   srvsvc_NetRemoteTODInfo *info
+               [in,unique]   [string,charset(UTF16)] uint16 *server_unc,
+               [out,ref]     srvsvc_NetRemoteTODInfo **info
                );
 
 /**************************/
@@ -1308,8 +1347,8 @@ import "security.idl", "svcctl.idl";
        /******************/
        /* Function: 0x1d */
        WERROR srvsvc_NetSetServiceBits(
-               [in]   [string,charset(UTF16)] uint16 *server_unc,
-               [in]   [string,charset(UTF16)] uint16 *transport,
+               [in,unique]   [string,charset(UTF16)] uint16 *server_unc,
+               [in,unique]   [string,charset(UTF16)] uint16 *transport,
                [in]   uint32 servicebits,
                [in]   uint32 updateimmediately
                );
@@ -1320,28 +1359,28 @@ import "security.idl", "svcctl.idl";
        /******************/
        /* Function: 0x1e */
        WERROR srvsvc_NetPathType(
-               [in]   [string,charset(UTF16)] uint16 *server_unc,
+               [in,unique]   [string,charset(UTF16)] uint16 *server_unc,
                [in]   [string,charset(UTF16)] uint16 path[],
                [in]   uint32 pathflags,
-               [out]   uint32 pathtype
+               [out,ref]   uint32 *pathtype
                );
 
        /******************/
        /* Function: 0x1f */
        WERROR srvsvc_NetPathCanonicalize(
-               [in]   [string,charset(UTF16)] uint16 *server_unc,
+               [in,unique]   [string,charset(UTF16)] uint16 *server_unc,
                [in]   [string,charset(UTF16)] uint16 path[],
                [out]  [size_is(maxbuf)] uint8 can_path[],
                [in]   uint32 maxbuf,
                [in]   [string,charset(UTF16)] uint16 prefix[],
-               [in,out] uint32 pathtype,
+               [in,out,ref] uint32 *pathtype,
                [in]    uint32 pathflags
                );
 
        /******************/
        /* Function: 0x20 */
        WERROR srvsvc_NetPathCompare(
-               [in]   [string,charset(UTF16)] uint16 *server_unc,
+               [in,unique]   [string,charset(UTF16)] uint16 *server_unc,
                [in]   [string,charset(UTF16)] uint16 path1[],
                [in]   [string,charset(UTF16)] uint16 path2[],
                [in]    uint32 pathtype,
@@ -1354,7 +1393,7 @@ import "security.idl", "svcctl.idl";
        /******************/
        /* Function: 0x21 */
        WERROR srvsvc_NetNameValidate(
-               [in]   [string,charset(UTF16)] uint16 *server_unc,
+               [in,unique]   [string,charset(UTF16)] uint16 *server_unc,
                [in]   [string,charset(UTF16)] uint16 name[],
                [in]    uint32 name_type,
                [in]    uint32 flags
@@ -1362,13 +1401,13 @@ import "security.idl", "svcctl.idl";
 
        /******************/
        /* Function: 0x22 */
-       WERROR srvsvc_NETRPRNAMECANONICALIZE(
+       [todo] WERROR srvsvc_NETRPRNAMECANONICALIZE(
                );
 
        /******************/
        /* Function: 0x23 */
        WERROR srvsvc_NetPRNameCompare(
-               [in]   [string,charset(UTF16)] uint16 *server_unc,
+               [in,unique]   [string,charset(UTF16)] uint16 *server_unc,
                [in]   [string,charset(UTF16)] uint16 name1[],
                [in]   [string,charset(UTF16)] uint16 name2[],
                [in]    uint32 name_type,
@@ -1383,47 +1422,47 @@ import "security.idl", "svcctl.idl";
        /* Note, there must be some way to return entries read vs 
           total entries ... */
        WERROR srvsvc_NetShareEnum(
-               [in]       [string,charset(UTF16)] uint16 *server_unc,
+               [in,unique]       [string,charset(UTF16)] uint16 *server_unc,
                [in,out]   uint32 level,
                [in,out,switch_is(level)]   srvsvc_NetShareCtr ctr,
                [in]       uint32 max_buffer,
                [out]      uint32 totalentries,
-               [in,out]   uint32 *resume_handle
+               [in,out,unique]   uint32 *resume_handle
                );
 
        /******************/
        /* Function: 0x25 */
        WERROR srvsvc_NetShareDelStart(
-               [in]       [string,charset(UTF16)] uint16 *server_unc,
+               [in,unique]       [string,charset(UTF16)] uint16 *server_unc,
                [in]       [string,charset(UTF16)] uint16 share[],
                [in]       uint32 reserved,
-               [out] policy_handle *hnd
+               [out,unique] policy_handle *hnd
                );
 
        /******************/
        /* Function: 0x26 */
        WERROR srvsvc_NetShareDelCommit(
-               [in, out] policy_handle *hnd
+               [in, out,unique] policy_handle *hnd
                );
 
        /******************/
        /* Function: 0x27 */
        WERROR srvsvc_NetGetFileSecurity(
-               [in]       [string,charset(UTF16)] uint16 *server_unc,
-               [in]       [string,charset(UTF16)] uint16 *share,
+               [in,unique]       [string,charset(UTF16)] uint16 *server_unc,
+               [in,unique]       [string,charset(UTF16)] uint16 *share,
                [in]       [string,charset(UTF16)] uint16 file[],
                [in]       security_secinfo securityinformation,
-               [out]      sec_desc_buf *sd_buf
+               [out,ref]  sec_desc_buf **sd_buf
                );
 
        /******************/
        /* Function: 0x28 */
        WERROR srvsvc_NetSetFileSecurity(
-               [in]       [string,charset(UTF16)] uint16 *server_unc,
-               [in]       [string,charset(UTF16)] uint16 *share,
+               [in,unique]       [string,charset(UTF16)] uint16 *server_unc,
+               [in,unique]       [string,charset(UTF16)] uint16 *share,
                [in]       [string,charset(UTF16)] uint16 file[],
                [in]       security_secinfo securityinformation,
-               [in]       sec_desc_buf sd_buf
+               [in,ref]   sec_desc_buf *sd_buf
                );
 
 
@@ -1438,7 +1477,7 @@ import "security.idl", "svcctl.idl";
        /******************/
        /* Function: 0x29 */
        WERROR srvsvc_NetServerTransportAddEx(
-               [in]   [string,charset(UTF16)] uint16 *server_unc,
+               [in,unique]   [string,charset(UTF16)] uint16 *server_unc,
                [in] uint32 level,
                [in,switch_is(level)]   srvsvc_NetTransportInfo info
                );
@@ -1446,9 +1485,9 @@ import "security.idl", "svcctl.idl";
        /******************/
        /* Function: 0x2a */
        WERROR srvsvc_NetServerSetServiceBitsEx(
-               [in]   [string,charset(UTF16)] uint16 *server_unc,
-               [in]   [string,charset(UTF16)] uint16 *emulated_server_unc,
-               [in]   [string,charset(UTF16)] uint16 *transport,
+               [in,unique]   [string,charset(UTF16)] uint16 *server_unc,
+               [in,unique]   [string,charset(UTF16)] uint16 *emulated_server_unc,
+               [in,unique]   [string,charset(UTF16)] uint16 *transport,
                [in]   uint32 servicebitsofinterest,
                [in]   uint32 servicebits,
                [in]   uint32 updateimmediately
@@ -1456,56 +1495,56 @@ import "security.idl", "svcctl.idl";
 
        /******************/
        /* Function: 0x2b */
-       WERROR srvsvc_NETRDFSGETVERSION(
+       [todo] WERROR srvsvc_NETRDFSGETVERSION(
                );
 
        /******************/
        /* Function: 0x2c */
-       WERROR srvsvc_NETRDFSCREATELOCALPARTITION(
+       [todo] WERROR srvsvc_NETRDFSCREATELOCALPARTITION(
                );
 
        /******************/
        /* Function: 0x2d */
-       WERROR srvsvc_NETRDFSDELETELOCALPARTITION(
+       [todo] WERROR srvsvc_NETRDFSDELETELOCALPARTITION(
                );
 
        /******************/
        /* Function: 0x2e */
-       WERROR srvsvc_NETRDFSSETLOCALVOLUMESTATE(
+       [todo] WERROR srvsvc_NETRDFSSETLOCALVOLUMESTATE(
                );
 
        /******************/
        /* Function: 0x2f */
-       WERROR srvsvc_NETRDFSSETSERVERINFO(
+       [todo] WERROR srvsvc_NETRDFSSETSERVERINFO(
                );
 
        /******************/
        /* Function: 0x30 */
-       WERROR srvsvc_NETRDFSCREATEEXITPOINT(
+       [todo] WERROR srvsvc_NETRDFSCREATEEXITPOINT(
                );
 
        /******************/
        /* Function: 0x31 */
-       WERROR srvsvc_NETRDFSDELETEEXITPOINT(
+       [todo] WERROR srvsvc_NETRDFSDELETEEXITPOINT(
                );
 
        /******************/
        /* Function: 0x32 */
-       WERROR srvsvc_NETRDFSMODIFYPREFIX(
+       [todo] WERROR srvsvc_NETRDFSMODIFYPREFIX(
                );
 
        /******************/
        /* Function: 0x33 */
-       WERROR srvsvc_NETRDFSFIXLOCALVOLUME(
+       [todo] WERROR srvsvc_NETRDFSFIXLOCALVOLUME(
                );
 
        /******************/
        /* Function: 0x34 */
-       WERROR srvsvc_NETRDFSMANAGERREPORTSITEINFO(
+       [todo] WERROR srvsvc_NETRDFSMANAGERREPORTSITEINFO(
                );
 
        /******************/
        /* Function: 0x35 */
-       WERROR srvsvc_NETRSERVERTRANSPORTDELEX(
+       [todo] WERROR srvsvc_NETRSERVERTRANSPORTDELEX(
                );
 }