Added SVC_QUERY_DISP_NAME (corresponding to the GetServiceDisplayName API).
[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_NETSHAREENUM     0x0f
33 #define SRV_NET_SRV_GET_INFO 0x15
34 #define SRV_NET_SRV_SET_INFO 0x16
35 #define SRV_NET_REMOTE_TOD   0x1c
36
37 /* SESS_INFO_0 (pointers to level 0 session info strings) */
38 typedef struct ptr_sess_info0
39 {
40         uint32 ptr_name; /* pointer to name. */
41
42 } SESS_INFO_0;
43
44 /* SESS_INFO_0_STR (level 0 session info strings) */
45 typedef struct str_sess_info0
46 {
47         UNISTR2 uni_name; /* unicode string of name */
48
49 } SESS_INFO_0_STR;
50
51 /* oops - this is going to take up a *massive* amount of stack. */
52 /* the UNISTR2s already have 1024 uint16 chars in them... */
53 #define MAX_SESS_ENTRIES 32
54
55 /* SRV_SESS_INFO_0 */
56 typedef struct srv_sess_info_0_info
57 {
58         uint32 num_entries_read;                     /* EntriesRead */
59         uint32 ptr_sess_info;                       /* Buffer */
60         uint32 num_entries_read2;                    /* EntriesRead */
61
62         SESS_INFO_0     info_0    [MAX_SESS_ENTRIES]; /* session entry pointers */
63         SESS_INFO_0_STR info_0_str[MAX_SESS_ENTRIES]; /* session entry strings */
64
65 } SRV_SESS_INFO_0;
66
67 /* SESS_INFO_1 (pointers to level 1 session info strings) */
68 typedef struct ptr_sess_info1
69 {
70         uint32 ptr_name; /* pointer to name. */
71         uint32 ptr_user; /* pointer to user name. */
72
73         uint32 num_opens;
74         uint32 open_time;
75         uint32 idle_time;
76         uint32 user_flags;
77
78 } SESS_INFO_1;
79
80 /* SESS_INFO_1_STR (level 1 session info strings) */
81 typedef struct str_sess_info1
82 {
83         UNISTR2 uni_name; /* unicode string of name */
84         UNISTR2 uni_user; /* unicode string of user */
85
86 } SESS_INFO_1_STR;
87
88 /* SRV_SESS_INFO_1 */
89 typedef struct srv_sess_info_1_info
90 {
91         uint32 num_entries_read;                     /* EntriesRead */
92         uint32 ptr_sess_info;                       /* Buffer */
93         uint32 num_entries_read2;                    /* EntriesRead */
94
95         SESS_INFO_1     info_1    [MAX_SESS_ENTRIES]; /* session entry pointers */
96         SESS_INFO_1_STR info_1_str[MAX_SESS_ENTRIES]; /* session entry strings */
97
98 } SRV_SESS_INFO_1;
99
100 /* SRV_SESS_INFO_CTR */
101 typedef struct srv_sess_info_ctr_info
102 {
103         uint32 switch_value;         /* switch value */
104         uint32 ptr_sess_ctr;       /* pointer to sess info union */
105         union
106     {
107                 SRV_SESS_INFO_0 info0; /* session info level 0 */
108                 SRV_SESS_INFO_1 info1; /* session info level 1 */
109
110     } sess;
111
112 } SRV_SESS_INFO_CTR;
113
114
115 /* SRV_Q_NET_SESS_ENUM */
116 typedef struct q_net_sess_enum_info
117 {
118         uint32 ptr_srv_name;         /* pointer (to server name?) */
119         UNISTR2 uni_srv_name;        /* server name */
120
121         uint32 ptr_qual_name;         /* pointer (to qualifier name) */
122         UNISTR2 uni_qual_name;        /* qualifier name "\\qualifier" */
123
124         uint32 sess_level;          /* session level */
125
126         SRV_SESS_INFO_CTR *ctr;
127
128         uint32 preferred_len;        /* preferred maximum length (0xffff ffff) */
129         ENUM_HND enum_hnd;
130
131 } SRV_Q_NET_SESS_ENUM;
132
133 /* SRV_R_NET_SESS_ENUM */
134 typedef struct r_net_sess_enum_info
135 {
136         uint32 sess_level;          /* share level */
137
138         SRV_SESS_INFO_CTR *ctr;
139
140         uint32 total_entries;                    /* total number of entries */
141         ENUM_HND enum_hnd;
142
143         uint32 status;               /* return status */
144
145 } SRV_R_NET_SESS_ENUM;
146
147 /* CONN_INFO_0 (pointers to level 0 connection info strings) */
148 typedef struct ptr_conn_info0
149 {
150         uint32 id; /* connection id. */
151
152 } CONN_INFO_0;
153
154 /* oops - this is going to take up a *massive* amount of stack. */
155 /* the UNISTR2s already have 1024 uint16 chars in them... */
156 #define MAX_CONN_ENTRIES 32
157
158 /* SRV_CONN_INFO_0 */
159 typedef struct srv_conn_info_0_info
160 {
161         uint32 num_entries_read;                     /* EntriesRead */
162         uint32 ptr_conn_info;                       /* Buffer */
163         uint32 num_entries_read2;                    /* EntriesRead */
164
165         CONN_INFO_0     info_0    [MAX_CONN_ENTRIES]; /* connection entry pointers */
166
167 } SRV_CONN_INFO_0;
168
169 /* CONN_INFO_1 (pointers to level 1 connection info strings) */
170 typedef struct ptr_conn_info1
171 {
172         uint32 id;   /* connection id */
173         uint32 type; /* 0x3 */
174         uint32 num_opens;
175         uint32 num_users;
176         uint32 open_time;
177
178         uint32 ptr_usr_name; /* pointer to user name. */
179         uint32 ptr_net_name; /* pointer to network name (e.g IPC$). */
180
181 } CONN_INFO_1;
182
183 /* CONN_INFO_1_STR (level 1 connection info strings) */
184 typedef struct str_conn_info1
185 {
186         UNISTR2 uni_usr_name; /* unicode string of user */
187         UNISTR2 uni_net_name; /* unicode string of name */
188
189 } CONN_INFO_1_STR;
190
191 /* SRV_CONN_INFO_1 */
192 typedef struct srv_conn_info_1_info
193 {
194         uint32 num_entries_read;                     /* EntriesRead */
195         uint32 ptr_conn_info;                       /* Buffer */
196         uint32 num_entries_read2;                    /* EntriesRead */
197
198         CONN_INFO_1     info_1    [MAX_CONN_ENTRIES]; /* connection entry pointers */
199         CONN_INFO_1_STR info_1_str[MAX_CONN_ENTRIES]; /* connection entry strings */
200
201 } SRV_CONN_INFO_1;
202
203 /* SRV_CONN_INFO_CTR */
204 typedef struct srv_conn_info_ctr_info
205 {
206         uint32 switch_value;         /* switch value */
207         uint32 ptr_conn_ctr;       /* pointer to conn info union */
208         union
209     {
210                 SRV_CONN_INFO_0 info0; /* connection info level 0 */
211                 SRV_CONN_INFO_1 info1; /* connection info level 1 */
212
213     } conn;
214
215 } SRV_CONN_INFO_CTR;
216
217
218 /* SRV_Q_NET_CONN_ENUM */
219 typedef struct q_net_conn_enum_info
220 {
221         uint32 ptr_srv_name;         /* pointer (to server name) */
222         UNISTR2 uni_srv_name;        /* server name "\\server" */
223
224         uint32 ptr_qual_name;         /* pointer (to qualifier name) */
225         UNISTR2 uni_qual_name;        /* qualifier name "\\qualifier" */
226
227         uint32 conn_level;          /* connection level */
228
229         SRV_CONN_INFO_CTR *ctr;
230
231         uint32 preferred_len;        /* preferred maximum length (0xffff ffff) */
232         ENUM_HND enum_hnd;
233
234 } SRV_Q_NET_CONN_ENUM;
235
236 /* SRV_R_NET_CONN_ENUM */
237 typedef struct r_net_conn_enum_info
238 {
239         uint32 conn_level;          /* share level */
240
241         SRV_CONN_INFO_CTR *ctr;
242
243         uint32 total_entries;                    /* total number of entries */
244         ENUM_HND enum_hnd;
245
246         uint32 status;               /* return status */
247
248 } SRV_R_NET_CONN_ENUM;
249
250 /* oops - this is going to take up a *massive* amount of stack. */
251 /* the UNISTR2s already have 1024 uint16 chars in them... */
252 #define MAX_SHARE_ENTRIES 128
253
254 /* SH_INFO_1 (pointers to level 1 share info strings) */
255 typedef struct ptr_share_info1
256 {
257         uint32 ptr_netname; /* pointer to net name. */
258         uint32 type; /* ipc, print, disk ... */
259         uint32 ptr_remark; /* pointer to comment. */
260
261 } SH_INFO_1;
262
263 /* SH_INFO_1_STR (level 1 share info strings) */
264 typedef struct str_share_info1
265 {
266         UNISTR2 uni_netname; /* unicode string of net name */
267         UNISTR2 uni_remark; /* unicode string of comment */
268
269 } SH_INFO_1_STR;
270
271 /* SRV_SHARE_INFO_1 */
272 typedef struct share_info_1_info
273 {
274         uint32 num_entries_read;                     /* EntriesRead */
275         uint32 ptr_share_info;                       /* Buffer */
276         uint32 num_entries_read2;                    /* EntriesRead */
277
278         SH_INFO_1     info_1    [MAX_SHARE_ENTRIES]; /* share entry pointers */
279         SH_INFO_1_STR info_1_str[MAX_SHARE_ENTRIES]; /* share entry strings */
280
281 } SRV_SHARE_INFO_1;
282
283 /* SH_INFO_2 (pointers to level 2 share info strings) */
284 typedef struct ptr_share_info2
285 {
286         uint32 ptr_netname; /* pointer to net name. */
287         uint32 type; /* ipc, print, disk ... */
288         uint32 ptr_remark; /* pointer to comment. */
289         uint32 perms;      /* permissions */
290         uint32 max_uses;   /* maximum uses */
291         uint32 num_uses;   /* current uses */
292         uint32 ptr_path;   /* pointer to path name */
293         uint32 ptr_passwd; /* pointer to password */
294
295 } SH_INFO_2;
296
297 /* SH_INFO_2_STR (level 2 share info strings) */
298 typedef struct str_share_info2
299 {
300         UNISTR2 uni_netname; /* unicode string of net name (e.g NETLOGON) */
301         UNISTR2 uni_remark;  /* unicode string of comment (e.g "Logon server share") */
302         UNISTR2 uni_path;    /* unicode string of local path (e.g c:\winnt\system32\repl\import\scripts) */
303         UNISTR2 uni_passwd;  /* unicode string of password - presumably for share level security (e.g NULL) */
304
305 } SH_INFO_2_STR;
306
307 /* SRV_SHARE_INFO_2 */
308 typedef struct share_info_2_info
309 {
310         uint32 num_entries_read;                     /* EntriesRead */
311         uint32 ptr_share_info;                       /* Buffer */
312         uint32 num_entries_read2;                    /* EntriesRead */
313
314         SH_INFO_2     info_2    [MAX_SHARE_ENTRIES]; /* share entry pointers */
315         SH_INFO_2_STR info_2_str[MAX_SHARE_ENTRIES]; /* share entry strings */
316
317 } SRV_SHARE_INFO_2;
318
319 /* SRV_SHARE_INFO_CTR */
320 typedef struct srv_share_info_1_info
321 {
322         uint32 switch_value;         /* switch value */
323         uint32 ptr_share_ctr;       /* pointer to share info union */
324         union
325     {
326                 SRV_SHARE_INFO_1 info1; /* share info level 1 */
327                 SRV_SHARE_INFO_2 info2; /* share info level 2 */
328
329     } share;
330
331 } SRV_SHARE_INFO_CTR;
332
333 /* SRV_Q_NET_SHARE_ENUM */
334 typedef struct q_net_share_enum_info
335 {
336         uint32 ptr_srv_name;         /* pointer (to server name?) */
337         UNISTR2 uni_srv_name;        /* server name */
338
339         uint32 share_level;          /* share level */
340
341         SRV_SHARE_INFO_CTR *ctr;     /* share info container */
342
343         uint32 preferred_len;        /* preferred maximum length (0xffff ffff) */
344
345         ENUM_HND enum_hnd;
346
347 } SRV_Q_NET_SHARE_ENUM;
348
349
350 /* SRV_R_NET_SHARE_ENUM */
351 typedef struct r_net_share_enum_info
352 {
353         uint32 share_level;          /* share level */
354         SRV_SHARE_INFO_CTR *ctr;     /* share info container */
355
356         uint32 total_entries;                    /* total number of entries */
357         ENUM_HND enum_hnd;
358
359         uint32 status;               /* return status */
360
361 } SRV_R_NET_SHARE_ENUM;
362
363 /* FILE_INFO_3 (level 3 file info strings) */
364 typedef struct file_info3_info
365 {
366         uint32 id;            /* file index */
367         uint32 perms;         /* file permissions. don't know what format */
368         uint32 num_locks;     /* file locks */
369         uint32 ptr_path_name; /* file name */
370         uint32 ptr_user_name; /* file owner */
371
372 } FILE_INFO_3;
373
374 /* FILE_INFO_3_STR (level 3 file info strings) */
375 typedef struct str_file_info3_info
376 {
377         UNISTR2 uni_path_name; /* unicode string of file name */
378         UNISTR2 uni_user_name; /* unicode string of file owner. */
379
380 } FILE_INFO_3_STR;
381
382 /* oops - this is going to take up a *massive* amount of stack. */
383 /* the UNISTR2s already have 1024 uint16 chars in them... */
384 #define MAX_FILE_ENTRIES 32
385
386 /* SRV_FILE_INFO_3 */
387 typedef struct srv_file_info_3
388 {
389         uint32 num_entries_read;                     /* EntriesRead */
390         uint32 ptr_file_info;                        /* Buffer */
391
392         uint32 num_entries_read2;                    /* EntriesRead */
393
394         FILE_INFO_3     info_3    [MAX_FILE_ENTRIES]; /* file entry details */
395         FILE_INFO_3_STR info_3_str[MAX_FILE_ENTRIES]; /* file entry strings */
396
397 } SRV_FILE_INFO_3;
398
399 /* SRV_FILE_INFO_CTR */
400 typedef struct srv_file_info_3_info
401 {
402         uint32 switch_value;         /* switch value */
403         uint32 ptr_file_ctr;       /* pointer to file info union */
404         union
405     {
406                 SRV_FILE_INFO_3 info3; /* file info with 0 entries */
407
408     } file;
409
410 } SRV_FILE_INFO_CTR;
411
412
413 /* SRV_Q_NET_FILE_ENUM */
414 typedef struct q_net_file_enum_info
415 {
416         uint32 ptr_srv_name;         /* pointer (to server name?) */
417         UNISTR2 uni_srv_name;        /* server name */
418
419         uint32 ptr_qual_name;         /* pointer (to qualifier name) */
420         UNISTR2 uni_qual_name;        /* qualifier name "\\qualifier" */
421
422         uint32 file_level;          /* file level */
423
424         SRV_FILE_INFO_CTR *ctr;
425
426         uint32 preferred_len; /* preferred maximum length (0xffff ffff) */
427         ENUM_HND enum_hnd;
428
429 } SRV_Q_NET_FILE_ENUM;
430
431
432 /* SRV_R_NET_FILE_ENUM */
433 typedef struct r_net_file_enum_info
434 {
435         uint32 file_level;          /* file level */
436
437         SRV_FILE_INFO_CTR *ctr;
438
439         uint32 total_entries;                    /* total number of files */
440         ENUM_HND enum_hnd;
441
442         uint32 status;        /* return status */
443
444 } SRV_R_NET_FILE_ENUM;
445
446 /* SRV_INFO_101 */
447 typedef struct srv_info_101_info
448 {
449         uint32 platform_id;     /* 0x500 */
450         uint32 ptr_name;        /* pointer to server name */
451         uint32 ver_major;       /* 0x4 */
452         uint32 ver_minor;       /* 0x2 */
453         uint32 srv_type;        /* browse etc type */
454         uint32 ptr_comment;     /* pointer to server comment */
455
456         UNISTR2 uni_name;       /* server name "server" */
457         UNISTR2 uni_comment;    /* server comment "samba x.x.x blah" */
458
459 } SRV_INFO_101;
460
461 /* SRV_INFO_102  */
462 typedef struct srv_info_102_info
463 {
464         uint32 platform_id;     /* 0x500 */
465         uint32 ptr_name;        /* pointer to server name */
466         uint32 ver_major;       /* 0x4 */
467         uint32 ver_minor;       /* 0x2 */
468         uint32 srv_type;        /* browse etc type */
469         uint32 ptr_comment;     /* pointer to server comment */
470         uint32 users;           /* 0xffff ffff*/
471         uint32 disc;            /* 0xf */
472         uint32 hidden;          /* 0x0 */
473         uint32 announce;        /* 240 */
474         uint32 ann_delta;       /* 3000 */
475         uint32 licenses;        /* 0 */
476         uint32 ptr_usr_path;    /* pointer to user path */
477
478         UNISTR2 uni_name;       /* server name "server" */
479         UNISTR2 uni_comment;    /* server comment "samba x.x.x blah" */
480         UNISTR2 uni_usr_path;   /* "c:\" (eh?) */
481
482 } SRV_INFO_102;
483
484
485 /* SRV_INFO_CTR */
486 typedef struct srv_info_ctr_info
487 {
488         uint32 switch_value;         /* switch value */
489         uint32 ptr_srv_ctr;         /* pointer to server info */
490         union
491     {
492                 SRV_INFO_102 sv102; /* server info level 102 */
493                 SRV_INFO_101 sv101; /* server info level 101 */
494
495     } srv;
496
497 } SRV_INFO_CTR;
498
499 /* SRV_Q_NET_SRV_GET_INFO */
500 typedef struct q_net_srv_get_info
501 {
502         uint32  ptr_srv_name;
503         UNISTR2 uni_srv_name; /* "\\server" */
504         uint32  switch_value;
505
506 } SRV_Q_NET_SRV_GET_INFO;
507
508 /* SRV_R_NET_SRV_GET_INFO */
509 typedef struct r_net_srv_get_info
510 {
511         SRV_INFO_CTR *ctr;
512
513         uint32 status;               /* return status */
514
515 } SRV_R_NET_SRV_GET_INFO;
516
517 /* SRV_Q_NET_SRV_SET_INFO */
518 typedef struct q_net_srv_set_info
519 {
520         uint32  ptr_srv_name;
521         UNISTR2 uni_srv_name; /* "\\server" */
522         uint32  switch_value;
523
524         SRV_INFO_CTR *ctr;
525
526 } SRV_Q_NET_SRV_SET_INFO;
527
528
529 /* SRV_R_NET_SRV_SET_INFO */
530 typedef struct r_net_srv_set_info
531 {
532         uint32 switch_value;         /* switch value */
533
534         uint32 status;               /* return status */
535
536 } SRV_R_NET_SRV_SET_INFO;
537
538 /* SRV_Q_NET_REMOTE_TOD */
539 typedef struct q_net_remote_tod
540 {
541         uint32  ptr_srv_name;
542         UNISTR2 uni_srv_name; /* "\\server" */
543
544 } SRV_Q_NET_REMOTE_TOD;
545
546 /* TIME_OF_DAY_INFO */
547 typedef struct time_of_day_info
548 {
549         uint32  elapsedt;
550         uint32  msecs;
551         uint32  hours;
552         uint32  mins;
553         uint32  secs;
554         uint32  hunds;
555         uint32  zone;
556         uint32  tintervals;
557         uint32  day;
558         uint32  month;
559         uint32  year;
560         uint32  weekday;
561         
562 } TIME_OF_DAY_INFO;
563
564 /* SRV_R_NET_REMOTE_TOD */
565 typedef struct r_net_remote_tod
566 {
567         uint32 ptr_srv_tod;         /* pointer to TOD */
568         TIME_OF_DAY_INFO *tod;
569         
570         uint32 status;               /* return status */
571
572 } SRV_R_NET_REMOTE_TOD;
573
574
575 #endif /* _RPC_SRVSVC_H */
576