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 2008 Sun Microsystems, Inc. All rights reserved. 23 * Use is subject to license terms. 24 */ 25 26#ifndef _MLSVC_LANMAN_NDL_ 27#define _MLSVC_LANMAN_NDL_ 28 29/* 30 * LanMan RPC (WKSSVC and SRVSVC) interface definitions. 31 */ 32 33#include "ndrtypes.ndl" 34 35/* 36 * WARNING: The cpp(1) macros in this file are not understood by 37 * /usr/bin/cpp. Use /usr/libexec/cpp instead. 38 */ 39 40/* 41 * TYPE CONSTRUCTOR MACROS FOR INFORMATION RESULTS 42 **************************************************************** 43 * 44 * This is an explanation of the macros that follow this comment. 45 * 46 * The LANMAN API's look something like this: 47 * 48 * NetXXXGetInfo ( 49 * IN char * servername, 50 * IN char * XXX_name, 51 * IN int level, 52 * OUT char ** bufptr); 53 * 54 * The bufptr is a pointer-to-pointer (**). The NetXXXGetInfo() function 55 * malloc()s memory, and sets *bufptr to the memory. The API's 56 * are undiscriminated about what bufptr really points to. 57 * 58 * However, for RPI (Remote Procedure Interface), this just won't fly. 59 * We have to know what the result data looks like in order to 60 * properly (un)marshall it. 61 * 62 * As best we can determine, the MSC developers use an RPI that looks 63 * like this (approximately in IDL): 64 * 65 * RemoteNetXXXGetInfo ( 66 * IN char * servername, 67 * IN char * XXX_name, 68 * IN int level, 69 * OUT union switch(level) { 70 * case(1): XXX_INFO_1 * info1; 71 * case(2): XXX_INFO_2 * info2; 72 * } bufptr); 73 * 74 * The level guides the (un)marshalling as it follows the pointer. 75 * DCE(MS) IDL will automatically form a structure for the union 76 * which looks about like this (much as Sun/RPC does): 77 * 78 * struct { 79 * int _keyvalue_; 80 * union { 81 * XXX_INFO_1 *info1; 82 * XXX_INFO_2 *info2; 83 * } _u_; 84 * } bufptr; 85 * 86 * This struct is not made visible to the application. It is purely 87 * an internal (automagic) thing. However, ndrgen does not do this. 88 * The ndrgen input MUST remain a valid C header file, and all 89 * struct and union declarations must be exact, and we (would) have 90 * to tediously code sequences like this (approximately NDL)): 91 * 92 * union XXXGetInfo_result_u { 93 * [case(1)] 94 * XXX_INFO_1 * info1; 95 * [case(2)] 96 * XXX_INFO_2 * info2; 97 * }; 98 * 99 * struct XXXGetInfo_result { 100 * int level; 101 * 102 * union XXXGetInfo_result_u bufptr; 103 * }; 104 * 105 * struct XXXGetInfo_param { // still have to code this one 106 * [in] char * servername; 107 * [in] ushort level; 108 * [out] struct XXXGetInfo_result result; 109 * }; 110 * 111 * This is error prone and difficult to write, and more difficult 112 * and distracting to read. It is hard to pick through the 113 * necessary evils and see what's really going on. To mitigate 114 * the situation, we have a series of macros which generate 115 * the tedious code, and are easily recognized as supporting 116 * fluff rather than important structures: 117 * 118 * INFO1RES_DEFINITION(XXXGetInfo, 119 * INFO1RES_UNION_ENTRY(XXXGetInfo, 1) 120 * INFO1RES_UNION_ENTRY(XXXGetInfo, 2)) 121 * 122 * structt XXXGetInfo_param { // still have to code this one 123 * [in] char * servername; 124 * [in] ushort level; 125 * [out] struct XXXGetInfo_result result; 126 * }; 127 * 128 * The INFO1RES_DEFINITION macro defines two types: 129 * 130 * union ...__ru {...} 131 * struct ..._result { DWORD level; union ..._ru bufptr; } 132 * 133 * There is a similar macro, INFO1RESBUF_DEFINITION, which defines 134 * actual space rather than just pointers. It defines: 135 * 136 * union ...._rb {...} 137 * typedef union ..._rb ..._rb; 138 * 139 * Which is handy in functions because the initial coding sequence 140 * looks something like: 141 * 142 * XXXGetInfoParam (struct XXXGetInfo_param *param) { 143 * XXXGetInfo_rb rb; 144 * 145 * param->result.level = param->level; // for marshalling 146 * param->result.bufptr.nullptr = &rb; // anything fits 147 * 148 * There are two flavors of Info results. The first is the 149 * single XXX_INFO_x result, which the foregoing example 150 * uses. The second flavor is when there are multiple entries 151 * possible. Again, for the sake of guiding the marshalling, 152 * the RPIs use something accommodating: 153 * 154 * struct XXX_INFO_1_result { 155 * unsigned entriesread; 156 * [size_is(entriesread)] 157 * XXX_INFO_1 * table; 158 * }; 159 * 160 * union { XXX_INFO_1_result *info1; ...} 161 * 162 * Notice this is using XXX_INFO_1_result rather than just XXX_INFO_1. 163 * The requirements from this point are much like before. Because of 164 * the variable-length value, there is no realistic way to do something 165 * like INFO1RESBUF_DEFINITION. 166 * 167 * There are two sets of macros here. INFO1RES_xxx are for the 168 * single result case, and INFONRES_xxx for the multiple entry case. 169 */ 170 171/* 172 * INFO1RES_... 173 * Type constructors for single-result case 174 */ 175 176#define INFO1RES_DEFINITION(INFOPREF, ENTRIES) \ 177 INFO1RES_UNION(INFOPREF, ENTRIES) \ 178 INFO1RES_STRUCT(INFOPREF) 179 180#define INFO1RES_UNION(INFOPREF, ENTRIES) \ 181 union INFOPREF##__ru { \ 182 INFO1RES_UNION_NULLPTR \ 183 ENTRIES \ 184 }; 185 186#define INFO1RES_UNION_NULLPTR \ 187 DEFAULT char * nullptr; 188 189#define INFO1RES_UNION_ENTRY(INFOPREF,NUM) \ 190 CASE(NUM) struct INFOPREF##_##NUM * bufptr##NUM; 191 192#define INFO1RES_STRUCT(INFOPREF) \ 193 struct INFOPREF##_result { \ 194 DWORD level; \ 195 SWITCH(level) \ 196 union INFOPREF##__ru bufptr; \ 197 }; 198 199/* 200 * INFO1RESBUF_... 201 * Type constructors for single-result buffering. 202 */ 203 204 205#ifndef NDRGEN 206#define INFO1RESBUF_DEFINITION(INFOPREF, ENTRIES) \ 207 typedef union INFOPREF##_rb { \ 208 ENTRIES \ 209 } INFOPREF##_rb; 210#define INFO1RESBUF_UNION_ENTRY(INFOPREF,NUM) \ 211 CASE(NUM) struct INFOPREF##_##NUM buf##NUM; 212#else 213#define INFO1RESBUF_DEFINITION(INFOPREF, ENTRIES) 214#define INFO1RESBUF_UNION_ENTRY(INFOPREF,NUM) 215#endif 216 217 218 219 220/* 221 * INFONRES_... 222 * Type constructors for multiple-result case 223 */ 224 225#define INFONRES_RESULT(INFOPREF,NUM) \ 226 struct INFOPREF##_##NUM##_result { \ 227 DWORD entriesread; \ 228 SIZE_IS(entriesread) \ 229 struct INFOPREF##_##NUM *entries; \ 230 }; 231 232#define INFONRES_DEFINITION(INFOPREF, ENTRIES) \ 233 INFONRES_UNION(INFOPREF, ENTRIES) \ 234 INFONRES_STRUCT(INFOPREF) 235 236#define INFONRES_UNION(INFOPREF, ENTRIES) \ 237 union INFOPREF##__ru { \ 238 INFONRES_UNION_NULLPTR \ 239 INFONRES_UNION_INFONRES \ 240 ENTRIES \ 241 }; 242 243#define INFONRES_UNION_NULLPTR \ 244 DEFAULT char * nullptr; 245 246#ifndef NDRGEN 247#define INFONRES_UNION_INFONRES \ 248 struct mslm_infonres * p; 249#else 250#define INFONRES_UNION_INFONRES 251#endif 252 253#define INFONRES_UNION_ENTRY(INFOPREF,NUM) \ 254 CASE(NUM) struct INFOPREF##_##NUM##_result * bufptr##NUM; 255 256#define INFONRES_STRUCT(INFOPREF) \ 257 struct INFOPREF##_result { \ 258 DWORD level; \ 259 SWITCH(level) \ 260 union INFOPREF##__ru bufptr; \ 261 }; 262 263#ifndef NDRGEN 264/* 265 * This just makes things a little easier on the stub modules: 266 * 267 * XXXGetInfoParam (struct XXXGetInfo_param *param) { 268 * struct mslm_infonres infonres; 269 * 270 * infonres.entriesread = 0; 271 * infonres.entries = 0; 272 * param->result.level = param->level; // for marshalling 273 * param->result.bufptr.p = &infonres; 274 */ 275struct mslm_infonres { 276 DWORD entriesread; 277 void * entries; 278}; 279#endif 280 281 282/* 283 * SRVSVC - Server Service 284 */ 285 286/* Windows NT */ 287#define SRVSVC_OPNUM_NetCharDevEnum 0x00 288#define SRVSVC_OPNUM_NetCharDevGetInfo 0x01 289#define SRVSVC_OPNUM_NetCharDevControl 0x02 290#define SRVSVC_OPNUM_NetCharDevQEnum 0x03 291#define SRVSVC_OPNUM_NetCharDevQGetInfo 0x04 292#define SRVSVC_OPNUM_NetCharDevQSetInfo 0x05 293#define SRVSVC_OPNUM_NetCharDevQPurge 0x06 294#define SRVSVC_OPNUM_NetCharDevQPurgeSelf 0x07 295#define SRVSVC_OPNUM_NetConnectEnum 0x08 296#define SRVSVC_OPNUM_NetFileEnum 0x09 297#define SRVSVC_OPNUM_NetFileGetInfo 0x0a 298#define SRVSVC_OPNUM_NetFileClose 0x0b 299#define SRVSVC_OPNUM_NetSessionEnum 0x0c 300#define SRVSVC_OPNUM_NetSessionDel 0x0d 301#define SRVSVC_OPNUM_NetShareAdd 0x0e 302#define SRVSVC_OPNUM_NetShareEnum 0x0f 303#define SRVSVC_OPNUM_NetShareGetInfo 0x10 304#define SRVSVC_OPNUM_NetShareSetInfo 0x11 305#define SRVSVC_OPNUM_NetShareDel 0x12 306#define SRVSVC_OPNUM_NetShareDelSticky 0x13 307#define SRVSVC_OPNUM_NetShareCheck 0x14 308#define SRVSVC_OPNUM_NetServerGetInfo 0x15 309#define SRVSVC_OPNUM_NetServerSetInfo 0x16 310#define SRVSVC_OPNUM_NetServerDiskEnum 0x17 311#define SRVSVC_OPNUM_NetServerStatisticsGet 0x18 312#define SRVSVC_OPNUM_NetServerTransportAdd 0x19 313#define SRVSVC_OPNUM_NetServerTransportEnum 0x1a 314#define SRVSVC_OPNUM_NetServerTransportDel 0x1b 315#define SRVSVC_OPNUM_NetRemoteTOD 0x1c 316#define SRVSVC_OPNUM_NetServerSetServiceBits 0x1d 317#define SRVSVC_OPNUM_NetPathType 0x1e 318#define SRVSVC_OPNUM_NetPathCanonicalize 0x1f 319#define SRVSVC_OPNUM_NetPathCompare 0x20 320#define SRVSVC_OPNUM_NetNameValidate 0x21 321#define SRVSVC_OPNUM_NetNameCanonicalize 0x22 322#define SRVSVC_OPNUM_NetNameCompare 0x23 323#define SRVSVC_OPNUM_NetShareEnumSticky 0x24 324#define SRVSVC_OPNUM_NetShareDelStart 0x25 325#define SRVSVC_OPNUM_NetShareDelCommit 0x26 326#define SRVSVC_OPNUM_NetGetFileSecurity 0x27 327#define SRVSVC_OPNUM_NetSetFileSecurity 0x28 328#define SRVSVC_OPNUM_NetServerTransportAddEx 0x29 329#define SRVSVC_OPNUM_NetServerSetServiceBitsEx 0x2a 330#define SRVSVC_OPNUM_NetDfsGetVersion 0x2b 331 332/* Windows 2000 */ 333#define SRVSVC_OPNUM_NetDfsCreateLocalPartition 0x2c 334#define SRVSVC_OPNUM_NetDfsDeleteLocalPartition 0x2d 335#define SRVSVC_OPNUM_NetDfsSetLocalVolumeState 0x2e 336#define SRVSVC_OPNUM_NetDfsSetServerInfo 0x2f 337#define SRVSVC_OPNUM_NetDfsCreateExitPoint 0x30 338#define SRVSVC_OPNUM_NetDfsDeleteExitPoint 0x31 339#define SRVSVC_OPNUM_NetDfsModifyPrefix 0x32 340#define SRVSVC_OPNUM_NetDfsFixLocalVolume 0x33 341#define SRVSVC_OPNUM_NetDfsManagerReportSiteInfo 0x34 342 343/* Windows XP and Windows Server 2003 */ 344#define SRVSVC_OPNUM_NetServerTransportDelEx 0x35 345 346/* Windows Vista */ 347#define SRVSVC_OPNUM_NetServerAliasAdd 0x36 348#define SRVSVC_OPNUM_NetServerAliasEnum 0x37 349#define SRVSVC_OPNUM_NetServerAliasDel 0x38 350#define SRVSVC_OPNUM_NetShareDelEx 0x39 351 352/* 353 *********************************************************************** 354 * NetConnectEnum 355 *********************************************************************** 356 */ 357 358/* 359 * Level 0 connect information. 360 */ 361struct mslm_NetConnectInfoBuf0 { 362 DWORD coni0_id; 363}; 364 365struct mslm_NetConnectInfo0 { 366 DWORD entries_read; 367 SIZE_IS(entries_read) 368 struct mslm_NetConnectInfoBuf0 *ci0; 369}; 370 371/* 372 * Level 1 connect information. 373 */ 374struct mslm_NetConnectInfoBuf1 { 375 DWORD coni1_id; 376 DWORD coni1_type; 377 DWORD coni1_num_opens; 378 DWORD coni1_num_users; 379 DWORD coni1_time; 380 LPTSTR coni1_username; 381 LPTSTR coni1_netname; /* share name */ 382}; 383 384struct mslm_NetConnectInfo1 { 385 DWORD entries_read; 386 SIZE_IS(entries_read) 387 struct mslm_NetConnectInfoBuf1 *ci1; 388}; 389 390union mslm_NetConnectInfoResUnion { 391 CASE(0) struct mslm_NetConnectInfo0 *info0; 392 CASE(1) struct mslm_NetConnectInfo1 *info1; 393 DEFAULT char *nullptr; 394}; 395 396struct mslm_NetConnectInfo { 397 DWORD level; 398 DWORD switch_value; 399 SWITCH(switch_value) 400 union mslm_NetConnectInfoResUnion ru; 401}; 402 403OPERATION(SRVSVC_OPNUM_NetConnectEnum) 404struct mslm_NetConnectEnum { 405 IN LPTSTR servername; 406 IN LPTSTR qualifier; /* share name */ 407 INOUT struct mslm_NetConnectInfo info; 408 IN DWORD pref_max_len; 409 OUT DWORD total_entries; 410 INOUT DWORD *resume_handle; 411 OUT DWORD status; 412}; 413 414 415/* 416 *********************************************************************** 417 * NetFileEnum 418 *********************************************************************** 419 */ 420struct mslm_NetFileInfoBuf2 { 421 DWORD fi2_id; 422}; 423 424struct mslm_NetFileInfo2 { 425 DWORD entries_read; 426 SIZE_IS(entries_read) 427 struct mslm_NetFileInfoBuf2 *fi2; 428}; 429 430struct mslm_NetFileInfoBuf3 { 431 DWORD fi3_id; 432 DWORD fi3_permissions; 433 DWORD fi3_num_locks; 434 LPTSTR fi3_pathname; 435 LPTSTR fi3_username; 436}; 437 438struct mslm_NetFileInfo3 { 439 DWORD entries_read; 440 SIZE_IS(entries_read) 441 struct mslm_NetFileInfoBuf3 *fi3; 442}; 443 444union mslm_NetFileInfoResUnion { 445 CASE(2) struct mslm_NetFileInfo2 *info2; 446 CASE(3) struct mslm_NetFileInfo3 *info3; 447 DEFAULT char *nullptr; 448}; 449 450struct mslm_NetFileInfo { 451 DWORD level; 452 DWORD switch_value; 453 SWITCH(switch_value) 454 union mslm_NetFileInfoResUnion ru; 455}; 456 457OPERATION(SRVSVC_OPNUM_NetFileEnum) 458struct mslm_NetFileEnum { 459 IN LPTSTR servername; 460 IN DWORD basepath; 461 IN DWORD username; 462 INOUT struct mslm_NetFileInfo info; 463 IN DWORD pref_max_len; 464 OUT DWORD total_entries; 465 INOUT DWORD *resume_handle; 466 OUT DWORD status; 467}; 468 469 470/* 471 *********************************************************************** 472 * NetFileClose 473 * 474 * Close files using a file id reported by NetFileEnum. 475 *********************************************************************** 476 */ 477OPERATION(SRVSVC_OPNUM_NetFileClose) 478struct mslm_NetFileClose { 479 IN LPTSTR servername; 480 IN DWORD file_id; 481 OUT DWORD status; 482}; 483 484 485/* 486 *********************************************************************** 487 * NetShareGetInfo: netname is the name of a share. 488 * 489 * Levels: 490 * 1 Sets information about the shared resource: name, type 491 * of resource and a comment. 492 * 2 Sets information about the shared resource: name, type, 493 * permissions, password and number of connections. 494 * 501 Sets information about the shared resource: name, type 495 * of resource and a comment. 496 * 502 Sets information about the shared resource, including 497 * the name, type, permissions, number of connections etc. 498 * 503 Contains information about the shared resource; 499 * identical to 502 except for the addition of a servername. 500 * 1004 Specifies a comment for the shared resource. 501 * 1005 Specifies a set of flags describing the shared resource. 502 * 1006 Specifies the maximum number of concurrent connections 503 * that the shared resource can accommodate. 504 * 1501 Specifies the SECURITY_DESCRIPTOR for the share. 505 * 506 * Windows Me/98/95 supports level 50, which is similar to level 1. 507 * 508 * shi1005_flags: SHI1005_VALID_FLAGS_SET defines the set of flags that 509 * can be set with the NetShareSetInfo function. SHI1005_FLAGS_DFS and 510 * SHI1005_FLAGS_DFS_ROOT can only be returned, but not set. 511 * 512 * 0x01 SHI1005_FLAGS_DFS 513 * The specified share is present in a Dfs tree structure. 514 * This flag cannot be set with NetShareSetInfo. 515 * 516 * 0x02 SHI1005_FLAGS_DFS_ROOT 517 * The specified share is the root volume in a Dfs tree. 518 * This flag cannot be set with NetShareSetInfo. 519 * 520 * 0x30 CSC_MASK Client-side caching (CSC) state: 521 * 0x00 CSC_CACHE_MANUAL_REINT Automatic file-by-file 522 * reintegration not allowed. 523 * 0x10 CSC_CACHE_AUTO_REINT File-by-file reintegration allowed. 524 * 0x20 CSC_CACHE_VDO File opens do not need to be flowed. 525 * 0x30 CSC_CACHE_NONE CSC is disabled for this share. 526 * 527 * 0x0100 SHI1005_FLAGS_RESTRICT_EXCLUSIVE_OPENS 528 * The specified share disallows exclusive file opens, 529 * where reads to an open file are disallowed. 530 * 531 * 0x0200 SHI1005_FLAGS_FORCE_SHARED_DELETE 532 * Shared files in the specified share can be forcibly deleted. 533 * 534 * 0x0400 SHI1005_FLAGS_ALLOW_NAMESPACE_CACHING 535 * Clients are allowed to cache the namespace of the share. 536 * 537 * 0x0800 SHI1005_FLAGS_ACCESS_BASED_DIRECTORY_ENUM 538 * The server will filter directory entries based on the access 539 * permissions of the client. This flag is only supported on 540 * servers running Windows Server 2003 SP1. 541 * Note: The access-based enumeration (ABE) flag may also 542 * appear as SHI1005_FLAGS_ENFORCE_NAMESPACE_ACCESS. 543 *********************************************************************** 544 */ 545 546#define CSC_MASK 0x30 547#define CSC_CACHE_MANUAL_REINT 0x00 548#define CSC_CACHE_AUTO_REINT 0x10 549#define CSC_CACHE_VDO 0x20 550#define CSC_CACHE_NONE 0x30 551 552struct mslm_NetShareGetInfo0 { 553 LPTSTR shi0_netname; 554}; 555 556struct mslm_NetShareGetInfo1 { 557 LPTSTR shi1_netname; 558 DWORD shi1_type; /* type of resource such as IPC$ */ 559 LPTSTR shi1_comment; 560}; 561 562struct mslm_NetShareGetInfo2 { 563 LPTSTR shi2_netname; 564 DWORD shi2_type; 565 LPTSTR shi2_comment; 566 DWORD shi2_permissions; 567 DWORD shi2_max_uses; 568 DWORD shi2_current_uses; 569 LPTSTR shi2_path; 570 LPTSTR shi2_passwd; 571}; 572 573struct mslm_NetShareGetInfo501 { 574 LPTSTR shi501_netname; 575 DWORD shi501_type; 576 LPTSTR shi501_comment; 577 DWORD shi501_reserved; 578}; 579 580struct mslm_NetShareGetInfo502 { 581 LPTSTR shi502_netname; 582 DWORD shi502_type; 583 LPTSTR shi502_comment; 584 DWORD shi502_permissions; 585 DWORD shi502_max_uses; 586 DWORD shi502_current_uses; 587 LPTSTR shi502_path; 588 LPTSTR shi502_passwd; 589 DWORD shi502_reserved; 590 DWORD shi502_security_descriptor; 591}; 592 593struct mslm_NetShareGetInfo503 { 594 LPTSTR shi503_netname; 595 DWORD shi503_type; 596 LPTSTR shi503_comment; 597 DWORD shi503_permissions; 598 DWORD shi503_max_uses; 599 DWORD shi503_current_uses; 600 LPTSTR shi503_path; 601 LPTSTR shi503_passwd; 602 LPTSTR shi503_servername; 603 DWORD shi503_reserved; 604 DWORD shi503_security_descriptor; 605}; 606 607struct mslm_NetShareGetInfo1004 { 608 LPTSTR shi1004_comment; 609}; 610 611struct mslm_NetShareGetInfo1005 { 612 DWORD shi1005_flags; 613}; 614 615struct mslm_NetShareGetInfo1006 { 616 DWORD shi1006_max_uses; 617}; 618 619union mlsm_NetShareGetInfoResUnion { 620 CASE(0) struct mslm_NetShareGetInfo0 *info0; 621 CASE(1) struct mslm_NetShareGetInfo1 *info1; 622 CASE(2) struct mslm_NetShareGetInfo2 *info2; 623 CASE(501) struct mslm_NetShareGetInfo501 *info501; 624 CASE(502) struct mslm_NetShareGetInfo502 *info502; 625 CASE(1004) struct mslm_NetShareGetInfo1004 *info1004; 626 CASE(1005) struct mslm_NetShareGetInfo1005 *info1005; 627 CASE(1006) struct mslm_NetShareGetInfo1006 *info1006; 628 DEFAULT char *nullptr; 629}; 630 631 632struct mlsm_NetShareGetInfoRes { 633 DWORD switch_value; 634 SWITCH(switch_value) 635 union mlsm_NetShareGetInfoResUnion ru; 636}; 637 638 639OPERATION(SRVSVC_OPNUM_NetShareGetInfo) 640struct mlsm_NetShareGetInfo { 641 IN LPTSTR servername; 642 IN REFERENCE LPTSTR netname; 643 IN DWORD level; 644 OUT struct mlsm_NetShareGetInfoRes result; 645 OUT DWORD status; 646}; 647 648 649/* 650 *********************************************************************** 651 * NetShareSetInfo: netname is the name of a share. 652 * The levels and shi1005_flags are as described for NetShareGetInfo. 653 * 654 * Support for Access-based Enumeration (ABE) was added to Windows in 655 * Windows Server 2003 Service Pack 1. ABE filters directory contents 656 * (and other shared resources) returned via a share based on a user's 657 * access rights, i.e. a user would not see objects that are 658 * inaccessible to that user. ABE requests are made using info level 659 * 1005 with the value 0x0800 in the flags field (see NetShareGetInfo). 660 *********************************************************************** 661 */ 662OPERATION(SRVSVC_OPNUM_NetShareSetInfo) 663struct mlsm_NetShareSetInfo { 664 IN LPTSTR servername; 665 IN REFERENCE LPTSTR netname; 666 IN DWORD level; 667/* 668 * This should accept all the same levels as NetShareGetInfo 669 * but we always return ACCESS_DENIED for now. So there's no 670 * point in unmarshalling the share information. 671 * 672 * IN struct mlsm_NetShareGetInfoRes result; 673 */ 674 OUT DWORD parm_err_ptr; 675 OUT DWORD parm_err; 676 OUT DWORD status; 677}; 678 679 680/* 681 *********************************************************************** 682 * NetSessionEnum 683 * 684 * The NetSessionEnum function provides information about sessions 685 * established on a server. 686 * 687 * Only members of the Administrators or Account Operators local groups 688 * can successfully execute the NetSessionEnum function at level 1 or 689 * level 2. No special group membership is required for level 0 or level 690 * 10 calls. 691 * 692 * Windows NT/2000/XP: The parameter order is as follows. 693 * 694 * NET_API_STATUS NetSessionEnum(LPWSTR servername, 695 * LPWSTR UncClientName, 696 * LPWSTR username, 697 * DWORD level, 698 * LPBYTE *bufptr, 699 * DWORD prefmaxlen, 700 * LPDWORD entriesread, 701 * LPDWORD totalentries, 702 * LPDWORD resume_handle); 703 * 704 * Windows 95/98/Me: The calling application must use the cbBuffer parameter 705 * to specify the size, in bytes, of the information buffer pointed to by the 706 * pbBuffer parameter. (The cbBuffer parameter replaces the prefmaxlen 707 * parameter.) Neither a user name parameter nor a resume handle parameter is 708 * available on this platform. Therefore, the parameter list is as follows. 709 * 710 * API_FUNCTION NetSessionEnum(const char FAR *pszServer, 711 * short sLevel, 712 * char FAR *pbBuffer, 713 * unsigned short cbBuffer, 714 * unsigned short FAR *pcEntriesRead, 715 * unsigned short FAR *pcTotalAvail); 716 * 717 * Parameters 718 * 719 * servername 720 * [in] Pointer to a string that specifies the DNS or NetBIOS name of the 721 * remote server on which the function is to execute. If this parameter is 722 * NULL, the local computer is used. 723 * Windows NT 4.0 and earlier: This string must begin with \\. 724 * 725 * UncClientName 726 * [in] Pointer to a string that specifies the name of the computer session 727 * for which information is to be returned. If this parameter is NULL, 728 * NetSessionEnum returns information for all computer sessions on the server. 729 * 730 * username 731 * [in] Pointer to a string that specifies the name of the user for which 732 * information is to be returned. If this parameter is NULL, NetSessionEnum 733 * returns information for all users. 734 * 735 * level 736 * [in] Specifies the information level of the data. This parameter can be 737 * one of the following values. 738 * Windows NT/2000/XP: The following levels are valid. 739 * Value Meaning 740 * 0 Return the name of the computer that established the session. 741 * The bufptr parameter points to an array of SESSION_INFO_0 742 * structures. 743 * 1 Return the name of the computer, name of the user, and open files, 744 * pipes, and devices on the computer. The bufptr parameter points to 745 * an array of SESSION_INFO_1 structures. 746 * 2 In addition to the information indicated for level 1, return the 747 * type of client and how the user established the session. The bufptr 748 * parameter points to an array of SESSION_INFO_2 structures. 749 * 10 Return the name of the computer, name of the user, and active and 750 * idle times for the session. The bufptr parameter points to an array 751 * of SESSION_INFO_10 structures. 752 * 502 Return the name of the computer; name of the user; open files, 753 * pipes, and devices on the computer; and the name of the transport 754 * the client is using. The bufptr parameter points to an array of 755 * SESSION_INFO_502 structures. 756 * 757 * Windows 95/98/Me: The following level is valid. 758 * Value Meaning 759 * 50 Return the name of the computer, name of the user, open files on 760 * the computer, and the name of the transport protocol the client is 761 * using. The pbBuffer parameter points to an array of session_info_50 762 * structures. 763 * 764 * bufptr 765 * [out] Pointer to the buffer that receives the data. The format of this 766 * data depends on the value of the level parameter. 767 * Windows NT/2000/XP: This buffer is allocated by the system and must be 768 * freed using the NetApiBufferFree function. Note that you must free the 769 * buffer even if the function fails with ERROR_MORE_DATA. 770 * Windows 95/98/Me: The caller must allocate and deallocate this buffer. 771 * 772 * prefmaxlen 773 * [in] Specifies the preferred maximum length of returned data, in bytes. 774 * If you specify MAX_PREFERRED_LENGTH, the function allocates the amount 775 * of memory required for the data. If you specify another value in this 776 * parameter, it can restrict the number of bytes that the function returns. 777 * If the buffer size is insufficient to hold all entries, the function 778 * returns ERROR_MORE_DATA. For more information, see Network Management 779 * Function Buffers and Network Management Function Buffer Lengths. 780 * 781 * entriesread 782 * [out] Pointer to a value that receives the count of elements actually 783 * enumerated. 784 * 785 * totalentries 786 * [out] Pointer to a value that receives the total number of entries that 787 * could have been enumerated from the current resume position. 788 * 789 * resume_handle 790 * [in/out] Pointer to a value that contains a resume handle which is used 791 * to continue an existing session search. The handle should be zero on the 792 * first call and left unchanged for subsequent calls. If resume_handle is 793 * NULL, no resume handle is stored. 794 * 795 * 796 * SESSION_INFO_1 797 * ============== 798 * The SESSION_INFO_1 structure contains information about the session, 799 * including name of the computer; name of the user; and open files, pipes, 800 * and devices on the computer. 801 * 802 * Members 803 * 804 * sesi1_cname 805 * Pointer to a Unicode string specifying the name of the computer that 806 * established the session. 807 * 808 * sesi1_username 809 * Pointer to a Unicode string specifying the name of the user who established 810 * the session. 811 * 812 * sesi1_num_opens 813 * Specifies a DWORD value that contains the number of files, devices, 814 * and pipes opened during the session. 815 * 816 * sesi1_time 817 * Specifies a DWORD value that contains the number of seconds the session 818 * has been active. 819 * 820 * sesi1_idle_time 821 * Specifies a DWORD value that contains the number of seconds the session 822 * has been idle. 823 * 824 * sesi1_user_flags 825 * Specifies a DWORD value that describes how the user established the 826 * session. This member can be one of the following values: 827 * SESS_GUEST The user specified by the sesi1_username member 828 * established the session using a guest account. 829 * SESS_NOENCRYPTION The user specified by the sesi1_username member 830 * established the session without using password 831 * encryption. 832 *********************************************************************** 833 */ 834 835#define SESS_GUEST 0x00000001 836#define SESS_NOENCRYPTION 0x00000002 837 838struct mslm_SESSION_INFO_0 { 839 LPTSTR sesi0_cname; 840}; 841INFONRES_RESULT(mslm_SESSION_INFO, 0) 842 843struct mslm_SESSION_INFO_1 { 844 LPTSTR sesi1_cname; 845 LPTSTR sesi1_uname; 846 DWORD sesi1_nopens; 847 DWORD sesi1_time; 848 DWORD sesi1_itime; 849 DWORD sesi1_uflags; 850}; 851INFONRES_RESULT(mslm_SESSION_INFO, 1) 852 853INFONRES_DEFINITION(mslm_NetSessionEnum, 854 INFONRES_UNION_ENTRY(mslm_SESSION_INFO, 0) 855 INFONRES_UNION_ENTRY(mslm_SESSION_INFO, 1)) 856 857OPERATION(SRVSVC_OPNUM_NetSessionEnum) 858struct mslm_NetSessionEnum { 859 IN LPTSTR servername; 860 IN DWORD unc_clientname; 861 IN DWORD username; 862 INOUT DWORD level; 863 INOUT struct mslm_NetSessionEnum_result result; 864 IN DWORD pref_max_len; 865 OUT DWORD total_entries; 866 INOUT DWORD *resume_handle; 867 OUT DWORD status; 868}; 869 870 871/* 872 *********************************************************************** 873 * NetSessionDel (Platform SDK: Network Management) 874 * 875 * The NetSessionDel function ends a network session between a server 876 * and a workstation. 877 * 878 * Security Requirements 879 * Only members of the Administrators or Account Operators local group 880 * can successfully execute the NetSessionDel function. 881 * 882 * Windows NT/2000/XP: The parameter order is as follows. 883 * 884 * NET_API_STATUS NetSessionDel(LPWSTR servername, 885 * LPWSTR UncClientName, 886 * LPWSTR username); 887 * 888 * Windows 95/98/Me: The sReserved parameter replaces the username 889 * parameter. For more information, see the following Remarks section. 890 * The parameter list is as follows. 891 * 892 * API_FUNCTION NetSessionDel(const char FAR *pszServer, 893 * const char FAR *pszClientName, 894 * short sReserved); 895 * 896 * Parameters 897 * 898 * servername 899 * [in] Pointer to a string that specifies the DNS or NetBIOS name 900 * of the remote server on which the function is to execute. If this 901 * parameter is NULL, the local computer is used. 902 * Windows NT 4.0 and earlier: This string must begin with \\. 903 * 904 * UncClientName 905 * [in] Pointer to a string that specifies the computer name of the 906 * client to disconnect. If UncClientName is NULL, then all the sessions 907 * of the user identified by the username parameter will be deleted on 908 * the server specified by servername. For more information, see 909 * NetSessionEnum. 910 * 911 * username 912 * [in] Pointer to a string that specifies the name of the user whose 913 * session is to be terminated. If this parameter is NULL, all users' 914 * sessions from the client specified by the UncClientName parameter 915 * are to be terminated. 916 * 917 * Remarks 918 * Windows 95/98/Me: You must specify the session key in the sReserved 919 * parameter when you call NetSessionDel. The session key is returned by 920 * the NetSessionEnum function or the NetSessionGetInfo function in the 921 * sesi50_key member of the session_info_50 structure. 922 *********************************************************************** 923 */ 924 925OPERATION(SRVSVC_OPNUM_NetSessionDel) 926struct mslm_NetSessionDel { 927 IN LPTSTR servername; 928 IN LPTSTR unc_clientname; 929 IN LPTSTR username; 930 OUT DWORD status; 931}; 932 933 934/* 935 * SRVSVC NetServerGetInfo ( 936 * IN LPTSTR servername, 937 * IN DWORD level, 938 * OUT union switch(level) { 939 * case 100: _SERVER_INFO_100 * p100; 940 * case 101: _SERVER_INFO_101 * p101; 941 * case 102: _SERVER_INFO_102 * p102; 942 * } bufptr, 943 * OUT DWORD status 944 * ) 945 */ 946 947/* for svX_platform */ 948#define SV_PLATFORM_ID_OS2 400 949#define SV_PLATFORM_ID_NT 500 950 951/* Bit-mapped values for svX_type fields */ 952#define SV_TYPE_WORKSTATION 0x00000001 953#define SV_TYPE_SERVER 0x00000002 954#define SV_TYPE_SQLSERVER 0x00000004 955#define SV_TYPE_DOMAIN_CTRL 0x00000008 956#define SV_TYPE_DOMAIN_BAKCTRL 0x00000010 957#define SV_TYPE_TIME_SOURCE 0x00000020 958#define SV_TYPE_AFP 0x00000040 959#define SV_TYPE_NOVELL 0x00000080 960#define SV_TYPE_DOMAIN_MEMBER 0x00000100 961#define SV_TYPE_PRINTQ_SERVER 0x00000200 962#define SV_TYPE_DIALIN_SERVER 0x00000400 963#define SV_TYPE_XENIX_SERVER 0x00000800 964#define SV_TYPE_SERVER_UNIX SV_TYPE_XENIX_SERVER 965#define SV_TYPE_NT 0x00001000 966#define SV_TYPE_WFW 0x00002000 967 968#define SV_TYPE_SERVER_MFPN 0x00004000 969#define SV_TYPE_SERVER_NT 0x00008000 970#define SV_TYPE_POTENTIAL_BROWSER 0x00010000 971#define SV_TYPE_BACKUP_BROWSER 0x00020000 972#define SV_TYPE_MASTER_BROWSER 0x00040000 973#define SV_TYPE_DOMAIN_MASTER 0x00080000 974#define SV_TYPE_SERVER_OSF 0x00100000 975#define SV_TYPE_SERVER_VMS 0x00200000 976#define SV_TYPE_WINDOWS 0x00400000 /* Windows95 and above */ 977#define SV_TYPE_ALTERNATE_XPORT 0x20000000 /* return list for 978 * alternate transport */ 979#define SV_TYPE_LOCAL_LIST_ONLY 0x40000000 /* Return local list only */ 980#define SV_TYPE_DOMAIN_ENUM 0x80000000 981#define SV_TYPE_ALL 0xFFFFFFFF /* handy for NetServerEnum2 */ 982 983/* NT-Server 4.0 sends 0x0006_120B */ 984#define SV_TYPE_SENT_BY_NT_4_0_SERVER \ 985 ( SV_TYPE_WORKSTATION \ 986 | SV_TYPE_SERVER \ 987 | SV_TYPE_DOMAIN_CTRL \ 988 | SV_TYPE_NT \ 989 | SV_TYPE_BACKUP_BROWSER \ 990 | SV_TYPE_MASTER_BROWSER) 991/* NT-workstation 4.0 send 0x0004_1013 */ 992#define SV_TYPE_SENT_BY_NT_4_0_WORKSTATION \ 993 ( SV_TYPE_WORKSTATION \ 994 | SV_TYPE_SERVER \ 995 | SV_TYPE_DOMAIN_BAKCTRL \ 996 | SV_TYPE_NT \ 997 | SV_TYPE_MASTER_BROWSER) 998 999/* Special value for sv102_disc that specifies infinite disconnect time */ 1000#define SV_NODISC (-1L) /* No autodisconnect timeout enforced */ 1001 1002/* Values of svX_security field */ 1003#define SV_USERSECURITY 1 1004#define SV_SHARESECURITY 0 1005 1006/* Values of svX_hidden field */ 1007#define SV_HIDDEN 1 1008#define SV_VISIBLE 0 1009 1010 1011/* Let's get some info already */ 1012struct mslm_SERVER_INFO_100 { 1013 DWORD sv100_platform_id; 1014 LPTSTR sv100_name; 1015}; 1016 1017struct mslm_SERVER_INFO_101 { 1018 DWORD sv101_platform_id; 1019 LPTSTR sv101_name; 1020 DWORD sv101_version_major; 1021 DWORD sv101_version_minor; 1022 DWORD sv101_type; 1023 LPTSTR sv101_comment; 1024}; 1025 1026struct mslm_SERVER_INFO_102 { 1027 DWORD sv102_platform_id; 1028 LPTSTR sv102_name; 1029 DWORD sv102_version_major; 1030 DWORD sv102_version_minor; 1031 DWORD sv102_type; 1032 LPTSTR sv102_comment; 1033 DWORD sv102_users; 1034 DWORD sv102_disc; 1035 DWORD sv102_hidden; /* BOOL */ 1036 DWORD sv102_announce; 1037 DWORD sv102_anndelta; 1038 DWORD sv102_licenses; 1039 LPTSTR sv102_userpath; 1040}; 1041 1042union mslm_NetServerGetInfo_ru { 1043 CASE(100) struct mslm_SERVER_INFO_100 *bufptr100; 1044 CASE(101) struct mslm_SERVER_INFO_101 *bufptr101; 1045 CASE(102) struct mslm_SERVER_INFO_102 *bufptr102; 1046 DEFAULT char *nullptr; 1047}; 1048 1049struct mslm_NetServerGetInfo_result { 1050 DWORD level; 1051 SWITCH(level) 1052 union mslm_NetServerGetInfo_ru bufptr; 1053}; 1054 1055 1056OPERATION(SRVSVC_OPNUM_NetServerGetInfo) 1057struct mslm_NetServerGetInfo { 1058 IN LPTSTR servername; 1059 IN DWORD level; 1060 OUT struct mslm_NetServerGetInfo_result result; 1061 OUT DWORD status; 1062}; 1063 1064/* 1065 * SRVSVC NetRemoteTOD ( 1066 * IN LPTSTR servername, 1067 * OUT _TIME_OF_DAY_INFO *bufptr, 1068 * OUT long status 1069 * ) 1070 */ 1071 1072struct mslm_TIME_OF_DAY_INFO { 1073 DWORD tod_elapsedt; 1074 DWORD tod_msecs; 1075 DWORD tod_hours; 1076 DWORD tod_mins; 1077 DWORD tod_secs; 1078 DWORD tod_hunds; 1079 DWORD tod_timezone; 1080 DWORD tod_tinterval; 1081 DWORD tod_day; 1082 DWORD tod_month; 1083 DWORD tod_year; 1084 DWORD tod_weekday; 1085}; 1086 1087OPERATION(SRVSVC_OPNUM_NetRemoteTOD) 1088struct mslm_NetRemoteTOD { 1089 IN LPTSTR servername; 1090 OUT struct mslm_TIME_OF_DAY_INFO *bufptr; 1091 OUT DWORD status; 1092}; 1093 1094#define NAMETYPE_USER 1 1095#define NAMETYPE_PASSWORD 2 1096#define NAMETYPE_GROUP 3 1097#define NAMETYPE_COMPUTER 4 1098#define NAMETYPE_EVENT 5 1099#define NAMETYPE_DOMAIN 6 1100#define NAMETYPE_SERVICE 7 1101#define NAMETYPE_NET 8 1102#define NAMETYPE_SHARE 9 1103#define NAMETYPE_MESSAGE 10 1104#define NAMETYPE_MESSAGEDEST 11 1105#define NAMETYPE_SHAREPASSWORD 12 1106#define NAMETYPE_WORKGROUP 13 1107 1108OPERATION(SRVSVC_OPNUM_NetNameValidate) 1109struct mslm_NetNameValidate { 1110 IN LPTSTR servername; 1111 IN REFERENCE LPTSTR pathname; 1112 IN DWORD type; 1113 IN DWORD flags; 1114 OUT DWORD status; 1115}; 1116 1117/* 1118 * SRVSVC NetShareEnum ( 1119 * IN LPTSTR servername, 1120 * IN DWORD level; 1121 * OUT union switch(level) { 1122 * case 0: struct { 1123 * DWORD entriesread; 1124 * [size_is(entriesread)] 1125 * _SHARE_INFO_0 *entries; 1126 * } *bufptr0; 1127 * case 1: struct { 1128 * DWORD entriesread; 1129 * [size_is(entriesread)] 1130 * _SHARE_INFO_1 *entries; 1131 * } *bufptr1; 1132 * ... 1133 * } bufptr, 1134 * IN DWORD prefmaxlen, 1135 * OUT DWORD totalentries, 1136 * IN OUT DWORD ?* resume_handle, 1137 * OUT DWORD status 1138 * ) 1139 */ 1140 1141/* 1142 * Share types for shiX_type fields - duplicated from cifs.h 1143 */ 1144#ifndef _SHARE_TYPES_DEFINED_ 1145#define _SHARE_TYPES_DEFINED_ 1146#define STYPE_DISKTREE 0x00000000 1147#define STYPE_PRINTQ 0x00000001 1148#define STYPE_DEVICE 0x00000002 1149#define STYPE_IPC 0x00000003 1150#define STYPE_MASK 0x0000000F 1151#define STYPE_DFS 0x00000064 1152#define STYPE_HIDDEN 0x80000000 1153#define STYPE_SPECIAL 0x80000000 1154#endif /* _SHARE_TYPES_DEFINED_ */ 1155 1156/* Maximum uses for shiX_max_uses fields */ 1157#define SHI_USES_UNLIMITED (DWORD)-1 1158 1159 1160struct mslm_SHARE_INFO_0 { 1161 LPTSTR shi0_netname; 1162}; 1163INFONRES_RESULT(mslm_SHARE_INFO,0) 1164 1165struct mslm_SHARE_INFO_1 { 1166 LPTSTR shi1_netname; 1167 DWORD shi1_type; 1168 LPTSTR shi1_remark; 1169}; 1170INFONRES_RESULT(mslm_SHARE_INFO,1) 1171 1172struct mslm_SHARE_INFO_2 { 1173 LPTSTR shi2_netname; 1174 DWORD shi2_type; 1175 LPTSTR shi2_remark; 1176 DWORD shi2_permissions; 1177 DWORD shi2_max_uses; 1178 DWORD shi2_current_uses; 1179 LPTSTR shi2_path; 1180 LPTSTR shi2_passwd; 1181}; 1182INFONRES_RESULT(mslm_SHARE_INFO,2) 1183 1184/* 1185 * shi501_flags must be zero. 1186 */ 1187struct mslm_SHARE_INFO_501 { 1188 LPTSTR shi501_netname; 1189 DWORD shi501_type; 1190 LPTSTR shi501_remark; 1191 DWORD shi501_flags; 1192}; 1193INFONRES_RESULT(mslm_SHARE_INFO,501) 1194 1195/* 1196 * Note: shi502_security_descriptor should be a pointer to a 1197 * security descriptor (W32SEC_SECURITY_DESCRIPTOR): 1198 * PSECURITY_DESCRIPTOR shi502_security_descriptor; 1199 * 1200 * For now use a DWORD and set it to zero. 1201 */ 1202struct mslm_SHARE_INFO_502 { 1203 LPTSTR shi502_netname; 1204 DWORD shi502_type; 1205 LPTSTR shi502_remark; 1206 DWORD shi502_permissions; 1207 DWORD shi502_max_uses; 1208 DWORD shi502_current_uses; 1209 LPTSTR shi502_path; 1210 LPTSTR shi502_passwd; 1211 DWORD shi502_reserved; 1212 DWORD shi502_security_descriptor; 1213}; 1214INFONRES_RESULT(mslm_SHARE_INFO,502) 1215 1216union mslm_NetShareAddInfo_u { 1217 CASE(2) struct mslm_SHARE_INFO_2 *info2; 1218 CASE(502) struct mslm_SHARE_INFO_502 *info502; 1219}; 1220 1221struct mslm_NetShareAddInfo { 1222 DWORD switch_value; 1223 SWITCH(switch_value) 1224 union mslm_NetShareAddInfo_u un; 1225}; 1226 1227 1228OPERATION(SRVSVC_OPNUM_NetShareAdd) 1229struct mslm_NetShareAdd { 1230 IN LPTSTR servername; 1231 IN DWORD level; 1232 IN struct mslm_NetShareAddInfo info; 1233 INOUT DWORD *parm_err; 1234 OUT DWORD status; 1235}; 1236 1237 1238INFONRES_DEFINITION(mslm_NetShareEnum, 1239 INFONRES_UNION_ENTRY(mslm_SHARE_INFO,0) 1240 INFONRES_UNION_ENTRY(mslm_SHARE_INFO,1) 1241 INFONRES_UNION_ENTRY(mslm_SHARE_INFO,2) 1242 INFONRES_UNION_ENTRY(mslm_SHARE_INFO,501) 1243 INFONRES_UNION_ENTRY(mslm_SHARE_INFO,502)) 1244 1245/* 1246 * NetShareEnum: enumerate all shares (see also NetShareEnumSticky). 1247 * Note: the server should ignore the content of servername. 1248 */ 1249OPERATION(SRVSVC_OPNUM_NetShareEnum) 1250struct mslm_NetShareEnum { 1251 IN LPTSTR servername; 1252 INOUT DWORD level; 1253 INOUT struct mslm_NetShareEnum_result result; 1254 IN DWORD prefmaxlen; 1255 OUT DWORD totalentries; 1256 INOUT DWORD *resume_handle; 1257 OUT DWORD status; 1258}; 1259 1260/* 1261 * Delete a share. The reserved field appears in netmon 1262 * but I've left it out in case it's not always present. 1263 * This won't affect RPC processing. 1264 */ 1265OPERATION(SRVSVC_OPNUM_NetShareDel) 1266struct mslm_NetShareDel { 1267 IN LPTSTR servername; 1268 IN REFERENCE LPTSTR netname; 1269 /* IN DWORD reserved; */ 1270 OUT DWORD status; 1271}; 1272 1273/* 1274 * NetShareEnumSticky is the same as NetShareEnum except that 1275 * STYPE_SPECIAL (hidden or special) shares are not returned. 1276 * Note: the server should ignore the content of servername. 1277 */ 1278OPERATION(SRVSVC_OPNUM_NetShareEnumSticky) 1279struct mslm_NetShareEnumSticky { 1280 IN LPTSTR servername; 1281 INOUT DWORD level; 1282 INOUT struct mslm_NetShareEnum_result result; 1283 IN DWORD prefmaxlen; 1284 OUT DWORD totalentries; 1285 INOUT DWORD *resume_handle; 1286 OUT DWORD status; 1287}; 1288 1289/* 1290 * When you install Windows NT Server Tools on a Win95 client, 1291 * a security tab will be added to properties dialog box of files/folders. 1292 * Within this security tab, when you try to get/set permissions on a 1293 * file/folder the next two RPC calls are used. 1294 */ 1295OPERATION(SRVSVC_OPNUM_NetGetFileSecurity) 1296struct mslm_NetGetFileSecurity { 1297 IN LPTSTR servername; 1298 IN LPTSTR sharename; 1299 IN REFERENCE LPTSTR filename; 1300 IN DWORD securityinfo; 1301 1302 /* 1303 * Right now, we can't send back SD of the requested object 1304 * in RPC code, so we just reply with access denied error 1305 * code. Thus, this output declaration is only valid in this 1306 * case i.e., it's not complete. 1307 * It looks like: 1308 * 1309 * A Pointer 1310 * A Length 1311 * 1312 * A Pointer 1313 * A Length (equal to the prev length) 1314 * A buffer 1315 * 1316 * return value 1317 */ 1318 OUT DWORD length; 1319 OUT DWORD status; 1320}; 1321 1322/* 1323 * This is the request: 1324 * 1325 * R_SRVSVC: RPC Client call srvsvc:NetrpSetFileSecurity(..) 1326 * R_SRVSVC: SRVSVC_HANDLE ServerName = \\WK76-177 1327 * R_SRVSVC: LPWSTR ShareName = AFSHIN 1328 * R_SRVSVC: LPWSTR lpFileName = \salek.txt 1329 * R_SRVSVC: SECURITY_INFORMATION SecurityInformation = 4 (0x4) 1330 * -R_SRVSVC: PADT_SECURITY_DESCRIPTOR SecurityDescriptor {..} 1331 * R_SRVSVC: DWORD Length = 64 (0x40) 1332 * R_SRVSVC: LPBYTE Buffer = 4496048 (0x449AB0) 1333 * R_SRVSVC: LPBYTE Buffer [..] = 01 00 04 80 00 00 00 00 00 00 00 00 00 00 00 1334 * ... 1335 * 1336 * 000000A0 00 83 46 00 0B 00 00 00 00 00 00 00 0B 00 ..F........... 1337 * 000000B0 00 00 5C 00 5C 00 57 00 4B 00 37 00 36 00 2D 00 ..\.\.W.K.7.6.-. 1338 * 000000C0 31 00 37 00 37 00 00 00 08 00 16 83 46 00 07 00 1.7.7.......F... 1339 * 000000D0 00 00 00 00 00 00 07 00 00 00 41 00 46 00 53 00 ..........A.F.S. 1340 * 000000E0 48 00 49 00 4E 00 00 00 00 00 0B 00 00 00 00 00 H.I.N........... 1341 * 000000F0 00 00 0B 00 00 00 5C 00 73 00 61 00 6C 00 65 00 ......\.s.a.l.e. 1342 * 00000100 6B 00 2E 00 74 00 78 00 74 00 00 00 00 00 04 00 k...t.x.t....... 1343 * 00000110 00 00 40 00 00 00 B0 9A 44 00 40 00 00 00 01 00 ..@.....D.@..... 1344 * 00000120 04 80 00 00 00 00 00 00 00 00 00 00 00 00 14 00 ................ 1345 * 00000130 00 00 02 00 2C 00 01 00 00 00 00 00 24 00 00 00 ....,.......$... 1346 * 00000140 00 A0 01 05 00 00 00 00 00 05 15 00 00 00 1A 24 ...............$ 1347 * 00000150 44 38 90 00 0F 02 65 3A BE 4C FF 03 00 00 00 00 D8....e:.L...... 1348 * 00000160 00 00 00 00 00 00 00 00 00 00 .......... 1349 */ 1350OPERATION(SRVSVC_OPNUM_NetSetFileSecurity) 1351struct mslm_NetSetFileSecurity { 1352 IN LPTSTR servername; 1353 IN LPTSTR sharename; 1354 IN REFERENCE LPTSTR filename; 1355 IN DWORD securityinfo; 1356 /* 1357 * IN Security Descriptor (looks like): 1358 * Length1 1359 * Pointer 1360 * Length2 (== Length1) 1361 * buffer itself 1362 */ 1363 1364 OUT DWORD status; 1365}; 1366 1367/* 1368 * The SRVSVC already 1369 */ 1370INTERFACE(0) 1371union srvsvc_interface { 1372 CASE(SRVSVC_OPNUM_NetConnectEnum) 1373 struct mslm_NetConnectEnum NetConnectEnum; 1374 CASE(SRVSVC_OPNUM_NetFileEnum) 1375 struct mslm_NetFileEnum NetFileEnum; 1376 CASE(SRVSVC_OPNUM_NetFileClose) 1377 struct mslm_NetFileClose NetFileClose; 1378 CASE(SRVSVC_OPNUM_NetShareGetInfo) 1379 struct mlsm_NetShareGetInfo NetShareGetInfo; 1380 CASE(SRVSVC_OPNUM_NetShareSetInfo) 1381 struct mlsm_NetShareGetInfo NetShareSetInfo; 1382 CASE(SRVSVC_OPNUM_NetSessionDel) 1383 struct mslm_NetSessionDel NetSessionDel; 1384 CASE(SRVSVC_OPNUM_NetSessionEnum) 1385 struct mslm_NetSessionEnum NetSessionEnum; 1386 CASE(SRVSVC_OPNUM_NetServerGetInfo) 1387 struct mslm_NetServerGetInfo NetServerGetInfo; 1388 CASE(SRVSVC_OPNUM_NetRemoteTOD) 1389 struct mslm_NetRemoteTOD NetRemoteTOD; 1390 CASE(SRVSVC_OPNUM_NetNameValidate) 1391 struct mslm_NetNameValidate NetNameValidate; 1392 CASE(SRVSVC_OPNUM_NetShareAdd) 1393 struct mslm_NetShareAdd NetShareAdd; 1394 CASE(SRVSVC_OPNUM_NetShareDel) 1395 struct mslm_NetShareDel NetShareDel; 1396 CASE(SRVSVC_OPNUM_NetShareEnum) 1397 struct mslm_NetShareEnum NetShareEnum; 1398 CASE(SRVSVC_OPNUM_NetShareEnumSticky) 1399 struct mslm_NetShareEnumSticky NetShareEnumSticky; 1400 CASE(SRVSVC_OPNUM_NetGetFileSecurity) 1401 struct mslm_NetGetFileSecurity NetGetFileSecurity; 1402 CASE(SRVSVC_OPNUM_NetSetFileSecurity) 1403 struct mslm_NetSetFileSecurity NetSetFileSecurity; 1404}; 1405typedef union srvsvc_interface srvsvc_interface_t; 1406EXTERNTYPEINFO(srvsvc_interface) 1407 1408 1409 1410/* 1411 * WKSSVC - Workstation Service 1412 */ 1413 1414/* Windows NT */ 1415#define WKSSVC_OPNUM_NetWkstaGetInfo 0x00 1416#define WKSSVC_OPNUM_NetWkstaSetInfo 0x01 1417#define WKSSVC_OPNUM_NetWkstaUserEnum 0x02 1418#define WKSSVC_OPNUM_NetWkstaUserGetInfo 0x03 1419#define WKSSVC_OPNUM_NetWkstaUserSetInfo 0x04 1420#define WKSSVC_OPNUM_NetWkstaTransportEnum 0x05 1421#define WKSSVC_OPNUM_NetWkstaTransportAdd 0x06 1422#define WKSSVC_OPNUM_NetWkstaTransportDel 0x07 1423#define WKSSVC_OPNUM_NetUseAdd 0x08 1424#define WKSSVC_OPNUM_NetUseGetInfo 0x09 1425#define WKSSVC_OPNUM_NetUseDel 0x0a 1426#define WKSSVC_OPNUM_NetUseEnum 0x0b 1427#define WKSSVC_OPNUM_NetMessageBufferSend 0x0c 1428#define WKSSVC_OPNUM_NetWkstaStatisticsGet 0x0d 1429#define WKSSVC_OPNUM_NetLogonDomainNameAdd 0x0e 1430 1431/* Windows 2000 */ 1432#define WKSSVC_OPNUM_NetLogonDomainNameDel 0x0f 1433#define WKSSVC_OPNUM_NetJoinDomain 0x10 1434#define WKSSVC_OPNUM_NetUnjoinDomain 0x11 1435#define WKSSVC_OPNUM_NetValidateName 0x12 1436#define WKSSVC_OPNUM_NetRenameMachineInDomain 0x13 1437#define WKSSVC_OPNUM_NetGetJoinInformation 0x14 1438#define WKSSVC_OPNUM_NetGetJoinableOUs 0x15 1439#define WKSSVC_OPNUM_NetJoinDomain2 0x16 1440#define WKSSVC_OPNUM_NetUnjoinDomain2 0x17 1441#define WKSSVC_OPNUM_NetRenameMachineInDomain2 0x18 1442#define WKSSVC_OPNUM_NetValidateName2 0x19 1443#define WKSSVC_OPNUM_NetGetJoinableOUs2 0x1a 1444 1445/* Windows XP and Windows Server 2003 */ 1446#define WKSSVC_OPNUM_NetAddAlternateComputerName 0x1b 1447#define WKSSVC_OPNUM_NetRemoveAlternateComputerName 0x1c 1448#define WKSSVC_OPNUM_NetSetPrimaryComputerName 0x1d 1449#define WKSSVC_OPNUM_NetEnumerateComputerNames 0x1e 1450#define WKSSVC_OPNUM_NetWorkstationResetDfsCache 0x1f 1451 1452 1453struct mslm_WKSTA_INFO_100 { 1454 DWORD wki100_platform_id; 1455 LPTSTR wki100_computername; 1456 LPTSTR wki100_langroup; 1457 DWORD wki100_ver_major; 1458 DWORD wki100_ver_minor; 1459}; 1460 1461/* NetWkstaGetInfo only. System information - user access */ 1462struct mslm_WKSTA_INFO_101 { 1463 DWORD wki101_platform_id; 1464 LPTSTR wki101_computername; 1465 LPTSTR wki101_langroup; 1466 DWORD wki101_ver_major; 1467 DWORD wki101_ver_minor; 1468 LPTSTR wki101_lanroot; 1469}; 1470 1471/* NetWkstaGetInfo only. System information - admin or operator access */ 1472struct mslm_WKSTA_INFO_102 { 1473 DWORD wki102_platform_id; 1474 LPTSTR wki102_computername; 1475 LPTSTR wki102_langroup; 1476 DWORD wki102_ver_major; 1477 DWORD wki102_ver_minor; 1478 LPTSTR wki102_lanroot; 1479 DWORD wki102_logged_on_users; 1480}; 1481 1482struct mslm_WKSTA_INFO_502 { 1483 DWORD char_wait; 1484 DWORD collection_time; 1485 DWORD maximum_collection_count; 1486 DWORD keep_connection; 1487 DWORD max_commands; 1488 DWORD session_timeout; 1489 DWORD size_char_buf; 1490 DWORD max_threads; 1491 DWORD lock_quota; 1492 DWORD lock_increment; 1493 DWORD lock_maximum; 1494 DWORD pipe_increment; 1495 DWORD pipe_maximum; 1496 DWORD cache_file_timeout; 1497 DWORD dormant_file_limit; 1498 DWORD read_ahead_throughput; 1499 DWORD num_mailslot_buffers; 1500 DWORD num_srv_announce_buffers; 1501 DWORD max_illegal_dgram_events; 1502 DWORD dgram_event_reset_freq; 1503 DWORD log_election_packets; 1504 DWORD use_opportunistic_locking; 1505 DWORD use_unlock_behind; 1506 DWORD use_close_behind; 1507 DWORD buf_named_pipes; 1508 DWORD use_lock_read_unlock; 1509 DWORD utilize_nt_caching; 1510 DWORD use_raw_read; 1511 DWORD use_raw_write; 1512 DWORD use_write_raw_data; 1513 DWORD use_encryption; 1514 DWORD buf_files_deny_write; 1515 DWORD buf_read_only_files; 1516 DWORD force_core_create_mode; 1517 DWORD use_512_byte_max_transfer; 1518}; 1519 1520INFO1RES_DEFINITION(mslm_NetWkstaGetInfo, 1521 INFO1RES_UNION_ENTRY(mslm_WKSTA_INFO,100) 1522 INFO1RES_UNION_ENTRY(mslm_WKSTA_INFO,101) 1523 INFO1RES_UNION_ENTRY(mslm_WKSTA_INFO,102) 1524 INFO1RES_UNION_ENTRY(mslm_WKSTA_INFO,502)) 1525 1526INFO1RESBUF_DEFINITION(mslm_NetWkstaGetInfo, 1527 INFO1RESBUF_UNION_ENTRY(mslm_WKSTA_INFO,100) 1528 INFO1RESBUF_UNION_ENTRY(mslm_WKSTA_INFO,101) 1529 INFO1RESBUF_UNION_ENTRY(mslm_WKSTA_INFO,102) 1530 INFO1RESBUF_UNION_ENTRY(mslm_WKSTA_INFO,502)) 1531 1532 1533OPERATION(WKSSVC_OPNUM_NetWkstaGetInfo) 1534struct mslm_NetWkstaGetInfo { 1535 IN LPTSTR servername; 1536 IN DWORD level; 1537 OUT struct mslm_NetWkstaGetInfo_result result; 1538 OUT DWORD status; 1539}; 1540 1541/* 1542 *********************************************************************** 1543 * NetWkstaTransportEnum 1544 *********************************************************************** 1545 */ 1546 1547struct mslm_NetWkstaTransportInfo0 { 1548 DWORD quality_of_service; 1549 DWORD num_vcs; 1550 LPTSTR transport_name; 1551 LPTSTR transport_address; 1552 DWORD wan_ish; 1553}; 1554 1555struct mslm_NetWkstaTransportCtr0 { 1556 DWORD count; 1557 SIZE_IS(count) 1558 struct mslm_NetWkstaTransportInfo0 *ti0; 1559}; 1560 1561union mslm_NetWkstaTransportInfo_ru { 1562 CASE(0) struct mslm_NetWkstaTransportCtr0 *info0; 1563 DEFAULT char *nullptr; 1564}; 1565 1566struct mslm_NetWkstaTransportInfo { 1567 DWORD address; 1568 DWORD level; 1569 SWITCH(level) 1570 union mslm_NetWkstaTransportInfo_ru ru; 1571}; 1572 1573OPERATION(WKSSVC_OPNUM_NetWkstaTransportEnum) 1574struct mslm_NetWkstaTransportEnum { 1575 IN LPTSTR servername; 1576 INOUT struct mslm_NetWkstaTransportInfo info; 1577 IN DWORD pref_max_len; 1578 OUT DWORD total_entries; 1579 INOUT DWORD *resume_handle; 1580 OUT DWORD status; 1581}; 1582 1583/* 1584 * The WKSSVC already 1585 */ 1586INTERFACE(0) 1587union wkssvc_interface { 1588 CASE(WKSSVC_OPNUM_NetWkstaGetInfo) 1589 struct mslm_NetWkstaGetInfo NetWkstaGetInfo; 1590 CASE(WKSSVC_OPNUM_NetWkstaTransportEnum) 1591 struct mslm_NetWkstaTransportEnum NetWkstaTransportEnum; 1592}; 1593typedef union wkssvc_interface wkssvc_interface_t; 1594EXTERNTYPEINFO(wkssvc_interface) 1595 1596 1597#endif /* _MLSVC_LANMAN_NDL_ */ 1598