s4-srvsvc: merge srvsvc_NetSessEnum from s3 idl.
[ira/wip.git] / source4 / librpc / idl / srvsvc.idl
index 236d99a8b8c2d4f7052015624d4b02cad3748738..bbabd8e2dce8cfaa5be9baf336aacf07ca98f42d 100644 (file)
@@ -3,17 +3,23 @@
 /*
   srvsvc interface definitions
 */
+import "security.idl", "svcctl.idl";
 
-[ uuid(4b324fc8-1670-01d3-1278-5a47bf6ee188),
+[ uuid("4b324fc8-1670-01d3-1278-5a47bf6ee188"),
   version(3.0),
-  pointer_default(unique)
+  endpoint("ncacn_np:[\\pipe\\srvsvc]", "ncacn_ip_tcp:", "ncalrpc:"),
+  pointer_default(unique),
+  helpstring("Server Service")
 ] interface srvsvc
 {
+       typedef bitmap svcctl_ServerType svcctl_ServerType;
+       typedef bitmap security_secinfo security_secinfo;
+
 /**************************/
 /* srvsvc_NetCharDev      */
 /**************************/
        typedef struct {
-               unistr *device;
+               [string,charset(UTF16)] uint16 *device;
        } srvsvc_NetCharDevInfo0;
 
        typedef struct {
@@ -22,9 +28,9 @@
        } srvsvc_NetCharDevCtr0;
 
        typedef struct {
-               unistr *device;
+               [string,charset(UTF16)] uint16 *device;
                uint32 status;
-               unistr *user;
+               [string,charset(UTF16)] uint16 *user;
                uint32 time;
        } srvsvc_NetCharDevInfo1;
 
                [default] ;
        } srvsvc_NetCharDevCtr;
 
+       typedef struct {
+               uint32 level;
+               [switch_is(level)] srvsvc_NetCharDevCtr ctr;
+       } srvsvc_NetCharDevInfoCtr;
+
        /******************/
        /* Function: 0x00 */
        WERROR srvsvc_NetCharDevEnum(
-               [in]   unistr *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]   unistr *server_unc,
-               [in]   unistr device_name,
+               [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]   unistr *server_unc,
-               [in]   unistr device_name,
+               [in,unique] [string,charset(UTF16)] uint16 *server_unc,
+               [in]   [string,charset(UTF16)] uint16 device_name[],
                [in]   uint32 opcode
                );
 
@@ -77,7 +87,7 @@
 /* srvsvc_NetCharDevQ     */
 /**************************/
        typedef struct {
-               unistr *device;
+               [string,charset(UTF16)] uint16 *device;
        } srvsvc_NetCharDevQInfo0;
 
        typedef struct {
@@ -86,9 +96,9 @@
        } srvsvc_NetCharDevQCtr0;
 
        typedef struct {
-               unistr *device;
+               [string,charset(UTF16)] uint16 *device;
                uint32 priority;
-               unistr *devices;
+               [string,charset(UTF16)] uint16 *devices;
                uint32 users;
                uint32 num_ahead;
        } srvsvc_NetCharDevQInfo1;
                [default] ;
        } srvsvc_NetCharDevQCtr;
 
+       typedef struct {
+               uint32 level;
+               [switch_is(level)] srvsvc_NetCharDevQCtr ctr;
+       } srvsvc_NetCharDevQInfoCtr;
+
        /******************/
        /* Function: 0x03 */
        WERROR srvsvc_NetCharDevQEnum(
-               [in]   unistr *server_unc,
-               [in]   unistr *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]   unistr *server_unc,
-               [in]   unistr queue_name,
-               [in]   unistr user,
+               [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]   unistr *server_unc,
-               [in]   unistr queue_name,
+               [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]   unistr *server_unc,
-               [in]   unistr queue_name
+               [in,unique] [string,charset(UTF16)] uint16 *server_unc,
+               [in]   [string,charset(UTF16)] uint16 queue_name[]
                );
 
        /******************/
        /* Function: 0x07 */
        WERROR srvsvc_NetCharDevQPurgeSelf(
-               [in]   unistr *server_unc,
-               [in]   unistr queue_name,
-               [in]   unistr computer_name
+               [in,unique] [string,charset(UTF16)] uint16 *server_unc,
+               [in]   [string,charset(UTF16)] uint16 queue_name[],
+               [in]   [string,charset(UTF16)] uint16 computer_name[]
                );
 
 /**************************/
                uint32 num_open;
                uint32 num_users;
                uint32 conn_time;
-               unistr *user;
-               unistr *client;
+               [string,charset(UTF16)] uint16 *user;
+               [string,charset(UTF16)] uint16 *share;
        } srvsvc_NetConnInfo1;
 
        typedef struct {
                [default] ;
        } srvsvc_NetConnCtr;
 
+       typedef struct {
+               uint32 level;
+               [switch_is(level)] srvsvc_NetConnCtr ctr;
+       } srvsvc_NetConnInfoCtr;
+
        /******************/
        /* Function: 0x08 */
        WERROR srvsvc_NetConnEnum(
-               [in]   unistr *server_unc,
-               [in]   unistr *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
                );
 
 /**************************/
                uint32 fid;
                uint32 permissions;
                uint32 num_locks;
-               unistr *path;
-               unistr *user;
+               [string,charset(UTF16)] uint16 *path;
+               [string,charset(UTF16)] uint16 *user;
        } srvsvc_NetFileInfo3;
 
        typedef struct {
                [default] ;
        } srvsvc_NetFileCtr;
 
