1module srvsvc 2 3option autoalign True 4option relative False 5option recurse True 6option foo blah 7 8#define BOOL uint32 9#define LONG uint32 10#define DWORD uint32 11#define STATUS uint32 12 13typedef struct _UNISTR2 { 14 uint32 max_len; 15 uint32 undoc; 16 uint32 str_len; 17 wchar buffer[str_len]; 18} UNISTR2; 19 20struct LPWSTR { 21 UNISTR2 *str; 22}; 23 24 25 26 /* -- CHARACTER DEVICE INFORMATION -- */ 27 28 typedef struct _CHARDEV_INFO_0 { 29 LPWSTR pszName; 30 } CHARDEV_INFO_0; 31 32 typedef struct _CHARDEV_INFO_1 { 33 LPWSTR pszName; 34 DWORD dwStatus; 35 LPWSTR pszUser; 36 DWORD dwTime; 37 } CHARDEV_INFO_1; 38 39 typedef union _CHARDEV_INFO switch (DWORD dwLevel) ctr { 40 case 1: CHARDEV_INFO_0 *ci0; 41 case 2: CHARDEV_INFO_1 *ci1; 42 } CHARDEV_INFO; 43 44 typedef struct _CHARDEV_ENUM_0 { 45 DWORD dwEntries; 46 [size_is(dwEntries)] CHARDEV_INFO_0 *ci0; 47 } CHARDEV_ENUM_0; 48 49 typedef struct _CHARDEV_ENUM_1 { 50 DWORD dwEntries; 51 [size_is(dwEntries)] CHARDEV_INFO_1 *ci1; 52 } CHARDEV_ENUM_1; 53 54 typedef struct _CHARDEV_ENUM { 55 DWORD dwLevel; 56 [switch_is(dwLevel)] union { 57 [case(0)] CHARDEV_ENUM_0 *ce0; 58 [case(1)] CHARDEV_ENUM_1 *ce1; 59 } ctr; 60 } CHARDEV_ENUM; 61 62 STATUS NetrCharDevEnum( /* Function 0x00 */ 63 [in,unique] LPWSTR pszServer, 64 [in,out] CHARDEV_ENUM* pCharDevEnum, 65 [in] DWORD dwMaxLen, 66 [out] DWORD* dwEntries, 67 [in,out] DWORD* hResume 68 ); 69 70 STATUS NetrCharDevGetInfo( /* Function 0x01 */ 71 [in,unique] LPWSTR pszServer, 72 [in,ref] LPWSTR pszDevice, 73 [in] DWORD dwLevel, 74 [out] CHARDEV_INFO* pCharDevInfo 75 ); 76 77 STATUS NetrCharDevControl( /* Function 0x02 */ 78 [in,unique] LPWSTR pszServer, 79 [in,ref] LPWSTR pszDevice, 80 [in] DWORD dwOpcode 81 ); 82 83 /* -- CHARACTER DEVICE QUEUE INFORMATION -- */ 84 85 typedef struct _CHARDEVQ_INFO_0 { 86 LPWSTR pszName; 87 } CHARDEVQ_INFO_0; 88 89 typedef struct _CHARDEVQ_INFO_1 { 90 LPWSTR pszName; 91 DWORD dwPriority; 92 LPWSTR pszDevices; 93 DWORD dwNumUsers; 94 DWORD dwNumAhead; 95 } CHARDEVQ_INFO_1; 96 97 typedef union _CHARDEVQ_INFO switch (DWORD dwLevel) ctr { 98 case 1: CHARDEVQ_INFO_0 *ci0; 99 case 2: CHARDEVQ_INFO_1 *ci1; 100 } CHARDEVQ_INFO; 101 102 typedef struct _CHARDEVQ_ENUM_0 { 103 DWORD dwEntries; 104 [size_is(dwEntries)] CHARDEVQ_INFO_0 *ci0; 105 } CHARDEVQ_ENUM_0; 106 107 typedef struct _CHARDEVQ_ENUM_1 { 108 DWORD dwEntries; 109 [size_is(dwEntries)] CHARDEVQ_INFO_1 *ci1; 110 } CHARDEVQ_ENUM_1; 111 112 typedef struct _CHARDEVQ_ENUM { 113 DWORD dwLevel; 114 [switch_is(dwLevel)] union { 115 [case(0)] CHARDEVQ_ENUM_0 *ce0; 116 [case(1)] CHARDEVQ_ENUM_1 *ce1; 117 } ctr; 118 } CHARDEVQ_ENUM; 119 120 STATUS NetrCharDevQEnum( /* Function 0x03 */ 121 [in,unique] LPWSTR pszServer, 122 [in,unique] LPWSTR pszUser, 123 [in,out] CHARDEVQ_ENUM* pCharDevQEnum, 124 [in] DWORD dwMaxLen, 125 [out] DWORD* dwEntries, 126 [in,out] DWORD* hResume 127 ); 128 129 STATUS NetrCharDevQGetInfo( /* Function 0x04 */ 130 [in,unique] LPWSTR pszServer, 131 [in,ref] LPWSTR pszQueue, 132 [in,ref] LPWSTR pszUser, 133 [in] DWORD dwLevel, 134 [out] CHARDEVQ_INFO* pCharDevQInfo 135 ); 136 137 STATUS NetrCharDevQSetInfo( /* Function 0x05 */ 138 [in,unique] LPWSTR pszServer, 139 [in,ref] LPWSTR pszQueue, 140 [in] DWORD dwLevel, 141 [in] CHARDEVQ_INFO* pCharDevQInfo, 142 [in,out] DWORD* dwParmError 143 ); 144 145 STATUS NetrCharDevQPurge( /* Function 0x06 */ 146 [in,unique] LPWSTR pszServer, 147 [in,ref] LPWSTR pszQueue 148 ); 149 150 STATUS NetrCharDevQPurgeSelf( /* Function 0x07 */ 151 [in,unique] LPWSTR pszServer, 152 [in,ref] LPWSTR pszQueue, 153 [in,ref] LPWSTR pszComputer 154 ); 155 156 /* -- CONNECTION INFORMATION -- */ 157 158 typedef struct _CONNECTION_INFO_0 { 159 DWORD dwConnID; 160 } CONNECTION_INFO_0; 161 162 typedef struct _CONNECTION_INFO_1 { 163 DWORD dwConnID; 164 DWORD dwType; 165 DWORD dwNumOpens; 166 DWORD dwNumUsers; 167 DWORD dwTime; 168 LPWSTR pszUser; 169 LPWSTR pszShare; 170 } CONNECTION_INFO_1; 171 172 typedef struct _CONNECTION_ENUM_0 { 173 DWORD dwEntries; 174 [size_is(dwEntries)] CONNECTION_INFO_0 *ci0; 175 } CONNECTION_ENUM_0; 176 177 typedef struct _CONNECTION_ENUM_1 { 178 DWORD dwEntries; 179 [size_is(dwEntries)] CONNECTION_INFO_1 *ci1; 180 } CONNECTION_ENUM_1; 181 182 typedef struct _CONNECTION_ENUM { 183 DWORD dwLevel; 184 [switch_is(dwLevel)] union { 185 [case(0)] CONNECTION_ENUM_0 *ce0; 186 [case(1)] CONNECTION_ENUM_1 *ce1; 187 } ctr; 188 } CONNECTION_ENUM; 189 190 STATUS NetrConnectionEnum( /* Function 0x08 */ 191 [in,unique] LPWSTR pszServer, 192 [in,unique] LPWSTR pszClient, 193 [in,out] CONNECTION_ENUM* pConnectionEnum, 194 [in] DWORD dwMaxLen, 195 [out] DWORD* dwEntries, 196 [in,out] DWORD* hResume 197 ); 198 199 /* -- FILE INFORMATION -- */ 200 201 typedef struct _FILE_INFO_2 { 202 DWORD dwFileID; 203 } FILE_INFO_2; 204 205 typedef struct _FILE_INFO_3 { 206 DWORD dwFileID; 207 DWORD dwPermissions; 208 DWORD dwNumLocks; 209 LPWSTR pszPath; 210 LPWSTR pszUser; 211 } FILE_INFO_3; 212 213 typedef union _FILE_INFO switch (DWORD dwLevel) ctr { 214 case 2: FILE_INFO_2 *fi2; 215 case 3: FILE_INFO_3 *fi3; 216 } FILE_INFO; 217 218 typedef struct _FILE_ENUM_2 { 219 DWORD dwEntries; 220 [size_is(dwEntries)] FILE_INFO_2 *fi2; 221 } FILE_ENUM_2; 222 223 typedef struct _FILE_ENUM_3 { 224 DWORD dwEntries; 225 [size_is(dwEntries)] FILE_INFO_3 *fi3; 226 } FILE_ENUM_3; 227 228 typedef struct _FILE_ENUM { 229 DWORD dwLevel; 230 [switch_is(dwLevel)] union { 231 [case(2)] FILE_ENUM_2 *fe2; 232 [case(3)] FILE_ENUM_3 *fe3; 233 } ctr; 234 } FILE_ENUM; 235 236 STATUS NetrFileEnum( /* Function 0x09 */ 237 [in,unique] LPWSTR pszServer, 238 [in,unique] LPWSTR pszBasePath, 239 [in,unique] LPWSTR pszUser, 240 [in,out] FILE_ENUM* pFileEnum, 241 [in] DWORD dwMaxLen, 242 [out] DWORD* dwEntries, 243 [in,out] DWORD* hResume 244 ); 245 246 STATUS NetrFileGetInfo( /* Function 0x0A */ 247 [in,unique] LPWSTR pszServer, 248 [in] DWORD dwFileID, 249 [in] DWORD dwLevel, 250 [out] FILE_INFO* pFileInfo 251 ); 252 253 STATUS NetrFileClose( /* Function 0x0B */ 254 [in,unique] LPWSTR pszServer, 255 [in] DWORD dwFileID 256 ); 257 258 /* -- SESSION INFORMATION -- */ 259 260 typedef struct _SESSION_INFO_0 { 261 LPWSTR pszClient; 262 } SESSION_INFO_0; 263 264 typedef struct _SESSION_INFO_1 { 265 LPWSTR pszClient; 266 LPWSTR pszUser; 267 DWORD dwOpens; 268 DWORD dwTime; 269 DWORD dwIdleTime; 270 DWORD dwUserFlags; 271 } SESSION_INFO_1; 272 273 typedef struct _SESSION_INFO_2 { 274 LPWSTR pszClient; 275 LPWSTR pszUser; 276 DWORD dwOpens; 277 DWORD dwTime; 278 DWORD dwIdleTime; 279 DWORD dwUserFlags; 280 LPWSTR pszClientType; 281 } SESSION_INFO_2; 282 283 typedef struct _SESSION_ENUM_0 { 284 DWORD dwEntries; 285 [size_is(dwEntries)] SESSION_INFO_0 *si0; 286 } SESSION_ENUM_0; 287 288 typedef struct _SESSION_ENUM_1 { 289 DWORD dwEntries; 290 [size_is(dwEntries)] SESSION_INFO_1 *si1; 291 } SESSION_ENUM_1; 292 293 typedef struct _SESSION_ENUM_2 { 294 DWORD dwEntries; 295 [size_is(dwEntries)] SESSION_INFO_2 *si2; 296 } SESSION_ENUM_2; 297 298 typedef struct _SESSION_ENUM { 299 DWORD dwLevel; 300 [switch_is(dwLevel)] union { 301 [case(0)] SESSION_ENUM_0 *se0; 302 [case(1)] SESSION_ENUM_1 *se1; 303 [case(2)] SESSION_ENUM_2 *se2; 304 } ctr; 305 } SESSION_ENUM; 306 307 STATUS NetrSessionEnum( /* Function 0x0C */ 308 [in,unique] LPWSTR pszServer, 309 [in,unique] LPWSTR pszClient, 310 [in,unique] LPWSTR pszUser, 311 [in,out] SESSION_ENUM* pFileEnum, 312 [in] DWORD dwMaxLen, 313 [out] DWORD* dwEntries, 314 [in,out] DWORD* hResume 315 ); 316 317 STATUS NetrSessionDel( /* Function 0x0D */ 318 [in,unique] LPWSTR pszServer, 319 [in,ref] LPWSTR pszClient, 320 [in,ref] LPWSTR pszUser 321 ); 322 323 /* -- SHARE INFORMATION -- */ 324 325 typedef struct _SHARE_INFO_0 { 326 LPWSTR pszName; 327 } SHARE_INFO_0; 328 329 typedef struct _SHARE_INFO_1 { 330 LPWSTR pszName; 331 DWORD dwType; 332 LPWSTR pszComment; 333 } SHARE_INFO_1; 334 335 typedef struct _SHARE_INFO_2 { 336 LPWSTR pszName; 337 DWORD dwType; 338 LPWSTR pszComment; 339 DWORD dwPermissions; 340 DWORD dwMaxUses; 341 DWORD dwCurrentUses; 342 LPWSTR pszPath; 343 LPWSTR pszPasswd; 344 } SHARE_INFO_2; 345 346 typedef union _SHARE_INFO switch (DWORD dwLevel) ctr { 347 case 0: SHARE_INFO_0 *si0; 348 case 1: SHARE_INFO_1 *si1; 349 case 2: SHARE_INFO_2 *si2; 350 } SHARE_INFO; 351 352 typedef struct _SHARE_ENUM_0 { 353 DWORD dwEntries; 354 [size_is(dwEntries)] SHARE_INFO_0 *si0; 355 } SHARE_ENUM_0; 356 357 typedef struct _SHARE_ENUM_1 { 358 DWORD dwEntries; 359 [size_is(dwEntries)] SHARE_INFO_1 *si1; 360 } SHARE_ENUM_1; 361 362 typedef struct _SHARE_ENUM_2 { 363 DWORD dwEntries; 364 [size_is(dwEntries)] SHARE_INFO_2 *si2; 365 } SHARE_ENUM_2; 366 367 typedef struct _SHARE_ENUM { 368 DWORD dwLevel; 369 [switch_is(dwLevel)] union { 370 [case(0)] SHARE_ENUM_0 *se0; 371 [case(1)] SHARE_ENUM_1 *se1; 372 [case(2)] SHARE_ENUM_2 *se2; 373 } ctr; 374 } SHARE_ENUM; 375 376 STATUS NetrShareAdd( /* Function 0x0E */ 377 [in,unique] LPWSTR pszServer, 378 [in] DWORD dwLevel, 379 [out] SHARE_INFO* pShareInfo, 380 [in,out] DWORD* dwParmError 381 ); 382 383 STATUS NetrShareEnum( /* Function 0x0F */ 384 [in,unique] LPWSTR pszServer, 385 [in,out] SHARE_ENUM* pShareEnum, 386 [in] DWORD dwMaxLen, 387 [out] DWORD* dwEntries, 388 [in,out] DWORD* hResume 389 ); 390 391 STATUS NetrShareGetInfo( /* Function 0x10 */ 392 [in,unique] LPWSTR pszServer, 393 [in,ref] LPWSTR pszShare, 394 [in] DWORD dwLevel, 395 [out] SHARE_INFO* pShareInfo 396 ); 397 398 STATUS NetrShareSetInfo( /* Function 0x11 */ 399 [in,unique] LPWSTR pszServer, 400 [in,ref] LPWSTR pszShare, 401 [in] DWORD dwLevel, 402 [in] SHARE_INFO* pShareInfo, 403 [in] DWORD dwReserved 404 ); 405 406 STATUS NetrShareDel( /* Function 0x12 */ 407 [in,unique] LPWSTR pszServer, 408 [in,ref] LPWSTR pszShare, 409 [in] DWORD dwReserved 410 ); 411 412 STATUS NetrShareDelSticky( /* Function 0x13 */ 413 [in,unique] LPWSTR pszServer, 414 [in,ref] LPWSTR pszShare, 415 [in] DWORD dwReserved 416 ); 417 418 STATUS NetrShareCheck( /* Function 0x14 */ 419 [in,unique] LPWSTR pszServer, 420 [in,ref] LPWSTR pszDevice, 421 [out] DWORD* dwType 422 ); 423 424 /* --- SERVER INFORMATION --- */ 425 426 typedef struct _SERVER_INFO_100 { 427 DWORD dwPlatformID; 428 LPWSTR pszName; 429 } SERVER_INFO_100; 430 431 typedef struct _SERVER_INFO_101 { 432 DWORD dwPlatformID; 433 LPWSTR pszName; 434 DWORD dwVerMajor; 435 DWORD dwVerMinor; 436 DWORD dwType; 437 LPWSTR pszComment; 438 } SERVER_INFO_101; 439 440 typedef struct _SERVER_INFO_102 { 441 DWORD dwPlatformID; 442 LPWSTR pszName; 443 DWORD dwVerMajor; 444 DWORD dwVerMinor; 445 DWORD dwType; 446 LPWSTR pszComment; 447 DWORD dwUsers; 448 LONG lDisc; 449 BOOL bHidden; 450 DWORD dwAnnounce; 451 DWORD dwAnnDelta; 452 DWORD dwLicenses; 453 LPWSTR pszUserPath; 454 } SERVER_INFO_102; 455 456 typedef union _SERVER_INFO switch (DWORD dwLevel) ctr { 457 case 100: SERVER_INFO_100 *sv100; 458 case 101: SERVER_INFO_101 *sv101; 459 case 102: SERVER_INFO_102 *sv102; 460 } SERVER_INFO; 461 462 STATUS NetrServerGetInfo( /* Function 0x15 */ 463 [in,unique] LPWSTR pszServerName, 464 [in] DWORD dwLevel, 465 [out] SERVER_INFO* pServerInfo 466 ); 467 468 STATUS NetrServerSetInfo( /* Function 0x16 */ 469 [in,unique] LPWSTR pszServerName, 470 [in] DWORD dwLevel, 471 [in] SERVER_INFO* pServerInfo, 472 [in] DWORD dwReserved 473 ); 474 475 typedef struct _DISK_INFO { 476 LPWSTR pszName; 477 } DISK_INFO; 478 479 typedef struct _DISK_ENUM { 480 DWORD dwEntries; 481 [size_is(dwEntries)] DISK_INFO *di; 482 } DISK_ENUM; 483 484 STATUS NetrServerDiskEnum( /* Function 0x17 */ 485 [in,unique] LPWSTR pszServer, 486 [in] DWORD dwLevel, 487 [in,out] DISK_ENUM* pDiskEnum, 488 [in] DWORD dwMaxLen, 489 [out] DWORD* dwEntries, 490 [in,out] DWORD* hResume 491 ); 492 493 typedef struct _STAT_SERVER { 494 DWORD dwStart; 495 DWORD dwFOpens; 496 DWORD dwDevOpens; 497 DWORD dwJobsQueued; 498 DWORD dwSOpens; 499 DWORD dwSTimedOut; 500 DWORD dwSErrors; 501 DWORD dwPWErrors; 502 DWORD dwPermErrors; 503 DWORD dwSysErrors; 504 DWORD dwBytesSentLow; 505 DWORD dwBytesSentHigh; 506 DWORD dwBytesRcvdLow; 507 DWORD dwBytesRcvdHigh; 508 DWORD dwAVResponse; 509 DWORD dwReqBufNeed; 510 DWORD dwBigBufNeed; 511 } STAT_SERVER; 512 513 STATUS NetrServerStatisticsGet( /* Function 0x18 */ 514 [in,unique] LPWSTR pszServer, 515 [in] DWORD dwLevel, 516 [in] DWORD dwOptions, 517 [out] STAT_SERVER* pStatServer 518 ); 519 520 typedef struct _TRANSPORT_INFO_0 { 521 LPWSTR pszName; 522 } TRANSPORT_INFO_0; 523 524 typedef union _TRANSPORT_INFO switch (DWORD dwLevel) ctr { 525 case 0: TRANSPORT_INFO_0 *ti0; 526 } TRANSPORT_INFO; 527 528 typedef struct _TRANSPORT_ENUM_0 { 529 DWORD dwEntries; 530 [size_is(dwEntries)] TRANSPORT_INFO_0 *ti0; 531 } TRANSPORT_ENUM_0; 532 533 typedef struct _TRANSPORT_ENUM { 534 DWORD dwLevel; 535 [switch_is(dwLevel)] union { 536 [case(0)] TRANSPORT_ENUM_0 *te0; 537 } ctr; 538 } TRANSPORT_ENUM; 539 540 STATUS NetrServerTransportAdd( /* Function 0x19 */ 541 [in,unique] LPWSTR pszServer, 542 [in] DWORD dwLevel, 543 [out] TRANSPORT_INFO* pTransportInfo 544 ); 545 546 STATUS NetrServerTransportEnum( /* Function 0x1a */ 547 [in,unique] LPWSTR pszServer, 548 [in,out] TRANSPORT_ENUM* pTransportEnum, 549 [in] DWORD dwMaxLen, 550 [out] DWORD* dwEntries, 551 [in,out] DWORD* hResume 552 ); 553 554 STATUS NetrServerTransportDel( /* Function 0x1b */ 555 [in,unique] LPWSTR pszServer, 556 [in] DWORD dwLevel, 557 [out] TRANSPORT_INFO* pTransportInfo 558 ); 559 560 typedef struct _TIME_OF_DAY { 561 DWORD dwElapsedTime; 562 DWORD dwMsecs; 563 DWORD dwHours; 564 DWORD dwMins; 565 DWORD dwSecs; 566 DWORD dwHunds; 567 LONG lTimeZone; 568 DWORD dwInterval; 569 DWORD dwDay; 570 DWORD dwMonth; 571 DWORD dwYear; 572 DWORD dwWeekday; 573 } TIME_OF_DAY; 574 575 STATUS NetrRemoteTOD( /* Function 0x1c */ 576 [in,unique] LPWSTR pszServer, 577 [out] TIME_OF_DAY* pTOD 578 ); 579 580 STATUS NetrServerSetServiceBits( /* Function 0x1d */ 581 [in,unique] LPWSTR pszServer, 582 [in] DWORD hServiceStatus, /* ?? */ 583 [in] DWORD dwServiceBits, 584 [in] BOOL bSetBitsOn, 585 [in] BOOL bUpdateImmediately 586 ); 587 588 /* --- PATH INFORMATION --- */ 589 590 STATUS NetprPathType( /* Function 0x1e */ 591 void /* Not known */ 592 ); 593 594 STATUS NetprPathCanonicalize( /* Function 0x1f */ 595 void /* Not known */ 596 ); 597 598 STATUS NetprPathCompare( /* Function 0x20 */ 599 void /* Not known */ 600 ); 601 602 STATUS NetprNameValidate( /* Function 0x21 */ 603 void /* Not known */ 604 ); 605 606 STATUS NetprNameCanonicalize( /* Function 0x22 */ 607 void /* Not known */ 608 ); 609 610 STATUS NetprNameCompare( /* Function 0x23 */ 611 void /* Not known */ 612 ); 613 614 /* --- LATER ADDITIONS --- */ 615 616 STATUS NetrShareEnumSticky( /* Function 0x24 */ 617 [in,unique] LPWSTR pszServer, 618 [in,out] SHARE_ENUM* pShareEnum, 619 [in] DWORD dwMaxLen, 620 [out] DWORD* dwEntries, 621 [in,out] DWORD* hResume 622 ); 623 624 STATUS NetrShareDelStart( /* Function 0x25 */ 625 [in,unique] LPWSTR pszServer, 626 [in,ref] LPWSTR pszShare, 627 [in] DWORD dwReserved /* ? */ 628 ); 629 630 STATUS NetrShareDelCommit( /* Function 0x26 */ 631 [in,unique] LPWSTR pszServer 632 ); 633 634 STATUS NetrpGetFileSecurity( /* Function 0x27 */ 635 void /* Not known */ 636 ); 637 638 STATUS NetrpSetFileSecurity( /* Function 0x28 */ 639 void /* Not known */ 640 ); 641 642 STATUS NetrServerTransportAddEx( /* Function 0x29 */ 643 [in,unique] LPWSTR pszServer, 644 [in] DWORD dwLevel, 645 [out] TRANSPORT_INFO* pTransportInfo 646 ); 647 648 STATUS NetrServerSetServiceBitsEx( /* Function 0x30 */ 649 [in,unique] LPWSTR pszServer, 650 [in] DWORD hServiceStatus, /* ?? */ 651 [in] DWORD dwServiceBits, 652 [in] BOOL bSetBitsOn, 653 [in] BOOL bUpdateImmediately 654 ); 655 656