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