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