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