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_ */