+       typedef struct {
+               uint32 level;
+               [switch_is(level)] srvsvc_NetFileCtr ctr;
+       } srvsvc_NetFileInfoCtr;
+
        /******************/
        /* Function: 0x09 */
        WERROR srvsvc_NetFileEnum(
-               [in]   unistr *server_unc,
-               [in]   unistr *path,
-               [in]   unistr *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]   unistr *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]   unistr *server_unc,
+               [in,unique]   [string,charset(UTF16)] uint16 *server_unc,
                [in]   uint32 fid       
                );
 
 /* srvsvc_NetSess         */
 /**************************/
        typedef struct {
-               unistr *client;
+               [string,charset(UTF16)] uint16 *client;
        } srvsvc_NetSessInfo0;
 
        typedef struct {
        } srvsvc_NetSessCtr0;
 
        typedef struct {
-               unistr *client;
-               unistr *user;
+               [string,charset(UTF16)] uint16 *client;
+               [string,charset(UTF16)] uint16 *user;
                uint32 num_open;
                uint32 time;
                uint32 idle_time;
        } srvsvc_NetSessCtr1;
 
        typedef struct {
-               unistr *client;
-               unistr *user;
+               [string,charset(UTF16)] uint16 *client;
+               [string,charset(UTF16)] uint16 *user;
                uint32 num_open;
                uint32 time;
                uint32 idle_time;
                uint32 user_flags;
-               unistr *client_type;
+               [string,charset(UTF16)] uint16 *client_type;
        } srvsvc_NetSessInfo2;
 
        typedef struct {
        } srvsvc_NetSessCtr2;
 
        typedef struct {
-               unistr *client;
-               unistr *user;
+               [string,charset(UTF16)] uint16 *client;
+               [string,charset(UTF16)] uint16 *user;
                uint32 time;
                uint32 idle_time;
        } srvsvc_NetSessInfo10;
        } srvsvc_NetSessCtr10;
 
        typedef struct {
-               unistr *client;
-               unistr *user;
+               [string,charset(UTF16)] uint16 *client;
+               [string,charset(UTF16)] uint16 *user;
                uint32 num_open;
                uint32 time;
                uint32 idle_time;
                uint32 user_flags;
-               unistr *client_type;
-               unistr *transport;
+               [string,charset(UTF16)] uint16 *client_type;
+               [string,charset(UTF16)] uint16 *transport;
        } srvsvc_NetSessInfo502;
 
        typedef struct {
 
        /******************/
        /* Function: 0x0c */
+
+       typedef struct {
+               uint32 level;
+               [switch_is(level)] srvsvc_NetSessCtr ctr;
+       } srvsvc_NetSessInfoCtr;
+
        WERROR srvsvc_NetSessEnum(
-               [in]   unistr *server_unc,
-               [in]   unistr *client,
-               [in]   unistr *user,
-               [in,out]   uint32 level,
-               [in,out,switch_is(level)]   srvsvc_NetSessCtr ctr,
+               [in,unique]   [string,charset(UTF16)] uint16 *server_unc,
+               [in,unique]   [string,charset(UTF16)] uint16 *client,
+               [in,unique]   [string,charset(UTF16)] uint16 *user,
+               [in,out,ref]   srvsvc_NetSessInfoCtr *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: 0x0d */
        WERROR srvsvc_NetSessDel(
-               [in]   unistr *server_unc,
-               [in]   unistr *client,
-               [in]   unistr *user
+               [in,unique]   [string,charset(UTF16)] uint16 *server_unc,
+               [in,unique]   [string,charset(UTF16)] uint16 *client,
+               [in,unique]   [string,charset(UTF16)] uint16 *user
                );
 
 /**************************/
 /**************************/
 
        /* share types */
-       const int STYPE_DISKTREE = 0;
-       const int STYPE_PRINTQ   = 1;
-       const int STYPE_DEVICE   = 2;   /* Serial device */
-       const int STYPE_IPC      = 3;   /* Interprocess communication (IPC) */
-       const int STYPE_HIDDEN   = 0x80000000; /* share is a hidden one */
+       const uint32 STYPE_TEMPORARY = 0x40000000; /* share is a temporary one */
+       const uint32 STYPE_HIDDEN    = 0x80000000; /* share is a hidden one */
+
+       typedef [v1_enum, flag(NDR_PAHEX)] enum {
+               STYPE_DISKTREE = 0,
+               STYPE_DISKTREE_TEMPORARY = STYPE_DISKTREE|STYPE_TEMPORARY,
+               STYPE_DISKTREE_HIDDEN    = STYPE_DISKTREE|STYPE_HIDDEN,
+               STYPE_PRINTQ   = 1,
+               STYPE_PRINTQ_TEMPORARY = STYPE_PRINTQ|STYPE_TEMPORARY,
+               STYPE_PRINTQ_HIDDEN    = STYPE_PRINTQ|STYPE_HIDDEN,
+               STYPE_DEVICE   = 2,     /* Serial device */
+               STYPE_DEVICE_TEMPORARY = STYPE_DEVICE|STYPE_TEMPORARY,
+               STYPE_DEVICE_HIDDEN    = STYPE_DEVICE|STYPE_HIDDEN,
+               STYPE_IPC      = 3,     /* Interprocess communication (IPC) */
+               STYPE_IPC_TEMPORARY = STYPE_IPC|STYPE_TEMPORARY,
+               STYPE_IPC_HIDDEN    = STYPE_IPC|STYPE_HIDDEN
+       } srvsvc_ShareType;
 
        typedef struct {
-               unistr *name;
+               [string,charset(UTF16)] uint16 *name;
        } srvsvc_NetShareInfo0;
 
        typedef struct {
        } srvsvc_NetShareCtr0;
 
        typedef struct {
-               unistr *name;
-               uint32 type;
-               unistr *comment;
+               [string,charset(UTF16)] uint16 *name;
+               srvsvc_ShareType type;
+               [string,charset(UTF16)] uint16 *comment;
        } srvsvc_NetShareInfo1;
 
        typedef struct {
        } srvsvc_NetShareCtr1;
 
        typedef struct {
-               unistr *name;
-               uint32 type;
-               unistr *comment;
+               [string,charset(UTF16)] uint16 *name;
+               srvsvc_ShareType type;
+               [string,charset(UTF16)] uint16 *comment;
                uint32 permissions;
                uint32 max_users;
                uint32 current_users;
-               unistr *path;
-               unistr *password;
+               [string,charset(UTF16)] uint16 *path;
+               [string,charset(UTF16)] uint16 *password;
        } srvsvc_NetShareInfo2;
 
        typedef struct {
        } srvsvc_NetShareCtr2;
 
        typedef struct {
-               unistr *name;
-               uint32 type;
-               unistr *comment;
+               [string,charset(UTF16)] uint16 *name;
+               srvsvc_ShareType type;
+               [string,charset(UTF16)] uint16 *comment;
                uint32 csc_policy;
        } srvsvc_NetShareInfo501;
 
        } srvsvc_NetShareCtr501;
 
        typedef struct {
-               unistr *name;
-               uint32 type;
-               unistr *comment;
+               [string,charset(UTF16)] uint16 *name;
+               srvsvc_ShareType type;
+               [string,charset(UTF16)] uint16 *comment;
                uint32 permissions;
                uint32 max_users;
                uint32 current_users;
-               unistr *path;
-               unistr *password;
-               uint32 unknown;
-               [subcontext(4)] security_descriptor *sd;
+               [string,charset(UTF16)] uint16 *path;
+               [string,charset(UTF16)] uint16 *password;
+               sec_desc_buf sd_buf;
        } srvsvc_NetShareInfo502;
 
        typedef struct {
-               uint32 dfs_flags;
+               uint32 count;
+               [size_is(count)] srvsvc_NetShareInfo502 *array;
+       } srvsvc_NetShareCtr502;
+
+       typedef struct {
+               [string,charset(UTF16)] uint16 *comment;
+       } srvsvc_NetShareInfo1004;
+
+       typedef struct {
+               uint32 count;
+               [size_is(count)] srvsvc_NetShareInfo1004 *array;
+       } srvsvc_NetShareCtr1004;
+
+       typedef bitmap {
+               SHARE_1005_IN_DFS               = 0x00000001,
+               SHARE_1005_DFS_ROOT             = 0x00000002
+       } NetShareInfo1005Flags;
+       
+       const uint32 SHARE_1005_CSC_POLICY_MASK = 0x00000030;
+       const uint32 SHARE_1005_CSC_POLICY_SHIFT = 4;
+
+       typedef struct {
+               NetShareInfo1005Flags dfs_flags;
        } srvsvc_NetShareInfo1005;
 
        typedef struct {
                uint32 count;
-               [size_is(count)] srvsvc_NetShareInfo502 *array;
-       } srvsvc_NetShareCtr502;
+               [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;
+       } srvsvc_NetShareCtr1007;
+
+       typedef struct {
+               uint32 count;
+               [size_is(count)] sec_desc_buf *array;
+       } srvsvc_NetShareCtr1501;
 
        typedef union {
                [case(0)] srvsvc_NetShareInfo0 *info0;
                [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;
 
                [case(2)] srvsvc_NetShareCtr2 *ctr2;
                [case(501)] srvsvc_NetShareCtr501 *ctr501;
                [case(502)] srvsvc_NetShareCtr502 *ctr502;
+               [case(1004)] srvsvc_NetShareCtr1004 *ctr1004;
+               [case(1005)] srvsvc_NetShareCtr1005 *ctr1005;
+               [case(1006)] srvsvc_NetShareCtr1006 *ctr1006;
+               [case(1007)] srvsvc_NetShareCtr1007 *ctr1007;
+               [case(1501)] srvsvc_NetShareCtr1501 *ctr1501;
                [default] ;
        } srvsvc_NetShareCtr;
 
+       typedef struct {
+               uint32 level;
+               [switch_is(level)] srvsvc_NetShareCtr ctr;
+       } srvsvc_NetShareInfoCtr;
+
        /******************/
        /* Function: 0x0e */
        WERROR srvsvc_NetShareAdd(
-               [in]   unistr *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]   unistr *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]   unistr *server_unc,
-               [in]   unistr share_name,
+               [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]   unistr *server_unc,
-               [in]   unistr *share_name,
+               [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]   unistr *server_unc,
-               [in]   unistr *share_name,
+               [in,unique]   [string,charset(UTF16)] uint16 *server_unc,
+               [in]   [string,charset(UTF16)] uint16 share_name[],
                [in]   uint32 reserved
                );
 
        /******************/
        /* Function: 0x13 */
        WERROR srvsvc_NetShareDelSticky(
-               [in]   unistr *server_unc,
-               [in]   unistr *share_name,
+               [in,unique]   [string,charset(UTF16)] uint16 *server_unc,
+               [in]   [string,charset(UTF16)] uint16 share_name[],
                [in]   uint32 reserved
                );
        
        /******************/
        /* Function: 0x14 */
        WERROR srvsvc_NetShareCheck(
-               [in]   unistr *server_unc,
-               [in]   unistr *share_name,
-               [out]   uint32 type
+               [in,unique]   [string,charset(UTF16)] uint16 *server_unc,
+               [in]   [string,charset(UTF16)] uint16 device_name[],
+               [out,ref]  srvsvc_ShareType *type
                );
 
 /**************************/
 /* srvsvc_NetSrv          */
 /**************************/
