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