xref: /titanic_52/usr/src/uts/common/smbsrv/ndl/srvsvc.ndl (revision 9fb67ea305c66b6a297583b9b0db6796b0dfe497)
1da6c28aaSamw/*
2da6c28aaSamw * CDDL HEADER START
3da6c28aaSamw *
4da6c28aaSamw * The contents of this file are subject to the terms of the
5da6c28aaSamw * Common Development and Distribution License (the "License").
6da6c28aaSamw * You may not use this file except in compliance with the License.
7da6c28aaSamw *
8da6c28aaSamw * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9da6c28aaSamw * or http://www.opensolaris.org/os/licensing.
10da6c28aaSamw * See the License for the specific language governing permissions
11da6c28aaSamw * and limitations under the License.
12da6c28aaSamw *
13da6c28aaSamw * When distributing Covered Code, include this CDDL HEADER in each
14da6c28aaSamw * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15da6c28aaSamw * If applicable, add the following below this CDDL HEADER, with the
16da6c28aaSamw * fields enclosed by brackets "[]" replaced with your own identifying
17da6c28aaSamw * information: Portions Copyright [yyyy] [name of copyright owner]
18da6c28aaSamw *
19da6c28aaSamw * CDDL HEADER END
20da6c28aaSamw */
21da6c28aaSamw/*
22*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
23da6c28aaSamw * Use is subject to license terms.
24da6c28aaSamw */
25da6c28aaSamw
26da6c28aaSamw#ifndef _MLSVC_LANMAN_NDL_
27da6c28aaSamw#define _MLSVC_LANMAN_NDL_
28da6c28aaSamw
29da6c28aaSamw/*
30da6c28aaSamw * LanMan RPC (WKSSVC and SRVSVC) interface definitions.
31da6c28aaSamw */
32da6c28aaSamw
33da6c28aaSamw#include "ndrtypes.ndl"
34da6c28aaSamw
35da6c28aaSamw/*
36da6c28aaSamw * WARNING: The cpp(1) macros in this file are not understood by
37da6c28aaSamw *          /usr/bin/cpp. Use /usr/libexec/cpp instead.
38da6c28aaSamw */
39da6c28aaSamw
40da6c28aaSamw/*
41da6c28aaSamw * TYPE CONSTRUCTOR MACROS FOR INFORMATION RESULTS
42da6c28aaSamw ****************************************************************
43da6c28aaSamw *
44da6c28aaSamw * This is an explanation of the macros that follow this comment.
45da6c28aaSamw *
46da6c28aaSamw * The LANMAN API's look something like this:
47da6c28aaSamw *
48da6c28aaSamw *	NetXXXGetInfo (
49da6c28aaSamw *		IN  char *  servername,
50da6c28aaSamw *		IN  char *  XXX_name,
51da6c28aaSamw *		IN  int     level,
52da6c28aaSamw *		OUT char ** bufptr);
53da6c28aaSamw *
54da6c28aaSamw * The bufptr is a pointer-to-pointer (**). The NetXXXGetInfo() function
55da6c28aaSamw * malloc()s memory, and sets *bufptr to the memory. The API's
56da6c28aaSamw * are undiscriminated about what bufptr really points to.
57da6c28aaSamw *
58da6c28aaSamw * However, for RPI (Remote Procedure Interface), this just won't fly.
59da6c28aaSamw * We have to know what the result data looks like in order to
60da6c28aaSamw * properly (un)marshall it.
61da6c28aaSamw *
62da6c28aaSamw * As best we can determine, the MSC developers use an RPI that looks
63da6c28aaSamw * like this (approximately in IDL):
64da6c28aaSamw *
65da6c28aaSamw *	RemoteNetXXXGetInfo (
66da6c28aaSamw *		IN  char *  servername,
67da6c28aaSamw *		IN  char *  XXX_name,
68da6c28aaSamw *		IN  int     level,
69da6c28aaSamw *		OUT union switch(level) {
70da6c28aaSamw * 			case(1): XXX_INFO_1 * info1;
71da6c28aaSamw *			case(2): XXX_INFO_2 * info2;
72da6c28aaSamw *		    }       bufptr);
73da6c28aaSamw *
74da6c28aaSamw * The level guides the (un)marshalling as it follows the pointer.
75da6c28aaSamw * DCE(MS) IDL will automatically form a structure for the union
76da6c28aaSamw * which looks about like this (much as Sun/RPC does):
77da6c28aaSamw *
78da6c28aaSamw *	struct {
79da6c28aaSamw *		int   _keyvalue_;
80da6c28aaSamw *		union {
81da6c28aaSamw *			XXX_INFO_1 *info1;
82da6c28aaSamw *			XXX_INFO_2 *info2;
83da6c28aaSamw *		}      _u_;
84da6c28aaSamw *	} bufptr;
85da6c28aaSamw *
86da6c28aaSamw * This struct is not made visible to the application. It is purely
87da6c28aaSamw * an internal (automagic) thing.  However, ndrgen does not do this.
88da6c28aaSamw * The ndrgen input MUST remain a valid C header file, and all
89da6c28aaSamw * struct and union declarations must be exact, and we (would) have
90da6c28aaSamw * to tediously code sequences like this (approximately NDL)):
91da6c28aaSamw *
92da6c28aaSamw *	union XXXGetInfo_result_u {
93da6c28aaSamw *	    [case(1)]
94da6c28aaSamw *		XXX_INFO_1 *	info1;
95da6c28aaSamw *	    [case(2)]
96da6c28aaSamw *		XXX_INFO_2 *	info2;
97da6c28aaSamw *	};
98da6c28aaSamw *
99da6c28aaSamw *	struct XXXGetInfo_result {
100da6c28aaSamw *		int	level;
101da6c28aaSamw *
102da6c28aaSamw *		union XXXGetInfo_result_u bufptr;
103da6c28aaSamw *	};
104da6c28aaSamw *
105da6c28aaSamw *	struct XXXGetInfo_param {	// still have to code this one
106da6c28aaSamw *	    [in]  char *	servername;
107da6c28aaSamw *	    [in]  ushort	level;
108da6c28aaSamw *	    [out] struct XXXGetInfo_result result;
109da6c28aaSamw *	};
110da6c28aaSamw *
111da6c28aaSamw * This is error prone and difficult to write, and more difficult
112da6c28aaSamw * and distracting to read. It is hard to pick through the
113da6c28aaSamw * necessary evils and see what's really going on. To mitigate
114da6c28aaSamw * the situation, we have a series of macros which generate
115da6c28aaSamw * the tedious code, and are easily recognized as supporting
116da6c28aaSamw * fluff rather than important structures:
117da6c28aaSamw *
118da6c28aaSamw *	INFO1RES_DEFINITION(XXXGetInfo,
119da6c28aaSamw *		INFO1RES_UNION_ENTRY(XXXGetInfo, 1)
120da6c28aaSamw *		INFO1RES_UNION_ENTRY(XXXGetInfo, 2))
121da6c28aaSamw *
122da6c28aaSamw *	structt XXXGetInfo_param {	// still have to code this one
123da6c28aaSamw *	    [in]  char *	servername;
124da6c28aaSamw *	    [in]  ushort	level;
125da6c28aaSamw *	    [out] struct XXXGetInfo_result result;
126da6c28aaSamw *	};
127da6c28aaSamw *
128da6c28aaSamw * The INFO1RES_DEFINITION macro defines two types:
129da6c28aaSamw *
130da6c28aaSamw *	union ...__ru {...}
131da6c28aaSamw *	struct ..._result { DWORD level; union ..._ru bufptr; }
132da6c28aaSamw *
133da6c28aaSamw * There is a similar macro, INFO1RESBUF_DEFINITION, which defines
134da6c28aaSamw * actual space rather than just pointers. It defines:
135da6c28aaSamw *
136da6c28aaSamw *	union ...._rb {...}
137da6c28aaSamw *	typedef union ..._rb ..._rb;
138da6c28aaSamw *
139da6c28aaSamw * Which is handy in functions because the initial coding sequence
140da6c28aaSamw * looks something like:
141da6c28aaSamw *
142da6c28aaSamw *	XXXGetInfoParam (struct XXXGetInfo_param *param) {
143da6c28aaSamw *		XXXGetInfo_rb	rb;
144da6c28aaSamw *
145da6c28aaSamw *		param->result.level = param->level;	// for marshalling
146da6c28aaSamw *		param->result.bufptr.nullptr = &rb;	// anything fits
147da6c28aaSamw *
148da6c28aaSamw * There are two flavors of Info results. The first is the
149da6c28aaSamw * single XXX_INFO_x result, which the foregoing example
150da6c28aaSamw * uses. The second flavor is when there are multiple entries
151da6c28aaSamw * possible. Again, for the sake of guiding the marshalling,
152da6c28aaSamw * the RPIs use something accommodating:
153da6c28aaSamw *
154da6c28aaSamw *	struct XXX_INFO_1_result {
155da6c28aaSamw *		unsigned	entriesread;
156da6c28aaSamw *	   [size_is(entriesread)]
157da6c28aaSamw *		XXX_INFO_1 *	table;
158da6c28aaSamw *	};
159da6c28aaSamw *
160da6c28aaSamw *	union { XXX_INFO_1_result *info1; ...}
161da6c28aaSamw *
162da6c28aaSamw * Notice this is using XXX_INFO_1_result rather than just XXX_INFO_1.
163da6c28aaSamw * The requirements from this point are much like before. Because of
164da6c28aaSamw * the variable-length value, there is no realistic way to do something
165da6c28aaSamw * like INFO1RESBUF_DEFINITION.
166da6c28aaSamw *
167da6c28aaSamw * There are two sets of macros here. INFO1RES_xxx are for the
168da6c28aaSamw * single result case, and INFONRES_xxx for the multiple entry case.
169da6c28aaSamw */
170da6c28aaSamw
171da6c28aaSamw/*
172da6c28aaSamw * INFO1RES_...
173da6c28aaSamw *	Type constructors for single-result case
174da6c28aaSamw */
175da6c28aaSamw
176da6c28aaSamw#define INFO1RES_DEFINITION(INFOPREF, ENTRIES) \
177da6c28aaSamw	INFO1RES_UNION(INFOPREF, ENTRIES) \
178da6c28aaSamw	INFO1RES_STRUCT(INFOPREF)
179da6c28aaSamw
180da6c28aaSamw#define INFO1RES_UNION(INFOPREF, ENTRIES) \
181da6c28aaSamw	union INFOPREF##__ru { \
182da6c28aaSamw		INFO1RES_UNION_NULLPTR \
183da6c28aaSamw		ENTRIES \
184da6c28aaSamw	};
185da6c28aaSamw
186da6c28aaSamw#define INFO1RES_UNION_NULLPTR \
187da6c28aaSamw	DEFAULT char *			nullptr;
188da6c28aaSamw
189da6c28aaSamw#define INFO1RES_UNION_ENTRY(INFOPREF,NUM) \
190da6c28aaSamw	CASE(NUM) struct INFOPREF##_##NUM * bufptr##NUM;
191da6c28aaSamw
192da6c28aaSamw#define INFO1RES_STRUCT(INFOPREF) \
193da6c28aaSamw	struct INFOPREF##_result { \
194da6c28aaSamw		DWORD	level; \
195da6c28aaSamw	   SWITCH(level) \
196da6c28aaSamw		union INFOPREF##__ru bufptr; \
197da6c28aaSamw	};
198da6c28aaSamw
199da6c28aaSamw/*
200da6c28aaSamw * INFO1RESBUF_...
201da6c28aaSamw *	Type constructors for single-result buffering.
202da6c28aaSamw */
203da6c28aaSamw
204da6c28aaSamw
205da6c28aaSamw#ifndef NDRGEN
206da6c28aaSamw#define INFO1RESBUF_DEFINITION(INFOPREF, ENTRIES) \
207da6c28aaSamw	typedef union INFOPREF##_rb { \
208da6c28aaSamw		ENTRIES \
209da6c28aaSamw	} INFOPREF##_rb;
210da6c28aaSamw#define INFO1RESBUF_UNION_ENTRY(INFOPREF,NUM) \
211da6c28aaSamw	CASE(NUM) struct INFOPREF##_##NUM   buf##NUM;
212da6c28aaSamw#else
213da6c28aaSamw#define INFO1RESBUF_DEFINITION(INFOPREF, ENTRIES)
214da6c28aaSamw#define INFO1RESBUF_UNION_ENTRY(INFOPREF,NUM)
215da6c28aaSamw#endif
216da6c28aaSamw
217da6c28aaSamw
218da6c28aaSamw
219da6c28aaSamw
220da6c28aaSamw/*
221da6c28aaSamw * INFONRES_...
222da6c28aaSamw *	Type constructors for multiple-result case
223da6c28aaSamw */
224da6c28aaSamw
225da6c28aaSamw#define INFONRES_RESULT(INFOPREF,NUM) \
226da6c28aaSamw	struct INFOPREF##_##NUM##_result { \
227da6c28aaSamw		DWORD	entriesread; \
228da6c28aaSamw	    SIZE_IS(entriesread) \
229da6c28aaSamw		struct INFOPREF##_##NUM *entries; \
230da6c28aaSamw	};
231da6c28aaSamw
232da6c28aaSamw#define INFONRES_DEFINITION(INFOPREF, ENTRIES) \
233da6c28aaSamw	INFONRES_UNION(INFOPREF, ENTRIES) \
234da6c28aaSamw	INFONRES_STRUCT(INFOPREF)
235da6c28aaSamw
236da6c28aaSamw#define INFONRES_UNION(INFOPREF, ENTRIES) \
237da6c28aaSamw	union INFOPREF##__ru { \
238da6c28aaSamw		INFONRES_UNION_NULLPTR \
239da6c28aaSamw		INFONRES_UNION_INFONRES \
240da6c28aaSamw		ENTRIES \
241da6c28aaSamw	};
242da6c28aaSamw
243da6c28aaSamw#define INFONRES_UNION_NULLPTR \
244da6c28aaSamw	DEFAULT char *			nullptr;
245da6c28aaSamw
246da6c28aaSamw#ifndef NDRGEN
247da6c28aaSamw#define INFONRES_UNION_INFONRES \
248da6c28aaSamw	struct mslm_infonres *		p;
249da6c28aaSamw#else
250da6c28aaSamw#define INFONRES_UNION_INFONRES
251da6c28aaSamw#endif
252da6c28aaSamw
253da6c28aaSamw#define INFONRES_UNION_ENTRY(INFOPREF,NUM) \
254da6c28aaSamw	CASE(NUM) struct INFOPREF##_##NUM##_result * bufptr##NUM;
255da6c28aaSamw
256da6c28aaSamw#define INFONRES_STRUCT(INFOPREF) \
257da6c28aaSamw	struct INFOPREF##_result { \
258da6c28aaSamw		DWORD	level; \
259da6c28aaSamw	   SWITCH(level) \
260da6c28aaSamw		union INFOPREF##__ru bufptr; \
261da6c28aaSamw	};
262da6c28aaSamw
263da6c28aaSamw#ifndef NDRGEN
264da6c28aaSamw/*
265da6c28aaSamw * This just makes things a little easier on the stub modules:
266da6c28aaSamw *
267da6c28aaSamw *	XXXGetInfoParam (struct XXXGetInfo_param *param) {
268da6c28aaSamw *		struct mslm_infonres	infonres;
269da6c28aaSamw *
270da6c28aaSamw *		infonres.entriesread = 0;
271da6c28aaSamw *		infonres.entries = 0;
272da6c28aaSamw *		param->result.level = param->level;	// for marshalling
273da6c28aaSamw *		param->result.bufptr.p = &infonres;
274da6c28aaSamw */
275da6c28aaSamwstruct mslm_infonres {
276da6c28aaSamw	DWORD		entriesread;
277da6c28aaSamw	void *		entries;
278da6c28aaSamw};
279da6c28aaSamw#endif
280da6c28aaSamw
281da6c28aaSamw
282da6c28aaSamw/*
283faa1795aSjb150015 * SRVSVC - Server Service
284da6c28aaSamw */
285da6c28aaSamw
286faa1795aSjb150015/* Windows NT */
287faa1795aSjb150015#define SRVSVC_OPNUM_NetCharDevEnum              0x00
288faa1795aSjb150015#define SRVSVC_OPNUM_NetCharDevGetInfo           0x01
289faa1795aSjb150015#define SRVSVC_OPNUM_NetCharDevControl           0x02
290faa1795aSjb150015#define SRVSVC_OPNUM_NetCharDevQEnum             0x03
291faa1795aSjb150015#define SRVSVC_OPNUM_NetCharDevQGetInfo          0x04
292faa1795aSjb150015#define SRVSVC_OPNUM_NetCharDevQSetInfo          0x05
293faa1795aSjb150015#define SRVSVC_OPNUM_NetCharDevQPurge            0x06
294faa1795aSjb150015#define SRVSVC_OPNUM_NetCharDevQPurgeSelf        0x07
295da6c28aaSamw#define SRVSVC_OPNUM_NetConnectEnum              0x08
296da6c28aaSamw#define SRVSVC_OPNUM_NetFileEnum                 0x09
297faa1795aSjb150015#define SRVSVC_OPNUM_NetFileGetInfo              0x0a
298da6c28aaSamw#define SRVSVC_OPNUM_NetFileClose                0x0b
299da6c28aaSamw#define SRVSVC_OPNUM_NetSessionEnum              0x0c
300da6c28aaSamw#define SRVSVC_OPNUM_NetSessionDel               0x0d
301da6c28aaSamw#define SRVSVC_OPNUM_NetShareAdd                 0x0e
302da6c28aaSamw#define SRVSVC_OPNUM_NetShareEnum                0x0f
303da6c28aaSamw#define SRVSVC_OPNUM_NetShareGetInfo             0x10
304da6c28aaSamw#define SRVSVC_OPNUM_NetShareSetInfo             0x11
305da6c28aaSamw#define SRVSVC_OPNUM_NetShareDel                 0x12
306faa1795aSjb150015#define SRVSVC_OPNUM_NetShareDelSticky           0x13
307faa1795aSjb150015#define SRVSVC_OPNUM_NetShareCheck               0x14
308da6c28aaSamw#define SRVSVC_OPNUM_NetServerGetInfo            0x15
309da6c28aaSamw#define SRVSVC_OPNUM_NetServerSetInfo            0x16
310faa1795aSjb150015#define SRVSVC_OPNUM_NetServerDiskEnum           0x17
311faa1795aSjb150015#define SRVSVC_OPNUM_NetServerStatisticsGet      0x18
312faa1795aSjb150015#define SRVSVC_OPNUM_NetServerTransportAdd       0x19
313faa1795aSjb150015#define SRVSVC_OPNUM_NetServerTransportEnum      0x1a
314faa1795aSjb150015#define SRVSVC_OPNUM_NetServerTransportDel       0x1b
315da6c28aaSamw#define SRVSVC_OPNUM_NetRemoteTOD                0x1c
316faa1795aSjb150015#define SRVSVC_OPNUM_NetServerSetServiceBits     0x1d
3173db3f65cSamw#define SRVSVC_OPNUM_NetPathType                 0x1e
318faa1795aSjb150015#define SRVSVC_OPNUM_NetPathCanonicalize         0x1f
319faa1795aSjb150015#define SRVSVC_OPNUM_NetPathCompare              0x20
320da6c28aaSamw#define SRVSVC_OPNUM_NetNameValidate             0x21
321faa1795aSjb150015#define SRVSVC_OPNUM_NetNameCanonicalize         0x22
322faa1795aSjb150015#define SRVSVC_OPNUM_NetNameCompare              0x23
323da6c28aaSamw#define SRVSVC_OPNUM_NetShareEnumSticky          0x24
324faa1795aSjb150015#define SRVSVC_OPNUM_NetShareDelStart            0x25
325faa1795aSjb150015#define SRVSVC_OPNUM_NetShareDelCommit           0x26
326da6c28aaSamw#define SRVSVC_OPNUM_NetGetFileSecurity          0x27
327da6c28aaSamw#define SRVSVC_OPNUM_NetSetFileSecurity          0x28
328faa1795aSjb150015#define SRVSVC_OPNUM_NetServerTransportAddEx     0x29
329faa1795aSjb150015#define SRVSVC_OPNUM_NetServerSetServiceBitsEx   0x2a
330faa1795aSjb150015#define SRVSVC_OPNUM_NetDfsGetVersion            0x2b
331faa1795aSjb150015
332faa1795aSjb150015/* Windows 2000 */
333faa1795aSjb150015#define SRVSVC_OPNUM_NetDfsCreateLocalPartition  0x2c
334faa1795aSjb150015#define SRVSVC_OPNUM_NetDfsDeleteLocalPartition  0x2d
335faa1795aSjb150015#define SRVSVC_OPNUM_NetDfsSetLocalVolumeState   0x2e
336faa1795aSjb150015#define SRVSVC_OPNUM_NetDfsSetServerInfo         0x2f
337faa1795aSjb150015#define SRVSVC_OPNUM_NetDfsCreateExitPoint       0x30
338faa1795aSjb150015#define SRVSVC_OPNUM_NetDfsDeleteExitPoint       0x31
339faa1795aSjb150015#define SRVSVC_OPNUM_NetDfsModifyPrefix          0x32
340faa1795aSjb150015#define SRVSVC_OPNUM_NetDfsFixLocalVolume        0x33
341faa1795aSjb150015#define SRVSVC_OPNUM_NetDfsManagerReportSiteInfo 0x34
342faa1795aSjb150015
343faa1795aSjb150015/* Windows XP and Windows Server 2003 */
344faa1795aSjb150015#define SRVSVC_OPNUM_NetServerTransportDelEx     0x35
345faa1795aSjb150015
346faa1795aSjb150015/* Windows Vista */
347faa1795aSjb150015#define SRVSVC_OPNUM_NetServerAliasAdd           0x36
348faa1795aSjb150015#define SRVSVC_OPNUM_NetServerAliasEnum          0x37
349faa1795aSjb150015#define SRVSVC_OPNUM_NetServerAliasDel           0x38
350faa1795aSjb150015#define SRVSVC_OPNUM_NetShareDelEx               0x39
351da6c28aaSamw
352da6c28aaSamw/*
353da6c28aaSamw ***********************************************************************
3543db3f65cSamw * NetConnectEnum
355da6c28aaSamw ***********************************************************************
356da6c28aaSamw */
357da6c28aaSamw
358da6c28aaSamw/*
359da6c28aaSamw * Level 0 connect information.
360da6c28aaSamw */
361da6c28aaSamwstruct mslm_NetConnectInfoBuf0 {
362da6c28aaSamw        DWORD coni0_id;
363da6c28aaSamw};
36489dc44ceSjose borregotypedef struct mslm_NetConnectInfoBuf0 srvsvc_NetConnectInfoBuf0_t;
365da6c28aaSamw
366da6c28aaSamwstruct mslm_NetConnectInfo0 {
367da6c28aaSamw	DWORD entries_read;
368da6c28aaSamw  SIZE_IS(entries_read)
369da6c28aaSamw        struct mslm_NetConnectInfoBuf0 *ci0;
370da6c28aaSamw};
37189dc44ceSjose borregotypedef struct mslm_NetConnectInfo0 srvsvc_NetConnectInfo0_t;
372da6c28aaSamw
373da6c28aaSamw/*
374da6c28aaSamw * Level 1 connect information.
375da6c28aaSamw */
376da6c28aaSamwstruct mslm_NetConnectInfoBuf1 {
377da6c28aaSamw	DWORD coni1_id;
378da6c28aaSamw	DWORD coni1_type;
379da6c28aaSamw	DWORD coni1_num_opens;
380da6c28aaSamw	DWORD coni1_num_users;
381da6c28aaSamw	DWORD coni1_time;
382da6c28aaSamw	LPTSTR coni1_username;
383da6c28aaSamw	LPTSTR coni1_netname; /* share name */
384da6c28aaSamw};
38589dc44ceSjose borregotypedef struct mslm_NetConnectInfoBuf1 srvsvc_NetConnectInfoBuf1_t;
386da6c28aaSamw
387da6c28aaSamwstruct mslm_NetConnectInfo1 {
388da6c28aaSamw	DWORD entries_read;
389da6c28aaSamw  SIZE_IS(entries_read)
390da6c28aaSamw	struct mslm_NetConnectInfoBuf1 *ci1;
391da6c28aaSamw};
39289dc44ceSjose borregotypedef struct mslm_NetConnectInfo1 srvsvc_NetConnectInfo1_t;
393da6c28aaSamw
394da6c28aaSamwunion mslm_NetConnectInfoResUnion {
395da6c28aaSamw	CASE(0) struct mslm_NetConnectInfo0 *info0;
396da6c28aaSamw	CASE(1) struct mslm_NetConnectInfo1 *info1;
397da6c28aaSamw	DEFAULT	char *nullptr;
398da6c28aaSamw};
399da6c28aaSamw
400da6c28aaSamwstruct mslm_NetConnectInfo {
401da6c28aaSamw	DWORD level;
402da6c28aaSamw	DWORD switch_value;
403da6c28aaSamw  SWITCH(switch_value)
404da6c28aaSamw	union mslm_NetConnectInfoResUnion ru;
405da6c28aaSamw};
4061fcced4cSJordan Browntypedef struct mslm_NetConnectInfo srvsvc_NetConnectInfo_t;
407da6c28aaSamw
408da6c28aaSamwOPERATION(SRVSVC_OPNUM_NetConnectEnum)
409da6c28aaSamwstruct mslm_NetConnectEnum {
410da6c28aaSamw	IN	LPTSTR servername;
411da6c28aaSamw	IN	LPTSTR qualifier; /* share name */
412da6c28aaSamw	INOUT	struct mslm_NetConnectInfo info;
413da6c28aaSamw	IN	DWORD pref_max_len;
414da6c28aaSamw	OUT 	DWORD total_entries;
415da6c28aaSamw	INOUT	DWORD *resume_handle;
416da6c28aaSamw	OUT	DWORD status;
417da6c28aaSamw};
418da6c28aaSamw
419da6c28aaSamw
420da6c28aaSamw/*
421da6c28aaSamw ***********************************************************************
4223db3f65cSamw * NetFileEnum
423da6c28aaSamw ***********************************************************************
424da6c28aaSamw */
4253db3f65cSamwstruct mslm_NetFileInfoBuf2 {
4263db3f65cSamw	DWORD fi2_id;
4273db3f65cSamw};
42889dc44ceSjose borregotypedef struct mslm_NetFileInfoBuf2 srvsvc_NetFileInfoBuf2_t;
4293db3f65cSamw
4303db3f65cSamwstruct mslm_NetFileInfo2 {
4313db3f65cSamw	DWORD entries_read;
4323db3f65cSamw  SIZE_IS(entries_read)
4333db3f65cSamw	struct mslm_NetFileInfoBuf2 *fi2;
4343db3f65cSamw};
43589dc44ceSjose borregotypedef struct mslm_NetFileInfo2 srvsvc_NetFileInfo2_t;
4363db3f65cSamw
437da6c28aaSamwstruct mslm_NetFileInfoBuf3 {
438da6c28aaSamw	DWORD fi3_id;
439da6c28aaSamw	DWORD fi3_permissions;
440da6c28aaSamw	DWORD fi3_num_locks;
441da6c28aaSamw	LPTSTR fi3_pathname;
442da6c28aaSamw	LPTSTR fi3_username;
443da6c28aaSamw};
44489dc44ceSjose borregotypedef struct mslm_NetFileInfoBuf3 srvsvc_NetFileInfoBuf3_t;
445da6c28aaSamw
446da6c28aaSamwstruct mslm_NetFileInfo3 {
447da6c28aaSamw	DWORD entries_read;
448da6c28aaSamw  SIZE_IS(entries_read)
449da6c28aaSamw	struct mslm_NetFileInfoBuf3 *fi3;
450da6c28aaSamw};
45189dc44ceSjose borregotypedef struct mslm_NetFileInfo3 srvsvc_NetFileInfo3_t;
452da6c28aaSamw
453da6c28aaSamwunion mslm_NetFileInfoResUnion {
4543db3f65cSamw	CASE(2)	struct mslm_NetFileInfo2 *info2;
455da6c28aaSamw	CASE(3)	struct mslm_NetFileInfo3 *info3;
456da6c28aaSamw	DEFAULT	char *nullptr;
457da6c28aaSamw};
458da6c28aaSamw
459da6c28aaSamwstruct mslm_NetFileInfo {
460da6c28aaSamw	DWORD level;
461da6c28aaSamw	DWORD switch_value;
462da6c28aaSamw  SWITCH(switch_value)
463da6c28aaSamw	union mslm_NetFileInfoResUnion ru;
464da6c28aaSamw};
465da6c28aaSamw
466da6c28aaSamwOPERATION(SRVSVC_OPNUM_NetFileEnum)
467da6c28aaSamwstruct mslm_NetFileEnum {
468da6c28aaSamw	IN	LPTSTR servername;
4693db3f65cSamw	IN	DWORD basepath;
4703db3f65cSamw	IN	DWORD username;
471da6c28aaSamw	INOUT	struct mslm_NetFileInfo info;
472da6c28aaSamw	IN	DWORD pref_max_len;
473da6c28aaSamw	OUT	DWORD total_entries;
474da6c28aaSamw	INOUT	DWORD *resume_handle;
475da6c28aaSamw	OUT	DWORD status;
476da6c28aaSamw};
477da6c28aaSamw
478da6c28aaSamw
479da6c28aaSamw/*
480da6c28aaSamw ***********************************************************************
481da6c28aaSamw * NetFileClose
482da6c28aaSamw *
4833db3f65cSamw * Close files using a file id reported by NetFileEnum.
484da6c28aaSamw ***********************************************************************
485da6c28aaSamw */
486da6c28aaSamwOPERATION(SRVSVC_OPNUM_NetFileClose)
487da6c28aaSamwstruct mslm_NetFileClose {
488da6c28aaSamw	IN	LPTSTR servername;
489da6c28aaSamw	IN	DWORD file_id;
490da6c28aaSamw	OUT	DWORD status;
491da6c28aaSamw};
492da6c28aaSamw
493da6c28aaSamw
494da6c28aaSamw/*
495da6c28aaSamw ***********************************************************************
49629bd2886SAlan Wright * NetShareGetInfo/NetShareSetInfo: netname is the name of a share.
4973db3f65cSamw *
4983db3f65cSamw * Levels:
49929bd2886SAlan Wright *  0      The share name.
50029bd2886SAlan Wright *  1      Information about the shared resource: name, type of resource
50129bd2886SAlan Wright *         and a comment.
50229bd2886SAlan Wright *  2      Information about the shared resource: name, type, permissions,
50329bd2886SAlan Wright *         password and number of connections.
50429bd2886SAlan Wright *  501    Information about the shared resource: name, type of resource
50529bd2886SAlan Wright *         and a comment.
50629bd2886SAlan Wright *  502    Information about the shared resource, including the name, type,
50729bd2886SAlan Wright *         permissions, number of connections etc.
50829bd2886SAlan Wright *  503    Contains information about the shared resource; identical to 502
50929bd2886SAlan Wright *         except for the addition of a servername.
51029bd2886SAlan Wright *  1004   A comment for the shared resource.
51129bd2886SAlan Wright *  1005   A set of flags describing the shared resource.
51229bd2886SAlan Wright *  1006   The maximum number of concurrent connections that the shared
51329bd2886SAlan Wright *         resource can accommodate.
5143db3f65cSamw *  1501   Specifies the SECURITY_DESCRIPTOR for the share.
5153db3f65cSamw *
5163db3f65cSamw * Windows Me/98/95 supports level 50, which is similar to level 1.
5173db3f65cSamw *
5183db3f65cSamw * shi1005_flags: SHI1005_VALID_FLAGS_SET defines the set of flags that
5193db3f65cSamw * can be set with the NetShareSetInfo function. SHI1005_FLAGS_DFS and
5203db3f65cSamw * SHI1005_FLAGS_DFS_ROOT can only be returned, but not set.
5213db3f65cSamw *
5223db3f65cSamw * 0x01    SHI1005_FLAGS_DFS
5233db3f65cSamw *         The specified share is present in a Dfs tree structure.
5243db3f65cSamw *         This flag cannot be set with NetShareSetInfo.
5253db3f65cSamw *
5263db3f65cSamw * 0x02    SHI1005_FLAGS_DFS_ROOT
5273db3f65cSamw *         The specified share is the root volume in a Dfs tree.
5283db3f65cSamw *         This flag cannot be set with NetShareSetInfo.
5293db3f65cSamw *
5303db3f65cSamw * 0x30    CSC_MASK               Client-side caching (CSC) state:
5313db3f65cSamw *   0x00  CSC_CACHE_MANUAL_REINT Automatic file-by-file
5323db3f65cSamw *                                reintegration not allowed.
5333db3f65cSamw *   0x10  CSC_CACHE_AUTO_REINT   File-by-file reintegration allowed.
5343db3f65cSamw *   0x20  CSC_CACHE_VDO          File opens do not need to be flowed.
5353db3f65cSamw *   0x30  CSC_CACHE_NONE         CSC is disabled for this share.
5363db3f65cSamw *
5373db3f65cSamw * 0x0100  SHI1005_FLAGS_RESTRICT_EXCLUSIVE_OPENS
5383db3f65cSamw *         The specified share disallows exclusive file opens,
5393db3f65cSamw *         where reads to an open file are disallowed.
5403db3f65cSamw *
5413db3f65cSamw * 0x0200  SHI1005_FLAGS_FORCE_SHARED_DELETE
5423db3f65cSamw *         Shared files in the specified share can be forcibly deleted.
5433db3f65cSamw *
5443db3f65cSamw * 0x0400  SHI1005_FLAGS_ALLOW_NAMESPACE_CACHING
5453db3f65cSamw *         Clients are allowed to cache the namespace of the share.
5463db3f65cSamw *
5473db3f65cSamw * 0x0800  SHI1005_FLAGS_ACCESS_BASED_DIRECTORY_ENUM
5483db3f65cSamw *         The server will filter directory entries based on the access
54929bd2886SAlan Wright *         permissions of the client.  The access-based enumeration (ABE)
55029bd2886SAlan Wright *         flag may also appear as SHI1005_FLAGS_ENFORCE_NAMESPACE_ACCESS.
55129bd2886SAlan Wright *
55229bd2886SAlan Wright * Support for Access-based Enumeration (ABE) was added to Windows in
55329bd2886SAlan Wright * Windows Server 2003 Service Pack 1. ABE filters directory contents
55429bd2886SAlan Wright * (and other shared resources) returned via a share based on a user's
55529bd2886SAlan Wright * access rights, i.e. a user would not see objects that are
55629bd2886SAlan Wright * inaccessible to that user. ABE requests are made using info level
55729bd2886SAlan Wright * 1005 with the value 0x0800 in the flags field.
558da6c28aaSamw ***********************************************************************
559da6c28aaSamw */
5608d7e4166Sjose borrego
5618d7e4166Sjose borrego#define	CSC_MASK		0x30
5628d7e4166Sjose borrego#define	CSC_CACHE_MANUAL_REINT	0x00
5638d7e4166Sjose borrego#define	CSC_CACHE_AUTO_REINT	0x10
5648d7e4166Sjose borrego#define	CSC_CACHE_VDO		0x20
5658d7e4166Sjose borrego#define	CSC_CACHE_NONE		0x30
5668d7e4166Sjose borrego
56729bd2886SAlan Wright#define	MLSM_SID_AUTH_MAX	6
56829bd2886SAlan Wright/*
56929bd2886SAlan Wright * Definition for a SID. The ndl compiler does not allow a typedef of
57029bd2886SAlan Wright * a structure containing variable size members.
57129bd2886SAlan Wright */
57229bd2886SAlan Wrightstruct mslm_sid {
57329bd2886SAlan Wright	BYTE		revision;
57429bd2886SAlan Wright	BYTE		sub_auth_count;
57529bd2886SAlan Wright	BYTE		authority[MLSM_SID_AUTH_MAX];
57629bd2886SAlan Wright  SIZE_IS(sub_auth_count)
57729bd2886SAlan Wright	DWORD		sub_authority[ANY_SIZE_ARRAY];
57829bd2886SAlan Wright};
57929bd2886SAlan Wright
58029bd2886SAlan Wrightstruct mslm_ace_hdr {
58129bd2886SAlan Wright	BYTE		type;
58229bd2886SAlan Wright	BYTE		flags;
58329bd2886SAlan Wright	WORD		size;
58429bd2886SAlan Wright};
58529bd2886SAlan Wrighttypedef struct mslm_ace_hdr mslm_ace_hdr_t;
58629bd2886SAlan Wright
58729bd2886SAlan Wrightstruct mslm_ace {
58829bd2886SAlan Wright	mslm_ace_hdr_t	header;
58929bd2886SAlan Wright	DWORD		mask;
59029bd2886SAlan Wright	struct mslm_sid	*sid;
59129bd2886SAlan Wright};
59229bd2886SAlan Wrighttypedef struct mslm_ace mslm_ace_t;
59329bd2886SAlan Wright
59429bd2886SAlan Wrightstruct mslm_acl {
59529bd2886SAlan Wright	BYTE		revision;
59629bd2886SAlan Wright	BYTE		sbz1;
59729bd2886SAlan Wright	WORD		size;
59829bd2886SAlan Wright	WORD		ace_count;
59929bd2886SAlan Wright	WORD		sbz2;
60029bd2886SAlan Wright    SIZE_IS(ace_count)
60129bd2886SAlan Wright	mslm_ace_t	ace[ANY_SIZE_ARRAY];
60229bd2886SAlan Wright};
60329bd2886SAlan Wright
60429bd2886SAlan Wright/*
60529bd2886SAlan Wright * SRVSVC definition of a security_descriptor.
60629bd2886SAlan Wright */
60729bd2886SAlan Wrightstruct mslm_security_descriptor {
60829bd2886SAlan Wright	BYTE revision;
60929bd2886SAlan Wright	BYTE sbz1;
61029bd2886SAlan Wright	WORD control;
61129bd2886SAlan Wright	DWORD offset_owner;
61229bd2886SAlan Wright	DWORD offset_group;
61329bd2886SAlan Wright	DWORD offset_sacl;
61429bd2886SAlan Wright	DWORD offset_dacl;
61529bd2886SAlan Wright	struct mslm_sid *owner;
61629bd2886SAlan Wright	struct mslm_sid *group;
61729bd2886SAlan Wright	struct mslm_acl *sacl;
61829bd2886SAlan Wright	struct mslm_acl *dacl;
61929bd2886SAlan Wright};
62029bd2886SAlan Wrighttypedef struct mslm_security_descriptor mslm_security_descriptor_t;
62129bd2886SAlan Wright
622eb1d736bSafshin salek ardakani - Sun Microsystems - Irvine United Statesstruct mslm_NetShareInfo_0 {
623da6c28aaSamw	LPTSTR shi0_netname;
624da6c28aaSamw};
625da6c28aaSamw
626eb1d736bSafshin salek ardakani - Sun Microsystems - Irvine United Statesstruct mslm_NetShareInfo_1 {
627da6c28aaSamw	LPTSTR shi1_netname;
628da6c28aaSamw	DWORD shi1_type; /* type of resource such as IPC$ */
629da6c28aaSamw	LPTSTR shi1_comment;
630da6c28aaSamw};
631da6c28aaSamw
632eb1d736bSafshin salek ardakani - Sun Microsystems - Irvine United Statesstruct mslm_NetShareInfo_2 {
633da6c28aaSamw	LPTSTR shi2_netname;
634da6c28aaSamw	DWORD shi2_type;
635da6c28aaSamw	LPTSTR shi2_comment;
636da6c28aaSamw	DWORD shi2_permissions;
637da6c28aaSamw	DWORD shi2_max_uses;
638da6c28aaSamw	DWORD shi2_current_uses;
639da6c28aaSamw	LPTSTR shi2_path;
640da6c28aaSamw	LPTSTR shi2_passwd;
641da6c28aaSamw};
642da6c28aaSamw
643eb1d736bSafshin salek ardakani - Sun Microsystems - Irvine United Statesstruct mslm_NetShareInfo_501 {
6443db3f65cSamw	LPTSTR shi501_netname;
6453db3f65cSamw	DWORD shi501_type;
6463db3f65cSamw	LPTSTR shi501_comment;
647e3f2c991SKeyur Desai	DWORD shi501_flags;
6483db3f65cSamw};
6493db3f65cSamw
650eb1d736bSafshin salek ardakani - Sun Microsystems - Irvine United Statesstruct mslm_NetShareInfo_502 {
651da6c28aaSamw	LPTSTR shi502_netname;
652da6c28aaSamw	DWORD shi502_type;
653da6c28aaSamw	LPTSTR shi502_comment;
654da6c28aaSamw	DWORD shi502_permissions;
655da6c28aaSamw	DWORD shi502_max_uses;
656da6c28aaSamw	DWORD shi502_current_uses;
657da6c28aaSamw	LPTSTR shi502_path;
658da6c28aaSamw	LPTSTR shi502_passwd;
659da6c28aaSamw	DWORD shi502_reserved;
66029bd2886SAlan Wright    SIZE_IS(shi502_reserved)
66129bd2886SAlan Wright	LPBYTE shi502_security_descriptor;
662da6c28aaSamw};
663da6c28aaSamw
664eb1d736bSafshin salek ardakani - Sun Microsystems - Irvine United Statesstruct mslm_NetShareInfo_503 {
6658d7e4166Sjose borrego	LPTSTR shi503_netname;
6668d7e4166Sjose borrego	DWORD shi503_type;
6678d7e4166Sjose borrego	LPTSTR shi503_comment;
6688d7e4166Sjose borrego	DWORD shi503_permissions;
6698d7e4166Sjose borrego	DWORD shi503_max_uses;
6708d7e4166Sjose borrego	DWORD shi503_current_uses;
6718d7e4166Sjose borrego	LPTSTR shi503_path;
6728d7e4166Sjose borrego	LPTSTR shi503_passwd;
6738d7e4166Sjose borrego	LPTSTR shi503_servername;
6748d7e4166Sjose borrego	DWORD shi503_reserved;
67529bd2886SAlan Wright    SIZE_IS(shi503_reserved)
67629bd2886SAlan Wright	LPBYTE shi503_security_descriptor;
6778d7e4166Sjose borrego};
6788d7e4166Sjose borrego
679eb1d736bSafshin salek ardakani - Sun Microsystems - Irvine United Statesstruct mslm_NetShareInfo_1004 {
6808d7e4166Sjose borrego	LPTSTR shi1004_comment;
6818d7e4166Sjose borrego};
6828d7e4166Sjose borrego
683eb1d736bSafshin salek ardakani - Sun Microsystems - Irvine United Statesstruct mslm_NetShareInfo_1005 {
684da6c28aaSamw	DWORD shi1005_flags;
685da6c28aaSamw};
686da6c28aaSamw
687eb1d736bSafshin salek ardakani - Sun Microsystems - Irvine United Statesstruct mslm_NetShareInfo_1006 {
6888d7e4166Sjose borrego	DWORD shi1006_max_uses;
6898d7e4166Sjose borrego};
6908d7e4166Sjose borrego
69129bd2886SAlan Wrightstruct mslm_NetShareInfo_1501 {
69229bd2886SAlan Wright	DWORD shi1501_reserved;
69329bd2886SAlan Wright    SIZE_IS(shi1501_reserved)
69429bd2886SAlan Wright	LPBYTE shi1501_security_descriptor;
69529bd2886SAlan Wright};
69629bd2886SAlan Wright
69729bd2886SAlan Wrightunion mlsm_NetShareInfoResUnion {
698eb1d736bSafshin salek ardakani - Sun Microsystems - Irvine United States	CASE(0)		struct mslm_NetShareInfo_0 *info0;
699eb1d736bSafshin salek ardakani - Sun Microsystems - Irvine United States	CASE(1)		struct mslm_NetShareInfo_1 *info1;
700eb1d736bSafshin salek ardakani - Sun Microsystems - Irvine United States	CASE(2)		struct mslm_NetShareInfo_2 *info2;
701eb1d736bSafshin salek ardakani - Sun Microsystems - Irvine United States	CASE(501)	struct mslm_NetShareInfo_501 *info501;
702eb1d736bSafshin salek ardakani - Sun Microsystems - Irvine United States	CASE(502)	struct mslm_NetShareInfo_502 *info502;
70329bd2886SAlan Wright	CASE(503)	struct mslm_NetShareInfo_503 *info503;
704eb1d736bSafshin salek ardakani - Sun Microsystems - Irvine United States	CASE(1004)	struct mslm_NetShareInfo_1004 *info1004;
705eb1d736bSafshin salek ardakani - Sun Microsystems - Irvine United States	CASE(1005)	struct mslm_NetShareInfo_1005 *info1005;
706eb1d736bSafshin salek ardakani - Sun Microsystems - Irvine United States	CASE(1006)	struct mslm_NetShareInfo_1006 *info1006;
70729bd2886SAlan Wright	CASE(1501)	struct mslm_NetShareInfo_1501 *info1501;
708da6c28aaSamw	DEFAULT	char *nullptr;
709da6c28aaSamw};
710da6c28aaSamw
711da6c28aaSamw
71229bd2886SAlan Wrightstruct mlsm_NetShareInfoRes {
713da6c28aaSamw	DWORD switch_value;
714da6c28aaSamw  SWITCH(switch_value)
71529bd2886SAlan Wright	union mlsm_NetShareInfoResUnion ru;
716da6c28aaSamw};
717da6c28aaSamw
718da6c28aaSamw
719da6c28aaSamwOPERATION(SRVSVC_OPNUM_NetShareGetInfo)
720da6c28aaSamwstruct mlsm_NetShareGetInfo {
721da6c28aaSamw	IN	LPTSTR servername;
722da6c28aaSamw	IN REFERENCE	LPTSTR netname;
723da6c28aaSamw	IN	DWORD level;
72429bd2886SAlan Wright	OUT	struct mlsm_NetShareInfoRes result;
725da6c28aaSamw	OUT	DWORD status;
726da6c28aaSamw};
727da6c28aaSamw
728da6c28aaSamw
729da6c28aaSamwOPERATION(SRVSVC_OPNUM_NetShareSetInfo)
730da6c28aaSamwstruct mlsm_NetShareSetInfo {
731da6c28aaSamw	IN	LPTSTR servername;
732da6c28aaSamw	IN REFERENCE	LPTSTR netname;
733da6c28aaSamw	IN	DWORD level;
73429bd2886SAlan Wright	IN	struct mlsm_NetShareInfoRes result;
73529bd2886SAlan Wright	INOUT	DWORD *parm_err;
736da6c28aaSamw	OUT	DWORD status;
737da6c28aaSamw};
738da6c28aaSamw
739da6c28aaSamw
740da6c28aaSamw/*
741da6c28aaSamw ***********************************************************************
742da6c28aaSamw * NetSessionEnum
743da6c28aaSamw *
744da6c28aaSamw * The NetSessionEnum function provides information about sessions
745da6c28aaSamw * established on a server.
746da6c28aaSamw *
747da6c28aaSamw * Only members of the Administrators or Account Operators local groups
748da6c28aaSamw * can successfully execute the NetSessionEnum function at level 1 or
749da6c28aaSamw * level 2. No special group membership is required for level 0 or level
750da6c28aaSamw * 10 calls.
751da6c28aaSamw *
752da6c28aaSamw * Windows NT/2000/XP: The parameter order is as follows.
753da6c28aaSamw *
754da6c28aaSamw * NET_API_STATUS NetSessionEnum(LPWSTR servername,
755da6c28aaSamw *                               LPWSTR UncClientName,
756da6c28aaSamw *                               LPWSTR username,
757da6c28aaSamw *                               DWORD level,
758da6c28aaSamw *                               LPBYTE *bufptr,
759da6c28aaSamw *                               DWORD prefmaxlen,
760da6c28aaSamw *                               LPDWORD entriesread,
761da6c28aaSamw *                               LPDWORD totalentries,
762da6c28aaSamw *                               LPDWORD resume_handle);
763da6c28aaSamw *
764da6c28aaSamw * Windows 95/98/Me: The calling application must use the cbBuffer parameter
765da6c28aaSamw * to specify the size, in bytes, of the information buffer pointed to by the
766da6c28aaSamw * pbBuffer parameter. (The cbBuffer parameter replaces the prefmaxlen
767da6c28aaSamw * parameter.) Neither a user name parameter nor a resume handle parameter is
768da6c28aaSamw * available on this platform. Therefore, the parameter list is as follows.
769da6c28aaSamw *
770da6c28aaSamw * API_FUNCTION NetSessionEnum(const char FAR *pszServer,
771da6c28aaSamw *                             short sLevel,
772da6c28aaSamw *                             char FAR *pbBuffer,
773da6c28aaSamw *                             unsigned short cbBuffer,
774da6c28aaSamw *                             unsigned short FAR *pcEntriesRead,
775da6c28aaSamw *                             unsigned short FAR *pcTotalAvail);
776da6c28aaSamw *
777da6c28aaSamw * Parameters
778da6c28aaSamw *
779da6c28aaSamw * servername
780da6c28aaSamw * [in] Pointer to a string that specifies the DNS or NetBIOS name of the
781da6c28aaSamw * remote server on which the function is to execute. If this parameter is
782da6c28aaSamw * NULL, the local computer is used.
783da6c28aaSamw * Windows NT 4.0 and earlier: This string must begin with \\.
784da6c28aaSamw *
785da6c28aaSamw * UncClientName
786da6c28aaSamw * [in] Pointer to a string that specifies the name of the computer session
787da6c28aaSamw * for which information is to be returned. If this parameter is NULL,
788da6c28aaSamw * NetSessionEnum returns information for all computer sessions on the server.
789da6c28aaSamw *
790da6c28aaSamw * username
791da6c28aaSamw * [in] Pointer to a string that specifies the name of the user for which
792da6c28aaSamw * information is to be returned. If this parameter is NULL, NetSessionEnum
793da6c28aaSamw * returns information for all users.
794da6c28aaSamw *
795da6c28aaSamw * level
796da6c28aaSamw * [in] Specifies the information level of the data. This parameter can be
797da6c28aaSamw * one of the following values.
798da6c28aaSamw * Windows NT/2000/XP: The following levels are valid.
799da6c28aaSamw * Value    Meaning
800da6c28aaSamw * 0        Return the name of the computer that established the session.
801da6c28aaSamw *          The bufptr parameter points to an array of SESSION_INFO_0
802da6c28aaSamw *          structures.
803da6c28aaSamw * 1        Return the name of the computer, name of the user, and open files,
804da6c28aaSamw *          pipes, and devices on the computer. The bufptr parameter points to
805da6c28aaSamw *          an array of SESSION_INFO_1 structures.
806da6c28aaSamw * 2        In addition to the information indicated for level 1, return the
807da6c28aaSamw *          type of client and how the user established the session. The bufptr
808da6c28aaSamw *          parameter points to an array of SESSION_INFO_2 structures.
809da6c28aaSamw * 10       Return the name of the computer, name of the user, and active and
810da6c28aaSamw *          idle times for the session. The bufptr parameter points to an array
811da6c28aaSamw *          of SESSION_INFO_10 structures.
812da6c28aaSamw * 502      Return the name of the computer; name of the user; open files,
813da6c28aaSamw *          pipes, and devices on the computer; and the name of the transport
814da6c28aaSamw *          the  client is using. The bufptr parameter points to an array of
815da6c28aaSamw *          SESSION_INFO_502 structures.
816da6c28aaSamw *
817da6c28aaSamw * Windows 95/98/Me: The following level is valid.
818da6c28aaSamw * Value    Meaning
819da6c28aaSamw * 50       Return the name of the computer, name of the user, open files on
820da6c28aaSamw *          the computer, and the name of the transport protocol the client is
821da6c28aaSamw *          using. The pbBuffer parameter points to an array of session_info_50
822da6c28aaSamw *          structures.
823da6c28aaSamw *
824da6c28aaSamw * bufptr
825da6c28aaSamw * [out] Pointer to the buffer that receives the data. The format of this
826da6c28aaSamw * data depends on the value of the level parameter.
827da6c28aaSamw * Windows NT/2000/XP: This buffer is allocated by the system and must be
828da6c28aaSamw * freed using the NetApiBufferFree function. Note that you must free the
829da6c28aaSamw * buffer even if the function fails with ERROR_MORE_DATA.
830da6c28aaSamw * Windows 95/98/Me: The caller must allocate and deallocate this buffer.
831da6c28aaSamw *
832da6c28aaSamw * prefmaxlen
833da6c28aaSamw * [in] Specifies the preferred maximum length of returned data, in bytes.
834da6c28aaSamw * If you specify MAX_PREFERRED_LENGTH, the function allocates the amount
835da6c28aaSamw * of memory required for the data. If you specify another value in this
836da6c28aaSamw * parameter, it can restrict the number of bytes that the function returns.
837da6c28aaSamw * If the buffer size is insufficient to hold all entries, the function
838da6c28aaSamw * returns ERROR_MORE_DATA. For more information, see Network Management
839da6c28aaSamw * Function Buffers and Network Management Function Buffer Lengths.
840da6c28aaSamw *
841da6c28aaSamw * entriesread
842da6c28aaSamw * [out] Pointer to a value that receives the count of elements actually
843da6c28aaSamw * enumerated.
844da6c28aaSamw *
845da6c28aaSamw * totalentries
846da6c28aaSamw * [out] Pointer to a value that receives the total number of entries that
847da6c28aaSamw * could have been enumerated from the current resume position.
848da6c28aaSamw *
849da6c28aaSamw * resume_handle
850da6c28aaSamw * [in/out] Pointer to a value that contains a resume handle which is used
851da6c28aaSamw * to continue an existing session search. The handle should be zero on the
852da6c28aaSamw * first call and left unchanged for subsequent calls. If resume_handle is
853da6c28aaSamw * NULL, no resume handle is stored.
854da6c28aaSamw *
855da6c28aaSamw *
856da6c28aaSamw * SESSION_INFO_1
857da6c28aaSamw * ==============
858da6c28aaSamw * The SESSION_INFO_1 structure contains information about the session,
859da6c28aaSamw * including name of the computer; name of the user; and open files, pipes,
860da6c28aaSamw * and devices on the computer.
861da6c28aaSamw *
862da6c28aaSamw * Members
863da6c28aaSamw *
864da6c28aaSamw * sesi1_cname
865da6c28aaSamw * Pointer to a Unicode string specifying the name of the computer that
866da6c28aaSamw * established the session.
867da6c28aaSamw *
868da6c28aaSamw * sesi1_username
869da6c28aaSamw * Pointer to a Unicode string specifying the name of the user who established
870da6c28aaSamw * the session.
871da6c28aaSamw *
872da6c28aaSamw * sesi1_num_opens
873da6c28aaSamw * Specifies a DWORD value that contains the number of files, devices,
874da6c28aaSamw * and pipes opened during the session.
875da6c28aaSamw *
876da6c28aaSamw * sesi1_time
877da6c28aaSamw * Specifies a DWORD value that contains the number of seconds the session
878da6c28aaSamw * has been active.
879da6c28aaSamw *
880da6c28aaSamw * sesi1_idle_time
881da6c28aaSamw * Specifies a DWORD value that contains the number of seconds the session
882da6c28aaSamw * has been idle.
883da6c28aaSamw *
884da6c28aaSamw * sesi1_user_flags
885da6c28aaSamw * Specifies a DWORD value that describes how the user established the
886da6c28aaSamw * session. This member can be one of the following values:
887da6c28aaSamw * SESS_GUEST           The user specified by the sesi1_username member
888da6c28aaSamw *                      established the session using a guest account.
889da6c28aaSamw * SESS_NOENCRYPTION    The user specified by the sesi1_username member
890da6c28aaSamw *                      established the session without using password
891da6c28aaSamw *                      encryption.
892da6c28aaSamw ***********************************************************************
893da6c28aaSamw */
894da6c28aaSamw
895da6c28aaSamw#define SESS_GUEST          0x00000001
896da6c28aaSamw#define SESS_NOENCRYPTION   0x00000002
897da6c28aaSamw
898da6c28aaSamwstruct mslm_SESSION_INFO_0 {
899da6c28aaSamw	LPTSTR sesi0_cname;
900da6c28aaSamw};
901da6c28aaSamwINFONRES_RESULT(mslm_SESSION_INFO, 0)
902da6c28aaSamw
903da6c28aaSamwstruct mslm_SESSION_INFO_1 {
904da6c28aaSamw	LPTSTR sesi1_cname;
905da6c28aaSamw	LPTSTR sesi1_uname;
906da6c28aaSamw	DWORD  sesi1_nopens;
907da6c28aaSamw	DWORD  sesi1_time;
908da6c28aaSamw	DWORD  sesi1_itime;
909da6c28aaSamw	DWORD  sesi1_uflags;
910da6c28aaSamw};
911da6c28aaSamwINFONRES_RESULT(mslm_SESSION_INFO, 1)
912da6c28aaSamw
91329bd2886SAlan Wrightstruct mslm_SESSION_INFO_2 {
91429bd2886SAlan Wright	LPTSTR sesi2_cname;
91529bd2886SAlan Wright	LPTSTR sesi2_uname;
91629bd2886SAlan Wright	DWORD  sesi2_nopens;
91729bd2886SAlan Wright	DWORD  sesi2_time;
91829bd2886SAlan Wright	DWORD  sesi2_itime;
91929bd2886SAlan Wright	DWORD  sesi2_uflags;
92029bd2886SAlan Wright	LPTSTR sesi2_cltype_name;
92129bd2886SAlan Wright};
92229bd2886SAlan WrightINFONRES_RESULT(mslm_SESSION_INFO, 2)
92329bd2886SAlan Wright
92429bd2886SAlan Wrightstruct mslm_SESSION_INFO_10 {
92529bd2886SAlan Wright	LPTSTR sesi10_cname;
92629bd2886SAlan Wright	LPTSTR sesi10_uname;
92729bd2886SAlan Wright	DWORD  sesi10_time;
92829bd2886SAlan Wright	DWORD  sesi10_itime;
92929bd2886SAlan Wright};
93029bd2886SAlan WrightINFONRES_RESULT(mslm_SESSION_INFO, 10)
93129bd2886SAlan Wright
93229bd2886SAlan Wrightstruct mslm_SESSION_INFO_502 {
93329bd2886SAlan Wright	LPTSTR sesi502_cname;
93429bd2886SAlan Wright	LPTSTR sesi502_uname;
93529bd2886SAlan Wright	DWORD  sesi502_nopens;
93629bd2886SAlan Wright	DWORD  sesi502_time;
93729bd2886SAlan Wright	DWORD  sesi502_itime;
93829bd2886SAlan Wright	DWORD  sesi502_uflags;
93929bd2886SAlan Wright	LPTSTR sesi502_cltype_name;
94029bd2886SAlan Wright	LPTSTR sesi502_transport;
94129bd2886SAlan Wright};
94229bd2886SAlan WrightINFONRES_RESULT(mslm_SESSION_INFO, 502)
94329bd2886SAlan Wright
944da6c28aaSamwINFONRES_DEFINITION(mslm_NetSessionEnum,
945da6c28aaSamw	INFONRES_UNION_ENTRY(mslm_SESSION_INFO, 0)
94629bd2886SAlan Wright	INFONRES_UNION_ENTRY(mslm_SESSION_INFO, 1)
94729bd2886SAlan Wright	INFONRES_UNION_ENTRY(mslm_SESSION_INFO, 2)
94829bd2886SAlan Wright	INFONRES_UNION_ENTRY(mslm_SESSION_INFO, 10)
94929bd2886SAlan Wright	INFONRES_UNION_ENTRY(mslm_SESSION_INFO, 502))
950da6c28aaSamw
951da6c28aaSamwOPERATION(SRVSVC_OPNUM_NetSessionEnum)
952da6c28aaSamwstruct mslm_NetSessionEnum {
953da6c28aaSamw	IN		LPTSTR servername;
954da6c28aaSamw	IN		DWORD unc_clientname;
955da6c28aaSamw	IN		DWORD username;
956da6c28aaSamw	INOUT	DWORD level;
957da6c28aaSamw	INOUT	struct mslm_NetSessionEnum_result result;
958da6c28aaSamw	IN		DWORD pref_max_len;
959da6c28aaSamw	OUT		DWORD total_entries;
960da6c28aaSamw	INOUT	DWORD *resume_handle;
961da6c28aaSamw	OUT		DWORD status;
962da6c28aaSamw};
963da6c28aaSamw
964da6c28aaSamw
965da6c28aaSamw/*
966da6c28aaSamw ***********************************************************************
967da6c28aaSamw * NetSessionDel (Platform SDK: Network Management)
968da6c28aaSamw *
969da6c28aaSamw * The NetSessionDel function ends a network session between a server
970da6c28aaSamw * and a workstation.
971da6c28aaSamw *
972da6c28aaSamw * Security Requirements
973da6c28aaSamw * Only members of the Administrators or Account Operators local group
974da6c28aaSamw * can successfully execute the NetSessionDel function.
975da6c28aaSamw *
976da6c28aaSamw * Windows NT/2000/XP: The parameter order is as follows.
977da6c28aaSamw *
978da6c28aaSamw * NET_API_STATUS NetSessionDel(LPWSTR servername,
979da6c28aaSamw *                              LPWSTR UncClientName,
980da6c28aaSamw *                              LPWSTR username);
981da6c28aaSamw *
982da6c28aaSamw * Windows 95/98/Me: The sReserved parameter replaces the username
983da6c28aaSamw * parameter. For more information, see the following Remarks section.
984da6c28aaSamw * The parameter list is as follows.
985da6c28aaSamw *
986da6c28aaSamw * API_FUNCTION NetSessionDel(const char FAR *pszServer,
987da6c28aaSamw *                            const char FAR *pszClientName,
988da6c28aaSamw *                            short  sReserved);
989da6c28aaSamw *
990da6c28aaSamw * Parameters
991da6c28aaSamw *
992da6c28aaSamw * servername
993da6c28aaSamw * [in] Pointer to a string that specifies the DNS or NetBIOS name
9941fcced4cSJordan Brown * of the server.  Servers should not validate this parameter.
9951fcced4cSJordan Brown * This parameter may be NULL and on Windows NT 4.0 and earlier it
9961fcced4cSJordan Brown * should begin with \\.
997da6c28aaSamw *
998da6c28aaSamw * UncClientName
9991fcced4cSJordan Brown * [in] Pointer to a string that specifies the name of the client
10001fcced4cSJordan Brown * to disconnect. If UncClientName is NULL, all sessions associated
10011fcced4cSJordan Brown * with the specified user will be disconnected.
1002da6c28aaSamw *
1003da6c28aaSamw * username
1004da6c28aaSamw * [in] Pointer to a string that specifies the name of the user whose
10051fcced4cSJordan Brown * session is to be terminated. If username is NULL, all sessions
10061fcced4cSJordan Brown * from the specified client will be disconnected.
1007da6c28aaSamw *
1008da6c28aaSamw * Remarks
1009da6c28aaSamw * Windows 95/98/Me: You must specify the session key in the sReserved
1010da6c28aaSamw * parameter when you call NetSessionDel. The session key is returned by
1011da6c28aaSamw * the NetSessionEnum function or the NetSessionGetInfo function in the
1012da6c28aaSamw * sesi50_key member of the session_info_50 structure.
1013da6c28aaSamw ***********************************************************************
1014da6c28aaSamw */
1015da6c28aaSamw
1016da6c28aaSamwOPERATION(SRVSVC_OPNUM_NetSessionDel)
1017da6c28aaSamwstruct mslm_NetSessionDel {
1018da6c28aaSamw	IN	LPTSTR servername;
1019da6c28aaSamw	IN	LPTSTR unc_clientname;
1020da6c28aaSamw	IN	LPTSTR username;
1021da6c28aaSamw	OUT	DWORD status;
1022da6c28aaSamw};
1023da6c28aaSamw
1024da6c28aaSamw
1025da6c28aaSamw/*
1026da6c28aaSamw * SRVSVC NetServerGetInfo (
1027da6c28aaSamw *	IN LPTSTR	servername,
1028da6c28aaSamw *	IN DWORD	level,
1029da6c28aaSamw *	OUT union switch(level) {
1030da6c28aaSamw *		case 100: _SERVER_INFO_100 *	p100;
1031da6c28aaSamw *		case 101: _SERVER_INFO_101 *	p101;
1032da6c28aaSamw *		case 102: _SERVER_INFO_102 *	p102;
1033da6c28aaSamw *	    }		bufptr,
1034da6c28aaSamw *	OUT DWORD	status
1035da6c28aaSamw *      )
1036da6c28aaSamw */
1037da6c28aaSamw
1038da6c28aaSamw/* for svX_platform */
10391fcced4cSJordan Brown#define	SV_PLATFORM_ID_DOS		300
1040da6c28aaSamw#define	SV_PLATFORM_ID_OS2		400
1041da6c28aaSamw#define	SV_PLATFORM_ID_NT		500
10421fcced4cSJordan Brown#define	SV_PLATFORM_ID_OSF		600
10431fcced4cSJordan Brown#define	SV_PLATFORM_ID_VMS		700
1044da6c28aaSamw
1045da6c28aaSamw/* Bit-mapped values for svX_type fields */
1046da6c28aaSamw#define SV_TYPE_WORKSTATION         0x00000001
1047da6c28aaSamw#define SV_TYPE_SERVER              0x00000002
1048da6c28aaSamw#define SV_TYPE_SQLSERVER           0x00000004
1049da6c28aaSamw#define SV_TYPE_DOMAIN_CTRL         0x00000008
1050da6c28aaSamw#define SV_TYPE_DOMAIN_BAKCTRL      0x00000010
1051da6c28aaSamw#define SV_TYPE_TIME_SOURCE         0x00000020
1052da6c28aaSamw#define SV_TYPE_AFP                 0x00000040
1053da6c28aaSamw#define SV_TYPE_NOVELL              0x00000080
1054da6c28aaSamw#define SV_TYPE_DOMAIN_MEMBER       0x00000100
1055da6c28aaSamw#define SV_TYPE_PRINTQ_SERVER       0x00000200
1056da6c28aaSamw#define SV_TYPE_DIALIN_SERVER       0x00000400
1057da6c28aaSamw#define SV_TYPE_XENIX_SERVER        0x00000800
1058da6c28aaSamw#define SV_TYPE_SERVER_UNIX         SV_TYPE_XENIX_SERVER
1059a0aa776eSAlan Wright#define SV_TYPE_NT                  0x00001000	/* NT Workstation */
1060a0aa776eSAlan Wright#define SV_TYPE_WFW                 0x00002000	/* Windows for Workgroups */
1061da6c28aaSamw
1062da6c28aaSamw#define SV_TYPE_SERVER_MFPN         0x00004000
1063a0aa776eSAlan Wright#define SV_TYPE_SERVER_NT           0x00008000	/* NT Server */
1064da6c28aaSamw#define SV_TYPE_POTENTIAL_BROWSER   0x00010000
1065da6c28aaSamw#define SV_TYPE_BACKUP_BROWSER      0x00020000
1066da6c28aaSamw#define SV_TYPE_MASTER_BROWSER      0x00040000
1067da6c28aaSamw#define SV_TYPE_DOMAIN_MASTER       0x00080000
1068da6c28aaSamw#define SV_TYPE_SERVER_OSF          0x00100000
1069da6c28aaSamw#define SV_TYPE_SERVER_VMS          0x00200000
1070da6c28aaSamw#define SV_TYPE_WINDOWS             0x00400000  /* Windows95 and above */
1071a0aa776eSAlan Wright#define SV_TYPE_ALTERNATE_XPORT     0x20000000  /* Return alt transport list */
1072da6c28aaSamw#define SV_TYPE_LOCAL_LIST_ONLY     0x40000000  /* Return local list only */
1073da6c28aaSamw#define SV_TYPE_DOMAIN_ENUM         0x80000000
1074da6c28aaSamw#define SV_TYPE_ALL                 0xFFFFFFFF  /* handy for NetServerEnum2 */
1075da6c28aaSamw
1076*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States#define SV_TYPE_DEFAULT (SV_TYPE_WORKSTATION | SV_TYPE_SERVER | SV_TYPE_NT | \
1077*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States    SV_TYPE_SERVER_NT)
1078da6c28aaSamw
1079da6c28aaSamw/* Special value for sv102_disc that specifies infinite disconnect time */
1080da6c28aaSamw#define SV_NODISC           (-1L)  /* No autodisconnect timeout enforced */
1081da6c28aaSamw
1082da6c28aaSamw/* Values of svX_security field */
1083da6c28aaSamw#define SV_USERSECURITY     1
1084da6c28aaSamw#define SV_SHARESECURITY    0
1085da6c28aaSamw
1086da6c28aaSamw/* Values of svX_hidden field */
1087da6c28aaSamw#define SV_HIDDEN       1
1088da6c28aaSamw#define SV_VISIBLE      0
1089da6c28aaSamw
1090da6c28aaSamw
1091da6c28aaSamwstruct mslm_SERVER_INFO_100 {
1092da6c28aaSamw	DWORD		sv100_platform_id;
1093da6c28aaSamw	LPTSTR		sv100_name;
1094da6c28aaSamw};
1095da6c28aaSamw
1096da6c28aaSamwstruct mslm_SERVER_INFO_101 {
1097da6c28aaSamw	DWORD		sv101_platform_id;
1098da6c28aaSamw	LPTSTR		sv101_name;
1099da6c28aaSamw	DWORD		sv101_version_major;
1100da6c28aaSamw	DWORD		sv101_version_minor;
1101da6c28aaSamw	DWORD		sv101_type;
1102da6c28aaSamw	LPTSTR		sv101_comment;
1103da6c28aaSamw};
1104da6c28aaSamw
1105da6c28aaSamwstruct mslm_SERVER_INFO_102 {
1106da6c28aaSamw	DWORD		sv102_platform_id;
1107da6c28aaSamw	LPTSTR		sv102_name;
1108da6c28aaSamw	DWORD		sv102_version_major;
1109da6c28aaSamw	DWORD		sv102_version_minor;
1110da6c28aaSamw	DWORD		sv102_type;
1111da6c28aaSamw	LPTSTR		sv102_comment;
1112da6c28aaSamw	DWORD		sv102_users;
1113da6c28aaSamw	DWORD		sv102_disc;
1114da6c28aaSamw	DWORD		sv102_hidden;		/* BOOL */
1115da6c28aaSamw	DWORD		sv102_announce;
1116da6c28aaSamw	DWORD		sv102_anndelta;
1117da6c28aaSamw	DWORD		sv102_licenses;
1118da6c28aaSamw	LPTSTR		sv102_userpath;
1119da6c28aaSamw};
1120da6c28aaSamw
112129bd2886SAlan Wrightstruct mslm_SERVER_INFO_502 {
112229bd2886SAlan Wright	DWORD sv502_sessopens;
112329bd2886SAlan Wright	DWORD sv502_sessvcs;
112429bd2886SAlan Wright	DWORD sv502_opensearch;
112529bd2886SAlan Wright	DWORD sv502_sizreqbuf;
112629bd2886SAlan Wright	DWORD sv502_initworkitems;
112729bd2886SAlan Wright	DWORD sv502_maxworkitems;
112829bd2886SAlan Wright	DWORD sv502_rawworkitems;
112929bd2886SAlan Wright	DWORD sv502_irpstacksize;
113029bd2886SAlan Wright	DWORD sv502_maxrawbuflen;
113129bd2886SAlan Wright	DWORD sv502_sessusers;
113229bd2886SAlan Wright	DWORD sv502_sessconns;
113329bd2886SAlan Wright	DWORD sv502_maxpagedmemoryusage;
113429bd2886SAlan Wright	DWORD sv502_maxnonpagedmemoryusage;
113529bd2886SAlan Wright	DWORD sv502_enablesoftcompat;
113629bd2886SAlan Wright	DWORD sv502_enableforcedlogoff;
113729bd2886SAlan Wright	DWORD sv502_timesource;
113829bd2886SAlan Wright	DWORD sv502_acceptdownlevelapis;
113929bd2886SAlan Wright	DWORD sv502_lmannounce;
114029bd2886SAlan Wright};
114129bd2886SAlan Wright
114229bd2886SAlan Wrightstruct mslm_SERVER_INFO_503 {
114329bd2886SAlan Wright	DWORD sv503_sessopens;
114429bd2886SAlan Wright	DWORD sv503_sessvcs;
114529bd2886SAlan Wright	DWORD sv503_opensearch;
114629bd2886SAlan Wright	DWORD sv503_sizreqbuf;
114729bd2886SAlan Wright	DWORD sv503_initworkitems;
114829bd2886SAlan Wright	DWORD sv503_maxworkitems;
114929bd2886SAlan Wright	DWORD sv503_rawworkitems;
115029bd2886SAlan Wright	DWORD sv503_irpstacksize;
115129bd2886SAlan Wright	DWORD sv503_maxrawbuflen;
115229bd2886SAlan Wright	DWORD sv503_sessusers;
115329bd2886SAlan Wright	DWORD sv503_sessconns;
115429bd2886SAlan Wright	DWORD sv503_maxpagedmemoryusage;
115529bd2886SAlan Wright	DWORD sv503_maxnonpagedmemoryusage;
115629bd2886SAlan Wright	DWORD sv503_enablesoftcompat;
115729bd2886SAlan Wright	DWORD sv503_enableforcedlogoff;
115829bd2886SAlan Wright	DWORD sv503_timesource;
115929bd2886SAlan Wright	DWORD sv503_acceptdownlevelapis;
116029bd2886SAlan Wright	DWORD sv503_lmannounce;
116129bd2886SAlan Wright	LPTSTR sv503_domain;
116229bd2886SAlan Wright	DWORD sv503_maxcopyreadlen;
116329bd2886SAlan Wright	DWORD sv503_maxcopywritelen;
116429bd2886SAlan Wright	DWORD sv503_minkeepsearch;
116529bd2886SAlan Wright	DWORD sv503_maxkeepsearch;
116629bd2886SAlan Wright	DWORD sv503_minkeepcomplsearch;
116729bd2886SAlan Wright	DWORD sv503_maxkeepcomplsearch;
116829bd2886SAlan Wright	DWORD sv503_threadcountadd;
116929bd2886SAlan Wright	DWORD sv503_numblockthreads;
117029bd2886SAlan Wright	DWORD sv503_scavtimeout;
117129bd2886SAlan Wright	DWORD sv503_minrcvqueue;
117229bd2886SAlan Wright	DWORD sv503_minfreeworkitems;
117329bd2886SAlan Wright	DWORD sv503_xactmemsize;
117429bd2886SAlan Wright	DWORD sv503_threadpriority;
117529bd2886SAlan Wright	DWORD sv503_maxmpxct;
117629bd2886SAlan Wright	DWORD sv503_oplockbreakwait;
117729bd2886SAlan Wright	DWORD sv503_oplockbreakresponsewait;
117829bd2886SAlan Wright	DWORD sv503_enableoplocks;
117929bd2886SAlan Wright	DWORD sv503_enableoplockforceclose;
118029bd2886SAlan Wright	DWORD sv503_enablefcbopens;
118129bd2886SAlan Wright	DWORD sv503_enableraw;
118229bd2886SAlan Wright	DWORD sv503_enablesharednetdrives;
118329bd2886SAlan Wright	DWORD sv503_minfreeconnections;
118429bd2886SAlan Wright	DWORD sv503_maxfreeconnections;
118529bd2886SAlan Wright};
118629bd2886SAlan Wright
1187da6c28aaSamwunion mslm_NetServerGetInfo_ru {
1188da6c28aaSamw	CASE(100)	struct mslm_SERVER_INFO_100 *bufptr100;
1189da6c28aaSamw	CASE(101)	struct mslm_SERVER_INFO_101 *bufptr101;
1190da6c28aaSamw	CASE(102)	struct mslm_SERVER_INFO_102 *bufptr102;
119129bd2886SAlan Wright	CASE(502)	struct mslm_SERVER_INFO_502 *bufptr502;
119229bd2886SAlan Wright	CASE(503)	struct mslm_SERVER_INFO_503 *bufptr503;
1193da6c28aaSamw	DEFAULT		char *nullptr;
1194da6c28aaSamw};
1195da6c28aaSamw
1196da6c28aaSamwstruct mslm_NetServerGetInfo_result {
1197da6c28aaSamw	DWORD level;
1198da6c28aaSamw  SWITCH(level)
1199da6c28aaSamw	union mslm_NetServerGetInfo_ru bufptr;
1200da6c28aaSamw};
1201da6c28aaSamw
1202da6c28aaSamw
1203da6c28aaSamwOPERATION(SRVSVC_OPNUM_NetServerGetInfo)
1204da6c28aaSamwstruct mslm_NetServerGetInfo {
1205da6c28aaSamw	IN  LPTSTR	servername;
1206da6c28aaSamw	IN  DWORD	level;
1207da6c28aaSamw	OUT struct mslm_NetServerGetInfo_result result;
1208da6c28aaSamw	OUT DWORD	status;
1209da6c28aaSamw};
1210da6c28aaSamw
1211da6c28aaSamw/*
1212da6c28aaSamw * SRVSVC NetRemoteTOD (
1213da6c28aaSamw *	IN LPTSTR	servername,
1214da6c28aaSamw *	OUT _TIME_OF_DAY_INFO *bufptr,
1215da6c28aaSamw *	OUT long	status
1216da6c28aaSamw *      )
1217da6c28aaSamw */
1218da6c28aaSamw
1219da6c28aaSamwstruct mslm_TIME_OF_DAY_INFO {
1220da6c28aaSamw	DWORD		tod_elapsedt;
1221da6c28aaSamw	DWORD		tod_msecs;
1222da6c28aaSamw	DWORD		tod_hours;
1223da6c28aaSamw	DWORD		tod_mins;
1224da6c28aaSamw	DWORD		tod_secs;
1225da6c28aaSamw	DWORD		tod_hunds;
1226da6c28aaSamw	DWORD		tod_timezone;
1227da6c28aaSamw	DWORD		tod_tinterval;
1228da6c28aaSamw	DWORD		tod_day;
1229da6c28aaSamw	DWORD		tod_month;
1230da6c28aaSamw	DWORD		tod_year;
1231da6c28aaSamw	DWORD		tod_weekday;
1232da6c28aaSamw};
1233da6c28aaSamw
1234da6c28aaSamwOPERATION(SRVSVC_OPNUM_NetRemoteTOD)
1235da6c28aaSamwstruct mslm_NetRemoteTOD {
1236da6c28aaSamw	IN  LPTSTR	servername;
1237da6c28aaSamw	OUT struct mslm_TIME_OF_DAY_INFO *bufptr;
1238da6c28aaSamw	OUT DWORD	status;
1239da6c28aaSamw};
1240da6c28aaSamw
1241fe1c642dSBill Krier#define	NAMEFLAG_LM2		0x80000000
1242fe1c642dSBill Krier
12433db3f65cSamw#define	NAMETYPE_USER		1
12443db3f65cSamw#define	NAMETYPE_PASSWORD	2
12453db3f65cSamw#define	NAMETYPE_GROUP		3
12463db3f65cSamw#define	NAMETYPE_COMPUTER	4
12473db3f65cSamw#define	NAMETYPE_EVENT		5
12483db3f65cSamw#define	NAMETYPE_DOMAIN		6
12493db3f65cSamw#define	NAMETYPE_SERVICE	7
12503db3f65cSamw#define	NAMETYPE_NET		8
12513db3f65cSamw#define	NAMETYPE_SHARE		9
12523db3f65cSamw#define	NAMETYPE_MESSAGE	10
12533db3f65cSamw#define	NAMETYPE_MESSAGEDEST	11
12543db3f65cSamw#define	NAMETYPE_SHAREPASSWORD	12
12553db3f65cSamw#define	NAMETYPE_WORKGROUP	13
12563db3f65cSamw
1257da6c28aaSamwOPERATION(SRVSVC_OPNUM_NetNameValidate)
1258da6c28aaSamwstruct mslm_NetNameValidate {
1259da6c28aaSamw 	IN  LPTSTR		servername;
1260da6c28aaSamw 	IN  REFERENCE LPTSTR 	pathname;
1261da6c28aaSamw	IN  DWORD		type;
1262da6c28aaSamw	IN  DWORD		flags;
1263da6c28aaSamw	OUT DWORD		status;
1264da6c28aaSamw};
1265da6c28aaSamw
1266da6c28aaSamw/*
1267da6c28aaSamw * SRVSVC NetShareEnum (
1268da6c28aaSamw *	IN  LPTSTR	servername,
1269da6c28aaSamw *	IN  DWORD	level;
1270da6c28aaSamw *	OUT union switch(level) {
1271da6c28aaSamw *		case 0: struct {
1272da6c28aaSamw *				DWORD entriesread;
1273da6c28aaSamw *			     [size_is(entriesread)]
1274da6c28aaSamw *				_SHARE_INFO_0 *entries;
1275da6c28aaSamw *			} *bufptr0;
1276da6c28aaSamw *		case 1: struct {
1277da6c28aaSamw *				DWORD entriesread;
1278da6c28aaSamw *			     [size_is(entriesread)]
1279da6c28aaSamw *				_SHARE_INFO_1 *entries;
1280da6c28aaSamw *			} *bufptr1;
1281da6c28aaSamw *		...
1282da6c28aaSamw *	    }		bufptr,
1283da6c28aaSamw *	IN  DWORD	prefmaxlen,
1284da6c28aaSamw *	OUT DWORD	totalentries,
1285da6c28aaSamw *	IN OUT DWORD ?*	resume_handle,
1286da6c28aaSamw *	OUT DWORD	status
1287da6c28aaSamw *      )
1288da6c28aaSamw */
1289da6c28aaSamw
1290da6c28aaSamw/*
1291bbf6f00cSJordan Brown * Share types for shiX_type fields - duplicated from smb.h
1292da6c28aaSamw */
1293da6c28aaSamw#ifndef _SHARE_TYPES_DEFINED_
1294da6c28aaSamw#define _SHARE_TYPES_DEFINED_
1295da6c28aaSamw#define STYPE_DISKTREE          0x00000000
1296da6c28aaSamw#define STYPE_PRINTQ            0x00000001
1297da6c28aaSamw#define STYPE_DEVICE            0x00000002
1298da6c28aaSamw#define STYPE_IPC               0x00000003
1299da6c28aaSamw#define STYPE_MASK              0x0000000F
1300da6c28aaSamw#define STYPE_DFS               0x00000064
1301da6c28aaSamw#define STYPE_HIDDEN            0x80000000
1302da6c28aaSamw#define STYPE_SPECIAL           0x80000000
1303da6c28aaSamw#endif /* _SHARE_TYPES_DEFINED_ */
1304da6c28aaSamw
1305da6c28aaSamw/* Maximum uses for shiX_max_uses fields */
1306da6c28aaSamw#define SHI_USES_UNLIMITED      (DWORD)-1
1307da6c28aaSamw
1308eb1d736bSafshin salek ardakani - Sun Microsystems - Irvine United StatesINFONRES_RESULT(mslm_NetShareInfo,0)
1309eb1d736bSafshin salek ardakani - Sun Microsystems - Irvine United StatesINFONRES_RESULT(mslm_NetShareInfo,1)
1310eb1d736bSafshin salek ardakani - Sun Microsystems - Irvine United StatesINFONRES_RESULT(mslm_NetShareInfo,2)
1311eb1d736bSafshin salek ardakani - Sun Microsystems - Irvine United StatesINFONRES_RESULT(mslm_NetShareInfo,501)
1312eb1d736bSafshin salek ardakani - Sun Microsystems - Irvine United StatesINFONRES_RESULT(mslm_NetShareInfo,502)
1313da6c28aaSamw
1314da6c28aaSamwunion mslm_NetShareAddInfo_u {
1315eb1d736bSafshin salek ardakani - Sun Microsystems - Irvine United States	CASE(2)     struct mslm_NetShareInfo_2 *info2;
1316eb1d736bSafshin salek ardakani - Sun Microsystems - Irvine United States	CASE(502)   struct mslm_NetShareInfo_502 *info502;
131729bd2886SAlan Wright	DEFAULT	char *nullptr;
1318da6c28aaSamw};
1319da6c28aaSamw
1320da6c28aaSamwstruct mslm_NetShareAddInfo {
1321da6c28aaSamw	DWORD switch_value;
1322da6c28aaSamw  SWITCH(switch_value)
1323da6c28aaSamw	union mslm_NetShareAddInfo_u un;
1324da6c28aaSamw};
1325da6c28aaSamw
1326da6c28aaSamw
1327da6c28aaSamwOPERATION(SRVSVC_OPNUM_NetShareAdd)
1328da6c28aaSamwstruct mslm_NetShareAdd {
1329da6c28aaSamw	IN	LPTSTR servername;
1330da6c28aaSamw	IN	DWORD level;
1331da6c28aaSamw	IN	struct mslm_NetShareAddInfo info;
1332da6c28aaSamw	INOUT	DWORD *parm_err;
1333da6c28aaSamw	OUT	DWORD status;
1334da6c28aaSamw};
1335da6c28aaSamw
1336da6c28aaSamw
1337da6c28aaSamwINFONRES_DEFINITION(mslm_NetShareEnum,
1338eb1d736bSafshin salek ardakani - Sun Microsystems - Irvine United States	INFONRES_UNION_ENTRY(mslm_NetShareInfo,0)
1339eb1d736bSafshin salek ardakani - Sun Microsystems - Irvine United States	INFONRES_UNION_ENTRY(mslm_NetShareInfo,1)
1340eb1d736bSafshin salek ardakani - Sun Microsystems - Irvine United States	INFONRES_UNION_ENTRY(mslm_NetShareInfo,2)
1341eb1d736bSafshin salek ardakani - Sun Microsystems - Irvine United States	INFONRES_UNION_ENTRY(mslm_NetShareInfo,501)
1342eb1d736bSafshin salek ardakani - Sun Microsystems - Irvine United States	INFONRES_UNION_ENTRY(mslm_NetShareInfo,502))
1343da6c28aaSamw
134419d41fccSamw/*
134519d41fccSamw * NetShareEnum: enumerate all shares (see also NetShareEnumSticky).
134619d41fccSamw * Note: the server should ignore the content of servername.
134719d41fccSamw */
1348da6c28aaSamwOPERATION(SRVSVC_OPNUM_NetShareEnum)
1349da6c28aaSamwstruct mslm_NetShareEnum {
1350da6c28aaSamw	IN  		LPTSTR	servername;
1351da6c28aaSamw	INOUT  		DWORD	level;
135219d41fccSamw	INOUT 		struct mslm_NetShareEnum_result result;
1353da6c28aaSamw	IN  		DWORD	prefmaxlen;
1354da6c28aaSamw	OUT 		DWORD	totalentries;
135519d41fccSamw	INOUT 		DWORD	*resume_handle;
1356da6c28aaSamw	OUT 		DWORD	status;
1357da6c28aaSamw};
1358da6c28aaSamw
1359da6c28aaSamw/*
1360da6c28aaSamw * Delete a share. The reserved field appears in netmon
1361da6c28aaSamw * but I've left it out in case it's not always present.
1362da6c28aaSamw * This won't affect RPC processing.
1363da6c28aaSamw */
1364da6c28aaSamwOPERATION(SRVSVC_OPNUM_NetShareDel)
1365da6c28aaSamwstruct mslm_NetShareDel {
1366da6c28aaSamw	IN	LPTSTR servername;
1367da6c28aaSamw	IN REFERENCE	LPTSTR netname;
1368da6c28aaSamw	/* IN	DWORD reserved; */
1369da6c28aaSamw	OUT	DWORD status;
1370da6c28aaSamw};
1371da6c28aaSamw
137229bd2886SAlan WrightOPERATION(SRVSVC_OPNUM_NetShareCheck)
137329bd2886SAlan Wrightstruct mslm_NetShareCheck {
137429bd2886SAlan Wright	IN	LPTSTR servername;
137529bd2886SAlan Wright	IN REFERENCE	LPTSTR path;
137629bd2886SAlan Wright	OUT	DWORD stype;
137729bd2886SAlan Wright	OUT	DWORD status;
137829bd2886SAlan Wright};
137929bd2886SAlan Wright
1380da6c28aaSamw/*
138119d41fccSamw * NetShareEnumSticky is the same as NetShareEnum except that
138219d41fccSamw * STYPE_SPECIAL (hidden or special) shares are not returned.
138319d41fccSamw * Note: the server should ignore the content of servername.
1384da6c28aaSamw */
1385da6c28aaSamwOPERATION(SRVSVC_OPNUM_NetShareEnumSticky)
1386da6c28aaSamwstruct mslm_NetShareEnumSticky {
1387da6c28aaSamw	IN  		LPTSTR	servername;
1388da6c28aaSamw	INOUT  		DWORD	level;
138919d41fccSamw	INOUT 		struct mslm_NetShareEnum_result result;
1390da6c28aaSamw	IN  		DWORD	prefmaxlen;
1391da6c28aaSamw	OUT 		DWORD	totalentries;
139219d41fccSamw	INOUT 		DWORD	*resume_handle;
1393da6c28aaSamw	OUT 		DWORD	status;
1394da6c28aaSamw};
1395da6c28aaSamw
1396da6c28aaSamw/*
1397da6c28aaSamw * When you install Windows NT Server Tools on a Win95 client,
1398da6c28aaSamw * a security tab will be added to properties dialog box of files/folders.
1399da6c28aaSamw * Within this security tab, when you try to get/set permissions on a
1400da6c28aaSamw * file/folder the next two RPC calls are used.
1401da6c28aaSamw */
1402da6c28aaSamwOPERATION(SRVSVC_OPNUM_NetGetFileSecurity)
1403da6c28aaSamwstruct mslm_NetGetFileSecurity {
1404da6c28aaSamw	IN  		LPTSTR	servername;
1405da6c28aaSamw	IN			LPTSTR	sharename;
1406da6c28aaSamw	IN REFERENCE LPTSTR	filename;
1407da6c28aaSamw	IN			DWORD	securityinfo;
1408da6c28aaSamw
1409da6c28aaSamw	/*
1410da6c28aaSamw	 * Right now, we can't send back SD of the requested object
14118d7e4166Sjose borrego	 * in RPC code, so we just reply with access denied error
1412da6c28aaSamw	 * code. Thus, this output declaration is only valid in this
1413da6c28aaSamw	 * case i.e., it's not complete.
1414da6c28aaSamw	 * It looks like:
1415da6c28aaSamw	 *
1416da6c28aaSamw	 *   A Pointer
1417da6c28aaSamw	 *   A Length
1418da6c28aaSamw	 *
1419da6c28aaSamw	 *   A Pointer
1420da6c28aaSamw	 *   A Length (equal to the prev length)
1421da6c28aaSamw	 *   A buffer
1422da6c28aaSamw	 *
1423da6c28aaSamw	 *   return value
1424da6c28aaSamw	 */
1425da6c28aaSamw	OUT			DWORD	length;
1426da6c28aaSamw	OUT 		DWORD	status;
1427da6c28aaSamw};
1428da6c28aaSamw
1429da6c28aaSamw/*
1430da6c28aaSamw * This is the request:
1431da6c28aaSamw *
1432da6c28aaSamw * R_SRVSVC: RPC Client call srvsvc:NetrpSetFileSecurity(..)
1433da6c28aaSamw *	 R_SRVSVC: SRVSVC_HANDLE ServerName = \\WK76-177
1434da6c28aaSamw *	 R_SRVSVC: LPWSTR ShareName = AFSHIN
1435da6c28aaSamw *	 R_SRVSVC: LPWSTR lpFileName = \salek.txt
1436da6c28aaSamw *	 R_SRVSVC: SECURITY_INFORMATION SecurityInformation = 4 (0x4)
1437da6c28aaSamw *  -R_SRVSVC: PADT_SECURITY_DESCRIPTOR SecurityDescriptor {..}
1438da6c28aaSamw *  R_SRVSVC: DWORD Length = 64 (0x40)
1439da6c28aaSamw *  R_SRVSVC: LPBYTE Buffer = 4496048 (0x449AB0)
1440da6c28aaSamw *  R_SRVSVC: LPBYTE Buffer [..] = 01 00 04 80 00 00 00 00 00 00 00 00 00 00 00
1441da6c28aaSamw *  ...
1442da6c28aaSamw *
1443da6c28aaSamw *  000000A0        00 83 46 00 0B 00 00 00 00 00 00 00 0B 00   ..F...........
1444da6c28aaSamw *  000000B0  00 00 5C 00 5C 00 57 00 4B 00 37 00 36 00 2D 00 ..\.\.W.K.7.6.-.
1445da6c28aaSamw *  000000C0  31 00 37 00 37 00 00 00 08 00 16 83 46 00 07 00 1.7.7.......F...
1446da6c28aaSamw *  000000D0  00 00 00 00 00 00 07 00 00 00 41 00 46 00 53 00 ..........A.F.S.
1447da6c28aaSamw *  000000E0  48 00 49 00 4E 00 00 00 00 00 0B 00 00 00 00 00 H.I.N...........
1448da6c28aaSamw *  000000F0  00 00 0B 00 00 00 5C 00 73 00 61 00 6C 00 65 00 ......\.s.a.l.e.
1449da6c28aaSamw *  00000100  6B 00 2E 00 74 00 78 00 74 00 00 00 00 00 04 00 k...t.x.t.......
1450da6c28aaSamw *  00000110  00 00 40 00 00 00 B0 9A 44 00 40 00 00 00 01 00 ..@.....D.@.....
1451da6c28aaSamw *  00000120  04 80 00 00 00 00 00 00 00 00 00 00 00 00 14 00 ................
1452da6c28aaSamw *  00000130  00 00 02 00 2C 00 01 00 00 00 00 00 24 00 00 00 ....,.......$...
1453da6c28aaSamw *  00000140  00 A0 01 05 00 00 00 00 00 05 15 00 00 00 1A 24 ...............$
1454da6c28aaSamw *  00000150  44 38 90 00 0F 02 65 3A BE 4C FF 03 00 00 00 00 D8....e:.L......
1455da6c28aaSamw *  00000160  00 00 00 00 00 00 00 00 00 00                   ..........
1456da6c28aaSamw */
1457da6c28aaSamwOPERATION(SRVSVC_OPNUM_NetSetFileSecurity)
1458da6c28aaSamwstruct mslm_NetSetFileSecurity {
1459da6c28aaSamw	IN  		LPTSTR	servername;
1460da6c28aaSamw	IN			LPTSTR	sharename;
1461da6c28aaSamw	IN REFERENCE LPTSTR	filename;
1462da6c28aaSamw	IN			DWORD	securityinfo;
1463da6c28aaSamw	/*
1464da6c28aaSamw	 * IN Security Descriptor (looks like):
1465da6c28aaSamw	 * Length1
1466da6c28aaSamw	 * Pointer
1467da6c28aaSamw	 * Length2 (== Length1)
1468da6c28aaSamw	 * buffer itself
1469da6c28aaSamw	 */
1470da6c28aaSamw
1471da6c28aaSamw	OUT 		DWORD	status;
1472da6c28aaSamw};
1473da6c28aaSamw
1474da6c28aaSamw/*
1475da6c28aaSamw * The SRVSVC already
1476da6c28aaSamw */
1477da6c28aaSamwINTERFACE(0)
1478da6c28aaSamwunion srvsvc_interface {
1479da6c28aaSamw    CASE(SRVSVC_OPNUM_NetConnectEnum)
1480da6c28aaSamw	struct mslm_NetConnectEnum	NetConnectEnum;
1481da6c28aaSamw    CASE(SRVSVC_OPNUM_NetFileEnum)
1482da6c28aaSamw	struct mslm_NetFileEnum		NetFileEnum;
1483da6c28aaSamw    CASE(SRVSVC_OPNUM_NetFileClose)
1484da6c28aaSamw	struct mslm_NetFileClose	NetFileClose;
1485da6c28aaSamw    CASE(SRVSVC_OPNUM_NetShareGetInfo)
1486da6c28aaSamw	struct mlsm_NetShareGetInfo	NetShareGetInfo;
1487da6c28aaSamw    CASE(SRVSVC_OPNUM_NetShareSetInfo)
148829bd2886SAlan Wright	struct mlsm_NetShareSetInfo	NetShareSetInfo;
1489da6c28aaSamw    CASE(SRVSVC_OPNUM_NetSessionDel)
1490da6c28aaSamw	struct mslm_NetSessionDel	NetSessionDel;
1491da6c28aaSamw    CASE(SRVSVC_OPNUM_NetSessionEnum)
1492da6c28aaSamw	struct mslm_NetSessionEnum	NetSessionEnum;
1493da6c28aaSamw    CASE(SRVSVC_OPNUM_NetServerGetInfo)
1494da6c28aaSamw	struct mslm_NetServerGetInfo	NetServerGetInfo;
1495da6c28aaSamw    CASE(SRVSVC_OPNUM_NetRemoteTOD)
1496da6c28aaSamw	struct mslm_NetRemoteTOD	NetRemoteTOD;
1497da6c28aaSamw    CASE(SRVSVC_OPNUM_NetNameValidate)
1498da6c28aaSamw	struct mslm_NetNameValidate	NetNameValidate;
1499da6c28aaSamw    CASE(SRVSVC_OPNUM_NetShareAdd)
1500da6c28aaSamw	struct mslm_NetShareAdd		NetShareAdd;
1501da6c28aaSamw    CASE(SRVSVC_OPNUM_NetShareDel)
1502da6c28aaSamw	struct mslm_NetShareDel		NetShareDel;
150329bd2886SAlan Wright    CASE(SRVSVC_OPNUM_NetShareCheck)
150429bd2886SAlan Wright	struct mslm_NetShareCheck	NetShareCheck;
1505da6c28aaSamw    CASE(SRVSVC_OPNUM_NetShareEnum)
1506da6c28aaSamw	struct mslm_NetShareEnum	NetShareEnum;
1507da6c28aaSamw    CASE(SRVSVC_OPNUM_NetShareEnumSticky)
1508da6c28aaSamw	struct mslm_NetShareEnumSticky	NetShareEnumSticky;
1509da6c28aaSamw    CASE(SRVSVC_OPNUM_NetGetFileSecurity)
1510da6c28aaSamw	struct mslm_NetGetFileSecurity	NetGetFileSecurity;
1511da6c28aaSamw    CASE(SRVSVC_OPNUM_NetSetFileSecurity)
1512da6c28aaSamw	struct mslm_NetSetFileSecurity	NetSetFileSecurity;
1513da6c28aaSamw};
1514da6c28aaSamwtypedef union srvsvc_interface	srvsvc_interface_t;
1515da6c28aaSamwEXTERNTYPEINFO(srvsvc_interface)
1516da6c28aaSamw
1517da6c28aaSamw
1518da6c28aaSamw
1519da6c28aaSamw/*
1520faa1795aSjb150015 * WKSSVC - Workstation Service
1521da6c28aaSamw */
1522da6c28aaSamw
1523faa1795aSjb150015/* Windows NT */
1524da6c28aaSamw#define WKSSVC_OPNUM_NetWkstaGetInfo		0x00
1525faa1795aSjb150015#define WKSSVC_OPNUM_NetWkstaSetInfo		0x01
1526faa1795aSjb150015#define WKSSVC_OPNUM_NetWkstaUserEnum		0x02
1527faa1795aSjb150015#define WKSSVC_OPNUM_NetWkstaUserGetInfo	0x03
1528faa1795aSjb150015#define WKSSVC_OPNUM_NetWkstaUserSetInfo	0x04
1529faa1795aSjb150015#define WKSSVC_OPNUM_NetWkstaTransportEnum	0x05
1530faa1795aSjb150015#define WKSSVC_OPNUM_NetWkstaTransportAdd	0x06
1531faa1795aSjb150015#define WKSSVC_OPNUM_NetWkstaTransportDel	0x07
1532faa1795aSjb150015#define WKSSVC_OPNUM_NetUseAdd			0x08
1533faa1795aSjb150015#define WKSSVC_OPNUM_NetUseGetInfo		0x09
1534faa1795aSjb150015#define WKSSVC_OPNUM_NetUseDel			0x0a
1535faa1795aSjb150015#define WKSSVC_OPNUM_NetUseEnum			0x0b
1536faa1795aSjb150015#define WKSSVC_OPNUM_NetMessageBufferSend	0x0c
1537faa1795aSjb150015#define WKSSVC_OPNUM_NetWkstaStatisticsGet	0x0d
1538faa1795aSjb150015#define WKSSVC_OPNUM_NetLogonDomainNameAdd	0x0e
1539da6c28aaSamw
1540faa1795aSjb150015/* Windows 2000 */
1541faa1795aSjb150015#define WKSSVC_OPNUM_NetLogonDomainNameDel	0x0f
1542faa1795aSjb150015#define WKSSVC_OPNUM_NetJoinDomain		0x10
1543faa1795aSjb150015#define WKSSVC_OPNUM_NetUnjoinDomain		0x11
1544faa1795aSjb150015#define WKSSVC_OPNUM_NetValidateName		0x12
1545faa1795aSjb150015#define WKSSVC_OPNUM_NetRenameMachineInDomain	0x13
1546faa1795aSjb150015#define WKSSVC_OPNUM_NetGetJoinInformation	0x14
1547faa1795aSjb150015#define WKSSVC_OPNUM_NetGetJoinableOUs		0x15
1548faa1795aSjb150015#define WKSSVC_OPNUM_NetJoinDomain2		0x16
1549faa1795aSjb150015#define WKSSVC_OPNUM_NetUnjoinDomain2		0x17
1550faa1795aSjb150015#define WKSSVC_OPNUM_NetRenameMachineInDomain2	0x18
1551faa1795aSjb150015#define WKSSVC_OPNUM_NetValidateName2		0x19
1552faa1795aSjb150015#define WKSSVC_OPNUM_NetGetJoinableOUs2		0x1a
1553da6c28aaSamw
1554faa1795aSjb150015/* Windows XP and Windows Server 2003 */
1555faa1795aSjb150015#define WKSSVC_OPNUM_NetAddAlternateComputerName	0x1b
1556faa1795aSjb150015#define WKSSVC_OPNUM_NetRemoveAlternateComputerName	0x1c
1557faa1795aSjb150015#define WKSSVC_OPNUM_NetSetPrimaryComputerName		0x1d
1558faa1795aSjb150015#define WKSSVC_OPNUM_NetEnumerateComputerNames		0x1e
1559faa1795aSjb150015#define WKSSVC_OPNUM_NetWorkstationResetDfsCache	0x1f
1560faa1795aSjb150015
1561da6c28aaSamw
1562da6c28aaSamwstruct mslm_WKSTA_INFO_100 {
1563da6c28aaSamw    DWORD   wki100_platform_id;
1564da6c28aaSamw    LPTSTR  wki100_computername;
1565da6c28aaSamw    LPTSTR  wki100_langroup;
1566da6c28aaSamw    DWORD   wki100_ver_major;
1567da6c28aaSamw    DWORD   wki100_ver_minor;
1568da6c28aaSamw};
1569da6c28aaSamw
1570da6c28aaSamw/* NetWkstaGetInfo only.  System information - user access */
1571da6c28aaSamwstruct mslm_WKSTA_INFO_101 {
1572da6c28aaSamw    DWORD   wki101_platform_id;
1573da6c28aaSamw    LPTSTR  wki101_computername;
1574da6c28aaSamw    LPTSTR  wki101_langroup;
1575da6c28aaSamw    DWORD   wki101_ver_major;
1576da6c28aaSamw    DWORD   wki101_ver_minor;
1577da6c28aaSamw    LPTSTR  wki101_lanroot;
1578da6c28aaSamw};
1579da6c28aaSamw
1580da6c28aaSamw/* NetWkstaGetInfo only.  System information - admin or operator access */
1581da6c28aaSamwstruct mslm_WKSTA_INFO_102 {
1582da6c28aaSamw    DWORD   wki102_platform_id;
1583da6c28aaSamw    LPTSTR  wki102_computername;
1584da6c28aaSamw    LPTSTR  wki102_langroup;
1585da6c28aaSamw    DWORD   wki102_ver_major;
1586da6c28aaSamw    DWORD   wki102_ver_minor;
1587da6c28aaSamw    LPTSTR  wki102_lanroot;
1588da6c28aaSamw    DWORD   wki102_logged_on_users;
1589da6c28aaSamw};
1590da6c28aaSamw
1591faa1795aSjb150015struct mslm_WKSTA_INFO_502 {
1592faa1795aSjb150015	DWORD char_wait;
1593faa1795aSjb150015	DWORD collection_time;
1594faa1795aSjb150015	DWORD maximum_collection_count;
1595faa1795aSjb150015	DWORD keep_connection;
1596faa1795aSjb150015	DWORD max_commands;
1597faa1795aSjb150015	DWORD session_timeout;
1598faa1795aSjb150015	DWORD size_char_buf;
1599faa1795aSjb150015	DWORD max_threads;
1600faa1795aSjb150015	DWORD lock_quota;
1601faa1795aSjb150015	DWORD lock_increment;
1602faa1795aSjb150015	DWORD lock_maximum;
1603faa1795aSjb150015	DWORD pipe_increment;
1604faa1795aSjb150015	DWORD pipe_maximum;
1605faa1795aSjb150015	DWORD cache_file_timeout;
1606faa1795aSjb150015	DWORD dormant_file_limit;
1607faa1795aSjb150015	DWORD read_ahead_throughput;
1608faa1795aSjb150015	DWORD num_mailslot_buffers;
1609faa1795aSjb150015	DWORD num_srv_announce_buffers;
1610faa1795aSjb150015	DWORD max_illegal_dgram_events;
1611faa1795aSjb150015	DWORD dgram_event_reset_freq;
1612faa1795aSjb150015	DWORD log_election_packets;
1613faa1795aSjb150015	DWORD use_opportunistic_locking;
1614faa1795aSjb150015	DWORD use_unlock_behind;
1615faa1795aSjb150015	DWORD use_close_behind;
1616faa1795aSjb150015	DWORD buf_named_pipes;
1617faa1795aSjb150015	DWORD use_lock_read_unlock;
1618faa1795aSjb150015	DWORD utilize_nt_caching;
1619faa1795aSjb150015	DWORD use_raw_read;
1620faa1795aSjb150015	DWORD use_raw_write;
1621faa1795aSjb150015	DWORD use_write_raw_data;
1622faa1795aSjb150015	DWORD use_encryption;
1623faa1795aSjb150015	DWORD buf_files_deny_write;
1624faa1795aSjb150015	DWORD buf_read_only_files;
1625faa1795aSjb150015	DWORD force_core_create_mode;
1626faa1795aSjb150015	DWORD use_512_byte_max_transfer;
1627faa1795aSjb150015};
1628faa1795aSjb150015
1629da6c28aaSamwINFO1RES_DEFINITION(mslm_NetWkstaGetInfo,
1630da6c28aaSamw	INFO1RES_UNION_ENTRY(mslm_WKSTA_INFO,100)
1631da6c28aaSamw	INFO1RES_UNION_ENTRY(mslm_WKSTA_INFO,101)
1632faa1795aSjb150015	INFO1RES_UNION_ENTRY(mslm_WKSTA_INFO,102)
1633faa1795aSjb150015	INFO1RES_UNION_ENTRY(mslm_WKSTA_INFO,502))
1634da6c28aaSamw
1635da6c28aaSamwINFO1RESBUF_DEFINITION(mslm_NetWkstaGetInfo,
1636da6c28aaSamw	INFO1RESBUF_UNION_ENTRY(mslm_WKSTA_INFO,100)
1637da6c28aaSamw	INFO1RESBUF_UNION_ENTRY(mslm_WKSTA_INFO,101)
1638faa1795aSjb150015	INFO1RESBUF_UNION_ENTRY(mslm_WKSTA_INFO,102)
1639faa1795aSjb150015	INFO1RESBUF_UNION_ENTRY(mslm_WKSTA_INFO,502))
1640da6c28aaSamw
1641da6c28aaSamw
1642da6c28aaSamwOPERATION(WKSSVC_OPNUM_NetWkstaGetInfo)
1643da6c28aaSamwstruct mslm_NetWkstaGetInfo {
1644da6c28aaSamw	IN  LPTSTR	servername;
1645da6c28aaSamw	IN  DWORD	level;
1646da6c28aaSamw	OUT struct mslm_NetWkstaGetInfo_result result;
1647da6c28aaSamw	OUT DWORD	status;
1648da6c28aaSamw};
1649da6c28aaSamw
1650da6c28aaSamw/*
1651faa1795aSjb150015 ***********************************************************************
1652faa1795aSjb150015 * NetWkstaTransportEnum
1653faa1795aSjb150015 ***********************************************************************
1654faa1795aSjb150015 */
1655faa1795aSjb150015
1656faa1795aSjb150015struct mslm_NetWkstaTransportInfo0 {
1657faa1795aSjb150015	DWORD quality_of_service;
1658faa1795aSjb150015	DWORD num_vcs;
1659faa1795aSjb150015	LPTSTR transport_name;
1660faa1795aSjb150015	LPTSTR transport_address;
1661faa1795aSjb150015	DWORD wan_ish;
1662faa1795aSjb150015};
1663faa1795aSjb150015
1664faa1795aSjb150015struct mslm_NetWkstaTransportCtr0 {
1665faa1795aSjb150015	DWORD count;
1666faa1795aSjb150015    SIZE_IS(count)
1667faa1795aSjb150015	struct mslm_NetWkstaTransportInfo0 *ti0;
1668faa1795aSjb150015};
1669faa1795aSjb150015
1670faa1795aSjb150015union mslm_NetWkstaTransportInfo_ru {
1671faa1795aSjb150015	CASE(0) struct mslm_NetWkstaTransportCtr0 *info0;
1672faa1795aSjb150015	DEFAULT char *nullptr;
1673faa1795aSjb150015};
1674faa1795aSjb150015
1675faa1795aSjb150015struct mslm_NetWkstaTransportInfo {
1676faa1795aSjb150015	DWORD address;
1677faa1795aSjb150015	DWORD level;
1678faa1795aSjb150015    SWITCH(level)
1679faa1795aSjb150015	union mslm_NetWkstaTransportInfo_ru ru;
1680faa1795aSjb150015};
1681faa1795aSjb150015
1682faa1795aSjb150015OPERATION(WKSSVC_OPNUM_NetWkstaTransportEnum)
1683faa1795aSjb150015struct mslm_NetWkstaTransportEnum {
1684faa1795aSjb150015	IN 	LPTSTR	servername;
1685faa1795aSjb150015	INOUT	struct mslm_NetWkstaTransportInfo info;
1686faa1795aSjb150015	IN	DWORD	pref_max_len;
1687faa1795aSjb150015	OUT 	DWORD	total_entries;
1688faa1795aSjb150015	INOUT	DWORD	*resume_handle;
1689faa1795aSjb150015	OUT	DWORD	status;
1690faa1795aSjb150015};
1691faa1795aSjb150015
1692faa1795aSjb150015/*
1693da6c28aaSamw * The WKSSVC already
1694da6c28aaSamw */
1695da6c28aaSamwINTERFACE(0)
1696da6c28aaSamwunion wkssvc_interface {
1697da6c28aaSamw    CASE(WKSSVC_OPNUM_NetWkstaGetInfo)
1698da6c28aaSamw	struct mslm_NetWkstaGetInfo		NetWkstaGetInfo;
1699faa1795aSjb150015    CASE(WKSSVC_OPNUM_NetWkstaTransportEnum)
1700faa1795aSjb150015	struct mslm_NetWkstaTransportEnum	NetWkstaTransportEnum;
1701da6c28aaSamw};
1702da6c28aaSamwtypedef union wkssvc_interface	wkssvc_interface_t;
1703da6c28aaSamwEXTERNTYPEINFO(wkssvc_interface)
1704da6c28aaSamw
1705da6c28aaSamw
1706da6c28aaSamw#endif /* _MLSVC_LANMAN_NDL_ */
1707