1#include "idl_types.h"
2
3/*
4  wkssvc interface definitions
5*/
6
7import "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		NET_SETUP_UNKNOWN_STATUS = 0,
631		NET_SETUP_UNJOINED = 1,
632		NET_SETUP_WORKGROUP_NAME = 2,
633		NET_SETUP_DOMAIN_NAME = 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_IGNORE_UNSUPPORTED_FLAGS = 0x10000000,
663		WKSSVC_JOIN_FLAGS_JOIN_WITH_NEW_NAME	= 0x00000400,
664		WKSSVC_JOIN_FLAGS_JOIN_DC_ACCOUNT	= 0x00000200,
665		/* TRUE: defer setting the SPN and dNSHostName until a rename operation */
666		WKSSVC_JOIN_FLAGS_DEFER_SPN		= 0x00000100,
667
668		/* TRUE: set the machine password to the provided one after the join completes */
669		WKSSVC_JOIN_FLAGS_MACHINE_PWD_PASSED	= 0x00000080,
670
671		/* TRUE: perform an unsecured join */
672		WKSSVC_JOIN_FLAGS_JOIN_UNSECURE		= 0x00000040,
673
674		/* TRUE: allow the join to complete even if the account already exists */
675		WKSSVC_JOIN_FLAGS_DOMAIN_JOIN_IF_JOINED	= 0x00000020,
676
677		/* TRUE: this join is part of a w9x upgrade */
678		WKSSVC_JOIN_FLAGS_WIN9X_UPGRADE		= 0x00000010,
679
680		/* TRUE: delete the account when the domain is left */
681		WKSSVC_JOIN_FLAGS_ACCOUNT_DELETE	= 0x00000004,
682
683		/* TRUE: create the account in the domain */
684		WKSSVC_JOIN_FLAGS_ACCOUNT_CREATE	= 0x00000002,
685
686		/* TRUE: join domain    FALSE: join workgroup */
687		WKSSVC_JOIN_FLAGS_JOIN_TYPE		= 0x00000001
688
689	} wkssvc_joinflags;
690
691	/*****************************/
692	/* Function        0x16      */
693	WERROR wkssvc_NetrJoinDomain2 (
694		[in,unique]  [string,charset(UTF16)] uint16 *server_name,
695		[in,ref]     [string,charset(UTF16)] uint16 *domain_name,
696		[in,unique]  [string,charset(UTF16)] uint16 *account_ou,
697		[in,unique]  [string,charset(UTF16)] uint16 *admin_account,
698		[in,unique]  wkssvc_PasswordBuffer *encrypted_password,
699		[in]         wkssvc_joinflags join_flags
700		);
701
702	/*****************************/
703	/* Function        0x17      */
704	WERROR wkssvc_NetrUnjoinDomain2 (
705		[in,unique] [string,charset(UTF16)] uint16 *server_name,
706		[in,unique] [string,charset(UTF16)] uint16 *account,
707		[in,unique] wkssvc_PasswordBuffer *encrypted_password,
708		[in] wkssvc_joinflags unjoin_flags
709		);
710
711	/*****************************/
712	/* Function        0x18      */
713	WERROR wkssvc_NetrRenameMachineInDomain2(
714		[in,unique] [string,charset(UTF16)] uint16 *server_name,
715		[in,unique] [string,charset(UTF16)] uint16 *NewMachineName,
716		[in,unique] [string,charset(UTF16)] uint16 *Account,
717		[in,unique] wkssvc_PasswordBuffer *EncryptedPassword,
718		[in] wkssvc_renameflags RenameOptions
719		);
720
721	/*****************************/
722	/* Function        0x19      */
723	WERROR wkssvc_NetrValidateName2(
724		[in,unique] [string,charset(UTF16)] uint16 *server_name,
725		[in,ref] [string,charset(UTF16)] uint16 *name,
726		[in,unique] [string,charset(UTF16)] uint16 *Account,
727		[in,unique] wkssvc_PasswordBuffer *EncryptedPassword,
728		[in] wkssvc_NetValidateNameType name_type
729		);
730
731	/*****************************/
732	/* Function        0x1a      */
733	WERROR wkssvc_NetrGetJoinableOus2(
734		[in,unique] [string,charset(UTF16)] uint16 *server_name,
735		[in,ref] [string,charset(UTF16)] uint16 *domain_name,
736		[in,unique] [string,charset(UTF16)] uint16 *Account,
737		[in,unique] wkssvc_PasswordBuffer *EncryptedPassword,
738		[in,out,ref] uint32 *num_ous,
739		/*
740		 * this is a [ref] pointer to a [unique] pointer to an
741		 * array of [unique] pointers to a string array
742		 */
743		[out,ref] [size_is(,*num_ous)] [string,charset(UTF16)] uint16 ***ous
744		);
745
746	/*****************************/
747	/* Function        0x1b      */
748	WERROR wkssvc_NetrAddAlternateComputerName(
749		[in,unique] [string,charset(UTF16)] uint16 *server_name,
750		[in,unique] [string,charset(UTF16)] uint16 *NewAlternateMachineName,
751		[in,unique] [string,charset(UTF16)] uint16 *Account,
752		[in,unique] wkssvc_PasswordBuffer *EncryptedPassword,
753		[in] uint32 Reserved
754		);
755
756	/*****************************/
757	/* Function        0x1c      */
758	WERROR wkssvc_NetrRemoveAlternateComputerName(
759		[in,unique] [string,charset(UTF16)] uint16 *server_name,
760		[in,unique] [string,charset(UTF16)] uint16 *AlternateMachineNameToRemove,
761		[in,unique] [string,charset(UTF16)] uint16 *Account,
762		[in,unique] wkssvc_PasswordBuffer *EncryptedPassword,
763		[in] uint32 Reserved
764		);
765
766	/*****************************/
767	/* Function        0x1d      */
768	WERROR wkssvc_NetrSetPrimaryComputername(
769		[in,unique] [string,charset(UTF16)] uint16 *server_name,
770		[in,unique] [string,charset(UTF16)] uint16 *primary_name,
771		[in,unique] [string,charset(UTF16)] uint16 *Account,
772		[in,unique] wkssvc_PasswordBuffer *EncryptedPassword,
773		[in] uint32 Reserved
774		);
775
776	/*****************************/
777	/* Function        0x1e      */
778	typedef enum {
779		NetPrimaryComputerName = 0,
780		NetAlternateComputerNames = 1,
781		NetAllComputerNames = 2,
782		NetComputerNameTypeMax = 3
783	} wkssvc_ComputerNameType;
784
785	typedef struct {
786		uint32 count;
787		[size_is(count)] lsa_String *computer_name;
788        } wkssvc_ComputerNamesCtr;
789
790	WERROR wkssvc_NetrEnumerateComputerNames(
791		[in,unique] [string,charset(UTF16)] uint16 *server_name,
792		[in] wkssvc_ComputerNameType name_type,
793		[in] uint32 Reserved,
794		[out,ref] wkssvc_ComputerNamesCtr **ctr
795		);
796}
797