+       typedef [public,v1_enum] enum {
+               PLATFORM_ID_DOS = 300,
+               PLATFORM_ID_OS2 = 400,
+               PLATFORM_ID_NT  = 500,
+               PLATFORM_ID_OSF = 600,
+               PLATFORM_ID_VMS = 700
+       } srvsvc_PlatformId;
+
        typedef struct {
-               uint32 platform_id;
-               unistr *server_unc;
+               srvsvc_PlatformId platform_id;
+               [string,charset(UTF16)] uint16 *server_name;
        } srvsvc_NetSrvInfo100;
 
        typedef struct {
-               uint32 platform_id;
-               unistr *server_unc;
-               uint32 ver_major;
-               uint32 ver_minor;
-               uint32 type;
-               unistr *comment;
+               srvsvc_PlatformId platform_id;
+               [string,charset(UTF16)] uint16 *server_name;
+               uint32 version_major;
+               uint32 version_minor;
+               svcctl_ServerType server_type;
+               [string,charset(UTF16)] uint16 *comment;
        } srvsvc_NetSrvInfo101;
 
        typedef struct {
-               uint32 platform_id;
-               unistr *server_unc;
-               uint32 ver_major;
-               uint32 ver_minor;
-               uint32 type;
-               unistr *comment;
+               srvsvc_PlatformId platform_id;
+               [string,charset(UTF16)] uint16 *server_name;
+               uint32 version_major;
+               uint32 version_minor;
+               svcctl_ServerType server_type;
+               [string,charset(UTF16)] uint16 *comment;
                uint32 users;
                uint32 disc;
                uint32 hidden;
                uint32 announce;
                uint32 anndelta;
-               uint32 licences;
-               unistr *userpath;
+               uint32 licenses;
+               [string,charset(UTF16)] uint16 *userpath;
        } srvsvc_NetSrvInfo102;
 
        typedef struct {
                uint32 ulist_mtime;
                uint32 glist_mtime;
                uint32 alist_mtime;
-               unistr *alerts;
+               [string,charset(UTF16)] uint16 *alerts;
                uint32 security;
                uint32 numadmin;
                uint32 lanmask;
-               unistr *guestaccount;
+               [string,charset(UTF16)] uint16 *guestaccount;
                uint32 chdevs;
                uint32 chdevqs;
                uint32 chdevjobs;
                uint32 sessreqs;
                uint32 opensearch;
                uint32 activelocks;
+               uint32 numreqbufs;
                uint32 sizereqbufs;
                uint32 numbigbufs;
                uint32 numfiletasks;
                uint32 alertsched;
-               uint32 eroralert;
+               uint32 erroralert;
                uint32 logonalert;
                uint32 accessalert;
                uint32 diskalert;
                uint32 netioalert;
                uint32 maxaudits;
-               unistr *srvheuristics;
+               [string,charset(UTF16)] uint16 *srvheuristics;
        } srvsvc_NetSrvInfo402;
 
        typedef struct {
                uint32 ulist_mtime;
                uint32 glist_mtime;
                uint32 alist_mtime;
-               unistr *alerts;
+               [string,charset(UTF16)] uint16 *alerts;
                uint32 security;
                uint32 numadmin;
                uint32 lanmask;
-               unistr *guestaccount;
+               [string,charset(UTF16)] uint16 *guestaccount;
                uint32 chdevs;
                uint32 chdevqs;
                uint32 chdevjobs;
                uint32 sessreqs;
                uint32 opensearch;
                uint32 activelocks;
+               uint32 numreqbufs;
                uint32 sizereqbufs;
                uint32 numbigbufs;
                uint32 numfiletasks;
                uint32 diskalert;
                uint32 netioalert;
                uint32 maxaudits;
-               unistr *srvheuristics;
+               [string,charset(UTF16)] uint16 *srvheuristics;
                uint32 auditedevents;
                uint32 auditprofile;
-               unistr *autopath;
+               [string,charset(UTF16)] uint16 *autopath;
        } srvsvc_NetSrvInfo403;
 
        typedef struct {
                uint32 timesource;
                uint32 acceptdownlevelapis;
                uint32 lmannounce;
-               unistr *domain;
+               [string,charset(UTF16)] uint16 *domain;
                uint32 maxcopyreadlen;
                uint32 maxcopywritelen;
                uint32 minkeepsearch;
         } srvsvc_NetSrvInfo503;
 
         typedef struct{
-                uint32 dummy;
+               uint32 sessopen;
+               uint32 sesssvc;
+               uint32 opensearch;
+               uint32 sizereqbufs;
+               uint32 initworkitems;
+               uint32 maxworkitems;
+               uint32 rawworkitems;
+               uint32 irpstacksize;
+               uint32 maxrawbuflen;
+               uint32 sessusers;
+               uint32 sessconns;
+               uint32 maxpagedmemoryusage;
+               uint32 maxnonpagedmemoryusage;
+               uint32 enablesoftcompat;
+               uint32 enableforcedlogoff;
+               uint32 timesource;
+               uint32 acceptdownlevelapis;
+               uint32 lmannounce;
+               [string,charset(UTF16)] uint16 *domain;
+               uint32 maxcopyreadlen;
+               uint32 maxcopywritelen;
+               uint32 minkeepsearch;
+               uint32 minkeepcomplsearch;
+               uint32 maxkeepcomplsearch;
+               uint32 threadcountadd;
+               uint32 numlockthreads;
+               uint32 scavtimeout;
+               uint32 minrcvqueue;
+               uint32 minfreeworkitems;
+               uint32 xactmemsize;
+               uint32 threadpriority;
+               uint32 maxmpxct;
+               uint32 oplockbreakwait;
+               uint32 oplockbreakresponsewait;
+               uint32 enableoplocks;
+               uint32 enableoplockforceclose;
+               uint32 enablefcbopens;
+               uint32 enableraw;
+               uint32 enablesharednetdrives;
+               uint32 minfreeconnections;
+               uint32 maxfreeconnections;
+               uint32 initsesstable;
+               uint32 initconntable;
+               uint32 initfiletable;
+               uint32 initsearchtable;
+               uint32 alertsched;
+               uint32 errortreshold;
+               uint32 networkerrortreshold;
+               uint32 diskspacetreshold;
+               uint32 reserved;
+               uint32 maxlinkdelay;
+               uint32 minlinkthroughput;
+               uint32 linkinfovalidtime;
+               uint32 scavqosinfoupdatetime;
+               uint32 maxworkitemidletime;
         } srvsvc_NetSrvInfo599;
 
         typedef struct{
-                uint32 dummy;
+               [string,charset(UTF16)] uint16 *comment;
         } srvsvc_NetSrvInfo1005;
 
         typedef struct{
-                uint32 dummy;
+                uint32 disc;
         } srvsvc_NetSrvInfo1010;
 
         typedef struct{
-                uint32 dummy;
+                uint32 hidden;
         } srvsvc_NetSrvInfo1016;
 
         typedef struct{
-                uint32 dummy;
+                uint32 announce;
         } srvsvc_NetSrvInfo1017;
 
         typedef struct{
-                uint32 dummy;
+                uint32 anndelta;
         } srvsvc_NetSrvInfo1018;
 
         typedef struct{
-                uint32 dummy;
+                uint32 users;
         } srvsvc_NetSrvInfo1107;
 
         typedef struct{
-                uint32 dummy;
+                uint32 sessopens;
         } srvsvc_NetSrvInfo1501;
 
         typedef struct{
-                uint32 dummy;
+                uint32 sessvcs;
         } srvsvc_NetSrvInfo1502;
 
         typedef struct{
-                uint32 dummy;
+                uint32 opensearch;
         } srvsvc_NetSrvInfo1503;
 
         typedef struct{
-                uint32 dummy;
+                uint32 maxworkitems;
         } srvsvc_NetSrvInfo1506;
 
         typedef struct{
-                uint32 dummy;
+                uint32 maxrawbuflen;
         } srvsvc_NetSrvInfo1509;
 
         typedef struct{
-                uint32 dummy;
+                uint32 sessusers;
         } srvsvc_NetSrvInfo1510;
 
         typedef struct{
-                uint32 dummy;
+                uint32 sesscons;
         } srvsvc_NetSrvInfo1511;
 
         typedef struct{
-                uint32 dummy;
+                uint32 maxnonpagedmemoryusage;
         } srvsvc_NetSrvInfo1512;
 
         typedef struct{
-                uint32 dummy;
+                uint32 maxpagedmemoryusage;
         } srvsvc_NetSrvInfo1513;
 
         typedef struct{
-                uint32 dummy;
+                uint32 enablesoftcompat;
         } srvsvc_NetSrvInfo1514;
 
         typedef struct{
-                uint32 dummy;
+                uint32 enableforcedlogoff;
         } srvsvc_NetSrvInfo1515;
 
         typedef struct{
-                uint32 dummy;
+                uint32 timesource;
         } srvsvc_NetSrvInfo1516;
 
         typedef struct{
-                uint32 dummy;
+                uint32 lmannounce;
         } srvsvc_NetSrvInfo1518;
 
         typedef struct{
-                uint32 dummy;
+                uint32 maxcopyreadlen;
         } srvsvc_NetSrvInfo1520;
 
         typedef struct{
-                uint32 dummy;
+                uint32 maxcopywritelen;
         } srvsvc_NetSrvInfo1521;
 
         typedef struct{
-                uint32 dummy;
+                uint32 minkeepsearch;
         } srvsvc_NetSrvInfo1522;
 
         typedef struct{
-                uint32 dummy;
+                uint32 maxkeepsearch;
         } srvsvc_NetSrvInfo1523;
 
         typedef struct{
-                uint32 dummy;
+                uint32 minkeepcomplsearch;
         } srvsvc_NetSrvInfo1524;
 
         typedef struct{
-                uint32 dummy;
+                uint32 maxkeepcomplsearch;
         } srvsvc_NetSrvInfo1525;
 
         typedef struct{
-                uint32 dummy;
+                uint32 scavtimeout;
         } srvsvc_NetSrvInfo1528;
 
         typedef struct{
-                uint32 dummy;
+                uint32 minrcvqueue;
         } srvsvc_NetSrvInfo1529;
 
         typedef struct{
-                uint32 dummy;
+                uint32 minfreeworkitems;
         } srvsvc_NetSrvInfo1530;
 
         typedef struct{
-                uint32 dummy;
+                uint32 maxmpxct;
         } srvsvc_NetSrvInfo1533;
 
         typedef struct{
-                uint32 dummy;
+                uint32 oplockbreakwait;
         } srvsvc_NetSrvInfo1534;
 
         typedef struct{
-                uint32 dummy;
+                uint32 oplockbreakresponsewait;
         } srvsvc_NetSrvInfo1535;
 
         typedef struct{
-                uint32 dummy;
+                uint32 enableoplocks;
         } srvsvc_NetSrvInfo1536;
 
         typedef struct{
-                uint32 dummy;
+                uint32 enableoplockforceclose;
         } srvsvc_NetSrvInfo1537;
 
         typedef struct{
-                uint32 dummy;
+                uint32 enablefcbopens;
         } srvsvc_NetSrvInfo1538;
 
         typedef struct{
-                uint32 dummy;
+                uint32 enableraw;
         } srvsvc_NetSrvInfo1539;
 
         typedef struct{
-                uint32 dummy;
+                uint32 enablesharednetdrives;
         } srvsvc_NetSrvInfo1540;
 
         typedef struct{
-                uint32 dummy;
+                uint32 minfreeconnections;
         } srvsvc_NetSrvInfo1541;
 
         typedef struct{
-                uint32 dummy;
+                uint32 maxfreeconnections;
         } srvsvc_NetSrvInfo1542;
 
         typedef struct{
-                uint32 dummy;
+                uint32 initsesstable;
         } srvsvc_NetSrvInfo1543;
 
         typedef struct{
-                uint32 dummy;
+                uint32 initconntable;
         } srvsvc_NetSrvInfo1544;
 
         typedef struct{
-                uint32 dummy;
+                uint32 initfiletable;
         } srvsvc_NetSrvInfo1545;
 
         typedef struct{
-                uint32 dummy;
+                uint32 initsearchtable;
         } srvsvc_NetSrvInfo1546;
 
         typedef struct{
-                uint32 dummy;
+                uint32 alertsched;
         } srvsvc_NetSrvInfo1547;
 
         typedef struct{
-                uint32 dummy;
+                uint32 errortreshold;
         } srvsvc_NetSrvInfo1548;
 
         typedef struct{
-                uint32 dummy;
+                uint32 networkerrortreshold;
         } srvsvc_NetSrvInfo1549;
 
         typedef struct{
-                uint32 dummy;
+                uint32 diskspacetreshold;
         } srvsvc_NetSrvInfo1550;
 
         typedef struct{
-                uint32 dummy;
+                uint32 maxlinkdelay;
         } srvsvc_NetSrvInfo1552;
 
         typedef struct{
-                uint32 dummy;
+                uint32 minlinkthroughput;
         } srvsvc_NetSrvInfo1553;
 
         typedef struct{
-                uint32 dummy;
+                uint32 linkinfovalidtime;
         } srvsvc_NetSrvInfo1554;
 
         typedef struct{
-                uint32 dummy;
+                uint32 scavqosinfoupdatetime;
         } srvsvc_NetSrvInfo1555;
 
         typedef struct{
-                uint32 dummy;
+                uint32 maxworkitemidletime;
         } srvsvc_NetSrvInfo1556;
 
 
        /******************/
        /* Function: 0x15 */
        WERROR srvsvc_NetSrvGetInfo(
-               [in]   unistr *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]   unistr *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 {
-               uint32 unknown;
-               lstring disk;
-               uint16 unknown2;
+               /*
+                * 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 {
-               uint32 unknown;
                uint32 count;
-               [size_is(count)] srvsvc_NetDiskInfo0 array[];
-       } srvsvc_NetDiskCtr0;
-
-       typedef union {
-               [case(0)]  srvsvc_NetDiskCtr0 *ctr0;
-       } srvsvc_NetDiskCtr;
+               [size_is(count), length_is(count)] srvsvc_NetDiskInfo0 *disks;
+       } srvsvc_NetDiskInfo;
 
        /******************/
        /* Function: 0x17 */
        WERROR srvsvc_NetDiskEnum(
-               [in]      unistr *server_unc,
+               [in,unique]      [string,charset(UTF16)] uint16 *server_unc,
                [in]      uint32 level,
-               [out]     uint32 count,
-               [in,switch_is(level)] srvsvc_NetDiskCtr ctr,
-               [out]     srvsvc_NetDiskCtr0 *ctr0,
-               [in]      uint32 unknown,
-               [out]     uint32 totalentries,
-               [in,out]  uint32 *resume_handle
+               [in,out,ref]  srvsvc_NetDiskInfo *info,
+               [in]      uint32 maxlen,
+               [out,ref]     uint32 *totalentries,
+               [in,out,unique]  uint32 *resume_handle
                );
 
-       /******************/
-       /* Function: 0x18 */
-       WERROR srvsvc_NETRSERVERSTATISTICSGET(
-               );
+/**************************/
+/* srvsvc_NetStatistics   */
+/**************************/
+       typedef struct {
+               uint32 start;
+               uint32 fopens;
+               uint32 devopens;
+               uint32 jobsqueued;
+               uint32 sopens;
+               uint32 stimeouts;
+               uint32 serrorout;
+               uint32 pwerrors;
+               uint32 permerrors;
+               uint32 syserrors;
+               uint32 bytessent_low;
+               uint32 bytessent_high;
+               uint32 bytesrcvd_low;
+               uint32 bytesrcvd_high;
+               uint32 avresponse;
+               uint32 reqbufneed;
+               uint32 bigbufneed;
+       } srvsvc_Statistics;
 
        /******************/
-       /* Function: 0x19 */
-       WERROR srvsvc_NETRSERVERTRANSPORTADD(
+       /* Function: 0x18 */
+       WERROR srvsvc_NetServerStatisticsGet(
+               [in,unique]      [string,charset(UTF16)] uint16 *server_unc,
+               [in,unique]      [string,charset(UTF16)] uint16 *service,
+               [in]      uint32 level,
+               [in]      uint32 options,
+               [out,ref]     srvsvc_Statistics **stats
                );
 
 /**************************/
 /* srvsvc_NetTransport    */
 /**************************/
-       typedef struct {
-               uint32 count;
-               uint8 addr[count];
-       } srvsvc_NetTransportAddress;
-
        typedef struct {
                uint32 vcs;
-               unistr *name;
-               srvsvc_NetTransportAddress *addr;
+               [string,charset(UTF16)] uint16 *name;
+               [size_is(addr_len)] uint8 *addr;
                uint32 addr_len;
-               unistr *net_addr;
+               [string,charset(UTF16)] uint16 *net_addr;
        } srvsvc_NetTransportInfo0;
 
+       /******************/
+       /* Function: 0x19 */
+       WERROR srvsvc_NetTransportAdd(
+               [in,unique]   [string,charset(UTF16)] uint16 *server_unc,
+               [in] uint32 level,
+               [in,switch_is(level)]   srvsvc_NetTransportInfo info
+               );
+
        typedef struct {
                uint32 count;
                [size_is(count)] srvsvc_NetTransportInfo0 *array;
 
        typedef struct {
                uint32 vcs;
-               unistr *name;
-               srvsvc_NetTransportAddress *addr;
+               [string,charset(UTF16)] uint16 *name;
+               [size_is(addr_len)] uint8 *addr;
                uint32 addr_len;
-               unistr *net_addr;
-               unistr *domain;
+               [string,charset(UTF16)] uint16 *net_addr;
+               [string,charset(UTF16)] uint16 *domain;
        } srvsvc_NetTransportInfo1;
 
        typedef struct {
        } srvsvc_NetTransportCtr1;
 
        typedef struct {
-               uint32 dummy;
+               uint32 vcs;
+               [string,charset(UTF16)] uint16 *name;
+               [size_is(addr_len)] uint8 *addr;
+               uint32 addr_len;
+               [string,charset(UTF16)] uint16 *net_addr;
+               [string,charset(UTF16)] uint16 *domain;
+               uint32 unknown;
        } srvsvc_NetTransportInfo2;
 
        typedef struct {
        } srvsvc_NetTransportCtr2;
 
        typedef struct {
-               uint32 dummy;
+               uint32 vcs;
+               [string,charset(UTF16)] uint16 *name;
+               [size_is(addr_len)] uint8 *addr;
+               uint32 addr_len;
+               [string,charset(UTF16)] uint16 *net_addr;
+               [string,charset(UTF16)] uint16 *domain;
+               uint32 unknown1;
+               uint32 unknown2;
+               uint8 unknown3[256];
        } srvsvc_NetTransportInfo3;
 
        typedef struct {
                [size_is(count)] srvsvc_NetTransportInfo3 *array;
        } srvsvc_NetTransportCtr3;
 
-       typedef union {
-               [case(0)] srvsvc_NetTransportInfo0 *info0;
-               [case(1)] srvsvc_NetTransportInfo1 *info1;
-               [case(2)] srvsvc_NetTransportInfo2 *info2;
-               [case(3)] srvsvc_NetTransportInfo3 *info3;
-               [default];
-       } srvsvc_NetTransportInfo;
-
        typedef union {
                [case(0)] srvsvc_NetTransportCtr0 *ctr0;
                [case(1)] srvsvc_NetTransportCtr1 *ctr1;
                [default];
        } srvsvc_NetTransportCtr;
 
+       typedef struct {
+               uint32 level;
+               [switch_is(level)] srvsvc_NetTransportCtr ctr;
+       } srvsvc_NetTransportInfoCtr;
+
        /******************/
        /* Function: 0x1a */
        WERROR srvsvc_NetTransportEnum(
-               [in]   unistr *server_unc,
-               [in,out] uint32 level,
-               [in,out,switch_is(level)]   srvsvc_NetTransportCtr ctr,
+               [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_NETRSERVERTRANSPORTDEL(
+       WERROR srvsvc_NetTransportDel(
+               [in,unique]   [string,charset(UTF16)] uint16 *server_unc,
+               [in]    uint32 level,
+               [in]    srvsvc_NetTransportInfo0 *info0
                );
 
+/**************************/
+/* srvsvc_NetRemoteTOD    */
+/**************************/
+       typedef struct {
+               uint32 elapsed; /* time(NULL) */
+               uint32 msecs; /* milliseconds till system reboot (uptime) */
+               uint32 hours;
+               uint32 mins;
+               uint32 secs;
+               uint32 hunds;
+               int32 timezone; /* in minutes */
+               uint32 tinterval; /* clock tick interval in 0.0001 second units; 310 on windows */
+               uint32 day;
+               uint32 month;
+               uint32 year;
+               uint32 weekday;
+       } srvsvc_NetRemoteTODInfo;
+
        /******************/
        /* Function: 0x1c */
-       WERROR srvsvc_NET_REMOTE_TOD(
+       WERROR srvsvc_NetRemoteTOD(
+               [in,unique]   [string,charset(UTF16)] uint16 *server_unc,
+               [out,ref]     srvsvc_NetRemoteTODInfo **info
                );
 
 /**************************/
 /**************************/
        /******************/
        /* Function: 0x1d */
-       WERROR srvsvc_NETRSERVERSETSERVICEBITS(
+       WERROR srvsvc_NetSetServiceBits(
+               [in,unique]   [string,charset(UTF16)] uint16 *server_unc,
+               [in,unique]   [string,charset(UTF16)] uint16 *transport,
+               [in]   uint32 servicebits,
+               [in]   uint32 updateimmediately
                );
 
 /**************************/
 /**************************/
        /******************/
        /* Function: 0x1e */
-       WERROR srvsvc_NETRPRPATHTYPE(
+       WERROR srvsvc_NetPathType(
+               [in,unique]   [string,charset(UTF16)] uint16 *server_unc,
+               [in]   [string,charset(UTF16)] uint16 path[],
+               [in]   uint32 pathflags,
+               [out,ref]   uint32 *pathtype
                );
 
        /******************/
        /* Function: 0x1f */
-       WERROR srvsvc_NETRPRPATHCANONICALIZE(
+       WERROR srvsvc_NetPathCanonicalize(
+               [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,ref] uint32 *pathtype,
+               [in]    uint32 pathflags
                );
 
        /******************/
        /* Function: 0x20 */
-       WERROR srvsvc_NETRPRPATHCOMPARE(
+       WERROR srvsvc_NetPathCompare(
+               [in,unique]   [string,charset(UTF16)] uint16 *server_unc,
+               [in]   [string,charset(UTF16)] uint16 path1[],
+               [in]   [string,charset(UTF16)] uint16 path2[],
+               [in]    uint32 pathtype,
+               [in]    uint32 pathflags
                );
 
 /**************************/
 /**************************/
        /******************/
        /* Function: 0x21 */
-       WERROR srvsvc_NET_NAME_VALIDATE(
+       WERROR srvsvc_NetNameValidate(
+               [in,unique]   [string,charset(UTF16)] uint16 *server_unc,
+               [in]   [string,charset(UTF16)] uint16 name[],
+               [in]    uint32 name_type,
+               [in]    uint32 flags
                );
 
        /******************/
        /* Function: 0x22 */
-       WERROR srvsvc_NETRPRNAMECANONICALIZE(
+       [todo] WERROR srvsvc_NETRPRNAMECANONICALIZE(
                );
 
        /******************/
        /* Function: 0x23 */
-       WERROR srvsvc_NETRPRNAMECOMPARE(
+       WERROR srvsvc_NetPRNameCompare(
+               [in,unique]   [string,charset(UTF16)] uint16 *server_unc,
+               [in]   [string,charset(UTF16)] uint16 name1[],
+               [in]   [string,charset(UTF16)] uint16 name2[],
+               [in]    uint32 name_type,
+               [in]    uint32 flags
                );
 
 /**************************/
        /* Note, there must be some way to return entries read vs 
           total entries ... */
        WERROR srvsvc_NetShareEnum(
-               [in]       unistr *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_NETRSHAREDELSTART(
+       WERROR srvsvc_NetShareDelStart(
+               [in,unique]       [string,charset(UTF16)] uint16 *server_unc,
+               [in]       [string,charset(UTF16)] uint16 share[],
+               [in]       uint32 reserved,
+               [out,unique] policy_handle *hnd
                );
 
        /******************/
        /* Function: 0x26 */
-       WERROR srvsvc_NETRSHAREDELCOMMIT(
+       WERROR srvsvc_NetShareDelCommit(
+               [in, out,unique] policy_handle *hnd
                );
 
        /******************/
        /* Function: 0x27 */
-       WERROR srvsvc_NET_FILE_QUERY_SECDESC(
+       WERROR srvsvc_NetGetFileSecurity(
+               [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,ref]  sec_desc_buf **sd_buf
                );
 
        /******************/
        /* Function: 0x28 */
-       WERROR srvsvc_NET_FILE_SET_SECDESC(
+       WERROR srvsvc_NetSetFileSecurity(
+               [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,ref]   sec_desc_buf *sd_buf
                );
 
+
+
+       typedef [switch_type(uint32)] union {
+               [case(0)] srvsvc_NetTransportInfo0 info0;
+               [case(1)] srvsvc_NetTransportInfo1 info1;
+               [case(2)] srvsvc_NetTransportInfo2 info2;
+               [case(3)] srvsvc_NetTransportInfo3 info3;
+       } srvsvc_NetTransportInfo;
+
        /******************/
        /* Function: 0x29 */
-       WERROR srvsvc_NETRSERVERTRANSPORTADDEX(
+       WERROR srvsvc_NetServerTransportAddEx(
+               [in,unique]   [string,charset(UTF16)] uint16 *server_unc,
+               [in] uint32 level,
+               [in,switch_is(level)]   srvsvc_NetTransportInfo info
                );
 
        /******************/
        /* Function: 0x2a */
-       WERROR srvsvc_NETRSERVERSETSERVICEBITSEX(
+       WERROR srvsvc_NetServerSetServiceBitsEx(
+               [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
                );
 
        /******************/
        /* 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(
                );
 }