Merge branch 'v4-0-trivial' into v4-0-python
[ira/wip.git] / source / librpc / idl / wkssvc.idl
1 #include "idl_types.h"
2
3 /*
4   wkssvc interface definitions
5 */
6
7 import "srvsvc.idl", "lsa.idl";
8
9 [ uuid("6bffd098-a112-3610-9833-46c3f87e345a"),
10   version(1.0),
11   pointer_default(unique),
12   helpstring("Workstation Service"),
13   endpoint("ncacn_np:[\\pipe\\wkssvc]","ncacn_ip_tcp:","ncalrpc:")
14 ] interface wkssvc
15 {
16         typedef [v1_enum] enum srvsvc_PlatformId srvsvc_PlatformId;
17
18 #define BOOL uint32
19
20         /******************/
21         /* Function: 0x00 */
22
23         typedef struct {
24                 srvsvc_PlatformId platform_id;
25                 [string,charset(UTF16)] uint16 *server_name;
26                 [string,charset(UTF16)] uint16 *domain_name;
27                 uint32 version_major;
28                 uint32 version_minor;
29         } wkssvc_NetWkstaInfo100;
30
31         typedef struct {
32                 srvsvc_PlatformId platform_id;
33                 [string,charset(UTF16)] uint16 *server_name;
34                 [string,charset(UTF16)] uint16 *domain_name;
35                 uint32 version_major;
36                 uint32 version_minor;
37                 [string,charset(UTF16)] uint16 *lan_root;
38         } wkssvc_NetWkstaInfo101;
39
40         typedef struct {
41                 srvsvc_PlatformId platform_id;
42                 [string,charset(UTF16)] uint16 *server_name;
43                 [string,charset(UTF16)] uint16 *domain_name;
44                 uint32 version_major;
45                 uint32 version_minor;
46                 [string,charset(UTF16)] uint16 *lan_root;
47                 uint32 logged_on_users;
48         } wkssvc_NetWkstaInfo102;
49
50         /* FIXME: 302, 402 */
51
52         typedef struct {
53                 uint32 char_wait;
54                 uint32 collection_time;
55                 uint32 maximum_collection_count;
56                 uint32 keep_connection;
57                 uint32 max_commands;
58                 uint32 session_timeout;
59                 uint32 size_char_buf;
60                 uint32 max_threads;
61                 uint32 lock_quota;
62                 uint32 lock_increment;
63                 uint32 lock_maximum;
64                 uint32 pipe_increment;
65                 uint32 pipe_maximum;
66                 uint32 cache_file_timeout;
67                 uint32 dormant_file_limit;
68                 uint32 read_ahead_throughput;
69                 uint32 num_mailslot_buffers;
70                 uint32 num_srv_announce_buffers;
71                 uint32 max_illegal_dgram_events;
72                 uint32 dgram_event_reset_freq;
73                 BOOL log_election_packets;
74                 BOOL use_opportunistic_locking;
75                 BOOL use_unlock_behind;
76                 BOOL use_close_behind;
77                 BOOL buf_named_pipes;
78                 BOOL use_lock_read_unlock;
79                 BOOL utilize_nt_caching;
80                 BOOL use_raw_read;
81                 BOOL use_raw_write;
82                 BOOL use_write_raw_data;
83                 BOOL use_encryption;
84                 BOOL buf_files_deny_write;
85                 BOOL buf_read_only_files;
86                 BOOL force_core_create_mode;
87                 BOOL use_512_byte_max_transfer;
88         } wkssvc_NetWkstaInfo502;
89
90         typedef struct {
91                 uint32 char_wait;
92         } wkssvc_NetWkstaInfo1010;
93
94         typedef struct {
95                 uint32 collection_time;
96         } wkssvc_NetWkstaInfo1011;
97
98         typedef struct {
99                 uint32 maximum_collection_count;
100         } wkssvc_NetWkstaInfo1012;
101
102         typedef struct {
103                 uint32 keep_connection;
104         } wkssvc_NetWkstaInfo1013;
105
106         typedef struct {
107                 uint32 session_timeout;
108         } wkssvc_NetWkstaInfo1018;
109
110         typedef struct {
111                 uint32 size_char_buf;
112         } wkssvc_NetWkstaInfo1023;
113
114         typedef struct {
115                 uint32 errorlog_sz;
116         } wkssvc_NetWkstaInfo1027;
117
118         /* downlevel */
119         typedef struct {
120                 uint32 print_buf_time;
121         } wkssvc_NetWkstaInfo1028;
122
123         /* downlevel */
124         typedef struct {
125                 uint32 wrk_heuristics;
126         } wkssvc_NetWkstaInfo1032;
127
128         typedef struct {
129                 uint32 max_threads;
130         } wkssvc_NetWkstaInfo1033;
131
132         typedef struct {
133                 uint32 lock_quota;
134         } wkssvc_NetWkstaInfo1041;
135
136         typedef struct {
137                 uint32 lock_increment;
138         } wkssvc_NetWkstaInfo1042;
139
140         typedef struct {
141                 uint32 lock_maximum;
142         } wkssvc_NetWkstaInfo1043;
143
144         typedef struct {
145                 uint32 pipe_increment;
146         } wkssvc_NetWkstaInfo1044;
147
148         typedef struct {
149                 uint32 pipe_maximum;
150         } wkssvc_NetWkstaInfo1045;
151
152         typedef struct {
153                 uint32 dormant_file_limit;
154         } wkssvc_NetWkstaInfo1046;
155
156         typedef struct {
157                 uint32 cache_file_timeout;
158         } wkssvc_NetWkstaInfo1047;
159
160         typedef struct {
161                 uint32 use_opportunistic_locking;
162         } wkssvc_NetWkstaInfo1048;
163
164         typedef struct {
165                 uint32 use_unlock_behind;
166         } wkssvc_NetWkstaInfo1049;
167
168         typedef struct {
169                 uint32 use_close_behind;
170         } wkssvc_NetWkstaInfo1050;
171
172         typedef struct {
173                 uint32 buf_named_pipes;
174         } wkssvc_NetWkstaInfo1051;
175
176         typedef struct {
177                 uint32 use_lock_read_unlock;
178         } wkssvc_NetWkstaInfo1052;
179
180         typedef struct {
181                 uint32 utilize_nt_caching;
182         } wkssvc_NetWkstaInfo1053;
183
184         typedef struct {
185                 uint32 use_raw_read;
186         } wkssvc_NetWkstaInfo1054;
187
188         typedef struct {
189                 uint32 use_raw_write;
190         } wkssvc_NetWkstaInfo1055;
191
192         typedef struct {
193                 uint32 use_write_raw_data;
194         } wkssvc_NetWkstaInfo1056;
195
196         typedef struct {
197                 uint32 use_encryption;
198         } wkssvc_NetWkstaInfo1057;
199
200         typedef struct {
201                 uint32 buf_files_deny_write;
202         } wkssvc_NetWkstaInfo1058;
203
204         typedef struct {
205                 uint32 buf_read_only_files;
206         } wkssvc_NetWkstaInfo1059;
207
208         typedef struct {
209                 uint32 force_core_create_mode;
210         } wkssvc_NetWkstaInfo1060;
211
212         typedef struct {
213                 uint32 use_512_byte_max_transfer;
214         } wkssvc_NetWkstaInfo1061;
215
216         typedef struct {
217                 uint32 read_ahead_throughput;
218         } wkssvc_NetWkstaInfo1062;
219
220         typedef union {
221                 [case(100)] wkssvc_NetWkstaInfo100 *info100;
222                 [case(101)] wkssvc_NetWkstaInfo101 *info101;
223                 [case(102)] wkssvc_NetWkstaInfo102 *info102;
224                 [case(502)] wkssvc_NetWkstaInfo502 *info502;
225                 [case(1010)] wkssvc_NetWkstaInfo1010 *info1010;
226                 [case(1011)] wkssvc_NetWkstaInfo1011 *info1011;
227                 [case(1012)] wkssvc_NetWkstaInfo1012 *info1012;
228                 [case(1013)] wkssvc_NetWkstaInfo1013 *info1013;
229                 [case(1018)] wkssvc_NetWkstaInfo1018 *info1018;
230                 [case(1023)] wkssvc_NetWkstaInfo1023 *info1023;
231                 [case(1027)] wkssvc_NetWkstaInfo1027 *info1027;
232                 [case(1028)] wkssvc_NetWkstaInfo1028 *info1028;
233                 [case(1032)] wkssvc_NetWkstaInfo1032 *info1032;
234                 [case(1033)] wkssvc_NetWkstaInfo1033 *info1033;
235                 [case(1041)] wkssvc_NetWkstaInfo1041 *info1041;
236                 [case(1042)] wkssvc_NetWkstaInfo1042 *info1042;
237                 [case(1043)] wkssvc_NetWkstaInfo1043 *info1043;
238                 [case(1044)] wkssvc_NetWkstaInfo1044 *info1044;
239                 [case(1045)] wkssvc_NetWkstaInfo1045 *info1045;
240                 [case(1046)] wkssvc_NetWkstaInfo1046 *info1046;
241                 [case(1047)] wkssvc_NetWkstaInfo1047 *info1047;
242                 [case(1048)] wkssvc_NetWkstaInfo1048 *info1048;
243                 [case(1049)] wkssvc_NetWkstaInfo1049 *info1049;
244                 [case(1050)] wkssvc_NetWkstaInfo1050 *info1050;
245                 [case(1051)] wkssvc_NetWkstaInfo1051 *info1051;
246                 [case(1052)] wkssvc_NetWkstaInfo1052 *info1052;
247                 [case(1053)] wkssvc_NetWkstaInfo1053 *info1053;
248                 [case(1054)] wkssvc_NetWkstaInfo1054 *info1054;
249                 [case(1055)] wkssvc_NetWkstaInfo1055 *info1055;
250                 [case(1056)] wkssvc_NetWkstaInfo1056 *info1056;
251                 [case(1057)] wkssvc_NetWkstaInfo1057 *info1057;
252                 [case(1058)] wkssvc_NetWkstaInfo1058 *info1058;
253                 [case(1059)] wkssvc_NetWkstaInfo1059 *info1059;
254                 [case(1060)] wkssvc_NetWkstaInfo1060 *info1060;
255                 [case(1061)] wkssvc_NetWkstaInfo1061 *info1061;
256                 [case(1062)] wkssvc_NetWkstaInfo1062 *info1062;
257                 [default] ;
258         } wkssvc_NetWkstaInfo;
259
260         WERROR wkssvc_NetWkstaGetInfo(
261                 [in,unique]   [string,charset(UTF16)] uint16 *server_name,
262                 [in]   uint32 level,
263                 [out,switch_is(level),ref]  wkssvc_NetWkstaInfo *info
264                 );
265
266
267         /******************/
268         /* Function: 0x01 */
269         WERROR wkssvc_NetWkstaSetInfo(
270                 [in,unique]   [string,charset(UTF16)] uint16 *server_name,
271                 [in]   uint32 level,
272                 [in,switch_is(level),ref]  wkssvc_NetWkstaInfo *info,
273                 [in,out,ref]   uint32 *parm_error
274                 );
275
276
277         /*****************************/
278         /* Function        0x02      */
279         typedef struct {
280                 [string,charset(UTF16)] uint16 *user_name;
281         } wkssvc_NetrWkstaUserInfo0;
282
283         typedef struct {
284                 uint32 entries_read;
285                 [size_is(entries_read)] wkssvc_NetrWkstaUserInfo0 *user0;
286         } wkssvc_NetWkstaEnumUsersCtr0;
287
288         typedef struct {
289                 [string,charset(UTF16)] uint16 *user_name;
290                 [string,charset(UTF16)] uint16 *logon_domain;
291                 [string,charset(UTF16)] uint16 *other_domains;
292                 [string,charset(UTF16)] uint16 *logon_server;
293         } wkssvc_NetrWkstaUserInfo1;
294
295         typedef struct {
296                 uint32 entries_read;
297                 [size_is(entries_read)] wkssvc_NetrWkstaUserInfo1 *user1;
298         } wkssvc_NetWkstaEnumUsersCtr1;
299
300         typedef [switch_type(uint32)] union {
301                 [case(0)] wkssvc_NetWkstaEnumUsersCtr0 *user0;
302                 [case(1)] wkssvc_NetWkstaEnumUsersCtr1 *user1;
303         } wkssvc_NetWkstaEnumUsersCtr;
304
305         typedef struct {
306                 uint32 level;
307                 [switch_is(level)] wkssvc_NetWkstaEnumUsersCtr ctr;
308         } wkssvc_NetWkstaEnumUsersInfo;
309
310         WERROR wkssvc_NetWkstaEnumUsers(
311                 [in,unique] [string,charset(UTF16)] uint16 *server_name,
312                 [in,out,ref] wkssvc_NetWkstaEnumUsersInfo *info,
313                 [in] uint32 prefmaxlen,
314                 [out,ref] uint32 *entries_read,
315                 [in,out,unique] uint32 *resume_handle
316                 );
317
318         /*****************************/
319         /* Function        0x03      */
320         typedef struct {
321                 [string,charset(UTF16)] uint16 *other_domains;
322         } wkssvc_NetrWkstaUserInfo1101;
323
324         typedef [switch_type(uint32)] union {
325                 [case(0)] wkssvc_NetrWkstaUserInfo0 *info0;
326                 [case(1)] wkssvc_NetrWkstaUserInfo1 *info1;
327                 [case(1101)] wkssvc_NetrWkstaUserInfo1101 *info1101;
328         } wkssvc_NetrWkstaUserInfo;
329
330         WERROR wkssvc_NetrWkstaUserGetInfo(
331                 [in,unique] [string,charset(UTF16)] uint16 *unknown,
332                 [in] uint32 level,
333                 [out,ref] [switch_is(level)] wkssvc_NetrWkstaUserInfo *info
334                 );
335
336         /*****************************/
337         /* Function        0x04      */
338         WERROR wkssvc_NetrWkstaUserSetInfo(
339                 [in,unique] [string,charset(UTF16)] uint16 *unknown,
340                 [in] uint32 level,
341                 [in,ref] [switch_is(level)] wkssvc_NetrWkstaUserInfo *info,
342                 [in,out,unique] uint32 *parm_err
343                 );
344
345         /*****************************/
346         /* Function        0x05      */
347
348         typedef struct {
349                 uint32 quality_of_service;
350                 uint32 vc_count;
351                 [string,charset(UTF16)] uint16 *name;
352                 [string,charset(UTF16)] uint16 *address;
353                 uint32 wan_link;
354         } wkssvc_NetWkstaTransportInfo0;
355
356         typedef struct {
357                 uint32 count;
358                 [size_is(count)] wkssvc_NetWkstaTransportInfo0 *array;
359         } wkssvc_NetWkstaTransportCtr0;
360
361         typedef union {
362                 [case(0)] wkssvc_NetWkstaTransportCtr0 *ctr0;
363         } wkssvc_NetWkstaTransportCtr;
364
365         typedef struct {
366                 uint32 level;
367                 [switch_is(level)] wkssvc_NetWkstaTransportCtr ctr;
368         } wkssvc_NetWkstaTransportInfo;
369
370         WERROR wkssvc_NetWkstaTransportEnum (
371                 [in,unique]         [string,charset(UTF16)] uint16 *server_name,
372                 [in,out,ref] wkssvc_NetWkstaTransportInfo *info,
373                 [in]         uint32 max_buffer,
374                 [out,ref]    uint32 *total_entries,
375                 [in,out,unique]     uint32 *resume_handle
376                 );
377
378         /*****************************/
379         /* Function        0x06      */
380         /* only supported on NT */
381         WERROR wkssvc_NetrWkstaTransportAdd(
382                 [in,unique] [string,charset(UTF16)] uint16 *server_name,
383                 [in] uint32 level, /* must be 0 */
384                 [in,ref] wkssvc_NetWkstaTransportInfo0 *info0,
385                 [in,out,unique] uint32 *parm_err
386                 );
387
388         /*****************************/
389         /* Function        0x07      */
390         /* only supported on NT */
391         WERROR wkssvc_NetrWkstaTransportDel(
392                 [in,unique] [string,charset(UTF16)] uint16 *server_name,
393                 [in,unique] [string,charset(UTF16)] uint16 *transport_name,
394                 [in] uint32 unknown3
395                 );
396
397         /*****************************/
398         /* Function        0x08      */
399         typedef struct {
400                 [string,charset(UTF16)] uint16 *unknown1;
401                 [string,charset(UTF16)] uint16 *unknown2;
402         } wkssvc_NetrUseInfo3;
403
404         typedef struct {
405                 [string,charset(UTF16)] uint16 *local;
406                 [string,charset(UTF16)] uint16 *remote;
407                 [string,charset(UTF16)] uint16 *password;
408                 uint32 status;
409                 uint32 asg_type;
410                 uint32 ref_count;
411                 uint32 use_count;
412                 [string,charset(UTF16)] uint16 *user_name;
413                 [string,charset(UTF16)] uint16 *domain_name;
414         } wkssvc_NetrUseInfo2;
415
416         typedef struct {
417                 [string,charset(UTF16)] uint16 *local;
418                 [string,charset(UTF16)] uint16 *remote;
419                 [string,charset(UTF16)] uint16 *password;
420                 uint32 status;
421                 uint32 asg_type;
422                 uint32 ref_count;
423                 uint32 use_count;
424         } wkssvc_NetrUseInfo1;
425
426         typedef struct {
427                 [string,charset(UTF16)] uint16 *local;
428                 [string,charset(UTF16)] uint16 *remote;
429         } wkssvc_NetrUseInfo0;
430
431         typedef [switch_type(uint32)] union {
432                 [case(0)] wkssvc_NetrUseInfo0 *info0;
433                 [case(1)] wkssvc_NetrUseInfo1 *info1;
434                 [case(2)] wkssvc_NetrUseInfo2 *info2;
435                 [case(3)] wkssvc_NetrUseInfo3 *info3;
436         } wkssvc_NetrUseGetInfoCtr;
437
438         WERROR wkssvc_NetrUseAdd(
439                 [in,unique] [string,charset(UTF16)] uint16 *server_name,
440                 [in] uint32 level,
441                 [in,ref] [switch_is(level)] wkssvc_NetrUseGetInfoCtr *ctr,
442                 [in,out,unique] uint32 *parm_err
443                 );
444
445         /*****************************/
446         /* Function        0x09      */
447         WERROR wkssvc_NetrUseGetInfo(
448                 [in,unique] [string,charset(UTF16)] uint16 *server_name,
449                 [in,ref] [string,charset(UTF16)] uint16 *use_name,
450                 [in] uint32 level,
451                 [out,ref] [switch_is(level)] wkssvc_NetrUseGetInfoCtr *ctr
452                 );
453
454         /*****************************/
455         /* Function        0x0a      */
456         WERROR wkssvc_NetrUseDel(
457                 [in,unique] [string,charset(UTF16)] uint16 *server_name,
458                 [in,ref] [string,charset(UTF16)] uint16 *use_name,
459                 [in] uint32 force_cond
460                 );
461
462         /*****************************/
463         /* Function        0x0b      */
464         typedef struct {
465                 uint32 count;
466                 [size_is(count)] wkssvc_NetrUseInfo2 *array;
467         } wkssvc_NetrUseEnumCtr2;
468
469         typedef struct {
470                 uint32 count;
471                 [size_is(count)] wkssvc_NetrUseInfo1 *array;
472         } wkssvc_NetrUseEnumCtr1;
473
474         typedef struct {
475                 uint32 count;
476                 [size_is(count)] wkssvc_NetrUseInfo0 *array;
477         } wkssvc_NetrUseEnumCtr0;
478
479         typedef [switch_type(uint32)] union {
480                 [case(0)] wkssvc_NetrUseEnumCtr0 *ctr0;
481                 [case(1)] wkssvc_NetrUseEnumCtr1 *ctr1;
482                 [case(2)] wkssvc_NetrUseEnumCtr2 *ctr2;
483         } wkssvc_NetrUseEnumCtr;
484
485         typedef struct {
486                 uint32 level;
487                 [switch_is(level)] wkssvc_NetrUseEnumCtr ctr;
488         } wkssvc_NetrUseEnumInfo;
489
490         WERROR wkssvc_NetrUseEnum(
491                 [in,unique] [string,charset(UTF16)] uint16 *server_name,
492                 [in,out,ref] wkssvc_NetrUseEnumInfo *info,
493                 [in] uint32 prefmaxlen,
494                 [out,ref] uint32 *entries_read,
495                 [in,out,unique] uint32 *resume_handle
496                 );
497
498         /*****************************/
499         /* Function        0x0c      */
500         WERROR wkssvc_NetrMessageBufferSend(
501                 [in,unique] [string,charset(UTF16)] uint16 *server_name,
502                 [in,ref] [string,charset(UTF16)] uint16 *message_name,
503                 [in,unique] [string,charset(UTF16)] uint16 *message_sender_name,
504                 [in,ref] [size_is(message_size)] uint8 *message_buffer,
505                 [in] uint32 message_size
506                 );
507
508         /*****************************/
509         /* Function        0x0d      */
510         typedef struct {
511                 hyper unknown1;
512                 hyper unknown2;
513                 hyper unknown3;
514                 hyper unknown4;
515                 hyper unknown5;
516                 hyper unknown6;
517                 hyper unknown7;
518                 hyper unknown8;
519                 hyper unknown9;
520                 hyper unknown10;
521                 hyper unknown11;
522                 hyper unknown12;
523                 hyper unknown13;
524                 uint32 unknown14;
525                 uint32 unknown15;
526                 uint32 unknown16;
527                 uint32 unknown17;
528                 uint32 unknown18;
529                 uint32 unknown19;
530                 uint32 unknown20;
531                 uint32 unknown21;
532                 uint32 unknown22;
533                 uint32 unknown23;
534                 uint32 unknown24;
535                 uint32 unknown25;
536                 uint32 unknown26;
537                 uint32 unknown27;
538                 uint32 unknown28;
539                 uint32 unknown29;
540                 uint32 unknown30;
541                 uint32 unknown31;
542                 uint32 unknown32;
543                 uint32 unknown33;
544                 uint32 unknown34;
545                 uint32 unknown35;
546                 uint32 unknown36;
547                 uint32 unknown37;
548                 uint32 unknown38;
549                 uint32 unknown39;
550                 uint32 unknown40;
551         } wkssvc_NetrWorkstationStatistics;
552
553         WERROR wkssvc_NetrWorkstationStatisticsGet(
554                 [in,unique] [string,charset(UTF16)] uint16 *server_name,
555                 [in,unique] [string,charset(UTF16)] uint16 *unknown2,
556                 [in] uint32 unknown3,
557                 [in] uint32 unknown4,
558                 [out,ref] wkssvc_NetrWorkstationStatistics **info
559                 );
560
561         /*****************************/
562         /* Function        0x0e      */
563         WERROR wkssvc_NetrLogonDomainNameAdd(
564                 [in,ref] [string,charset(UTF16)] uint16 *domain_name
565                 );
566
567         /*****************************/
568         /* Function        0x0f      */
569         WERROR wkssvc_NetrLogonDomainNameDel(
570                 [in,ref] [string,charset(UTF16)] uint16 *domain_name
571                 );
572
573         /*****************************/
574         /* Function        0x10      */
575         WERROR wkssvc_NetrJoinDomain(
576                 [in,unique] [string,charset(UTF16)] uint16 *server_name,
577                 [in,ref] [string,charset(UTF16)] uint16 *domain_name,
578                 [in,unique] [string,charset(UTF16)] uint16 *account_ou,
579                 [in,unique] [string,charset(UTF16)] uint16 *Account,
580                 [in,unique] [string,charset(UTF16)] uint16 *password,
581                 [in] wkssvc_joinflags join_flags
582                 );
583
584         /*****************************/
585         /* Function        0x11      */
586         WERROR wkssvc_NetrUnjoinDomain(
587                 [in,unique] [string,charset(UTF16)] uint16 *server_name,
588                 [in,unique] [string,charset(UTF16)] uint16 *Account,
589                 [in,unique] [string,charset(UTF16)] uint16 *password,
590                 [in] wkssvc_joinflags unjoin_flags
591                 );
592
593         /*****************************/
594         /* Function        0x12      */
595         typedef [bitmap32bit] bitmap {
596                 /* TRUE: create the account in the domain */
597                 WKSSVC_JOIN_FLAGS_ACCOUNT_CREATE        = 0x00000002
598         } wkssvc_renameflags;
599
600         WERROR wkssvc_NetrRenameMachineInDomain(
601                 [in,unique] [string,charset(UTF16)] uint16 *server_name,
602                 [in,unique] [string,charset(UTF16)] uint16 *NewMachineName,
603                 [in,unique] [string,charset(UTF16)] uint16 *Account,
604                 [in,unique] [string,charset(UTF16)] uint16 *password,
605                 [in] wkssvc_renameflags RenameOptions
606                 );
607
608         /*****************************/
609         /* Function        0x13      */
610         typedef enum {
611                 NetSetupUnknown = 0,
612                 NetSetupMachine = 1,
613                 NetSetupWorkgroup = 2,
614                 NetSetupDomain = 3,
615                 NetSetupNonExistentDomain = 4,
616                 NetSetupDnsMachine = 5
617         } wkssvc_NetValidateNameType;
618
619         WERROR wkssvc_NetrValidateName(
620                 [in,unique] [string,charset(UTF16)] uint16 *server_name,
621                 [in,ref] [string,charset(UTF16)] uint16 *name,
622                 [in,unique] [string,charset(UTF16)] uint16 *Account,
623                 [in,unique] [string,charset(UTF16)] uint16 *Password,
624                 [in] wkssvc_NetValidateNameType name_type
625                 );
626
627         /*****************************/
628         /* Function        0x14      */
629         typedef enum {
630                 NetSetupUnknownStatus = 0,
631                 NetSetupUnjoined = 1,
632                 NetSetupWorkgroupName = 2,
633                 NetSetupDomainName = 3
634         } wkssvc_NetJoinStatus;
635
636         WERROR wkssvc_NetrGetJoinInformation(
637                 [in,unique] [string,charset(UTF16)] uint16 *server_name,
638                 [in,out,ref] [string,charset(UTF16)] uint16 **name_buffer,
639                 [out,ref] wkssvc_NetJoinStatus *name_type
640                 );
641
642         /*****************************/
643         /* Function        0x15      */
644         WERROR wkssvc_NetrGetJoinableOus(
645                 [in,unique] [string,charset(UTF16)] uint16 *server_name,
646                 [in,ref] [string,charset(UTF16)] uint16 *domain_name,
647                 [in,unique] [string,charset(UTF16)] uint16 *Account,
648                 [in,unique] [string,charset(UTF16)] uint16 *unknown,
649                 [in,out,ref] uint32 *num_ous,
650                 /*
651                  * this is a [ref] pointer to a [unique] pointer to an
652                  * array of [unique] pointers to a string array
653                  */
654                 [out,ref] [size_is(,*num_ous)] [string,charset(UTF16)] uint16 ***ous
655                 );
656
657         typedef [flag(NDR_PAHEX)] struct {
658                 uint8 data[524];
659         } wkssvc_PasswordBuffer;
660
661         typedef [bitmap32bit] bitmap {
662                 WKSSVC_JOIN_FLAGS_JOIN_WITH_NEW_NAME    = 0x00000400,
663                 WKSSVC_JOIN_FLAGS_JOIN_DC_ACCOUNT       = 0x00000200,
664                 /* TRUE: defer setting the SPN and dNSHostName until a rename operation */
665                 WKSSVC_JOIN_FLAGS_DEFER_SPN             = 0x00000100,
666
667                 /* TRUE: set the machine password to the provided one after the join completes */
668                 WKSSVC_JOIN_FLAGS_MACHINE_PWD_PASSED    = 0x00000080,
669
670                 /* TRUE: perform an unsecured join */
671                 WKSSVC_JOIN_FLAGS_JOIN_UNSECURE         = 0x00000040,
672
673                 /* TRUE: allow the join to complete even if the account already exists */
674                 WKSSVC_JOIN_FLAGS_DOMAIN_JOIN_IF_JOINED = 0x00000020,
675
676                 /* TRUE: this join is part of a w9x upgrade */
677                 WKSSVC_JOIN_FLAGS_WIN9X_UPGRADE         = 0x00000010,
678
679                 /* TRUE: delete the account when the domain is left */
680                 WKSSVC_JOIN_FLAGS_ACCOUNT_DELETE        = 0x00000004,
681
682                 /* TRUE: create the account in the domain */
683                 WKSSVC_JOIN_FLAGS_ACCOUNT_CREATE        = 0x00000002,
684
685                 /* TRUE: join domain    FALSE: join workgroup */
686                 WKSSVC_JOIN_FLAGS_JOIN_TYPE             = 0x00000001
687
688         } wkssvc_joinflags;
689
690         /*****************************/
691         /* Function        0x16      */
692         WERROR wkssvc_NetrJoinDomain2 (
693                 [in,unique]  [string,charset(UTF16)] uint16 *server_name,
694                 [in,ref]     [string,charset(UTF16)] uint16 *domain_name,
695                 [in,unique]  [string,charset(UTF16)] uint16 *account_ou,
696                 [in,unique]  [string,charset(UTF16)] uint16 *admin_account,
697                 [in,unique]  wkssvc_PasswordBuffer *encrypted_password,
698                 [in]         wkssvc_joinflags join_flags
699                 );
700
701         /*****************************/
702         /* Function        0x17      */
703         WERROR wkssvc_NetrUnjoinDomain2 (
704                 [in,unique] [string,charset(UTF16)] uint16 *server_name,
705                 [in,unique] [string,charset(UTF16)] uint16 *account,
706                 [in,unique] wkssvc_PasswordBuffer *encrypted_password,
707                 [in] wkssvc_joinflags unjoin_flags
708                 );
709
710         /*****************************/
711         /* Function        0x18      */
712         WERROR wkssvc_NetrRenameMachineInDomain2(
713                 [in,unique] [string,charset(UTF16)] uint16 *server_name,
714                 [in,unique] [string,charset(UTF16)] uint16 *NewMachineName,
715                 [in,unique] [string,charset(UTF16)] uint16 *Account,
716                 [in,unique] wkssvc_PasswordBuffer *EncryptedPassword,
717                 [in] wkssvc_renameflags RenameOptions
718                 );
719
720         /*****************************/
721         /* Function        0x19      */
722         WERROR wkssvc_NetrValidateName2(
723                 [in,unique] [string,charset(UTF16)] uint16 *server_name,
724                 [in,ref] [string,charset(UTF16)] uint16 *name,
725                 [in,unique] [string,charset(UTF16)] uint16 *Account,
726                 [in,unique] wkssvc_PasswordBuffer *EncryptedPassword,
727                 [in] wkssvc_NetValidateNameType name_type
728                 );
729
730         /*****************************/
731         /* Function        0x1a      */
732         WERROR wkssvc_NetrGetJoinableOus2(
733                 [in,unique] [string,charset(UTF16)] uint16 *server_name,
734                 [in,ref] [string,charset(UTF16)] uint16 *domain_name,
735                 [in,unique] [string,charset(UTF16)] uint16 *Account,
736                 [in,unique] wkssvc_PasswordBuffer *EncryptedPassword,
737                 [in,out,ref] uint32 *num_ous,
738                 /*
739                  * this is a [ref] pointer to a [unique] pointer to an
740                  * array of [unique] pointers to a string array
741                  */
742                 [out,ref] [size_is(,*num_ous)] [string,charset(UTF16)] uint16 ***ous
743                 );
744
745         /*****************************/
746         /* Function        0x1b      */
747         WERROR wkssvc_NetrAddAlternateComputerName(
748                 [in,unique] [string,charset(UTF16)] uint16 *server_name,
749                 [in,unique] [string,charset(UTF16)] uint16 *NewAlternateMachineName,
750                 [in,unique] [string,charset(UTF16)] uint16 *Account,
751                 [in,unique] wkssvc_PasswordBuffer *EncryptedPassword,
752                 [in] uint32 Reserved
753                 );
754
755         /*****************************/
756         /* Function        0x1c      */
757         WERROR wkssvc_NetrRemoveAlternateComputerName(
758                 [in,unique] [string,charset(UTF16)] uint16 *server_name,
759                 [in,unique] [string,charset(UTF16)] uint16 *AlternateMachineNameToRemove,
760                 [in,unique] [string,charset(UTF16)] uint16 *Account,
761                 [in,unique] wkssvc_PasswordBuffer *EncryptedPassword,
762                 [in] uint32 Reserved
763                 );
764
765         /*****************************/
766         /* Function        0x1d      */
767         WERROR wkssvc_NetrSetPrimaryComputername(
768                 [in,unique] [string,charset(UTF16)] uint16 *server_name,
769                 [in,unique] [string,charset(UTF16)] uint16 *primary_name,
770                 [in,unique] [string,charset(UTF16)] uint16 *Account,
771                 [in,unique] wkssvc_PasswordBuffer *EncryptedPassword,
772                 [in] uint32 Reserved
773                 );
774
775         /*****************************/
776         /* Function        0x1e      */
777         typedef enum {
778                 NetPrimaryComputerName = 0,
779                 NetAlternateComputerNames = 1,
780                 NetAllComputerNames = 2,
781                 NetComputerNameTypeMax = 3
782         } wkssvc_ComputerNameType;
783
784         typedef struct {
785                 uint32 count;
786                 [size_is(count)] lsa_String *computer_name;
787         } wkssvc_ComputerNamesCtr;
788
789         WERROR wkssvc_NetrEnumerateComputerNames(
790                 [in,unique] [string,charset(UTF16)] uint16 *server_name,
791                 [in] wkssvc_ComputerNameType name_type,
792                 [in] uint32 Reserved,
793                 [out,ref] wkssvc_ComputerNamesCtr **ctr
794                 );
795 }