1/*
2   Unix SMB/CIFS implementation.
3   SMB parameters and setup
4   Copyright (C) Andrew Tridgell 1992-1997
5   Copyright (C) Luke Kenneth Casson Leighton 1996-1997
6   Copyright (C) Paul Ashton 1997
7   Copyright (C) Nigel Williams 2001
8
9   This program is free software; you can redistribute it and/or modify
10   it under the terms of the GNU General Public License as published by
11   the Free Software Foundation; either version 2 of the License, or
12   (at your option) any later version.
13
14   This program is distributed in the hope that it will be useful,
15   but WITHOUT ANY WARRANTY; without even the implied warranty of
16   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17   GNU General Public License for more details.
18
19   You should have received a copy of the GNU General Public License
20   along with this program; if not, write to the Free Software
21   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22*/
23
24#ifndef _RPC_SRVSVC_H /* _RPC_SRVSVC_H */
25#define _RPC_SRVSVC_H
26
27/* srvsvc pipe */
28#define SRV_NET_CONN_ENUM          0x08
29#define SRV_NET_FILE_ENUM          0x09
30#define SRV_NET_FILE_CLOSE         0x0b
31#define SRV_NET_SESS_ENUM          0x0c
32#define SRV_NET_SHARE_ADD          0x0e
33#define SRV_NET_SHARE_ENUM_ALL     0x0f
34#define SRV_NET_SHARE_GET_INFO     0x10
35#define SRV_NET_SHARE_SET_INFO     0x11
36#define SRV_NET_SHARE_DEL          0x12
37#define SRV_NET_SHARE_DEL_STICKY   0x13
38#define SRV_NET_SRV_GET_INFO       0x15
39#define SRV_NET_SRV_SET_INFO       0x16
40#define SRV_NET_DISK_ENUM          0x17
41#define SRV_NET_REMOTE_TOD         0x1c
42#define SRV_NET_NAME_VALIDATE      0x21
43#define SRV_NET_SHARE_ENUM         0x24
44#define SRV_NET_FILE_QUERY_SECDESC 0x27
45#define SRV_NET_FILE_SET_SECDESC   0x28
46
47#define MAX_SERVER_DISK_ENTRIES 15
48
49typedef struct disk_info {
50	uint32  unknown;
51	UNISTR3 disk_name;
52} DISK_INFO;
53
54typedef struct disk_enum_container {
55	uint32 level;
56	uint32 entries_read;
57	uint32 unknown;
58	uint32 disk_info_ptr;
59	DISK_INFO *disk_info;
60} DISK_ENUM_CONTAINER;
61
62typedef struct net_srv_disk_enum {
63	uint32 ptr_srv_name;         /* pointer (to server name?) */
64	UNISTR2 uni_srv_name;        /* server name */
65
66	DISK_ENUM_CONTAINER disk_enum_ctr;
67
68	uint32 preferred_len;        /* preferred maximum length (0xffff ffff) */
69	uint32 total_entries;        /* total number of entries */
70	ENUM_HND enum_hnd;
71	WERROR status;               /* return status */
72} SRV_Q_NET_DISK_ENUM, SRV_R_NET_DISK_ENUM;
73
74typedef struct net_name_validate {
75	uint32 ptr_srv_name;
76	UNISTR2 uni_srv_name;
77	UNISTR2 uni_name; /*name to validate*/
78	uint32 type;
79	uint32 flags;
80	WERROR status;
81} SRV_Q_NET_NAME_VALIDATE, SRV_R_NET_NAME_VALIDATE;
82
83/* SESS_INFO_0 (pointers to level 0 session info strings) */
84typedef struct ptr_sess_info0
85{
86	uint32 ptr_name; /* pointer to name. */
87
88} SESS_INFO_0;
89
90/* SESS_INFO_0_STR (level 0 session info strings) */
91typedef struct str_sess_info0
92{
93	UNISTR2 uni_name; /* unicode string of name */
94
95} SESS_INFO_0_STR;
96
97/* oops - this is going to take up a *massive* amount of stack. */
98/* the UNISTR2s already have 1024 uint16 chars in them... */
99#define MAX_SESS_ENTRIES 32
100
101/* SRV_SESS_INFO_0 */
102typedef struct srv_sess_info_0_info
103{
104	uint32 num_entries_read;                     /* EntriesRead */
105	uint32 ptr_sess_info;                       /* Buffer */
106	uint32 num_entries_read2;                    /* EntriesRead */
107
108	SESS_INFO_0     info_0    [MAX_SESS_ENTRIES]; /* session entry pointers */
109	SESS_INFO_0_STR info_0_str[MAX_SESS_ENTRIES]; /* session entry strings */
110
111} SRV_SESS_INFO_0;
112
113/* SESS_INFO_1 (pointers to level 1 session info strings) */
114typedef struct ptr_sess_info1
115{
116	uint32 ptr_name; /* pointer to name. */
117	uint32 ptr_user; /* pointer to user name. */
118
119	uint32 num_opens;
120	uint32 open_time;
121	uint32 idle_time;
122	uint32 user_flags;
123
124} SESS_INFO_1;
125
126/* SESS_INFO_1_STR (level 1 session info strings) */
127typedef struct str_sess_info1
128{
129	UNISTR2 uni_name; /* unicode string of name */
130	UNISTR2 uni_user; /* unicode string of user */
131
132} SESS_INFO_1_STR;
133
134/* SRV_SESS_INFO_1 */
135typedef struct srv_sess_info_1_info
136{
137	uint32 num_entries_read;                     /* EntriesRead */
138	uint32 ptr_sess_info;                       /* Buffer */
139	uint32 num_entries_read2;                    /* EntriesRead */
140
141	SESS_INFO_1     info_1    [MAX_SESS_ENTRIES]; /* session entry pointers */
142	SESS_INFO_1_STR info_1_str[MAX_SESS_ENTRIES]; /* session entry strings */
143
144} SRV_SESS_INFO_1;
145
146/* SRV_SESS_INFO_CTR */
147typedef struct srv_sess_info_ctr_info
148{
149	uint32 switch_value;         /* switch value */
150	uint32 ptr_sess_ctr;       /* pointer to sess info union */
151	union
152    {
153		SRV_SESS_INFO_0 info0; /* session info level 0 */
154		SRV_SESS_INFO_1 info1; /* session info level 1 */
155
156    } sess;
157
158} SRV_SESS_INFO_CTR;
159
160
161/* SRV_Q_NET_SESS_ENUM */
162typedef struct q_net_sess_enum_info
163{
164	uint32 ptr_srv_name;         /* pointer (to server name?) */
165	UNISTR2 uni_srv_name;        /* server name */
166
167	uint32 ptr_qual_name;         /* pointer (to qualifier name) */
168	UNISTR2 uni_qual_name;        /* qualifier name "\\qualifier" */
169
170	uint32 ptr_user_name;         /* pointer (to user name */
171	UNISTR2 uni_user_name;        /* user name */
172
173	uint32 sess_level;          /* session level */
174
175	SRV_SESS_INFO_CTR *ctr;
176
177	uint32 preferred_len;        /* preferred maximum length (0xffff ffff) */
178	ENUM_HND enum_hnd;
179
180} SRV_Q_NET_SESS_ENUM;
181
182/* SRV_R_NET_SESS_ENUM */
183typedef struct r_net_sess_enum_info
184{
185	uint32 sess_level;          /* share level */
186
187	SRV_SESS_INFO_CTR *ctr;
188
189	uint32 total_entries;                    /* total number of entries */
190	ENUM_HND enum_hnd;
191
192	WERROR status;               /* return status */
193
194} SRV_R_NET_SESS_ENUM;
195
196/* CONN_INFO_0 (pointers to level 0 connection info strings) */
197typedef struct ptr_conn_info0
198{
199	uint32 id; /* connection id. */
200
201} CONN_INFO_0;
202
203/* oops - this is going to take up a *massive* amount of stack. */
204/* the UNISTR2s already have 1024 uint16 chars in them... */
205#define MAX_CONN_ENTRIES 32
206
207/* SRV_CONN_INFO_0 */
208typedef struct srv_conn_info_0_info
209{
210	uint32 num_entries_read;                     /* EntriesRead */
211	uint32 ptr_conn_info;                       /* Buffer */
212	uint32 num_entries_read2;                    /* EntriesRead */
213
214	CONN_INFO_0     info_0    [MAX_CONN_ENTRIES]; /* connection entry pointers */
215
216} SRV_CONN_INFO_0;
217
218/* CONN_INFO_1 (pointers to level 1 connection info strings) */
219typedef struct ptr_conn_info1
220{
221	uint32 id;   /* connection id */
222	uint32 type; /* 0x3 */
223	uint32 num_opens;
224	uint32 num_users;
225	uint32 open_time;
226
227	uint32 ptr_usr_name; /* pointer to user name. */
228	uint32 ptr_net_name; /* pointer to network name (e.g IPC$). */
229
230} CONN_INFO_1;
231
232/* CONN_INFO_1_STR (level 1 connection info strings) */
233typedef struct str_conn_info1
234{
235	UNISTR2 uni_usr_name; /* unicode string of user */
236	UNISTR2 uni_net_name; /* unicode string of name */
237
238} CONN_INFO_1_STR;
239
240/* SRV_CONN_INFO_1 */
241typedef struct srv_conn_info_1_info
242{
243	uint32 num_entries_read;                     /* EntriesRead */
244	uint32 ptr_conn_info;                       /* Buffer */
245	uint32 num_entries_read2;                    /* EntriesRead */
246
247	CONN_INFO_1     info_1    [MAX_CONN_ENTRIES]; /* connection entry pointers */
248	CONN_INFO_1_STR info_1_str[MAX_CONN_ENTRIES]; /* connection entry strings */
249
250} SRV_CONN_INFO_1;
251
252/* SRV_CONN_INFO_CTR */
253typedef struct srv_conn_info_ctr_info
254{
255	uint32 switch_value;         /* switch value */
256	uint32 ptr_conn_ctr;       /* pointer to conn info union */
257	union
258    {
259		SRV_CONN_INFO_0 info0; /* connection info level 0 */
260		SRV_CONN_INFO_1 info1; /* connection info level 1 */
261
262    } conn;
263
264} SRV_CONN_INFO_CTR;
265
266
267/* SRV_Q_NET_CONN_ENUM */
268typedef struct q_net_conn_enum_info
269{
270	uint32 ptr_srv_name;         /* pointer (to server name) */
271	UNISTR2 uni_srv_name;        /* server name "\\server" */
272
273	uint32 ptr_qual_name;         /* pointer (to qualifier name) */
274	UNISTR2 uni_qual_name;        /* qualifier name "\\qualifier" */
275
276	uint32 conn_level;          /* connection level */
277
278	SRV_CONN_INFO_CTR *ctr;
279
280	uint32 preferred_len;        /* preferred maximum length (0xffff ffff) */
281	ENUM_HND enum_hnd;
282
283} SRV_Q_NET_CONN_ENUM;
284
285/* SRV_R_NET_CONN_ENUM */
286typedef struct r_net_conn_enum_info
287{
288	uint32 conn_level;          /* share level */
289
290	SRV_CONN_INFO_CTR *ctr;
291
292	uint32 total_entries;                    /* total number of entries */
293	ENUM_HND enum_hnd;
294
295	WERROR status;               /* return status */
296
297} SRV_R_NET_CONN_ENUM;
298
299/* SH_INFO_0 */
300typedef struct ptr_share_info0
301{
302	uint32 ptr_netname; /* pointer to net name. */
303} SH_INFO_0;
304
305/* SH_INFO_0_STR (level 0 share info strings) */
306typedef struct str_share_info0
307{
308        SH_INFO_0 *ptrs;
309
310	UNISTR2 uni_netname; /* unicode string of net name */
311
312} SH_INFO_0_STR;
313
314/* SRV_SHARE_INFO_0 */
315typedef struct share_info_0_info
316{
317	SH_INFO_0 info_0;
318	SH_INFO_0_STR info_0_str;
319
320} SRV_SHARE_INFO_0;
321
322/* SH_INFO_1 (pointers to level 1 share info strings) */
323typedef struct ptr_share_info1
324{
325	uint32 ptr_netname; /* pointer to net name. */
326	uint32 type; /* ipc, print, disk ... */
327	uint32 ptr_remark; /* pointer to comment. */
328
329} SH_INFO_1;
330
331/* SH_INFO_1_STR (level 1 share info strings) */
332typedef struct str_share_info1
333{
334        SH_INFO_1 *ptrs;
335
336	UNISTR2 uni_netname; /* unicode string of net name */
337	UNISTR2 uni_remark; /* unicode string of comment */
338
339} SH_INFO_1_STR;
340
341/* SRV_SHARE_INFO_1 */
342typedef struct share_info_1_info
343{
344	SH_INFO_1 info_1;
345	SH_INFO_1_STR info_1_str;
346
347} SRV_SHARE_INFO_1;
348
349/* SH_INFO_2 (pointers to level 2 share info strings) */
350typedef struct ptr_share_info2
351{
352	uint32 ptr_netname; /* pointer to net name. */
353	uint32 type; /* ipc, print, disk ... */
354	uint32 ptr_remark; /* pointer to comment. */
355	uint32 perms;      /* permissions */
356	uint32 max_uses;   /* maximum uses */
357	uint32 num_uses;   /* current uses */
358	uint32 ptr_path;   /* pointer to path name */
359	uint32 ptr_passwd; /* pointer to password */
360
361} SH_INFO_2;
362
363/* SH_INFO_2_STR (level 2 share info strings) */
364typedef struct str_share_info2
365{
366	SH_INFO_2 *ptrs;
367
368	UNISTR2 uni_netname; /* unicode string of net name (e.g NETLOGON) */
369	UNISTR2 uni_remark;  /* unicode string of comment (e.g "Logon server share") */
370	UNISTR2 uni_path;    /* unicode string of local path (e.g c:\winnt\system32\repl\import\scripts) */
371	UNISTR2 uni_passwd;  /* unicode string of password - presumably for share level security (e.g NULL) */
372
373} SH_INFO_2_STR;
374
375/* SRV_SHARE_INFO_2 */
376typedef struct share_info_2_info
377{
378	SH_INFO_2 info_2;
379	SH_INFO_2_STR info_2_str;
380
381} SRV_SHARE_INFO_2;
382
383typedef struct ptr_share_info501
384{
385	uint32 ptr_netname; /* pointer to net name */
386	uint32 type;     /* ipc, print, disk */
387	uint32 ptr_remark;  /* pointer to comment */
388	uint32 csc_policy;  /* client-side offline caching policy << 4 */
389} SH_INFO_501;
390
391typedef struct str_share_info501
392{
393	UNISTR2 uni_netname; /* unicode string of net name */
394	UNISTR2 uni_remark;  /* unicode string of comment */
395} SH_INFO_501_STR;
396
397/* SRV_SHARE_INFO_501 */
398typedef struct share_info_501_info
399{
400	SH_INFO_501 info_501;
401	SH_INFO_501_STR info_501_str;
402} SRV_SHARE_INFO_501;
403
404/* SH_INFO_502 (pointers to level 502 share info strings) */
405typedef struct ptr_share_info502
406{
407	uint32 ptr_netname; /* pointer to net name. */
408	uint32 type; /* ipc, print, disk ... */
409	uint32 ptr_remark; /* pointer to comment. */
410	uint32 perms;      /* permissions */
411	uint32 max_uses;   /* maximum uses */
412	uint32 num_uses;   /* current uses */
413	uint32 ptr_path;   /* pointer to path name */
414	uint32 ptr_passwd; /* pointer to password */
415        uint32 reserved;    /* this holds the space taken by the sd in the rpc packet */
416        uint32 reserved_offset;   /* required for _post operation when marshalling */
417	uint32 sd_size;    /* size of security descriptor */
418	uint32 ptr_sd;     /* pointer to security descriptor */
419
420} SH_INFO_502;
421
422/* SH_INFO_502_STR (level 502 share info strings) */
423typedef struct str_share_info502
424{
425	SH_INFO_502 *ptrs;
426
427	UNISTR2 uni_netname; /* unicode string of net name (e.g NETLOGON) */
428	UNISTR2 uni_remark;  /* unicode string of comment (e.g "Logon server share") */
429	UNISTR2 uni_path;    /* unicode string of local path (e.g c:\winnt\system32\repl\import\scripts) */
430	UNISTR2 uni_passwd;  /* unicode string of password - presumably for share level security (e.g NULL) */
431
432        uint32 reserved;
433	uint32 sd_size;
434	SEC_DESC *sd;
435
436} SH_INFO_502_STR;
437
438/* SRV_SHARE_INFO_502 */
439typedef struct share_info_502_info
440{
441	SH_INFO_502 info_502;
442	SH_INFO_502_STR info_502_str;
443
444} SRV_SHARE_INFO_502;
445
446typedef struct ptr_share_info1004
447{
448	uint32 ptr_remark;
449
450} SH_INFO_1004;
451
452typedef struct str_share_info1004
453{
454	SH_INFO_1004 *ptrs;
455
456	UNISTR2 uni_remark;
457
458} SH_INFO_1004_STR;
459
460typedef struct ptr_info_1004_info
461{
462	SH_INFO_1004     info_1004;
463	SH_INFO_1004_STR info_1004_str;
464} SRV_SHARE_INFO_1004;
465
466#define SHARE_1005_IN_DFS               0x00000001
467#define SHARE_1005_DFS_ROOT             0x00000002
468/* use the CSC policy mask and shift to match up with the smb.conf parm */
469#define SHARE_1005_CSC_POLICY_MASK      0x00000030
470#define SHARE_1005_CSC_POLICY_SHIFT     4
471
472typedef struct share_info_1005_info
473{
474  uint32 share_info_flags;
475} SRV_SHARE_INFO_1005;
476
477typedef struct share_info_1006_info
478{
479	uint32 max_uses;
480} SRV_SHARE_INFO_1006;
481
482typedef struct ptr_share_info1007
483{
484	uint32 flags;
485	uint32 ptr_AlternateDirectoryName;
486
487} SH_INFO_1007;
488
489typedef struct str_share_info1007
490{
491	SH_INFO_1007 *ptrs;
492
493	UNISTR2 uni_AlternateDirectoryName;
494
495} SH_INFO_1007_STR;
496
497typedef struct ptr_info_1007_info
498{
499	SH_INFO_1007     info_1007;
500	SH_INFO_1007_STR info_1007_str;
501} SRV_SHARE_INFO_1007;
502
503/* SRV_SHARE_INFO_1501 */
504typedef struct share_info_1501_info
505{
506	SEC_DESC_BUF *sdb;
507} SRV_SHARE_INFO_1501;
508
509/* SRV_SHARE_INFO_CTR */
510typedef struct srv_share_info_ctr_info
511{
512	uint32 info_level;
513	uint32 switch_value;
514	uint32 ptr_share_info;
515
516	uint32 num_entries;
517	uint32 ptr_entries;
518	uint32 num_entries2;
519
520	union {
521		SRV_SHARE_INFO_0    *info0;
522		SRV_SHARE_INFO_1    *info1;    /* share info level 1 */
523		SRV_SHARE_INFO_2    *info2;    /* share info level 2 */
524		SRV_SHARE_INFO_501  *info501;  /* share info level 501 */
525		SRV_SHARE_INFO_502  *info502;  /* share info level 502 */
526		SRV_SHARE_INFO_1004 *info1004;
527		SRV_SHARE_INFO_1005 *info1005;
528		SRV_SHARE_INFO_1006 *info1006;
529		SRV_SHARE_INFO_1007 *info1007;
530		SRV_SHARE_INFO_1501 *info1501;
531		void *info;
532
533	} share;
534
535} SRV_SHARE_INFO_CTR;
536
537/* SRV_Q_NET_SHARE_ENUM */
538typedef struct q_net_share_enum_info
539{
540	uint32 ptr_srv_name;         /* pointer (to server name?) */
541	UNISTR2 uni_srv_name;        /* server name */
542
543	SRV_SHARE_INFO_CTR ctr;     /* share info container */
544
545	uint32 preferred_len;        /* preferred maximum length (0xffff ffff) */
546
547	ENUM_HND enum_hnd;
548
549} SRV_Q_NET_SHARE_ENUM;
550
551
552/* SRV_R_NET_SHARE_ENUM */
553typedef struct r_net_share_enum_info
554{
555	SRV_SHARE_INFO_CTR ctr;     /* share info container */
556
557	uint32 total_entries;                    /* total number of entries */
558	ENUM_HND enum_hnd;
559
560	WERROR status;               /* return status */
561
562} SRV_R_NET_SHARE_ENUM;
563
564
565/* SRV_Q_NET_SHARE_GET_INFO */
566typedef struct q_net_share_get_info_info
567{
568	uint32 ptr_srv_name;
569	UNISTR2 uni_srv_name;
570
571	UNISTR2 uni_share_name;
572	uint32 info_level;
573
574} SRV_Q_NET_SHARE_GET_INFO;
575
576/* SRV_SHARE_INFO */
577typedef struct srv_share_info {
578	uint32 switch_value;
579	uint32 ptr_share_ctr;
580
581	union {
582		SRV_SHARE_INFO_0    info0;
583		SRV_SHARE_INFO_1 info1;
584		SRV_SHARE_INFO_2 info2;
585		SRV_SHARE_INFO_501 info501;
586		SRV_SHARE_INFO_502 info502;
587		SRV_SHARE_INFO_1004 info1004;
588		SRV_SHARE_INFO_1005 info1005;
589		SRV_SHARE_INFO_1006 info1006;
590		SRV_SHARE_INFO_1007 info1007;
591		SRV_SHARE_INFO_1501 info1501;
592	} share;
593} SRV_SHARE_INFO;
594
595/* SRV_R_NET_SHARE_GET_INFO */
596typedef struct r_net_share_get_info_info
597{
598	SRV_SHARE_INFO info;
599	WERROR status;
600
601} SRV_R_NET_SHARE_GET_INFO;
602
603/* SRV_Q_NET_SHARE_SET_INFO */
604typedef struct q_net_share_set_info_info
605{
606	uint32 ptr_srv_name;
607	UNISTR2 uni_srv_name;
608
609	UNISTR2 uni_share_name;
610	uint32 info_level;
611
612	SRV_SHARE_INFO info;
613
614        uint32 ptr_parm_error;
615        uint32 parm_error;
616
617} SRV_Q_NET_SHARE_SET_INFO;
618
619/* SRV_R_NET_SHARE_SET_INFO */
620typedef struct r_net_share_set_info
621{
622        uint32 ptr_parm_error;
623        uint32 parm_error;
624
625	WERROR status;               /* return status */
626
627} SRV_R_NET_SHARE_SET_INFO;
628
629/* SRV_Q_NET_SHARE_ADD */
630typedef struct q_net_share_add
631{
632	uint32 ptr_srv_name;
633	UNISTR2 uni_srv_name;
634
635	uint32 info_level;
636
637	SRV_SHARE_INFO info;
638
639	uint32 ptr_err_index; /* pointer to error index */
640	uint32 err_index;     /* index in info to field in error */
641
642} SRV_Q_NET_SHARE_ADD;
643
644/* SRV_R_NET_SHARE_ADD */
645typedef struct r_net_share_add
646{
647
648        uint32 ptr_parm_error;
649        uint32 parm_error;
650
651	WERROR status;               /* return status */
652
653} SRV_R_NET_SHARE_ADD;
654
655/* SRV_Q_NET_SHARE_DEL */
656typedef struct q_net_share_del
657{
658	uint32 ptr_srv_name;
659	UNISTR2 uni_srv_name;
660	UNISTR2 uni_share_name;
661	uint32 reserved;
662
663} SRV_Q_NET_SHARE_DEL;
664
665/* SRV_R_NET_SHARE_DEL */
666typedef struct r_net_share_del
667{
668	WERROR status;               /* return status */
669
670} SRV_R_NET_SHARE_DEL;
671
672/* FILE_INFO_3 (level 3 file info strings) */
673typedef struct file_info3_info
674{
675	uint32 id;            /* file index */
676	uint32 perms;         /* file permissions. don't know what format */
677	uint32 num_locks;     /* file locks */
678	uint32 ptr_path_name; /* file name */
679	uint32 ptr_user_name; /* file owner */
680
681} FILE_INFO_3;
682
683/* FILE_INFO_3_STR (level 3 file info strings) */
684typedef struct str_file_info3_info
685{
686	UNISTR2 uni_path_name; /* unicode string of file name */
687	UNISTR2 uni_user_name; /* unicode string of file owner. */
688
689} FILE_INFO_3_STR;
690
691/* SRV_FILE_INFO_3 */
692typedef struct srv_file_info_3
693{
694	uint32 num_entries_read;                     /* EntriesRead */
695	uint32 ptr_file_info;                        /* Buffer */
696
697	uint32 num_entries_read2;                    /* EntriesRead */
698	FILE_INFO_3     info_3;     /* file entry details */
699	FILE_INFO_3_STR info_3_str; /* file entry strings */
700} SRV_FILE_INFO_3;
701
702/* SRV_FILE_INFO_CTR */
703typedef struct srv_file_info_3_info
704{
705	uint32 switch_value;         /* switch value */
706	uint32 ptr_file_info;        /* pointer to file info union */
707
708	uint32 num_entries;
709	uint32 ptr_entries;
710	uint32 num_entries2;
711	union
712	{
713		SRV_FILE_INFO_3 *info3;
714	} file;
715
716} SRV_FILE_INFO_CTR;
717
718
719/* SRV_Q_NET_FILE_ENUM */
720typedef struct q_net_file_enum_info
721{
722	uint32 ptr_srv_name;         /* pointer (to server name?) */
723	UNISTR2 uni_srv_name;        /* server name */
724
725	uint32 ptr_qual_name;         /* pointer (to qualifier name) */
726	UNISTR2 uni_qual_name;        /* qualifier name "\\qualifier" */
727
728	uint32 ptr_user_name;         /* pointer (to user name) */
729	UNISTR2 uni_user_name;        /* user name */
730
731	uint32 file_level;          /* file level */
732
733	SRV_FILE_INFO_CTR ctr;
734
735	uint32 preferred_len; /* preferred maximum length (0xffff ffff) */
736	ENUM_HND enum_hnd;
737
738} SRV_Q_NET_FILE_ENUM;
739
740
741/* SRV_R_NET_FILE_ENUM */
742typedef struct r_net_file_enum_info
743{
744	uint32 file_level;          /* file level */
745
746	SRV_FILE_INFO_CTR ctr;
747
748	uint32 total_entries;                    /* total number of files */
749	ENUM_HND enum_hnd;
750
751	WERROR status;        /* return status */
752
753} SRV_R_NET_FILE_ENUM;
754
755/* SRV_Q_NET_FILE_CLOSE */
756typedef struct q_net_file_close
757{
758	uint32 ptr_srv_name;         /* pointer to server name */
759	UNISTR2 uni_srv_name;        /* server name */
760
761	uint32 file_id;
762} SRV_Q_NET_FILE_CLOSE;
763
764/* SRV_R_NET_FILE_CLOSE */
765typedef struct r_net_file_close
766{
767	WERROR status;               /* return status */
768} SRV_R_NET_FILE_CLOSE;
769
770/* SRV_INFO_100 */
771typedef struct srv_info_100_info
772{
773	uint32 platform_id;     /* 0x500 */
774	uint32 ptr_name;        /* pointer to server name */
775
776	UNISTR2 uni_name;       /* server name "server" */
777
778} SRV_INFO_100;
779
780/* SRV_INFO_101 */
781typedef struct srv_info_101_info
782{
783	uint32 platform_id;     /* 0x500 */
784	uint32 ptr_name;        /* pointer to server name */
785	uint32 ver_major;       /* 0x4 */
786	uint32 ver_minor;       /* 0x2 */
787	uint32 srv_type;        /* browse etc type */
788	uint32 ptr_comment;     /* pointer to server comment */
789
790	UNISTR2 uni_name;       /* server name "server" */
791	UNISTR2 uni_comment;    /* server comment "samba x.x.x blah" */
792
793} SRV_INFO_101;
794
795/* SRV_INFO_102  */
796typedef struct srv_info_102_info
797{
798	uint32 platform_id;     /* 0x500 */
799	uint32 ptr_name;        /* pointer to server name */
800	uint32 ver_major;       /* 0x4 */
801	uint32 ver_minor;       /* 0x2 */
802	uint32 srv_type;        /* browse etc type */
803	uint32 ptr_comment;     /* pointer to server comment */
804	uint32 users;           /* 0xffff ffff*/
805	uint32 disc;            /* 0xf */
806	uint32 hidden;          /* 0x0 */
807	uint32 announce;        /* 240 */
808	uint32 ann_delta;       /* 3000 */
809	uint32 licenses;        /* 0 */
810	uint32 ptr_usr_path;    /* pointer to user path */
811
812	UNISTR2 uni_name;       /* server name "server" */
813	UNISTR2 uni_comment;    /* server comment "samba x.x.x blah" */
814	UNISTR2 uni_usr_path;   /* "c:\" (eh?) */
815
816} SRV_INFO_102;
817
818
819/* SRV_INFO_CTR */
820typedef struct srv_info_ctr_info
821{
822	uint32 switch_value;         /* switch value */
823	uint32 ptr_srv_ctr;         /* pointer to server info */
824	union
825    {
826		SRV_INFO_102 sv102; /* server info level 102 */
827		SRV_INFO_101 sv101; /* server info level 101 */
828		SRV_INFO_100 sv100; /* server info level 100 */
829
830    } srv;
831
832} SRV_INFO_CTR;
833
834/* SRV_Q_NET_SRV_GET_INFO */
835typedef struct q_net_srv_get_info
836{
837	uint32  ptr_srv_name;
838	UNISTR2 uni_srv_name; /* "\\server" */
839	uint32  switch_value;
840
841} SRV_Q_NET_SRV_GET_INFO;
842
843/* SRV_R_NET_SRV_GET_INFO */
844typedef struct r_net_srv_get_info
845{
846	SRV_INFO_CTR *ctr;
847
848	WERROR status;               /* return status */
849
850} SRV_R_NET_SRV_GET_INFO;
851
852/* SRV_Q_NET_SRV_SET_INFO */
853typedef struct q_net_srv_set_info
854{
855	uint32  ptr_srv_name;
856	UNISTR2 uni_srv_name; /* "\\server" */
857	uint32  switch_value;
858
859	SRV_INFO_CTR *ctr;
860
861} SRV_Q_NET_SRV_SET_INFO;
862
863
864/* SRV_R_NET_SRV_SET_INFO */
865typedef struct r_net_srv_set_info
866{
867	uint32 switch_value;         /* switch value */
868
869	WERROR status;               /* return status */
870
871} SRV_R_NET_SRV_SET_INFO;
872
873/* SRV_Q_NET_REMOTE_TOD */
874typedef struct q_net_remote_tod
875{
876	uint32  ptr_srv_name;
877	UNISTR2 uni_srv_name; /* "\\server" */
878
879} SRV_Q_NET_REMOTE_TOD;
880
881/* TIME_OF_DAY_INFO */
882typedef struct time_of_day_info
883{
884	uint32	elapsedt;
885	uint32	msecs;
886	uint32	hours;
887	uint32	mins;
888	uint32	secs;
889	uint32	hunds;
890	uint32	zone;
891	uint32	tintervals;
892	uint32	day;
893	uint32	month;
894	uint32	year;
895	uint32	weekday;
896
897} TIME_OF_DAY_INFO;
898
899/* SRV_R_NET_REMOTE_TOD */
900typedef struct r_net_remote_tod
901{
902	uint32 ptr_srv_tod;         /* pointer to TOD */
903	TIME_OF_DAY_INFO *tod;
904
905	WERROR status;               /* return status */
906
907} SRV_R_NET_REMOTE_TOD;
908
909/* SRV_Q_NET_FILE_QUERY_SECDESC */
910typedef struct q_net_file_query_secdesc
911{
912	uint32  ptr_srv_name;
913	UNISTR2 uni_srv_name;
914	uint32  ptr_qual_name;
915	UNISTR2 uni_qual_name;
916	UNISTR2 uni_file_name;
917	uint32  unknown1;
918	uint32  unknown2;
919	uint32  unknown3;
920} SRV_Q_NET_FILE_QUERY_SECDESC;
921
922/* SRV_R_NET_FILE_QUERY_SECDESC */
923typedef struct r_net_file_query_secdesc
924{
925	uint32 ptr_response;
926	uint32 size_response;
927	uint32 ptr_secdesc;
928	uint32 size_secdesc;
929	SEC_DESC *sec_desc;
930	WERROR status;
931} SRV_R_NET_FILE_QUERY_SECDESC;
932
933/* SRV_Q_NET_FILE_SET_SECDESC */
934typedef struct q_net_file_set_secdesc
935{
936	uint32  ptr_srv_name;
937	UNISTR2 uni_srv_name;
938	uint32  ptr_qual_name;
939	UNISTR2 uni_qual_name;
940	UNISTR2 uni_file_name;
941	uint32  sec_info;
942	uint32  size_set;
943	uint32  ptr_secdesc;
944	uint32  size_secdesc;
945	SEC_DESC *sec_desc;
946} SRV_Q_NET_FILE_SET_SECDESC;
947
948/* SRV_R_NET_FILE_SET_SECDESC */
949typedef struct r_net_file_set_secdesc
950{
951	WERROR status;
952} SRV_R_NET_FILE_SET_SECDESC;
953
954#endif /* _RPC_SRVSVC_H */
955