1 /*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21 /*
22 * Copyright 2010 Sun Microsystems, Inc. All rights reserved.
23 * Use is subject to license terms.
24 */
25
26 #ifndef _NETDFS_NDL_
27 #define _NETDFS_NDL_
28
29 /*
30 * NT Distributed File Service (NETDFS) RPC interface definition.
31 */
32
33 #include "ndrtypes.ndl"
34
35
36 #define NETDFS_ABSTRACT_UUID "4fc742e0-4a10-11cf-8273-00aa004ae673"
37 #define NETDFS_ABSTRACT_VERS 3
38
39 #define NETDFS_TRANSFER_UUID "8a885d04-1ceb-11c9-9fe8-08002b104860"
40 #define NETDFS_TRANSFER_VERS 2
41
42 #define NETDFS_OPNUM_GETVER 0x00
43 #define NETDFS_OPNUM_ADD 0x01
44 #define NETDFS_OPNUM_REMOVE 0x02
45 #define NETDFS_OPNUM_SETINFO 0x03
46 #define NETDFS_OPNUM_GETINFO 0x04
47 #define NETDFS_OPNUM_ENUM 0x05
48 #define NETDFS_OPNUM_MOVE 0x06
49 #define NETDFS_OPNUM_RENAME 0x07
50 #define NETDFS_OPNUM_ADDSTDROOT 0x0c
51 #define NETDFS_OPNUM_REMSTDROOT 0x0d
52 #define NETDFS_OPNUM_ENUMEX 0x15
53
54 #define DFS_MANAGER_VERSION_NT4 0x01
55 #define DFS_MANAGER_VERSION_W2K 0x02
56 #define DFS_MANAGER_VERSION_W2K3 0x04
57
58 struct netdfs_uuid {
59 DWORD data1;
60 WORD data2;
61 WORD data3;
62 BYTE data4[8];
63 };
64 typedef struct netdfs_uuid netdfs_uuid_t;
65
66 struct netdfs_storage_info {
67 DWORD state;
68 LPTSTR server;
69 LPTSTR share;
70 };
71 typedef struct netdfs_storage_info netdfs_storage_info_t;
72
73
74 struct netdfs_storage_info1 {
75 DWORD state;
76 LPTSTR server;
77 LPTSTR share;
78 DWORD p_class;
79 WORD p_rank;
80 WORD p_reserved;
81 };
82 typedef struct netdfs_storage_info1 netdfs_storage_info1_t;
83
84 struct netdfs_info1 {
85 LPTSTR entry_path;
86 };
87 typedef struct netdfs_info1 netdfs_info1_t;
88
89 struct netdfs_info2 {
90 LPTSTR entry_path;
91 LPTSTR comment;
92 DWORD state;
93 DWORD n_store;
94 };
95 typedef struct netdfs_info2 netdfs_info2_t;
96
97 struct netdfs_info3 {
98 LPTSTR entry_path;
99 LPTSTR comment;
100 DWORD state;
101 DWORD n_store;
102 SIZE_IS(n_store)
103 struct netdfs_storage_info *si;
104 };
105 typedef struct netdfs_info3 netdfs_info3_t;
106
107 struct netdfs_info4 {
108 LPTSTR entry_path;
109 LPTSTR comment;
110 DWORD state;
111 DWORD timeout;
112 netdfs_uuid_t guid;
113 DWORD n_store;
114 SIZE_IS(n_store)
115 struct netdfs_storage_info *si;
116 };
117 typedef struct netdfs_info4 netdfs_info4_t;
118
119 struct netdfs_info5 {
120 LPTSTR entry_path;
121 LPTSTR comment;
122 DWORD state;
123 DWORD timeout;
124 netdfs_uuid_t guid;
125 DWORD flags;
126 DWORD metadata_sz;
127 DWORD n_store;
128 };
129 typedef struct netdfs_info5 netdfs_info5_t;
130
131 struct netdfs_info6 {
132 LPTSTR entry_path;
133 LPTSTR comment;
134 DWORD state;
135 DWORD timeout;
136 netdfs_uuid_t guid;
137 DWORD flags;
138 DWORD metadata_sz;
139 DWORD n_store;
140 SIZE_IS(n_store)
141 struct netdfs_storage_info1 *si;
142 };
143 typedef struct netdfs_info6 netdfs_info6_t;
144
145 struct netdfs_info100 {
146 LPTSTR comment;
147 };
148 typedef struct netdfs_info100 netdfs_info100_t;
149
150 struct netdfs_info101 {
151 DWORD state;
152 };
153 typedef struct netdfs_info101 netdfs_info101_t;
154
155
156 struct netdfs_info102 {
157 DWORD timeout;
158 };
159 typedef struct netdfs_info102 netdfs_info102_t;
160
161
162 struct netdfs_info103 {
163 DWORD property_flag_mask;
164 DWORD property_flags;
165 };
166 typedef struct netdfs_info103 netdfs_info103_t;
167
168
169 struct netdfs_info104 {
170 DWORD priority_class;
171 WORD priority_rank;
172 WORD reserved;
173 };
174 typedef struct netdfs_info104 netdfs_info104_t;
175
176
177 struct netdfs_info105 {
178 LPTSTR comment;
179 DWORD state;
180 DWORD timeout;
181 DWORD property_flag_mask;
182 DWORD property_flags;
183 };
184 typedef struct netdfs_info105 netdfs_info105_t;
185
186
187 struct netdfs_info106 {
188 DWORD storage_state;
189 DWORD priority_class;
190 DWORD priority_rank;
191 };
192
193
194 struct netdfs_info200 {
195 LPTSTR entry_path;
196 };
197
198
199 struct netdfs_info300 {
200 DWORD flavor;
201 LPTSTR dfsname;
202 };
203 typedef struct netdfs_info300 netdfs_info300_t;
204
205
206 union netdfs_info_u {
207 CASE(1) struct netdfs_info1 *info1;
208 CASE(2) struct netdfs_info2 *info2;
209 CASE(3) struct netdfs_info3 *info3;
210 CASE(4) struct netdfs_info4 *info4;
211 CASE(5) struct netdfs_info5 *info5;
212 CASE(6) struct netdfs_info6 *info6;
213 CASE(100) struct netdfs_info100 *info100;
214 CASE(101) struct netdfs_info101 *info101;
215 CASE(102) struct netdfs_info102 *info102;
216 CASE(103) struct netdfs_info103 *info103;
217 CASE(104) struct netdfs_info104 *info104;
218 CASE(105) struct netdfs_info105 *info105;
219 CASE(106) struct netdfs_info106 *info106;
220 DEFAULT char *nullptr;
221 };
222
223
224 struct netdfs_info {
225 DWORD level;
226 SWITCH(level)
227 union netdfs_info_u iu;
228 };
229 typedef struct netdfs_info netdfs_info_t;
230
231
232 struct netdfs_array1 {
233 DWORD count;
234 SIZE_IS(count)
235 struct netdfs_info1 *info1;
236 };
237
238 struct netdfs_array2 {
239 DWORD count;
240 SIZE_IS(count)
241 struct netdfs_info2 *info2;
242 };
243
244 struct netdfs_array3 {
245 DWORD count;
246 SIZE_IS(count)
247 struct netdfs_info3 *info3;
248 };
249
250 struct netdfs_array4 {
251 DWORD count;
252 SIZE_IS(count)
253 struct netdfs_info4 *info4;
254 };
255
256 struct netdfs_array5 {
257 DWORD count;
258 SIZE_IS(count)
259 struct netdfs_info5 *info5;
260 };
261
262 struct netdfs_array6 {
263 DWORD count;
264 SIZE_IS(count)
265 struct netdfs_info6 *info6;
266 };
267
268 struct netdfs_array200 {
269 DWORD count;
270 SIZE_IS(count)
271 struct netdfs_info200 *info200;
272 };
273
274 struct netdfs_array300 {
275 DWORD count;
276 SIZE_IS(count)
277 struct netdfs_info300 *info300;
278 };
279
280 union netdfs_enum_info_u {
281 CASE(1) struct netdfs_array1 *info1;
282 CASE(2) struct netdfs_array2 *info2;
283 CASE(3) struct netdfs_array3 *info3;
284 CASE(4) struct netdfs_array4 *info4;
285 CASE(5) struct netdfs_array5 *info5;
286 CASE(6) struct netdfs_array6 *info6;
287 CASE(200) struct netdfs_array200 *info200;
288 CASE(300) struct netdfs_array300 *info300;
289 DEFAULT char *nullptr;
290 };
291
292
293 struct netdfs_enum_info {
294 DWORD level;
295 DWORD switch_value;
296 SWITCH(switch_value)
297 union netdfs_enum_info_u iu;
298 };
299
300
301 /*
302 ***********************************************************************
303 * Return server version id
304 ***********************************************************************
305 */
306 OPERATION(NETDFS_OPNUM_GETVER)
307 struct netdfs_getver {
308 OUT DWORD version;
309 };
310
311
312 /*
313 ***********************************************************************
314 * Add a new volume or additional storage for an existing volume at
315 * dfs_path.
316 ***********************************************************************
317 */
318 OPERATION(NETDFS_OPNUM_ADD)
319 struct netdfs_add {
320 IN REFERENCE LPTSTR dfs_path;
321 IN REFERENCE LPTSTR server;
322 IN LPTSTR share;
323 IN LPTSTR comment;
324 IN DWORD flags;
325 OUT DWORD status;
326 };
327 typedef struct netdfs_add netdfs_add_t;
328
329
330 /*
331 ***********************************************************************
332 * Remove a volume or additional storage for volume from the DFS at
333 * dfs_path. When applied to the last storage in a volume, removes
334 * the volume from the DFS.
335 ***********************************************************************
336 */
337 OPERATION(NETDFS_OPNUM_REMOVE)
338 struct netdfs_remove {
339 IN REFERENCE LPTSTR dfs_path;
340 IN LPTSTR server;
341 IN LPTSTR share;
342 OUT DWORD status;
343 };
344
345
346 /*
347 ***********************************************************************
348 * Set information about the volume or storage. If the server and share
349 * are specified, the information set is specific to that server and
350 * share. Otherwise the information is specific to the volume as a whole.
351 *
352 * Valid levels are 100-102.
353 ***********************************************************************
354 */
355 OPERATION(NETDFS_OPNUM_SETINFO)
356 struct netdfs_setinfo {
357 IN REFERENCE LPTSTR dfs_path;
358 IN LPTSTR server;
359 IN LPTSTR share;
360 IN DWORD level;
361 IN struct netdfs_info info;
362 OUT DWORD status;
363 };
364 typedef struct netdfs_setinfo netdfs_setinfo_t;
365
366
367 /*
368 ***********************************************************************
369 * Get information about the volume or storage. If the server and share
370 * are specified, the information returned is specific to that server
371 * and share. Otherwise the information is specific to the volume as a
372 * whole.
373 *
374 * Valid levels are 1-4, 100-102.
375 ***********************************************************************
376 */
377 OPERATION(NETDFS_OPNUM_GETINFO)
378 struct netdfs_getinfo {
379 IN REFERENCE LPTSTR dfs_path;
380 IN LPTSTR server;
381 IN LPTSTR share;
382 IN DWORD level;
383 OUT struct netdfs_info info;
384 OUT DWORD status;
385 };
386 typedef struct netdfs_getinfo netdfs_getinfo_t;
387
388
389 /*
390 ***********************************************************************
391 * Get information about all of the volumes in the DFS. dfs_path is
392 * the "server" part of the UNC name used to refer to this particular
393 * DFS.
394 *
395 * Valid levels are 1-3.
396 ***********************************************************************
397 */
398 OPERATION(NETDFS_OPNUM_ENUM)
399 struct netdfs_enum {
400 IN DWORD level;
401 IN DWORD pref_max_len;
402 INOUT struct netdfs_enum_info *info;
403 INOUT DWORD *resume_handle;
404 OUT DWORD status;
405 };
406 typedef struct netdfs_enum netdfs_enum_t;
407
408
409 /*
410 ***********************************************************************
411 * Rename the current Win32 path in a DFS to a new Win32 path in the
412 * same DFS.
413 ***********************************************************************
414 */
415 OPERATION(NETDFS_OPNUM_RENAME)
416 struct netdfs_rename {
417 IN REFERENCE LPTSTR dfs_path;
418 IN REFERENCE LPTSTR new_path;
419 OUT DWORD status;
420 };
421
422
423 /*
424 ***********************************************************************
425 * Move a DFS volume and all subordinate volumes from one place in the
426 * DFS to another place in the DFS.
427 ***********************************************************************
428 */
429 OPERATION(NETDFS_OPNUM_MOVE)
430 struct netdfs_move {
431 IN REFERENCE LPTSTR dfs_path;
432 IN REFERENCE LPTSTR new_path;
433 IN DWORD flags;
434 OUT DWORD status;
435 };
436
437
438 /*
439 ***********************************************************************
440 * Add a DFS root share.
441 ***********************************************************************
442 */
443 OPERATION(NETDFS_OPNUM_ADDSTDROOT)
444 struct netdfs_addstdroot {
445 IN REFERENCE LPTSTR server;
446 IN REFERENCE LPTSTR share;
447 IN REFERENCE LPTSTR comment;
448 IN DWORD flags;
449 OUT DWORD status;
450 };
451
452 /*
453 ***********************************************************************
454 * Remove a DFS root share.
455 ***********************************************************************
456 */
457 OPERATION(NETDFS_OPNUM_REMSTDROOT)
458 struct netdfs_remstdroot {
459 IN REFERENCE LPTSTR server;
460 IN REFERENCE LPTSTR share;
461 IN DWORD flags;
462 OUT DWORD status;
463 };
464
465
466 /*
467 ***********************************************************************
468 * Get information about all of the volumes in the DFS. dfs_path is
469 * the "server" part of the UNC name used to refer to this particular
470 * DFS.
471 *
472 * Valid levels are 1-3.
473 ***********************************************************************
474 */
475 OPERATION(NETDFS_OPNUM_ENUMEX)
476 struct netdfs_enumex {
477 IN REFERENCE LPTSTR dfs_path;
478 IN DWORD level;
479 IN DWORD pref_max_len;
480 INOUT struct netdfs_enum_info *info;
481 INOUT DWORD *resume_handle;
482 OUT DWORD status;
483 };
484
485
486 /*
487 ***********************************************************************
488 * The NETDFS interface definiton.
489 ***********************************************************************
490 */
491 INTERFACE(0)
492 union netdfs_interface {
493 CASE(NETDFS_OPNUM_GETVER)
494 struct netdfs_getver netdfs_getver;
495 CASE(NETDFS_OPNUM_ADD)
496 struct netdfs_add netdfs_add;
497 CASE(NETDFS_OPNUM_REMOVE)
498 struct netdfs_remove netdfs_remove;
499 CASE(NETDFS_OPNUM_SETINFO)
500 struct netdfs_setinfo netdfs_setinfo;
501 CASE(NETDFS_OPNUM_GETINFO)
502 struct netdfs_getinfo netdfs_getinfo;
503 CASE(NETDFS_OPNUM_ENUM)
504 struct netdfs_enum netdfs_enum;
505 CASE(NETDFS_OPNUM_MOVE)
506 struct netdfs_move netdfs_move;
507 CASE(NETDFS_OPNUM_RENAME)
508 struct netdfs_rename netdfs_rename;
509 CASE(NETDFS_OPNUM_ADDSTDROOT)
510 struct netdfs_addstdroot netdfs_addstdroot;
511 CASE(NETDFS_OPNUM_REMSTDROOT)
512 struct netdfs_remstdroot netdfs_remstdroot;
513 CASE(NETDFS_OPNUM_ENUMEX)
514 struct netdfs_enumex netdfs_enumex;
515 };
516 typedef union netdfs_interface netdfs_interface_t;
517 EXTERNTYPEINFO(netdfs_interface)
518
519
520 #endif /* _NETDFS_NDL_ */