00001 /* 00002 Unix SMB/CIFS implementation. 00003 SMB parameters and setup 00004 Copyright (C) Andrew Tridgell 1992-1997 00005 Copyright (C) Luke Kenneth Casson Leighton 1996-1997 00006 Copyright (C) Paul Ashton 1997 00007 Copyright (C) Nigel Williams 2001 00008 Copyright (C) Gerald (Jerry) Carter 2006. 00009 00010 00011 This program is free software; you can redistribute it and/or modify 00012 it under the terms of the GNU General Public License as published by 00013 the Free Software Foundation; either version 2 of the License, or 00014 (at your option) any later version. 00015 00016 This program is distributed in the hope that it will be useful, 00017 but WITHOUT ANY WARRANTY; without even the implied warranty of 00018 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00019 GNU General Public License for more details. 00020 00021 You should have received a copy of the GNU General Public License 00022 along with this program; if not, write to the Free Software 00023 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 00024 */ 00025 00026 #ifndef _RPC_SRVSVC_H /* _RPC_SRVSVC_H */ 00027 #define _RPC_SRVSVC_H 00028 00029 /* srvsvc pipe */ 00030 #define SRV_NET_CONN_ENUM 0x08 00031 #define SRV_NET_FILE_ENUM 0x09 00032 #define SRV_NET_FILE_CLOSE 0x0b 00033 #define SRV_NET_SESS_ENUM 0x0c 00034 #define SRV_NET_SESS_DEL 0x0d 00035 #define SRV_NET_SHARE_ADD 0x0e 00036 #define SRV_NET_SHARE_ENUM_ALL 0x0f 00037 #define SRV_NET_SHARE_GET_INFO 0x10 00038 #define SRV_NET_SHARE_SET_INFO 0x11 00039 #define SRV_NET_SHARE_DEL 0x12 00040 #define SRV_NET_SHARE_DEL_STICKY 0x13 00041 #define SRV_NET_SRV_GET_INFO 0x15 00042 #define SRV_NET_SRV_SET_INFO 0x16 00043 #define SRV_NET_DISK_ENUM 0x17 00044 #define SRV_NET_REMOTE_TOD 0x1c 00045 #define SRV_NET_NAME_VALIDATE 0x21 00046 #define SRV_NET_SHARE_ENUM 0x24 00047 #define SRV_NET_FILE_QUERY_SECDESC 0x27 00048 #define SRV_NET_FILE_SET_SECDESC 0x28 00049 00050 #define MAX_SERVER_DISK_ENTRIES 15 00051 00052 typedef struct disk_info { 00053 uint32 unknown; 00054 UNISTR3 disk_name; 00055 } DISK_INFO; 00056 00057 typedef struct disk_enum_container { 00058 uint32 level; 00059 uint32 entries_read; 00060 uint32 unknown; 00061 uint32 disk_info_ptr; 00062 DISK_INFO *disk_info; 00063 } DISK_ENUM_CONTAINER; 00064 00065 typedef struct net_srv_disk_enum { 00066 uint32 ptr_srv_name; /* pointer (to server name?) */ 00067 UNISTR2 uni_srv_name; /* server name */ 00068 00069 DISK_ENUM_CONTAINER disk_enum_ctr; 00070 00071 uint32 preferred_len; /* preferred maximum length (0xffff ffff) */ 00072 uint32 total_entries; /* total number of entries */ 00073 ENUM_HND enum_hnd; 00074 WERROR status; /* return status */ 00075 } SRV_Q_NET_DISK_ENUM, SRV_R_NET_DISK_ENUM; 00076 00077 /***************************/ 00078 00079 typedef struct { 00080 UNISTR2 *servername; 00081 UNISTR2 sharename; 00082 uint32 type; 00083 uint32 flags; 00084 WERROR status; 00085 } SRV_Q_NET_NAME_VALIDATE; 00086 00087 typedef struct { 00088 WERROR status; 00089 } SRV_R_NET_NAME_VALIDATE; 00090 00091 /***************************/ 00092 00093 /* oops - this is going to take up a *massive* amount of stack. */ 00094 /* the UNISTR2s already have 1024 uint16 chars in them... */ 00095 00096 #define MAX_SESS_ENTRIES 32 00097 00098 typedef struct { 00099 UNISTR2 *sharename; 00100 } SESS_INFO_0; 00101 00102 typedef struct { 00103 uint32 num_entries_read; 00104 uint32 ptr_sess_info; 00105 uint32 num_entries_read2; 00106 SESS_INFO_0 info_0[MAX_SESS_ENTRIES]; 00107 } SRV_SESS_INFO_0; 00108 00109 typedef struct { 00110 UNISTR2 *sharename; 00111 UNISTR2 *username; 00112 uint32 num_opens; 00113 uint32 open_time; 00114 uint32 idle_time; 00115 uint32 user_flags; 00116 } SESS_INFO_1; 00117 00118 typedef struct { 00119 uint32 num_entries_read; 00120 uint32 ptr_sess_info; 00121 uint32 num_entries_read2; 00122 SESS_INFO_1 info_1[MAX_SESS_ENTRIES]; 00123 } SRV_SESS_INFO_1; 00124 00125 typedef struct { 00126 uint32 switch_value; 00127 uint32 ptr_sess_ctr; 00128 union { 00129 SRV_SESS_INFO_0 info0; 00130 SRV_SESS_INFO_1 info1; 00131 } sess; 00132 00133 } SRV_SESS_INFO_CTR; 00134 00135 typedef struct { 00136 UNISTR2 *servername; 00137 UNISTR2 *qualifier; 00138 UNISTR2 *username; 00139 uint32 sess_level; 00140 SRV_SESS_INFO_CTR *ctr; 00141 uint32 preferred_len; 00142 ENUM_HND enum_hnd; 00143 } SRV_Q_NET_SESS_ENUM; 00144 00145 typedef struct { 00146 uint32 sess_level; 00147 SRV_SESS_INFO_CTR *ctr; 00148 uint32 total_entries; 00149 ENUM_HND enum_hnd; 00150 WERROR status; 00151 } SRV_R_NET_SESS_ENUM; 00152 00153 /***************************/ 00154 00155 /* SRV_Q_NET_SESS_DEL */ 00156 typedef struct q_net_sess_del 00157 { 00158 uint32 ptr_srv_name; /* pointer (to server name?) */ 00159 UNISTR2 uni_srv_name; /* server name */ 00160 00161 uint32 ptr_cli_name; /* pointer (to qualifier name) */ 00162 UNISTR2 uni_cli_name; /* qualifier name "\\qualifier" */ 00163 00164 uint32 ptr_user_name; /* pointer (to user name */ 00165 UNISTR2 uni_user_name; /* user name */ 00166 00167 } SRV_Q_NET_SESS_DEL; 00168 00169 /* SRV_R_NET_SESS_DEL */ 00170 typedef struct r_net_sess_del 00171 { 00172 WERROR status; /* return status */ 00173 00174 } SRV_R_NET_SESS_DEL; 00175 00176 /* CONN_INFO_0 (pointers to level 0 connection info strings) */ 00177 typedef struct ptr_conn_info0 00178 { 00179 uint32 id; /* connection id. */ 00180 00181 } CONN_INFO_0; 00182 00183 /* oops - this is going to take up a *massive* amount of stack. */ 00184 /* the UNISTR2s already have 1024 uint16 chars in them... */ 00185 #define MAX_CONN_ENTRIES 32 00186 00187 /* SRV_CONN_INFO_0 */ 00188 typedef struct srv_conn_info_0_info 00189 { 00190 uint32 num_entries_read; /* EntriesRead */ 00191 uint32 ptr_conn_info; /* Buffer */ 00192 uint32 num_entries_read2; /* EntriesRead */ 00193 00194 CONN_INFO_0 info_0 [MAX_CONN_ENTRIES]; /* connection entry pointers */ 00195 00196 } SRV_CONN_INFO_0; 00197 00198 /* CONN_INFO_1 (pointers to level 1 connection info strings) */ 00199 typedef struct ptr_conn_info1 00200 { 00201 uint32 id; /* connection id */ 00202 uint32 type; /* 0x3 */ 00203 uint32 num_opens; 00204 uint32 num_users; 00205 uint32 open_time; 00206 00207 uint32 ptr_usr_name; /* pointer to user name. */ 00208 uint32 ptr_net_name; /* pointer to network name (e.g IPC$). */ 00209 00210 } CONN_INFO_1; 00211 00212 /* CONN_INFO_1_STR (level 1 connection info strings) */ 00213 typedef struct str_conn_info1 00214 { 00215 UNISTR2 uni_usr_name; /* unicode string of user */ 00216 UNISTR2 uni_net_name; /* unicode string of name */ 00217 00218 } CONN_INFO_1_STR; 00219 00220 /* SRV_CONN_INFO_1 */ 00221 typedef struct srv_conn_info_1_info 00222 { 00223 uint32 num_entries_read; /* EntriesRead */ 00224 uint32 ptr_conn_info; /* Buffer */ 00225 uint32 num_entries_read2; /* EntriesRead */ 00226 00227 CONN_INFO_1 info_1 [MAX_CONN_ENTRIES]; /* connection entry pointers */ 00228 CONN_INFO_1_STR info_1_str[MAX_CONN_ENTRIES]; /* connection entry strings */ 00229 00230 } SRV_CONN_INFO_1; 00231 00232 /* SRV_CONN_INFO_CTR */ 00233 typedef struct srv_conn_info_ctr_info 00234 { 00235 uint32 switch_value; /* switch value */ 00236 uint32 ptr_conn_ctr; /* pointer to conn info union */ 00237 union 00238 { 00239 SRV_CONN_INFO_0 info0; /* connection info level 0 */ 00240 SRV_CONN_INFO_1 info1; /* connection info level 1 */ 00241 00242 } conn; 00243 00244 } SRV_CONN_INFO_CTR; 00245 00246 00247 /* SRV_Q_NET_CONN_ENUM */ 00248 typedef struct q_net_conn_enum_info 00249 { 00250 uint32 ptr_srv_name; /* pointer (to server name) */ 00251 UNISTR2 uni_srv_name; /* server name "\\server" */ 00252 00253 uint32 ptr_qual_name; /* pointer (to qualifier name) */ 00254 UNISTR2 uni_qual_name; /* qualifier name "\\qualifier" */ 00255 00256 uint32 conn_level; /* connection level */ 00257 00258 SRV_CONN_INFO_CTR *ctr; 00259 00260 uint32 preferred_len; /* preferred maximum length (0xffff ffff) */ 00261 ENUM_HND enum_hnd; 00262 00263 } SRV_Q_NET_CONN_ENUM; 00264 00265 /* SRV_R_NET_CONN_ENUM */ 00266 typedef struct r_net_conn_enum_info 00267 { 00268 uint32 conn_level; /* share level */ 00269 00270 SRV_CONN_INFO_CTR *ctr; 00271 00272 uint32 total_entries; /* total number of entries */ 00273 ENUM_HND enum_hnd; 00274 00275 WERROR status; /* return status */ 00276 00277 } SRV_R_NET_CONN_ENUM; 00278 00279 /* SH_INFO_0 */ 00280 typedef struct ptr_share_info0 00281 { 00282 uint32 ptr_netname; /* pointer to net name. */ 00283 } SH_INFO_0; 00284 00285 /* SH_INFO_0_STR (level 0 share info strings) */ 00286 typedef struct str_share_info0 00287 { 00288 SH_INFO_0 *ptrs; 00289 00290 UNISTR2 uni_netname; /* unicode string of net name */ 00291 00292 } SH_INFO_0_STR; 00293 00294 /* SRV_SHARE_INFO_0 */ 00295 typedef struct share_info_0_info 00296 { 00297 SH_INFO_0 info_0; 00298 SH_INFO_0_STR info_0_str; 00299 00300 } SRV_SHARE_INFO_0; 00301 00302 /* SH_INFO_1 (pointers to level 1 share info strings) */ 00303 typedef struct ptr_share_info1 00304 { 00305 uint32 ptr_netname; /* pointer to net name. */ 00306 uint32 type; /* ipc, print, disk ... */ 00307 uint32 ptr_remark; /* pointer to comment. */ 00308 00309 } SH_INFO_1; 00310 00311 /* SH_INFO_1_STR (level 1 share info strings) */ 00312 typedef struct str_share_info1 00313 { 00314 SH_INFO_1 *ptrs; 00315 00316 UNISTR2 uni_netname; /* unicode string of net name */ 00317 UNISTR2 uni_remark; /* unicode string of comment */ 00318 00319 } SH_INFO_1_STR; 00320 00321 /* SRV_SHARE_INFO_1 */ 00322 typedef struct share_info_1_info 00323 { 00324 SH_INFO_1 info_1; 00325 SH_INFO_1_STR info_1_str; 00326 00327 } SRV_SHARE_INFO_1; 00328 00329 /* SH_INFO_2 (pointers to level 2 share info strings) */ 00330 typedef struct ptr_share_info2 00331 { 00332 uint32 ptr_netname; /* pointer to net name. */ 00333 uint32 type; /* ipc, print, disk ... */ 00334 uint32 ptr_remark; /* pointer to comment. */ 00335 uint32 perms; /* permissions */ 00336 uint32 max_uses; /* maximum uses */ 00337 uint32 num_uses; /* current uses */ 00338 uint32 ptr_path; /* pointer to path name */ 00339 uint32 ptr_passwd; /* pointer to password */ 00340 00341 } SH_INFO_2; 00342 00343 /* SH_INFO_2_STR (level 2 share info strings) */ 00344 typedef struct str_share_info2 00345 { 00346 SH_INFO_2 *ptrs; 00347 00348 UNISTR2 uni_netname; /* unicode string of net name (e.g NETLOGON) */ 00349 UNISTR2 uni_remark; /* unicode string of comment (e.g "Logon server share") */ 00350 UNISTR2 uni_path; /* unicode string of local path (e.g c:\winnt\system32\repl\import\scripts) */ 00351 UNISTR2 uni_passwd; /* unicode string of password - presumably for share level security (e.g NULL) */ 00352 00353 } SH_INFO_2_STR; 00354 00355 /* SRV_SHARE_INFO_2 */ 00356 typedef struct share_info_2_info 00357 { 00358 SH_INFO_2 info_2; 00359 SH_INFO_2_STR info_2_str; 00360 00361 } SRV_SHARE_INFO_2; 00362 00363 typedef struct ptr_share_info501 00364 { 00365 uint32 ptr_netname; /* pointer to net name */ 00366 uint32 type; /* ipc, print, disk */ 00367 uint32 ptr_remark; /* pointer to comment */ 00368 uint32 csc_policy; /* client-side offline caching policy << 4 */ 00369 } SH_INFO_501; 00370 00371 typedef struct str_share_info501 00372 { 00373 UNISTR2 uni_netname; /* unicode string of net name */ 00374 UNISTR2 uni_remark; /* unicode string of comment */ 00375 } SH_INFO_501_STR; 00376 00377 /* SRV_SHARE_INFO_501 */ 00378 typedef struct share_info_501_info 00379 { 00380 SH_INFO_501 info_501; 00381 SH_INFO_501_STR info_501_str; 00382 } SRV_SHARE_INFO_501; 00383 00384 /* SH_INFO_502 (pointers to level 502 share info strings) */ 00385 typedef struct ptr_share_info502 00386 { 00387 uint32 ptr_netname; /* pointer to net name. */ 00388 uint32 type; /* ipc, print, disk ... */ 00389 uint32 ptr_remark; /* pointer to comment. */ 00390 uint32 perms; /* permissions */ 00391 uint32 max_uses; /* maximum uses */ 00392 uint32 num_uses; /* current uses */ 00393 uint32 ptr_path; /* pointer to path name */ 00394 uint32 ptr_passwd; /* pointer to password */ 00395 uint32 reserved; /* this holds the space taken by the sd in the rpc packet */ 00396 uint32 reserved_offset; /* required for _post operation when marshalling */ 00397 uint32 sd_size; /* size of security descriptor */ 00398 uint32 ptr_sd; /* pointer to security descriptor */ 00399 00400 } SH_INFO_502; 00401 00402 /* SH_INFO_502_STR (level 502 share info strings) */ 00403 typedef struct str_share_info502 00404 { 00405 SH_INFO_502 *ptrs; 00406 00407 UNISTR2 uni_netname; /* unicode string of net name (e.g NETLOGON) */ 00408 UNISTR2 uni_remark; /* unicode string of comment (e.g "Logon server share") */ 00409 UNISTR2 uni_path; /* unicode string of local path (e.g c:\winnt\system32\repl\import\scripts) */ 00410 UNISTR2 uni_passwd; /* unicode string of password - presumably for share level security (e.g NULL) */ 00411 00412 uint32 reserved; 00413 uint32 sd_size; 00414 SEC_DESC *sd; 00415 00416 } SH_INFO_502_STR; 00417 00418 /* SRV_SHARE_INFO_502 */ 00419 typedef struct share_info_502_info 00420 { 00421 SH_INFO_502 info_502; 00422 SH_INFO_502_STR info_502_str; 00423 00424 } SRV_SHARE_INFO_502; 00425 00426 typedef struct ptr_share_info1004 00427 { 00428 uint32 ptr_remark; 00429 00430 } SH_INFO_1004; 00431 00432 typedef struct str_share_info1004 00433 { 00434 SH_INFO_1004 *ptrs; 00435 00436 UNISTR2 uni_remark; 00437 00438 } SH_INFO_1004_STR; 00439 00440 typedef struct ptr_info_1004_info 00441 { 00442 SH_INFO_1004 info_1004; 00443 SH_INFO_1004_STR info_1004_str; 00444 } SRV_SHARE_INFO_1004; 00445 00446 typedef struct share_info_1005_info 00447 { 00448 uint32 share_info_flags; 00449 } SRV_SHARE_INFO_1005; 00450 00451 typedef struct share_info_1006_info 00452 { 00453 uint32 max_uses; 00454 } SRV_SHARE_INFO_1006; 00455 00456 typedef struct ptr_share_info1007 00457 { 00458 uint32 flags; 00459 uint32 ptr_AlternateDirectoryName; 00460 00461 } SH_INFO_1007; 00462 00463 typedef struct str_share_info1007 00464 { 00465 SH_INFO_1007 *ptrs; 00466 00467 UNISTR2 uni_AlternateDirectoryName; 00468 00469 } SH_INFO_1007_STR; 00470 00471 typedef struct ptr_info_1007_info 00472 { 00473 SH_INFO_1007 info_1007; 00474 SH_INFO_1007_STR info_1007_str; 00475 } SRV_SHARE_INFO_1007; 00476 00477 /* SRV_SHARE_INFO_1501 */ 00478 typedef struct share_info_1501_info 00479 { 00480 SEC_DESC_BUF *sdb; 00481 } SRV_SHARE_INFO_1501; 00482 00483 /* SRV_SHARE_INFO_CTR */ 00484 typedef struct srv_share_info_ctr_info 00485 { 00486 uint32 info_level; 00487 uint32 switch_value; 00488 uint32 ptr_share_info; 00489 00490 uint32 num_entries; 00491 uint32 ptr_entries; 00492 uint32 num_entries2; 00493 00494 union { 00495 SRV_SHARE_INFO_0 *info0; 00496 SRV_SHARE_INFO_1 *info1; /* share info level 1 */ 00497 SRV_SHARE_INFO_2 *info2; /* share info level 2 */ 00498 SRV_SHARE_INFO_501 *info501; /* share info level 501 */ 00499 SRV_SHARE_INFO_502 *info502; /* share info level 502 */ 00500 SRV_SHARE_INFO_1004 *info1004; 00501 SRV_SHARE_INFO_1005 *info1005; 00502 SRV_SHARE_INFO_1006 *info1006; 00503 SRV_SHARE_INFO_1007 *info1007; 00504 SRV_SHARE_INFO_1501 *info1501; 00505 void *info; 00506 00507 } share; 00508 00509 } SRV_SHARE_INFO_CTR; 00510 00511 /* SRV_Q_NET_SHARE_ENUM */ 00512 typedef struct q_net_share_enum_info 00513 { 00514 uint32 ptr_srv_name; /* pointer (to server name?) */ 00515 UNISTR2 uni_srv_name; /* server name */ 00516 00517 SRV_SHARE_INFO_CTR ctr; /* share info container */ 00518 00519 uint32 preferred_len; /* preferred maximum length (0xffff ffff) */ 00520 00521 ENUM_HND enum_hnd; 00522 00523 } SRV_Q_NET_SHARE_ENUM; 00524 00525 00526 /* SRV_R_NET_SHARE_ENUM */ 00527 typedef struct r_net_share_enum_info 00528 { 00529 SRV_SHARE_INFO_CTR ctr; /* share info container */ 00530 00531 uint32 total_entries; /* total number of entries */ 00532 ENUM_HND enum_hnd; 00533 00534 WERROR status; /* return status */ 00535 00536 } SRV_R_NET_SHARE_ENUM; 00537 00538 00539 /* SRV_Q_NET_SHARE_GET_INFO */ 00540 typedef struct q_net_share_get_info_info 00541 { 00542 uint32 ptr_srv_name; 00543 UNISTR2 uni_srv_name; 00544 00545 UNISTR2 uni_share_name; 00546 uint32 info_level; 00547 00548 } SRV_Q_NET_SHARE_GET_INFO; 00549 00550 /* SRV_SHARE_INFO */ 00551 typedef struct srv_share_info { 00552 uint32 switch_value; 00553 uint32 ptr_share_ctr; 00554 00555 union { 00556 SRV_SHARE_INFO_0 info0; 00557 SRV_SHARE_INFO_1 info1; 00558 SRV_SHARE_INFO_2 info2; 00559 SRV_SHARE_INFO_501 info501; 00560 SRV_SHARE_INFO_502 info502; 00561 SRV_SHARE_INFO_1004 info1004; 00562 SRV_SHARE_INFO_1005 info1005; 00563 SRV_SHARE_INFO_1006 info1006; 00564 SRV_SHARE_INFO_1007 info1007; 00565 SRV_SHARE_INFO_1501 info1501; 00566 } share; 00567 } SRV_SHARE_INFO; 00568 00569 /* SRV_R_NET_SHARE_GET_INFO */ 00570 typedef struct r_net_share_get_info_info 00571 { 00572 SRV_SHARE_INFO info; 00573 WERROR status; 00574 00575 } SRV_R_NET_SHARE_GET_INFO; 00576 00577 /* SRV_Q_NET_SHARE_SET_INFO */ 00578 typedef struct q_net_share_set_info_info 00579 { 00580 uint32 ptr_srv_name; 00581 UNISTR2 uni_srv_name; 00582 00583 UNISTR2 uni_share_name; 00584 uint32 info_level; 00585 00586 SRV_SHARE_INFO info; 00587 00588 uint32 ptr_parm_error; 00589 uint32 parm_error; 00590 00591 } SRV_Q_NET_SHARE_SET_INFO; 00592 00593 /* SRV_R_NET_SHARE_SET_INFO */ 00594 typedef struct r_net_share_set_info 00595 { 00596 uint32 ptr_parm_error; 00597 uint32 parm_error; 00598 00599 WERROR status; /* return status */ 00600 00601 } SRV_R_NET_SHARE_SET_INFO; 00602 00603 /* SRV_Q_NET_SHARE_ADD */ 00604 typedef struct q_net_share_add 00605 { 00606 uint32 ptr_srv_name; 00607 UNISTR2 uni_srv_name; 00608 00609 uint32 info_level; 00610 00611 SRV_SHARE_INFO info; 00612 00613 uint32 ptr_err_index; /* pointer to error index */ 00614 uint32 err_index; /* index in info to field in error */ 00615 00616 } SRV_Q_NET_SHARE_ADD; 00617 00618 /* SRV_R_NET_SHARE_ADD */ 00619 typedef struct r_net_share_add 00620 { 00621 00622 uint32 ptr_parm_error; 00623 uint32 parm_error; 00624 00625 WERROR status; /* return status */ 00626 00627 } SRV_R_NET_SHARE_ADD; 00628 00629 /* SRV_Q_NET_SHARE_DEL */ 00630 typedef struct q_net_share_del 00631 { 00632 uint32 ptr_srv_name; 00633 UNISTR2 uni_srv_name; 00634 UNISTR2 uni_share_name; 00635 uint32 reserved; 00636 00637 } SRV_Q_NET_SHARE_DEL; 00638 00639 /* SRV_R_NET_SHARE_DEL */ 00640 typedef struct r_net_share_del 00641 { 00642 WERROR status; /* return status */ 00643 00644 } SRV_R_NET_SHARE_DEL; 00645 00646 /***************************/ 00647 00648 typedef struct { 00649 uint32 id; /* file index */ 00650 uint32 perms; /* file permissions. don't know what format */ 00651 uint32 num_locks; /* file locks */ 00652 UNISTR2 *path; /* file name */ 00653 UNISTR2 *user; /* file owner */ 00654 } FILE_INFO_3; 00655 00656 typedef struct { 00657 uint32 level; /* switch value */ 00658 uint32 ptr_file_info; /* pointer to file info union */ 00659 00660 uint32 num_entries; 00661 uint32 ptr_entries; 00662 uint32 num_entries2; 00663 union { 00664 FILE_INFO_3 *info3; 00665 } file; 00666 00667 } SRV_FILE_INFO_CTR; 00668 00669 typedef struct { 00670 UNISTR2 *servername; 00671 UNISTR2 *qualifier; 00672 UNISTR2 *username; 00673 uint32 level; 00674 SRV_FILE_INFO_CTR ctr; 00675 uint32 preferred_len; /* preferred maximum length (0xffff ffff) */ 00676 ENUM_HND enum_hnd; 00677 } SRV_Q_NET_FILE_ENUM; 00678 00679 typedef struct { 00680 uint32 level; 00681 SRV_FILE_INFO_CTR ctr; 00682 uint32 total_entries; 00683 ENUM_HND enum_hnd; 00684 WERROR status; 00685 } SRV_R_NET_FILE_ENUM; 00686 00687 /* SRV_INFO_100 */ 00688 typedef struct srv_info_100_info 00689 { 00690 uint32 platform_id; /* 0x500 */ 00691 uint32 ptr_name; /* pointer to server name */ 00692 00693 UNISTR2 uni_name; /* server name "server" */ 00694 00695 } SRV_INFO_100; 00696 00697 /* SRV_INFO_101 */ 00698 typedef struct srv_info_101_info 00699 { 00700 uint32 platform_id; /* 0x500 */ 00701 uint32 ptr_name; /* pointer to server name */ 00702 uint32 ver_major; /* 0x4 */ 00703 uint32 ver_minor; /* 0x2 */ 00704 uint32 srv_type; /* browse etc type */ 00705 uint32 ptr_comment; /* pointer to server comment */ 00706 00707 UNISTR2 uni_name; /* server name "server" */ 00708 UNISTR2 uni_comment; /* server comment "samba x.x.x blah" */ 00709 00710 } SRV_INFO_101; 00711 00712 /* SRV_INFO_102 */ 00713 typedef struct srv_info_102_info 00714 { 00715 uint32 platform_id; /* 0x500 */ 00716 uint32 ptr_name; /* pointer to server name */ 00717 uint32 ver_major; /* 0x4 */ 00718 uint32 ver_minor; /* 0x2 */ 00719 uint32 srv_type; /* browse etc type */ 00720 uint32 ptr_comment; /* pointer to server comment */ 00721 uint32 users; /* 0xffff ffff*/ 00722 uint32 disc; /* 0xf */ 00723 uint32 hidden; /* 0x0 */ 00724 uint32 announce; /* 240 */ 00725 uint32 ann_delta; /* 3000 */ 00726 uint32 licenses; /* 0 */ 00727 uint32 ptr_usr_path; /* pointer to user path */ 00728 00729 UNISTR2 uni_name; /* server name "server" */ 00730 UNISTR2 uni_comment; /* server comment "samba x.x.x blah" */ 00731 UNISTR2 uni_usr_path; /* "c:\" (eh?) */ 00732 00733 } SRV_INFO_102; 00734 00735 00736 /* SRV_INFO_CTR */ 00737 typedef struct srv_info_ctr_info 00738 { 00739 uint32 switch_value; /* switch value */ 00740 uint32 ptr_srv_ctr; /* pointer to server info */ 00741 union 00742 { 00743 SRV_INFO_102 sv102; /* server info level 102 */ 00744 SRV_INFO_101 sv101; /* server info level 101 */ 00745 SRV_INFO_100 sv100; /* server info level 100 */ 00746 00747 } srv; 00748 00749 } SRV_INFO_CTR; 00750 00751 /* SRV_Q_NET_SRV_GET_INFO */ 00752 typedef struct q_net_srv_get_info 00753 { 00754 uint32 ptr_srv_name; 00755 UNISTR2 uni_srv_name; /* "\\server" */ 00756 uint32 switch_value; 00757 00758 } SRV_Q_NET_SRV_GET_INFO; 00759 00760 /* SRV_R_NET_SRV_GET_INFO */ 00761 typedef struct r_net_srv_get_info 00762 { 00763 SRV_INFO_CTR *ctr; 00764 00765 WERROR status; /* return status */ 00766 00767 } SRV_R_NET_SRV_GET_INFO; 00768 00769 /* SRV_Q_NET_SRV_SET_INFO */ 00770 typedef struct q_net_srv_set_info 00771 { 00772 uint32 ptr_srv_name; 00773 UNISTR2 uni_srv_name; /* "\\server" */ 00774 uint32 switch_value; 00775 00776 SRV_INFO_CTR *ctr; 00777 00778 } SRV_Q_NET_SRV_SET_INFO; 00779 00780 00781 /* SRV_R_NET_SRV_SET_INFO */ 00782 typedef struct r_net_srv_set_info 00783 { 00784 uint32 switch_value; /* switch value */ 00785 00786 WERROR status; /* return status */ 00787 00788 } SRV_R_NET_SRV_SET_INFO; 00789 00790 /* SRV_Q_NET_REMOTE_TOD */ 00791 typedef struct q_net_remote_tod 00792 { 00793 uint32 ptr_srv_name; 00794 UNISTR2 uni_srv_name; /* "\\server" */ 00795 00796 } SRV_Q_NET_REMOTE_TOD; 00797 00798 /* TIME_OF_DAY_INFO */ 00799 typedef struct time_of_day_info 00800 { 00801 uint32 elapsedt; 00802 uint32 msecs; 00803 uint32 hours; 00804 uint32 mins; 00805 uint32 secs; 00806 uint32 hunds; 00807 uint32 zone; 00808 uint32 tintervals; 00809 uint32 day; 00810 uint32 month; 00811 uint32 year; 00812 uint32 weekday; 00813 00814 } TIME_OF_DAY_INFO; 00815 00816 /* SRV_R_NET_REMOTE_TOD */ 00817 typedef struct r_net_remote_tod 00818 { 00819 uint32 ptr_srv_tod; /* pointer to TOD */ 00820 TIME_OF_DAY_INFO *tod; 00821 00822 WERROR status; /* return status */ 00823 00824 } SRV_R_NET_REMOTE_TOD; 00825 00826 /* SRV_Q_NET_FILE_QUERY_SECDESC */ 00827 typedef struct q_net_file_query_secdesc 00828 { 00829 uint32 ptr_srv_name; 00830 UNISTR2 uni_srv_name; 00831 uint32 ptr_qual_name; 00832 UNISTR2 uni_qual_name; 00833 UNISTR2 uni_file_name; 00834 uint32 unknown1; 00835 uint32 unknown2; 00836 uint32 unknown3; 00837 } SRV_Q_NET_FILE_QUERY_SECDESC; 00838 00839 /* SRV_R_NET_FILE_QUERY_SECDESC */ 00840 typedef struct r_net_file_query_secdesc 00841 { 00842 uint32 ptr_response; 00843 uint32 size_response; 00844 uint32 ptr_secdesc; 00845 uint32 size_secdesc; 00846 SEC_DESC *sec_desc; 00847 WERROR status; 00848 } SRV_R_NET_FILE_QUERY_SECDESC; 00849 00850 /* SRV_Q_NET_FILE_SET_SECDESC */ 00851 typedef struct q_net_file_set_secdesc 00852 { 00853 uint32 ptr_srv_name; 00854 UNISTR2 uni_srv_name; 00855 uint32 ptr_qual_name; 00856 UNISTR2 uni_qual_name; 00857 UNISTR2 uni_file_name; 00858 uint32 sec_info; 00859 uint32 size_set; 00860 uint32 ptr_secdesc; 00861 uint32 size_secdesc; 00862 SEC_DESC *sec_desc; 00863 } SRV_Q_NET_FILE_SET_SECDESC; 00864 00865 /* SRV_R_NET_FILE_SET_SECDESC */ 00866 typedef struct r_net_file_set_secdesc 00867 { 00868 WERROR status; 00869 } SRV_R_NET_FILE_SET_SECDESC; 00870 00871 /***************************/ 00872 00873 typedef struct { 00874 UNISTR2 *servername; 00875 uint32 file_id; 00876 } SRV_Q_NET_FILE_CLOSE; 00877 00878 typedef struct { 00879 WERROR status; 00880 } SRV_R_NET_FILE_CLOSE; 00881 00882 /***************************/ 00883 00884 #endif /* _RPC_SRVSVC_H */
1.4.7