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