Added code from "Nigel Williams" <nigel@veritas.com> (yes, the same famous
[samba.git] / source3 / include / rpc_srvsvc.h
1 /*
2    Unix SMB/Netbios implementation.
3    Version 1.9.
4    SMB parameters and setup
5    Copyright (C) Andrew Tridgell 1992-1997
6    Copyright (C) Luke Kenneth Casson Leighton 1996-1997
7    Copyright (C) Paul Ashton 1997
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
28 /* srvsvc pipe */
29 #define SRV_NETCONNENUM        0x08
30 #define SRV_NETFILEENUM        0x09
31 #define SRV_NETSESSENUM        0x0c
32 #define SRV_NET_SHARE_ADD      0x0e
33 #define SRV_NETSHAREENUM_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_SRV_GET_INFO   0x15
38 #define SRV_NET_SRV_SET_INFO   0x16
39 #define SRV_NET_DISK_ENUM      0x17
40 #define SRV_NET_REMOTE_TOD     0x1c
41 #define SRV_NET_NAME_VALIDATE  0x21
42 #define SRV_NETSHAREENUM       0x24
43
44 #define MAX_SERVER_DISK_ENTRIES 15
45
46 typedef struct disk_info {
47         uint32  unknown;
48         UNISTR3 disk_name;
49 } DISK_INFO;
50
51 typedef struct disk_enum_container {
52         uint32 level;
53         uint32 entries_read;
54         uint32 unknown;
55         uint32 disk_info_ptr;
56         DISK_INFO disk_info[MAX_SERVER_DISK_ENTRIES];
57 } DISK_ENUM_CONTAINER;
58
59 typedef struct net_srv_disk_enum {
60         uint32 ptr_srv_name;         /* pointer (to server name?) */
61         UNISTR2 uni_srv_name;        /* server name */
62
63         DISK_ENUM_CONTAINER disk_enum_ctr;
64
65         uint32 preferred_len;        /* preferred maximum length (0xffff ffff) */
66         uint32 total_entries;        /* total number of entries */
67         ENUM_HND enum_hnd;
68         uint32 status;               /* return status */
69 } SRV_Q_NET_DISK_ENUM, SRV_R_NET_DISK_ENUM;
70
71 typedef struct net_name_validate {
72         uint32 ptr_srv_name;
73         UNISTR2 uni_srv_name;
74         UNISTR2 uni_name; /*name to validate*/
75         uint32 type;
76         uint32 flags;
77         uint32 status;
78 } SRV_Q_NET_NAME_VALIDATE, SRV_R_NET_NAME_VALIDATE;
79
80 /* SESS_INFO_0 (pointers to level 0 session info strings) */
81 typedef struct ptr_sess_info0
82 {
83         uint32 ptr_name; /* pointer to name. */
84
85 } SESS_INFO_0;
86
87 /* SESS_INFO_0_STR (level 0 session info strings) */
88 typedef struct str_sess_info0
89 {
90         UNISTR2 uni_name; /* unicode string of name */
91
92 } SESS_INFO_0_STR;
93
94 /* oops - this is going to take up a *massive* amount of stack. */
95 /* the UNISTR2s already have 1024 uint16 chars in them... */
96 #define MAX_SESS_ENTRIES 32
97
98 /* SRV_SESS_INFO_0 */
99 typedef struct srv_sess_info_0_info
100 {
101         uint32 num_entries_read;                     /* EntriesRead */
102         uint32 ptr_sess_info;                       /* Buffer */
103         uint32 num_entries_read2;                    /* EntriesRead */
104
105         SESS_INFO_0     info_0    [MAX_SESS_ENTRIES]; /* session entry pointers */
106         SESS_INFO_0_STR info_0_str[MAX_SESS_ENTRIES]; /* session entry strings */
107
108 } SRV_SESS_INFO_0;
109
110 /* SESS_INFO_1 (pointers to level 1 session info strings) */
111 typedef struct ptr_sess_info1
112 {
113         uint32 ptr_name; /* pointer to name. */
114         uint32 ptr_user; /* pointer to user name. */
115
116         uint32 num_opens;
117         uint32 open_time;
118         uint32 idle_time;
119         uint32 user_flags;
120
121 } SESS_INFO_1;
122
123 /* SESS_INFO_1_STR (level 1 session info strings) */
124 typedef struct str_sess_info1
125 {
126         UNISTR2 uni_name; /* unicode string of name */
127         UNISTR2 uni_user; /* unicode string of user */
128
129 } SESS_INFO_1_STR;
130
131 /* SRV_SESS_INFO_1 */
132 typedef struct srv_sess_info_1_info
133 {
134         uint32 num_entries_read;                     /* EntriesRead */
135         uint32 ptr_sess_info;                       /* Buffer */
136         uint32 num_entries_read2;                    /* EntriesRead */
137
138         SESS_INFO_1     info_1    [MAX_SESS_ENTRIES]; /* session entry pointers */
139         SESS_INFO_1_STR info_1_str[MAX_SESS_ENTRIES]; /* session entry strings */
140
141 } SRV_SESS_INFO_1;
142
143 /* SRV_SESS_INFO_CTR */
144 typedef struct srv_sess_info_ctr_info
145 {
146         uint32 switch_value;         /* switch value */
147         uint32 ptr_sess_ctr;       /* pointer to sess info union */
148         union
149     {
150                 SRV_SESS_INFO_0 info0; /* session info level 0 */
151                 SRV_SESS_INFO_1 info1; /* session info level 1 */
152
153     } sess;
154
155 } SRV_SESS_INFO_CTR;
156
157
158 /* SRV_Q_NET_SESS_ENUM */
159 typedef struct q_net_sess_enum_info
160 {
161         uint32 ptr_srv_name;         /* pointer (to server name?) */
162         UNISTR2 uni_srv_name;        /* server name */
163
164         uint32 ptr_qual_name;         /* pointer (to qualifier name) */
165         UNISTR2 uni_qual_name;        /* qualifier name "\\qualifier" */
166
167         uint32 sess_level;          /* session level */
168
169         SRV_SESS_INFO_CTR *ctr;
170
171         uint32 preferred_len;        /* preferred maximum length (0xffff ffff) */
172         ENUM_HND enum_hnd;
173
174 } SRV_Q_NET_SESS_ENUM;
175
176 /* SRV_R_NET_SESS_ENUM */
177 typedef struct r_net_sess_enum_info
178 {
179         uint32 sess_level;          /* share level */
180
181         SRV_SESS_INFO_CTR *ctr;
182
183         uint32 total_entries;                    /* total number of entries */
184         ENUM_HND enum_hnd;
185
186         uint32 status;               /* return status */
187
188 } SRV_R_NET_SESS_ENUM;
189
190 /* CONN_INFO_0 (pointers to level 0 connection info strings) */
191 typedef struct ptr_conn_info0
192 {
193         uint32 id; /* connection id. */
194
195 } CONN_INFO_0;
196
197 /* oops - this is going to take up a *massive* amount of stack. */
198 /* the UNISTR2s already have 1024 uint16 chars in them... */
199 #define MAX_CONN_ENTRIES 32
200
201 /* SRV_CONN_INFO_0 */
202 typedef struct srv_conn_info_0_info
203 {
204         uint32 num_entries_read;                     /* EntriesRead */
205         uint32 ptr_conn_info;                       /* Buffer */
206         uint32 num_entries_read2;                    /* EntriesRead */
207
208         CONN_INFO_0     info_0    [MAX_CONN_ENTRIES]; /* connection entry pointers */
209
210 } SRV_CONN_INFO_0;
211
212 /* CONN_INFO_1 (pointers to level 1 connection info strings) */
213 typedef struct ptr_conn_info1
214 {
215         uint32 id;   /* connection id */
216         uint32 type; /* 0x3 */
217         uint32 num_opens;
218         uint32 num_users;
219         uint32 open_time;
220
221         uint32 ptr_usr_name; /* pointer to user name. */
222         uint32 ptr_net_name; /* pointer to network name (e.g IPC$). */
223
224 } CONN_INFO_1;
225
226 /* CONN_INFO_1_STR (level 1 connection info strings) */
227 typedef struct str_conn_info1
228 {
229         UNISTR2 uni_usr_name; /* unicode string of user */
230         UNISTR2 uni_net_name; /* unicode string of name */
231
232 } CONN_INFO_1_STR;
233
234 /* SRV_CONN_INFO_1 */
235 typedef struct srv_conn_info_1_info
236 {
237         uint32 num_entries_read;                     /* EntriesRead */
238         uint32 ptr_conn_info;                       /* Buffer */
239         uint32 num_entries_read2;                    /* EntriesRead */
240
241         CONN_INFO_1     info_1    [MAX_CONN_ENTRIES]; /* connection entry pointers */
242         CONN_INFO_1_STR info_1_str[MAX_CONN_ENTRIES]; /* connection entry strings */
243
244 } SRV_CONN_INFO_1;
245
246 /* SRV_CONN_INFO_CTR */
247 typedef struct srv_conn_info_ctr_info
248 {
249         uint32 switch_value;         /* switch value */
250         uint32 ptr_conn_ctr;       /* pointer to conn info union */
251         union
252     {
253                 SRV_CONN_INFO_0 info0; /* connection info level 0 */
254                 SRV_CONN_INFO_1 info1; /* connection info level 1 */
255
256     } conn;
257
258 } SRV_CONN_INFO_CTR;
259
260
261 /* SRV_Q_NET_CONN_ENUM */
262 typedef struct q_net_conn_enum_info
263 {
264         uint32 ptr_srv_name;         /* pointer (to server name) */
265         UNISTR2 uni_srv_name;        /* server name "\\server" */
266
267         uint32 ptr_qual_name;         /* pointer (to qualifier name) */
268         UNISTR2 uni_qual_name;        /* qualifier name "\\qualifier" */
269
270         uint32 conn_level;          /* connection level */
271
272         SRV_CONN_INFO_CTR *ctr;
273
274         uint32 preferred_len;        /* preferred maximum length (0xffff ffff) */
275         ENUM_HND enum_hnd;
276
277 } SRV_Q_NET_CONN_ENUM;
278
279 /* SRV_R_NET_CONN_ENUM */
280 typedef struct r_net_conn_enum_info
281 {
282         uint32 conn_level;          /* share level */
283
284         SRV_CONN_INFO_CTR *ctr;
285
286         uint32 total_entries;                    /* total number of entries */
287         ENUM_HND enum_hnd;
288
289         uint32 status;               /* return status */
290
291 } SRV_R_NET_CONN_ENUM;
292
293 /* SH_INFO_1 (pointers to level 1 share info strings) */
294 typedef struct ptr_share_info1
295 {
296         uint32 ptr_netname; /* pointer to net name. */
297         uint32 type; /* ipc, print, disk ... */
298         uint32 ptr_remark; /* pointer to comment. */
299
300 } SH_INFO_1;
301
302 /* SH_INFO_1_STR (level 1 share info strings) */
303 typedef struct str_share_info1
304 {
305         UNISTR2 uni_netname; /* unicode string of net name */
306         UNISTR2 uni_remark; /* unicode string of comment */
307
308 } SH_INFO_1_STR;
309
310 /* SRV_SHARE_INFO_1 */
311 typedef struct share_info_1_info
312 {
313         SH_INFO_1 info_1;
314         SH_INFO_1_STR info_1_str;
315
316 } SRV_SHARE_INFO_1;
317
318 /* SH_INFO_2 (pointers to level 2 share info strings) */
319 typedef struct ptr_share_info2
320 {
321         uint32 ptr_netname; /* pointer to net name. */
322         uint32 type; /* ipc, print, disk ... */
323         uint32 ptr_remark; /* pointer to comment. */
324         uint32 perms;      /* permissions */
325         uint32 max_uses;   /* maximum uses */
326         uint32 num_uses;   /* current uses */
327         uint32 ptr_path;   /* pointer to path name */
328         uint32 ptr_passwd; /* pointer to password */
329
330 } SH_INFO_2;
331
332 /* SH_INFO_2_STR (level 2 share info strings) */
333 typedef struct str_share_info2
334 {
335         UNISTR2 uni_netname; /* unicode string of net name (e.g NETLOGON) */
336         UNISTR2 uni_remark;  /* unicode string of comment (e.g "Logon server share") */
337         UNISTR2 uni_path;    /* unicode string of local path (e.g c:\winnt\system32\repl\import\scripts) */
338         UNISTR2 uni_passwd;  /* unicode string of password - presumably for share level security (e.g NULL) */
339
340 } SH_INFO_2_STR;
341
342 /* SRV_SHARE_INFO_2 */
343 typedef struct share_info_2_info
344 {
345         SH_INFO_2 info_2;
346         SH_INFO_2_STR info_2_str;
347
348 } SRV_SHARE_INFO_2;
349
350 /* SH_INFO_502 (pointers to level 502 share info strings) */
351 typedef struct ptr_share_info502
352 {
353         uint32 ptr_netname; /* pointer to net name. */
354         uint32 type; /* ipc, print, disk ... */
355         uint32 ptr_remark; /* pointer to comment. */
356         uint32 perms;      /* permissions */
357         uint32 max_uses;   /* maximum uses */
358         uint32 num_uses;   /* current uses */
359         uint32 ptr_path;   /* pointer to path name */
360         uint32 ptr_passwd; /* pointer to password */
361         uint32 sd_size;    /* size of security descriptor */
362         uint32 ptr_sd;     /* pointer to security descriptor */
363
364 } SH_INFO_502;
365
366 /* SH_INFO_502_STR (level 502 share info strings) */
367 typedef struct str_share_info502
368 {
369         SH_INFO_502 *ptrs;
370
371         UNISTR2 uni_netname; /* unicode string of net name (e.g NETLOGON) */
372         UNISTR2 uni_remark;  /* unicode string of comment (e.g "Logon server share") */
373         UNISTR2 uni_path;    /* unicode string of local path (e.g c:\winnt\system32\repl\import\scripts) */
374         UNISTR2 uni_passwd;  /* unicode string of password - presumably for share level security (e.g NULL) */
375
376         uint32 sd_size;
377         SEC_DESC *sd;
378
379 } SH_INFO_502_STR;
380
381 /* SRV_SHARE_INFO_502 */
382 typedef struct share_info_502_info
383 {
384         SH_INFO_502 info_502;
385         SH_INFO_502_STR info_502_str;
386
387 } SRV_SHARE_INFO_502;
388
389 /* SRV_SHARE_INFO_1005 */
390 typedef struct share_info_1005_info
391 {
392   uint32 dfs_root_flag; 
393 } SRV_SHARE_INFO_1005;
394
395 /* SRV_SHARE_INFO_1501 */
396 typedef struct share_info_1501_info
397 {
398         SEC_DESC_BUF *sdb;
399 } SRV_SHARE_INFO_1501;
400
401 /* SRV_SHARE_INFO_CTR */
402 typedef struct srv_share_info_ctr_info
403 {
404         uint32 info_level;
405         uint32 switch_value;
406         uint32 ptr_share_info;
407
408         uint32 num_entries;
409         uint32 ptr_entries;
410         uint32 num_entries2;
411
412         union {
413                 SRV_SHARE_INFO_1 *info1; /* share info level 1 */
414                 SRV_SHARE_INFO_2 *info2; /* share info level 2 */
415                 SRV_SHARE_INFO_502 *info502; /* share info level 502 */
416                 void *info;
417
418         } share;
419
420 } SRV_SHARE_INFO_CTR;
421
422 /* SRV_Q_NET_SHARE_ENUM */
423 typedef struct q_net_share_enum_info
424 {
425         uint32 ptr_srv_name;         /* pointer (to server name?) */
426         UNISTR2 uni_srv_name;        /* server name */
427
428         SRV_SHARE_INFO_CTR ctr;     /* share info container */
429
430         uint32 preferred_len;        /* preferred maximum length (0xffff ffff) */
431
432         ENUM_HND enum_hnd;
433
434 } SRV_Q_NET_SHARE_ENUM;
435
436
437 /* SRV_R_NET_SHARE_ENUM */
438 typedef struct r_net_share_enum_info
439 {
440         SRV_SHARE_INFO_CTR ctr;     /* share info container */
441
442         uint32 total_entries;                    /* total number of entries */
443         ENUM_HND enum_hnd;
444
445         uint32 status;               /* return status */
446
447 } SRV_R_NET_SHARE_ENUM;
448
449
450 /* SRV_Q_NET_SHARE_GET_INFO */
451 typedef struct q_net_share_get_info_info
452 {
453         uint32 ptr_srv_name;
454         UNISTR2 uni_srv_name;
455
456         UNISTR2 uni_share_name;
457         uint32 info_level;
458
459 } SRV_Q_NET_SHARE_GET_INFO;
460
461 /* JRA. NB. We also need level 1004 and 1006 here. */
462
463 /* SRV_SHARE_INFO */
464 typedef struct srv_share_info {
465         uint32 switch_value;
466         uint32 ptr_share_ctr;
467
468         union {
469                 SRV_SHARE_INFO_1 info1;
470                 SRV_SHARE_INFO_2 info2;
471                 SRV_SHARE_INFO_502 info502;
472         SRV_SHARE_INFO_1005 info1005;
473         SRV_SHARE_INFO_1501 info1501;
474         } share;
475 } SRV_SHARE_INFO;
476
477 /* SRV_R_NET_SHARE_GET_INFO */
478 typedef struct r_net_share_get_info_info
479 {
480         SRV_SHARE_INFO info;
481         uint32 status;
482
483 } SRV_R_NET_SHARE_GET_INFO;
484
485 /* SRV_Q_NET_SHARE_SET_INFO */
486 typedef struct q_net_share_set_info_info
487 {
488         uint32 ptr_srv_name;
489         UNISTR2 uni_srv_name;
490
491         UNISTR2 uni_share_name;
492         uint32 info_level;
493
494         SRV_SHARE_INFO info;
495
496 } SRV_Q_NET_SHARE_SET_INFO;
497
498 /* SRV_R_NET_SHARE_SET_INFO */
499 typedef struct r_net_share_set_info
500 {
501         uint32 switch_value;         /* switch value */
502
503         uint32 status;               /* return status */
504
505 } SRV_R_NET_SHARE_SET_INFO;
506
507 /* SRV_Q_NET_SHARE_ADD */
508 typedef struct q_net_share_add
509 {
510         uint32 ptr_srv_name;
511         UNISTR2 uni_srv_name;
512
513         uint32 info_level;
514
515         SRV_SHARE_INFO info;
516
517 } SRV_Q_NET_SHARE_ADD;
518
519 /* SRV_R_NET_SHARE_ADD */
520 typedef struct r_net_share_add
521 {
522         uint32 switch_value;         /* switch value */
523
524         uint32 status;               /* return status */
525
526 } SRV_R_NET_SHARE_ADD;
527
528 /* SRV_Q_NET_SHARE_DEL */
529 typedef struct q_net_share_del
530 {
531         uint32 ptr_srv_name;
532         UNISTR2 uni_srv_name;
533         UNISTR2 uni_share_name;
534
535 } SRV_Q_NET_SHARE_DEL;
536
537 /* SRV_R_NET_SHARE_DEL */
538 typedef struct r_net_share_del
539 {
540         uint32 status;               /* return status */
541
542 } SRV_R_NET_SHARE_DEL;
543
544 /* FILE_INFO_3 (level 3 file info strings) */
545 typedef struct file_info3_info
546 {
547         uint32 id;            /* file index */
548         uint32 perms;         /* file permissions. don't know what format */
549         uint32 num_locks;     /* file locks */
550         uint32 ptr_path_name; /* file name */
551         uint32 ptr_user_name; /* file owner */
552
553 } FILE_INFO_3;
554
555 /* FILE_INFO_3_STR (level 3 file info strings) */
556 typedef struct str_file_info3_info
557 {
558         UNISTR2 uni_path_name; /* unicode string of file name */
559         UNISTR2 uni_user_name; /* unicode string of file owner. */
560
561 } FILE_INFO_3_STR;
562
563 /* oops - this is going to take up a *massive* amount of stack. */
564 /* the UNISTR2s already have 1024 uint16 chars in them... */
565 #define MAX_FILE_ENTRIES 32
566
567 /* SRV_FILE_INFO_3 */
568 typedef struct srv_file_info_3
569 {
570         uint32 num_entries_read;                     /* EntriesRead */
571         uint32 ptr_file_info;                        /* Buffer */
572
573         uint32 num_entries_read2;                    /* EntriesRead */
574
575         FILE_INFO_3     info_3    [MAX_FILE_ENTRIES]; /* file entry details */
576         FILE_INFO_3_STR info_3_str[MAX_FILE_ENTRIES]; /* file entry strings */
577
578 } SRV_FILE_INFO_3;
579
580 /* SRV_FILE_INFO_CTR */
581 typedef struct srv_file_info_3_info
582 {
583         uint32 switch_value;         /* switch value */
584         uint32 ptr_file_ctr;       /* pointer to file info union */
585         union
586     {
587                 SRV_FILE_INFO_3 info3; /* file info with 0 entries */
588
589     } file;
590
591 } SRV_FILE_INFO_CTR;
592
593
594 /* SRV_Q_NET_FILE_ENUM */
595 typedef struct q_net_file_enum_info
596 {
597         uint32 ptr_srv_name;         /* pointer (to server name?) */
598         UNISTR2 uni_srv_name;        /* server name */
599
600         uint32 ptr_qual_name;         /* pointer (to qualifier name) */
601         UNISTR2 uni_qual_name;        /* qualifier name "\\qualifier" */
602
603         uint32 file_level;          /* file level */
604
605         SRV_FILE_INFO_CTR *ctr;
606
607         uint32 preferred_len; /* preferred maximum length (0xffff ffff) */
608         ENUM_HND enum_hnd;
609
610 } SRV_Q_NET_FILE_ENUM;
611
612
613 /* SRV_R_NET_FILE_ENUM */
614 typedef struct r_net_file_enum_info
615 {
616         uint32 file_level;          /* file level */
617
618         SRV_FILE_INFO_CTR *ctr;
619
620         uint32 total_entries;                    /* total number of files */
621         ENUM_HND enum_hnd;
622
623         uint32 status;        /* return status */
624
625 } SRV_R_NET_FILE_ENUM;
626
627 /* SRV_INFO_100 */
628 typedef struct srv_info_100_info
629 {
630         uint32 platform_id;     /* 0x500 */
631         uint32 ptr_name;        /* pointer to server name */
632
633         UNISTR2 uni_name;       /* server name "server" */
634
635 } SRV_INFO_100;
636
637 /* SRV_INFO_101 */
638 typedef struct srv_info_101_info
639 {
640         uint32 platform_id;     /* 0x500 */
641         uint32 ptr_name;        /* pointer to server name */
642         uint32 ver_major;       /* 0x4 */
643         uint32 ver_minor;       /* 0x2 */
644         uint32 srv_type;        /* browse etc type */
645         uint32 ptr_comment;     /* pointer to server comment */
646
647         UNISTR2 uni_name;       /* server name "server" */
648         UNISTR2 uni_comment;    /* server comment "samba x.x.x blah" */
649
650 } SRV_INFO_101;
651
652 /* SRV_INFO_102  */
653 typedef struct srv_info_102_info
654 {
655         uint32 platform_id;     /* 0x500 */
656         uint32 ptr_name;        /* pointer to server name */
657         uint32 ver_major;       /* 0x4 */
658         uint32 ver_minor;       /* 0x2 */
659         uint32 srv_type;        /* browse etc type */
660         uint32 ptr_comment;     /* pointer to server comment */
661         uint32 users;           /* 0xffff ffff*/
662         uint32 disc;            /* 0xf */
663         uint32 hidden;          /* 0x0 */
664         uint32 announce;        /* 240 */
665         uint32 ann_delta;       /* 3000 */
666         uint32 licenses;        /* 0 */
667         uint32 ptr_usr_path;    /* pointer to user path */
668
669         UNISTR2 uni_name;       /* server name "server" */
670         UNISTR2 uni_comment;    /* server comment "samba x.x.x blah" */
671         UNISTR2 uni_usr_path;   /* "c:\" (eh?) */
672
673 } SRV_INFO_102;
674
675
676 /* SRV_INFO_CTR */
677 typedef struct srv_info_ctr_info
678 {
679         uint32 switch_value;         /* switch value */
680         uint32 ptr_srv_ctr;         /* pointer to server info */
681         union
682     {
683                 SRV_INFO_102 sv102; /* server info level 102 */
684                 SRV_INFO_101 sv101; /* server info level 101 */
685                 SRV_INFO_100 sv100; /* server info level 100 */
686
687     } srv;
688
689 } SRV_INFO_CTR;
690
691 /* SRV_Q_NET_SRV_GET_INFO */
692 typedef struct q_net_srv_get_info
693 {
694         uint32  ptr_srv_name;
695         UNISTR2 uni_srv_name; /* "\\server" */
696         uint32  switch_value;
697
698 } SRV_Q_NET_SRV_GET_INFO;
699
700 /* SRV_R_NET_SRV_GET_INFO */
701 typedef struct r_net_srv_get_info
702 {
703         SRV_INFO_CTR *ctr;
704
705         uint32 status;               /* return status */
706
707 } SRV_R_NET_SRV_GET_INFO;
708
709 /* SRV_Q_NET_SRV_SET_INFO */
710 typedef struct q_net_srv_set_info
711 {
712         uint32  ptr_srv_name;
713         UNISTR2 uni_srv_name; /* "\\server" */
714         uint32  switch_value;
715
716         SRV_INFO_CTR *ctr;
717
718 } SRV_Q_NET_SRV_SET_INFO;
719
720
721 /* SRV_R_NET_SRV_SET_INFO */
722 typedef struct r_net_srv_set_info
723 {
724         uint32 switch_value;         /* switch value */
725
726         uint32 status;               /* return status */
727
728 } SRV_R_NET_SRV_SET_INFO;
729
730 /* SRV_Q_NET_REMOTE_TOD */
731 typedef struct q_net_remote_tod
732 {
733         uint32  ptr_srv_name;
734         UNISTR2 uni_srv_name; /* "\\server" */
735
736 } SRV_Q_NET_REMOTE_TOD;
737
738 /* TIME_OF_DAY_INFO */
739 typedef struct time_of_day_info
740 {
741         uint32  elapsedt;
742         uint32  msecs;
743         uint32  hours;
744         uint32  mins;
745         uint32  secs;
746         uint32  hunds;
747         uint32  zone;
748         uint32  tintervals;
749         uint32  day;
750         uint32  month;
751         uint32  year;
752         uint32  weekday;
753         
754 } TIME_OF_DAY_INFO;
755
756 /* SRV_R_NET_REMOTE_TOD */
757 typedef struct r_net_remote_tod
758 {
759         uint32 ptr_srv_tod;         /* pointer to TOD */
760         TIME_OF_DAY_INFO *tod;
761         
762         uint32 status;               /* return status */
763
764 } SRV_R_NET_REMOTE_TOD;
765
766
767 #endif /* _RPC_SRVSVC_H */