Windows: Implement SRVSVC and WKSSVC RPC interfaces
[openafs.git] / src / WINNT / afsd / ms-wkssvc.idl
1 /*
2  * Copyright 2009 Microsoft
3  *
4  * Used with permission.
5  */
6
7 import "wtypes.idl";
8
9 [
10     uuid(6BFFD098-A112-3610-9833-46C3F87E345A),version(1.0),
11     pointer_default(unique)
12 ]
13
14 interface wkssvc
15 {
16     typedef enum _NETSETUP_JOIN_STATUS {
17         NetSetupUnknownStatus = 0,
18         NetSetupUnjoined,
19         NetSetupWorkgroupName,
20         NetSetupDomainName
21     } NETSETUP_JOIN_STATUS, *PNETSETUP_JOIN_STATUS;
22
23     typedef enum  _NETSETUP_NAME_TYPE {
24         NetSetupUnknown = 0,
25         NetSetupMachine,
26         NetSetupWorkgroup,
27         NetSetupDomain,
28         NetSetupNonExistentDomain,
29         NetSetupDnsMachine
30     } NETSETUP_NAME_TYPE, *PNETSETUP_NAME_TYPE;
31
32     typedef enum _NET_COMPUTER_NAME_TYPE {
33         NetPrimaryComputerName = 0,
34         NetAlternateComputerNames,
35         NetAllComputerNames,
36         NetComputerNameTypeMax
37     } NET_COMPUTER_NAME_TYPE, *PNET_COMPUTER_NAME_TYPE;
38
39     typedef struct _STAT_WORKSTATION_0 {
40         LARGE_INTEGER   StatisticsStartTime;
41         LARGE_INTEGER   BytesReceived;
42         LARGE_INTEGER   SmbsReceived;
43         LARGE_INTEGER   PagingReadBytesRequested;
44         LARGE_INTEGER   NonPagingReadBytesRequested;
45         LARGE_INTEGER   CacheReadBytesRequested;
46         LARGE_INTEGER   NetworkReadBytesRequested;
47         LARGE_INTEGER   BytesTransmitted;
48         LARGE_INTEGER   SmbsTransmitted;
49         LARGE_INTEGER   PagingWriteBytesRequested;
50         LARGE_INTEGER   NonPagingWriteBytesRequested;
51         LARGE_INTEGER   CacheWriteBytesRequested;
52         LARGE_INTEGER   NetworkWriteBytesRequested;
53         unsigned long   InitiallyFailedOperations;
54         unsigned long   FailedCompletionOperations;
55         unsigned long   ReadOperations;
56         unsigned long   RandomReadOperations;
57         unsigned long   ReadSmbs;
58         unsigned long   LargeReadSmbs;
59         unsigned long   SmallReadSmbs;
60         unsigned long   WriteOperations;
61         unsigned long   RandomWriteOperations;
62         unsigned long   WriteSmbs;
63         unsigned long   LargeWriteSmbs;
64         unsigned long   SmallWriteSmbs;
65         unsigned long   RawReadsDenied;
66         unsigned long   RawWritesDenied;
67         unsigned long   NetworkErrors;
68         unsigned long   Sessions;
69         unsigned long   FailedSessions;
70         unsigned long   Reconnects;
71         unsigned long   CoreConnects;
72         unsigned long   Lanman20Connects;
73         unsigned long   Lanman21Connects;
74         unsigned long   LanmanNtConnects;
75         unsigned long   ServerDisconnects;
76         unsigned long   HungSessions;
77         unsigned long   UseCount;
78         unsigned long   FailedUseCount;
79         unsigned long   CurrentCommands;
80     } STAT_WORKSTATION_0, *PSTAT_WORKSTATION_0, *LPSTAT_WORKSTATION_0;
81
82     typedef struct _WKSTA_INFO_100 {
83         unsigned long  wki100_platform_id;
84         [string] wchar_t* wki100_computername;
85         [string] wchar_t* wki100_langroup;
86         unsigned long wki100_ver_major;
87         unsigned long wki100_ver_minor;
88     } WKSTA_INFO_100, *PWKSTA_INFO_100, *LPWKSTA_INFO_100;
89
90     typedef struct _WKSTA_INFO_101 {
91         unsigned long wki101_platform_id;
92         [string] wchar_t* wki101_computername;
93         [string] wchar_t* wki101_langroup;
94         unsigned long wki101_ver_major;
95         unsigned long wki101_ver_minor;
96         [string] wchar_t* wki101_lanroot;
97     } WKSTA_INFO_101, *PWKSTA_INFO_101, *LPWKSTA_INFO_101;
98
99     typedef struct _WKSTA_INFO_102 {
100         unsigned long  wki102_platform_id;
101         [string] wchar_t* wki102_computername;
102         [string] wchar_t* wki102_langroup;
103         unsigned long wki102_ver_major;
104         unsigned long wki102_ver_minor;
105         [string] wchar_t* wki102_lanroot;
106         unsigned long  wki102_logged_on_users;
107     } WKSTA_INFO_102, *PWKSTA_INFO_102, *LPWKSTA_INFO_102;
108
109     typedef struct _WKSTA_INFO_502{
110         unsigned long   wki502_char_wait;
111         unsigned long   wki502_collection_time;
112         unsigned long   wki502_maximum_collection_count;
113         unsigned long   wki502_keep_conn;
114         unsigned long   wki502_max_cmds;
115         unsigned long   wki502_sess_timeout;
116         unsigned long   wki502_siz_char_buf;
117         unsigned long   wki502_max_threads;
118         unsigned long   wki502_lock_quota;
119         unsigned long   wki502_lock_increment;
120         unsigned long   wki502_lock_maximum;
121         unsigned long   wki502_pipe_increment;
122         unsigned long   wki502_pipe_maximum;
123         unsigned long   wki502_cache_file_timeout;
124         unsigned long   wki502_dormant_file_limit;
125         unsigned long   wki502_read_ahead_throughput;
126         unsigned long   wki502_num_mailslot_buffers;
127         unsigned long   wki502_num_srv_announce_buffers;
128         unsigned long   wki502_max_illegal_datagram_events;
129         unsigned long   wki502_illegal_datagram_event_reset_frequency;
130         int  wki502_log_election_packets;
131         int  wki502_use_opportunistic_locking;
132         int  wki502_use_unlock_behind;
133         int  wki502_use_close_behind;
134         int  wki502_buf_named_pipes;
135         int  wki502_use_lock_read_unlock;
136         int  wki502_utilize_nt_caching;
137         int  wki502_use_raw_read;
138         int  wki502_use_raw_write;
139         int  wki502_use_write_raw_data;
140         int  wki502_use_encryption;
141         int  wki502_buf_files_deny_write;
142         int  wki502_buf_read_only_files;
143         int  wki502_force_core_create_mode;
144         int  wki502_use_512_byte_max_transfer;
145     } WKSTA_INFO_502, *PWKSTA_INFO_502, *LPWKSTA_INFO_502;
146
147     typedef struct _WKSTA_INFO_1013 {
148          unsigned long  wki1013_keep_conn;
149     } WKSTA_INFO_1013, *PWKSTA_INFO_1013, *LPWKSTA_INFO_1013;
150
151     typedef struct _WKSTA_INFO_1018 {
152          unsigned long  wki1018_sess_timeout;
153     } WKSTA_INFO_1018, *PWKSTA_INFO_1018, *LPWKSTA_INFO_1018;
154
155     typedef struct _WKSTA_INFO_1046 {
156         unsigned long  wki1046_dormant_file_limit;
157     } WKSTA_INFO_1046, *PWKSTA_INFO_1046, *LPWKSTA_INFO_1046;
158
159     typedef struct _WKSTA_USER_INFO_0 {
160         [string] wchar_t* wkui0_username;
161     } WKSTA_USER_INFO_0, *PWKSTA_USER_INFO_0, *LPWKSTA_USER_INFO_0;
162
163     typedef struct _WKSTA_USER_INFO_1 {
164         [string]  wchar_t* wkui1_username;
165         [string] wchar_t* wkui1_logon_domain;
166         [string] wchar_t* wkui1_oth_domains;
167         [string] wchar_t* wkui1_logon_server;
168     } WKSTA_USER_INFO_1, *PWKSTA_USER_INFO_1, *LPWKSTA_USER_INFO_1;
169
170     typedef struct _WKSTA_TRANSPORT_INFO_0 {
171         unsigned long wkti0_quality_of_service;
172         unsigned long wkti0_number_of_vcs;
173         [string] wchar_t* wkti0_transport_name;
174         [string] wchar_t* wkti0_transport_address;
175         unsigned long wkti0_wan_ish;
176     } WKSTA_TRANSPORT_INFO_0, *PWKSTA_TRANSPORT_INFO_0,
177      *LPWKSTA_TRANSPORT_INFO_0;
178
179     typedef [handle] wchar_t* WKSSVC_IDENTIFY_HANDLE;
180
181     typedef [handle] wchar_t* WKSSVC_IMPERSONATE_HANDLE;
182
183     typedef [switch_type(unsigned long)] union _WKSTA_INFO {
184         [case(100)]
185             LPWKSTA_INFO_100 WkstaInfo100;
186         [case(101)]
187             LPWKSTA_INFO_101 WkstaInfo101;
188         [case(102)]
189             LPWKSTA_INFO_102 WkstaInfo102;
190         [case(502)]
191             LPWKSTA_INFO_502 WkstaInfo502;
192         [case(1013)]
193             LPWKSTA_INFO_1013 WkstaInfo1013;
194         [case(1018)]
195             LPWKSTA_INFO_1018 WkstaInfo1018;
196         [case(1046)]
197             LPWKSTA_INFO_1046 WkstaInfo1046;
198         [default]
199             ;
200     } WKSTA_INFO, *PWKSTA_INFO, *LPWKSTA_INFO;
201
202     unsigned long
203     NetrWkstaGetInfo (
204         [in,string,unique] WKSSVC_IDENTIFY_HANDLE ServerName,
205         [in] unsigned long Level,
206         [out, switch_is(Level)] LPWKSTA_INFO WkstaInfo
207     );
208
209     unsigned long
210     NetrWkstaSetInfo (
211         [in,string,unique] WKSSVC_IDENTIFY_HANDLE ServerName,
212         [in] unsigned long  Level,
213         [in, switch_is(Level)] LPWKSTA_INFO   WkstaInfo,
214         [in,out,unique] unsigned long* ErrorParameter
215     );
216
217     typedef struct _WKSTA_USER_INFO_0_CONTAINER {
218         unsigned long   EntriesRead;
219         [size_is(EntriesRead)] LPWKSTA_USER_INFO_0 Buffer;
220     } WKSTA_USER_INFO_0_CONTAINER, *PWKSTA_USER_INFO_0_CONTAINER,
221       *LPWKSTA_USER_INFO_0_CONTAINER;
222
223     typedef struct _WKSTA_USER_INFO_1_CONTAINER {
224         unsigned long   EntriesRead;
225         [size_is(EntriesRead)] LPWKSTA_USER_INFO_1 Buffer;
226     } WKSTA_USER_INFO_1_CONTAINER, *PWKSTA_USER_INFO_1_CONTAINER,
227       *LPWKSTA_USER_INFO_1_CONTAINER;
228
229
230     typedef struct _WKSTA_USER_ENUM_STRUCT {
231         unsigned long   Level;
232         [switch_is(Level)] union _WKSTA_USER_ENUM_UNION {
233             [case(0)]
234                 LPWKSTA_USER_INFO_0_CONTAINER Level0;
235             [case(1)]
236                 LPWKSTA_USER_INFO_1_CONTAINER Level1;
237             [default]
238                 ;
239         } WkstaUserInfo;
240     } WKSTA_USER_ENUM_STRUCT,
241       *PWKSTA_USER_ENUM_STRUCT,
242       *LPWKSTA_USER_ENUM_STRUCT;
243
244     unsigned long
245     NetrWkstaUserEnum (
246         [in,string,unique] WKSSVC_IDENTIFY_HANDLE ServerName,
247         [in,out] LPWKSTA_USER_ENUM_STRUCT UserInfo,
248         [in] unsigned long  PreferredMaximumLength,
249         [out] unsigned long* TotalEntries,
250         [in,out,unique] unsigned long* ResumeHandle
251     );
252
253     void Opnum3NotUsedOnWire(void);
254
255     void Opnum4NotUsedOnWire(void);
256
257     typedef struct _WKSTA_TRANSPORT_INFO_0_CONTAINER {
258         unsigned long   EntriesRead;
259         [size_is(EntriesRead)] LPWKSTA_TRANSPORT_INFO_0 Buffer;
260     } WKSTA_TRANSPORT_INFO_0_CONTAINER,
261       *PWKSTA_TRANSPORT_INFO_0_CONTAINER,
262       *LPWKSTA_TRANSPORT_INFO_0_CONTAINER;
263
264     typedef struct _WKSTA_TRANSPORT_ENUM_STRUCT {
265         unsigned long   Level;
266         [switch_is(Level)] union _WKSTA_TRANSPORT_ENUM_UNION {
267             [case(0)]
268                 LPWKSTA_TRANSPORT_INFO_0_CONTAINER Level0;
269             [default]
270                 ;
271         } WkstaTransportInfo;
272     } WKSTA_TRANSPORT_ENUM_STRUCT, *PWKSTA_TRANSPORT_ENUM_STRUCT,
273       *LPWKSTA_TRANSPORT_ENUM_STRUCT;
274
275     unsigned long
276     NetrWkstaTransportEnum (
277         [in,string,unique] WKSSVC_IDENTIFY_HANDLE ServerName,
278         [in,out] LPWKSTA_TRANSPORT_ENUM_STRUCT TransportInfo,
279         [in] unsigned long  PreferredMaximumLength,
280         [out] unsigned long* TotalEntries,
281         [in,out,unique] unsigned long* ResumeHandle
282     );
283
284     unsigned long
285     NetrWkstaTransportAdd (
286         [in,string,unique] WKSSVC_IDENTIFY_HANDLE ServerName,
287         [in] unsigned long Level,
288         [in] LPWKSTA_TRANSPORT_INFO_0 TransportInfo,
289         [in,out,unique] unsigned long* ErrorParameter
290     );
291
292     unsigned long
293     NetrWkstaTransportDel (
294         [in,string,unique] WKSSVC_IDENTIFY_HANDLE ServerName,
295         [in,string,unique] wchar_t* TransportName,
296         [in] unsigned long ForceLevel
297     );
298
299     void Opnum8NotUsedOnWire(void);
300
301     void Opnum9NotUsedOnWire(void);
302
303     void Opnum10NotUsedOnWire(void);
304
305     void Opnum11NotUsedOnWire(void);
306
307     void Opnum12NotUsedOnWire(void);
308
309     unsigned long
310     NetrWorkstationStatisticsGet(
311         [in,string,unique] WKSSVC_IDENTIFY_HANDLE ServerName,
312         [in,string,unique] wchar_t* ServiceName,
313         [in] unsigned long Level,
314         [in] unsigned long Options,
315         [out] LPSTAT_WORKSTATION_0* Buffer
316     );
317
318     void Opnum14NotUsedOnWire(void);
319
320     void Opnum15NotUsedOnWire(void);
321
322     void Opnum16NotUsedOnWire(void);
323
324     void Opnum17NotUsedOnWire(void);
325
326     void Opnum18NotUsedOnWire(void);
327
328     void Opnum19NotUsedOnWire(void);
329
330     unsigned long
331     NetrGetJoinInformation(
332         [in,string,unique] WKSSVC_IMPERSONATE_HANDLE ServerName,
333         [in,out,string] wchar_t**    NameBuffer,
334         [out] PNETSETUP_JOIN_STATUS BufferType
335     );
336
337     void Opnum21NotUsedOnWire(void);
338
339 #define JOIN_OBFUSCATOR_LENGTH 8
340 #define JOIN_MAX_PASSWORD_LENGTH 256
341
342     typedef struct _JOINPR_USER_PASSWORD {
343         unsigned char Obfuscator[JOIN_OBFUSCATOR_LENGTH];
344         wchar_t Buffer[JOIN_MAX_PASSWORD_LENGTH];
345         unsigned long Length;
346     } JOINPR_USER_PASSWORD,
347      *PJOINPR_USER_PASSWORD;
348
349     typedef struct _JOINPR_ENCRYPTED_USER_PASSWORD {
350         unsigned char Buffer[JOIN_OBFUSCATOR_LENGTH +
351             (JOIN_MAX_PASSWORD_LENGTH * sizeof(wchar_t)) +
352             sizeof(unsigned long)];
353     } JOINPR_ENCRYPTED_USER_PASSWORD,
354      *PJOINPR_ENCRYPTED_USER_PASSWORD;
355
356     typedef struct _UNICODE_STRING {
357         unsigned short Length;
358         unsigned short MaximumLength;
359         [size_is(MaximumLength / 2), length_is((Length) / 2)]
360             unsigned short* Buffer;
361     } UNICODE_STRING,
362      *PUNICODE_STRING;
363
364     unsigned long
365     NetrJoinDomain2(
366         [in] handle_t RpcBindingHandle,
367         [in,string,unique] wchar_t* ServerName,
368         [in,string] wchar_t* DomainName,
369         [in,string,unique] wchar_t* MachineAccountOU,
370         [in,string,unique] wchar_t* AccountName,
371         [in,unique] PJOINPR_ENCRYPTED_USER_PASSWORD Password,
372         [in] unsigned long Options
373     );
374
375     unsigned long
376     NetrUnjoinDomain2(
377         [in] handle_t RpcBindingHandle,
378         [in,string,unique] wchar_t* ServerName,
379         [in,string,unique] wchar_t* AccountName,
380         [in,unique] PJOINPR_ENCRYPTED_USER_PASSWORD Password,
381         [in] unsigned long Options
382     );
383
384     unsigned long
385     NetrRenameMachineInDomain2(
386         [in] handle_t RpcBindingHandle,
387         [in,string,unique] wchar_t* ServerName,
388         [in,string,unique] wchar_t* MachineName,
389         [in,string,unique] wchar_t* AccountName,
390         [in,unique] PJOINPR_ENCRYPTED_USER_PASSWORD Password,
391         [in] unsigned long Options
392     );
393
394     unsigned long
395     NetrValidateName2(
396         [in] handle_t RpcBindingHandle,
397         [in,string,unique] wchar_t* ServerName,
398         [in,string] wchar_t* NameToValidate,
399         [in,string,unique] wchar_t* AccountName,
400         [in,unique] PJOINPR_ENCRYPTED_USER_PASSWORD Password,
401         [in] NETSETUP_NAME_TYPE NameType
402     );
403
404     unsigned long
405     NetrGetJoinableOUs2(
406         [in] handle_t  RpcBindingHandle,
407         [in,string,unique] wchar_t*  ServerName,
408         [in,string] wchar_t*  DomainName,
409         [in,string,unique] wchar_t*  AccountName,
410         [in,unique] PJOINPR_ENCRYPTED_USER_PASSWORD Password,
411         [in,out] unsigned long*  OUCount,
412         [out,string,size_is(,*OUCount)] wchar_t*** OUs
413     );
414
415     unsigned long
416     NetrAddAlternateComputerName(
417         [in] handle_t  RpcBindingHandle,
418         [in,string,unique] wchar_t*  ServerName,
419         [in,string,unique] wchar_t*  AlternateName,
420         [in,string,unique] wchar_t*  DomainAccount,
421         [in,unique] PJOINPR_ENCRYPTED_USER_PASSWORD EncryptedPassword,
422         [in] unsigned long  Reserved
423     );
424
425     unsigned long
426     NetrRemoveAlternateComputerName(
427         [in] handle_t  RpcBindingHandle,
428         [in,string,unique] wchar_t*  ServerName,
429         [in,string,unique] wchar_t*  AlternateName,
430         [in,string,unique] wchar_t*  DomainAccount,
431         [in,unique] PJOINPR_ENCRYPTED_USER_PASSWORD EncryptedPassword,
432         [in] unsigned long  Reserved
433     );
434
435     unsigned long
436     NetrSetPrimaryComputerName(
437         [in] handle_t  RpcBindingHandle,
438         [in,string,unique] wchar_t*  ServerName,
439         [in,string,unique] wchar_t*  PrimaryName,
440         [in,string,unique] wchar_t*  DomainAccount,
441         [in,unique] PJOINPR_ENCRYPTED_USER_PASSWORD  EncryptedPassword,
442         [in] unsigned long  Reserved
443     );
444
445     typedef struct _NET_COMPUTER_NAME_ARRAY {
446         unsigned long EntryCount;
447         [size_is(EntryCount)] PUNICODE_STRING ComputerNames;
448     } NET_COMPUTER_NAME_ARRAY, *PNET_COMPUTER_NAME_ARRAY;
449
450     unsigned long
451     NetrEnumerateComputerNames(
452         [in,string,unique] WKSSVC_IMPERSONATE_HANDLE ServerName,
453         [in] NET_COMPUTER_NAME_TYPE  NameType,
454         [in] unsigned long  Reserved,
455         [out] PNET_COMPUTER_NAME_ARRAY  *ComputerNames
456     );
457 }