2 Unix SMB/Netbios implementation.
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
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.
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.
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.
24 #ifndef _RPC_SRVSVC_H /* _RPC_SRVSVC_H */
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
37 /* SESS_INFO_0 (pointers to level 0 session info strings) */
38 typedef struct ptr_sess_info0
40 uint32 ptr_name; /* pointer to name. */
44 /* SESS_INFO_0_STR (level 0 session info strings) */
45 typedef struct str_sess_info0
47 UNISTR2 uni_name; /* unicode string of name */
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
56 typedef struct srv_sess_info_0_info
58 uint32 num_entries_read; /* EntriesRead */
59 uint32 ptr_sess_info; /* Buffer */
60 uint32 num_entries_read2; /* EntriesRead */
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 */
67 /* SESS_INFO_1 (pointers to level 1 session info strings) */
68 typedef struct ptr_sess_info1
70 uint32 ptr_name; /* pointer to name. */
71 uint32 ptr_user; /* pointer to user name. */
80 /* SESS_INFO_1_STR (level 1 session info strings) */
81 typedef struct str_sess_info1
83 UNISTR2 uni_name; /* unicode string of name */
84 UNISTR2 uni_user; /* unicode string of user */
89 typedef struct srv_sess_info_1_info
91 uint32 num_entries_read; /* EntriesRead */
92 uint32 ptr_sess_info; /* Buffer */
93 uint32 num_entries_read2; /* EntriesRead */
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 */
100 /* SRV_SESS_INFO_CTR */
101 typedef struct srv_sess_info_ctr_info
103 uint32 switch_value; /* switch value */
104 uint32 ptr_sess_ctr; /* pointer to sess info union */
107 SRV_SESS_INFO_0 info0; /* session info level 0 */
108 SRV_SESS_INFO_1 info1; /* session info level 1 */
115 /* SRV_Q_NET_SESS_ENUM */
116 typedef struct q_net_sess_enum_info
118 uint32 ptr_srv_name; /* pointer (to server name?) */
119 UNISTR2 uni_srv_name; /* server name */
121 uint32 ptr_qual_name; /* pointer (to qualifier name) */
122 UNISTR2 uni_qual_name; /* qualifier name "\\qualifier" */
124 uint32 sess_level; /* session level */
126 SRV_SESS_INFO_CTR *ctr;
128 uint32 preferred_len; /* preferred maximum length (0xffff ffff) */
131 } SRV_Q_NET_SESS_ENUM;
133 /* SRV_R_NET_SESS_ENUM */
134 typedef struct r_net_sess_enum_info
136 uint32 sess_level; /* share level */
138 SRV_SESS_INFO_CTR *ctr;
140 uint32 total_entries; /* total number of entries */
143 uint32 status; /* return status */
145 } SRV_R_NET_SESS_ENUM;
147 /* CONN_INFO_0 (pointers to level 0 connection info strings) */
148 typedef struct ptr_conn_info0
150 uint32 id; /* connection id. */
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
158 /* SRV_CONN_INFO_0 */
159 typedef struct srv_conn_info_0_info
161 uint32 num_entries_read; /* EntriesRead */
162 uint32 ptr_conn_info; /* Buffer */
163 uint32 num_entries_read2; /* EntriesRead */
165 CONN_INFO_0 info_0 [MAX_CONN_ENTRIES]; /* connection entry pointers */
169 /* CONN_INFO_1 (pointers to level 1 connection info strings) */
170 typedef struct ptr_conn_info1
172 uint32 id; /* connection id */
173 uint32 type; /* 0x3 */
178 uint32 ptr_usr_name; /* pointer to user name. */
179 uint32 ptr_net_name; /* pointer to network name (e.g IPC$). */
183 /* CONN_INFO_1_STR (level 1 connection info strings) */
184 typedef struct str_conn_info1
186 UNISTR2 uni_usr_name; /* unicode string of user */
187 UNISTR2 uni_net_name; /* unicode string of name */
191 /* SRV_CONN_INFO_1 */
192 typedef struct srv_conn_info_1_info
194 uint32 num_entries_read; /* EntriesRead */
195 uint32 ptr_conn_info; /* Buffer */
196 uint32 num_entries_read2; /* EntriesRead */
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 */
203 /* SRV_CONN_INFO_CTR */
204 typedef struct srv_conn_info_ctr_info
206 uint32 switch_value; /* switch value */
207 uint32 ptr_conn_ctr; /* pointer to conn info union */
210 SRV_CONN_INFO_0 info0; /* connection info level 0 */
211 SRV_CONN_INFO_1 info1; /* connection info level 1 */
218 /* SRV_Q_NET_CONN_ENUM */
219 typedef struct q_net_conn_enum_info
221 uint32 ptr_srv_name; /* pointer (to server name) */
222 UNISTR2 uni_srv_name; /* server name "\\server" */
224 uint32 ptr_qual_name; /* pointer (to qualifier name) */
225 UNISTR2 uni_qual_name; /* qualifier name "\\qualifier" */
227 uint32 conn_level; /* connection level */
229 SRV_CONN_INFO_CTR *ctr;
231 uint32 preferred_len; /* preferred maximum length (0xffff ffff) */
234 } SRV_Q_NET_CONN_ENUM;
236 /* SRV_R_NET_CONN_ENUM */
237 typedef struct r_net_conn_enum_info
239 uint32 conn_level; /* share level */
241 SRV_CONN_INFO_CTR *ctr;
243 uint32 total_entries; /* total number of entries */
246 uint32 status; /* return status */
248 } SRV_R_NET_CONN_ENUM;
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
254 /* SH_INFO_1 (pointers to level 1 share info strings) */
255 typedef struct ptr_share_info1
257 uint32 ptr_netname; /* pointer to net name. */
258 uint32 type; /* ipc, print, disk ... */
259 uint32 ptr_remark; /* pointer to comment. */
263 /* SH_INFO_1_STR (level 1 share info strings) */
264 typedef struct str_share_info1
266 UNISTR2 uni_netname; /* unicode string of net name */
267 UNISTR2 uni_remark; /* unicode string of comment */
271 /* SRV_SHARE_INFO_1 */
272 typedef struct share_info_1_info
274 uint32 num_entries_read; /* EntriesRead */
275 uint32 ptr_share_info; /* Buffer */
276 uint32 num_entries_read2; /* EntriesRead */
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 */
283 /* SH_INFO_2 (pointers to level 2 share info strings) */
284 typedef struct ptr_share_info2
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 */
297 /* SH_INFO_2_STR (level 2 share info strings) */
298 typedef struct str_share_info2
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) */
307 /* SRV_SHARE_INFO_2 */
308 typedef struct share_info_2_info
310 uint32 num_entries_read; /* EntriesRead */
311 uint32 ptr_share_info; /* Buffer */
312 uint32 num_entries_read2; /* EntriesRead */
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 */
319 /* SRV_SHARE_INFO_CTR */
320 typedef struct srv_share_info_1_info
322 uint32 switch_value; /* switch value */
323 uint32 ptr_share_ctr; /* pointer to share info union */
326 SRV_SHARE_INFO_1 info1; /* share info level 1 */
327 SRV_SHARE_INFO_2 info2; /* share info level 2 */
331 } SRV_SHARE_INFO_CTR;
333 /* SRV_Q_NET_SHARE_ENUM */
334 typedef struct q_net_share_enum_info
336 uint32 ptr_srv_name; /* pointer (to server name?) */
337 UNISTR2 uni_srv_name; /* server name */
339 uint32 share_level; /* share level */
341 SRV_SHARE_INFO_CTR *ctr; /* share info container */
343 uint32 preferred_len; /* preferred maximum length (0xffff ffff) */
347 } SRV_Q_NET_SHARE_ENUM;
350 /* SRV_R_NET_SHARE_ENUM */
351 typedef struct r_net_share_enum_info
353 uint32 share_level; /* share level */
354 SRV_SHARE_INFO_CTR *ctr; /* share info container */
356 uint32 total_entries; /* total number of entries */
359 uint32 status; /* return status */
361 } SRV_R_NET_SHARE_ENUM;
363 /* FILE_INFO_3 (level 3 file info strings) */
364 typedef struct file_info3_info
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 */
374 /* FILE_INFO_3_STR (level 3 file info strings) */
375 typedef struct str_file_info3_info
377 UNISTR2 uni_path_name; /* unicode string of file name */
378 UNISTR2 uni_user_name; /* unicode string of file owner. */
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
386 /* SRV_FILE_INFO_3 */
387 typedef struct srv_file_info_3
389 uint32 num_entries_read; /* EntriesRead */
390 uint32 ptr_file_info; /* Buffer */
392 uint32 num_entries_read2; /* EntriesRead */
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 */
399 /* SRV_FILE_INFO_CTR */
400 typedef struct srv_file_info_3_info
402 uint32 switch_value; /* switch value */
403 uint32 ptr_file_ctr; /* pointer to file info union */
406 SRV_FILE_INFO_3 info3; /* file info with 0 entries */
413 /* SRV_Q_NET_FILE_ENUM */
414 typedef struct q_net_file_enum_info
416 uint32 ptr_srv_name; /* pointer (to server name?) */
417 UNISTR2 uni_srv_name; /* server name */
419 uint32 ptr_qual_name; /* pointer (to qualifier name) */
420 UNISTR2 uni_qual_name; /* qualifier name "\\qualifier" */
422 uint32 file_level; /* file level */
424 SRV_FILE_INFO_CTR *ctr;
426 uint32 preferred_len; /* preferred maximum length (0xffff ffff) */
429 } SRV_Q_NET_FILE_ENUM;
432 /* SRV_R_NET_FILE_ENUM */
433 typedef struct r_net_file_enum_info
435 uint32 file_level; /* file level */
437 SRV_FILE_INFO_CTR *ctr;
439 uint32 total_entries; /* total number of files */
442 uint32 status; /* return status */
444 } SRV_R_NET_FILE_ENUM;
447 typedef struct srv_info_101_info
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 */
456 UNISTR2 uni_name; /* server name "server" */
457 UNISTR2 uni_comment; /* server comment "samba x.x.x blah" */
462 typedef struct srv_info_102_info
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 */
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?) */
486 typedef struct srv_info_ctr_info
488 uint32 switch_value; /* switch value */
489 uint32 ptr_srv_ctr; /* pointer to server info */
492 SRV_INFO_102 sv102; /* server info level 102 */
493 SRV_INFO_101 sv101; /* server info level 101 */
499 /* SRV_Q_NET_SRV_GET_INFO */
500 typedef struct q_net_srv_get_info
503 UNISTR2 uni_srv_name; /* "\\server" */
506 } SRV_Q_NET_SRV_GET_INFO;
508 /* SRV_R_NET_SRV_GET_INFO */
509 typedef struct r_net_srv_get_info
513 uint32 status; /* return status */
515 } SRV_R_NET_SRV_GET_INFO;
517 /* SRV_Q_NET_SRV_SET_INFO */
518 typedef struct q_net_srv_set_info
521 UNISTR2 uni_srv_name; /* "\\server" */
526 } SRV_Q_NET_SRV_SET_INFO;
529 /* SRV_R_NET_SRV_SET_INFO */
530 typedef struct r_net_srv_set_info
532 uint32 switch_value; /* switch value */
534 uint32 status; /* return status */
536 } SRV_R_NET_SRV_SET_INFO;
538 /* SRV_Q_NET_REMOTE_TOD */
539 typedef struct q_net_remote_tod
542 UNISTR2 uni_srv_name; /* "\\server" */
544 } SRV_Q_NET_REMOTE_TOD;
546 /* TIME_OF_DAY_INFO */
547 typedef struct time_of_day_info
564 /* SRV_R_NET_REMOTE_TOD */
565 typedef struct r_net_remote_tod
567 uint32 ptr_srv_tod; /* pointer to TOD */
568 TIME_OF_DAY_INFO *tod;
570 uint32 status; /* return status */
572 } SRV_R_NET_REMOTE_TOD;
575 #endif /* _RPC_SRVSVC_H */