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) Jean Fran�ois Micouleau 2002 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_NETLOGON_H /* _RPC_NETLOGON_H */ 25#define _RPC_NETLOGON_H 26 27 28/* NETLOGON pipe */ 29#define NET_SAMLOGON 0x02 30#define NET_SAMLOGOFF 0x03 31#define NET_REQCHAL 0x04 32#define NET_AUTH 0x05 33#define NET_SRVPWSET 0x06 34#define NET_SAM_DELTAS 0x07 35#define NET_LOGON_CTRL 0x0c 36#define NET_GETDCNAME 0x0d 37#define NET_AUTH2 0x0f 38#define NET_LOGON_CTRL2 0x0e 39#define NET_SAM_SYNC 0x10 40#define NET_TRUST_DOM_LIST 0x13 41#define NET_AUTH3 0x1a 42 43/* Secure Channel types. used in NetrServerAuthenticate negotiation */ 44#define SEC_CHAN_WKSTA 2 45#define SEC_CHAN_DOMAIN 4 46#define SEC_CHAN_BDC 6 47 48/* Returned delta types */ 49#define SAM_DELTA_DOMAIN_INFO 0x01 50#define SAM_DELTA_GROUP_INFO 0x02 51#define SAM_DELTA_RENAME_GROUP 0x04 52#define SAM_DELTA_ACCOUNT_INFO 0x05 53#define SAM_DELTA_RENAME_USER 0x07 54#define SAM_DELTA_GROUP_MEM 0x08 55#define SAM_DELTA_ALIAS_INFO 0x09 56#define SAM_DELTA_RENAME_ALIAS 0x0b 57#define SAM_DELTA_ALIAS_MEM 0x0c 58#define SAM_DELTA_POLICY_INFO 0x0d 59#define SAM_DELTA_TRUST_DOMS 0x0e 60#define SAM_DELTA_PRIVS_INFO 0x10 /* DT_DELTA_ACCOUNTS */ 61#define SAM_DELTA_SECRET_INFO 0x12 62#define SAM_DELTA_DELETE_GROUP 0x14 63#define SAM_DELTA_DELETE_USER 0x15 64#define SAM_DELTA_MODIFIED_COUNT 0x16 65 66/* SAM database types */ 67#define SAM_DATABASE_DOMAIN 0x00 /* Domain users and groups */ 68#define SAM_DATABASE_BUILTIN 0x01 /* BUILTIN users and groups */ 69#define SAM_DATABASE_PRIVS 0x02 /* Privileges */ 70 71#define NETLOGON_CONTROL_REDISCOVER 0x5 72#define NETLOGON_CONTROL_TC_QUERY 0x6 73#define NETLOGON_CONTROL_TRANSPORT_NOTIFY 0x7 74#define NETLOGON_CONTROL_SET_DBFLAG 0xfffe 75 76#if 0 77/* I think this is correct - it's what gets parsed on the wire. JRA. */ 78/* NET_USER_INFO_2 */ 79typedef struct net_user_info_2 80{ 81 uint32 ptr_user_info; 82 83 NTTIME logon_time; /* logon time */ 84 NTTIME logoff_time; /* logoff time */ 85 NTTIME kickoff_time; /* kickoff time */ 86 NTTIME pass_last_set_time; /* password last set time */ 87 NTTIME pass_can_change_time; /* password can change time */ 88 NTTIME pass_must_change_time; /* password must change time */ 89 90 UNIHDR hdr_user_name; /* username unicode string header */ 91 UNIHDR hdr_full_name; /* user's full name unicode string header */ 92 UNIHDR hdr_logon_script; /* logon script unicode string header */ 93 UNIHDR hdr_profile_path; /* profile path unicode string header */ 94 UNIHDR hdr_home_dir; /* home directory unicode string header */ 95 UNIHDR hdr_dir_drive; /* home directory drive unicode string header */ 96 97 uint16 logon_count; /* logon count */ 98 uint16 bad_pw_count; /* bad password count */ 99 100 uint32 user_id; /* User ID */ 101 uint32 group_id; /* Group ID */ 102 uint32 num_groups; /* num groups */ 103 uint32 buffer_groups; /* undocumented buffer pointer to groups. */ 104 uint32 user_flgs; /* user flags */ 105 106 uint8 user_sess_key[16]; /* unused user session key */ 107 108 UNIHDR hdr_logon_srv; /* logon server unicode string header */ 109 UNIHDR hdr_logon_dom; /* logon domain unicode string header */ 110 111 uint32 buffer_dom_id; /* undocumented logon domain id pointer */ 112 uint8 padding[40]; /* unused padding bytes. expansion room */ 113 114 UNISTR2 uni_user_name; /* username unicode string */ 115 UNISTR2 uni_full_name; /* user's full name unicode string */ 116 UNISTR2 uni_logon_script; /* logon script unicode string */ 117 UNISTR2 uni_profile_path; /* profile path unicode string */ 118 UNISTR2 uni_home_dir; /* home directory unicode string */ 119 UNISTR2 uni_dir_drive; /* home directory drive unicode string */ 120 121 uint32 num_groups2; /* num groups */ 122 DOM_GID *gids; /* group info */ 123 124 UNISTR2 uni_logon_srv; /* logon server unicode string */ 125 UNISTR2 uni_logon_dom; /* logon domain unicode string */ 126 127 DOM_SID2 dom_sid; /* domain SID */ 128 129 uint32 num_other_groups; /* other groups */ 130 DOM_GID *other_gids; /* group info */ 131 DOM_SID2 *other_sids; /* undocumented - domain SIDs */ 132 133} NET_USER_INFO_2; 134#endif 135 136/* NET_USER_INFO_3 */ 137typedef struct net_user_info_3 138{ 139 uint32 ptr_user_info; 140 141 NTTIME logon_time; /* logon time */ 142 NTTIME logoff_time; /* logoff time */ 143 NTTIME kickoff_time; /* kickoff time */ 144 NTTIME pass_last_set_time; /* password last set time */ 145 NTTIME pass_can_change_time; /* password can change time */ 146 NTTIME pass_must_change_time; /* password must change time */ 147 148 UNIHDR hdr_user_name; /* username unicode string header */ 149 UNIHDR hdr_full_name; /* user's full name unicode string header */ 150 UNIHDR hdr_logon_script; /* logon script unicode string header */ 151 UNIHDR hdr_profile_path; /* profile path unicode string header */ 152 UNIHDR hdr_home_dir; /* home directory unicode string header */ 153 UNIHDR hdr_dir_drive; /* home directory drive unicode string header */ 154 155 uint16 logon_count; /* logon count */ 156 uint16 bad_pw_count; /* bad password count */ 157 158 uint32 user_rid; /* User RID */ 159 uint32 group_rid; /* Group RID */ 160 161 uint32 num_groups; /* num groups */ 162 uint32 buffer_groups; /* undocumented buffer pointer to groups. */ 163 uint32 user_flgs; /* user flags */ 164 165 uint8 user_sess_key[16]; /* user session key */ 166 167 UNIHDR hdr_logon_srv; /* logon server unicode string header */ 168 UNIHDR hdr_logon_dom; /* logon domain unicode string header */ 169 170 uint32 buffer_dom_id; /* undocumented logon domain id pointer */ 171 uint8 lm_sess_key[8]; /* lm session key */ 172 uint32 acct_flags; /* account flags */ 173 uint32 unknown[7]; /* unknown */ 174 175 uint32 num_other_sids; /* number of foreign/trusted domain sids */ 176 uint32 buffer_other_sids; 177 178 UNISTR2 uni_user_name; /* username unicode string */ 179 UNISTR2 uni_full_name; /* user's full name unicode string */ 180 UNISTR2 uni_logon_script; /* logon script unicode string */ 181 UNISTR2 uni_profile_path; /* profile path unicode string */ 182 UNISTR2 uni_home_dir; /* home directory unicode string */ 183 UNISTR2 uni_dir_drive; /* home directory drive unicode string */ 184 185 uint32 num_groups2; /* num groups */ 186 DOM_GID *gids; /* group info */ 187 188 UNISTR2 uni_logon_srv; /* logon server unicode string */ 189 UNISTR2 uni_logon_dom; /* logon domain unicode string */ 190 191 DOM_SID2 dom_sid; /* domain SID */ 192 193 DOM_SID2 *other_sids; /* foreign/trusted domain SIDs */ 194 uint32 *other_sids_attrib; 195 196} NET_USER_INFO_3; 197 198 199/* NETLOGON_INFO_1 - pdc status info, i presume */ 200typedef struct netlogon_1_info 201{ 202 uint32 flags; /* 0x0 - undocumented */ 203 uint32 pdc_status; /* 0x0 - undocumented */ 204 205} NETLOGON_INFO_1; 206 207/* NETLOGON_INFO_2 - pdc status info, plus trusted domain info */ 208typedef struct netlogon_2_info 209{ 210 uint32 flags; /* 0x0 - undocumented */ 211 uint32 pdc_status; /* 0x0 - undocumented */ 212 uint32 ptr_trusted_dc_name; /* pointer to trusted domain controller name */ 213 uint32 tc_status; 214 UNISTR2 uni_trusted_dc_name; /* unicode string - trusted dc name */ 215 216} NETLOGON_INFO_2; 217 218/* NETLOGON_INFO_3 - logon status info, i presume */ 219typedef struct netlogon_3_info 220{ 221 uint32 flags; /* 0x0 - undocumented */ 222 uint32 logon_attempts; /* number of logon attempts */ 223 uint32 reserved_1; /* 0x0 - undocumented */ 224 uint32 reserved_2; /* 0x0 - undocumented */ 225 uint32 reserved_3; /* 0x0 - undocumented */ 226 uint32 reserved_4; /* 0x0 - undocumented */ 227 uint32 reserved_5; /* 0x0 - undocumented */ 228 229} NETLOGON_INFO_3; 230 231/******************************************************** 232 Logon Control Query 233 234 This is generated by a nltest /bdc_query:DOMAIN 235 236 query_level 0x1, function_code 0x1 237 238 ********************************************************/ 239 240/* NET_Q_LOGON_CTRL - LSA Netr Logon Control */ 241 242typedef struct net_q_logon_ctrl_info 243{ 244 uint32 ptr; 245 UNISTR2 uni_server_name; 246 uint32 function_code; 247 uint32 query_level; 248} NET_Q_LOGON_CTRL; 249 250/* NET_R_LOGON_CTRL - LSA Netr Logon Control */ 251 252typedef struct net_r_logon_ctrl_info 253{ 254 uint32 switch_value; 255 uint32 ptr; 256 257 union { 258 NETLOGON_INFO_1 info1; 259 } logon; 260 261 NTSTATUS status; 262} NET_R_LOGON_CTRL; 263 264 265typedef struct ctrl_data_info_5 266{ 267 uint32 function_code; 268 269 uint32 ptr_domain; 270 UNISTR2 domain; 271 272} CTRL_DATA_INFO_5; 273 274typedef struct ctrl_data_info_6 275{ 276 uint32 function_code; 277 278 uint32 ptr_domain; 279 UNISTR2 domain; 280 281} CTRL_DATA_INFO_6; 282 283 284/******************************************************** 285 Logon Control2 Query 286 287 query_level 0x1 - pdc status 288 query_level 0x3 - number of logon attempts. 289 290 ********************************************************/ 291 292/* NET_Q_LOGON_CTRL2 - LSA Netr Logon Control 2 */ 293typedef struct net_q_logon_ctrl2_info 294{ 295 uint32 ptr; /* undocumented buffer pointer */ 296 UNISTR2 uni_server_name; /* server name, starting with two '\'s */ 297 298 uint32 function_code; 299 uint32 query_level; 300 union { 301 CTRL_DATA_INFO_5 info5; 302 CTRL_DATA_INFO_6 info6; 303 } info; 304 305} NET_Q_LOGON_CTRL2; 306 307/******************************************************* 308 Logon Control Response 309 310 switch_value is same as query_level in request 311 *******************************************************/ 312 313/* NET_R_LOGON_CTRL2 - response to LSA Logon Control2 */ 314typedef struct net_r_logon_ctrl2_info 315{ 316 uint32 switch_value; /* 0x1, 0x3 */ 317 uint32 ptr; 318 319 union 320 { 321 NETLOGON_INFO_1 info1; 322 NETLOGON_INFO_2 info2; 323 NETLOGON_INFO_3 info3; 324 325 } logon; 326 327 NTSTATUS status; /* return code */ 328 329} NET_R_LOGON_CTRL2; 330 331/* NET_Q_GETDCNAME - Ask a DC for a trusted DC name */ 332 333typedef struct net_q_getdcname 334{ 335 uint32 ptr_logon_server; 336 UNISTR2 uni_logon_server; 337 uint32 ptr_domainname; 338 UNISTR2 uni_domainname; 339} NET_Q_GETDCNAME; 340 341/* NET_R_GETDCNAME - Ask a DC for a trusted DC name */ 342 343typedef struct net_r_getdcname 344{ 345 uint32 ptr_dcname; 346 UNISTR2 uni_dcname; 347 NTSTATUS status; 348} NET_R_GETDCNAME; 349 350/* NET_Q_TRUST_DOM_LIST - LSA Query Trusted Domains */ 351typedef struct net_q_trust_dom_info 352{ 353 uint32 ptr; /* undocumented buffer pointer */ 354 UNISTR2 uni_server_name; /* server name, starting with two '\'s */ 355 356} NET_Q_TRUST_DOM_LIST; 357 358#define MAX_TRUST_DOMS 1 359 360/* NET_R_TRUST_DOM_LIST - response to LSA Trusted Domains */ 361typedef struct net_r_trust_dom_info 362{ 363 UNISTR2 uni_trust_dom_name[MAX_TRUST_DOMS]; 364 365 NTSTATUS status; /* return code */ 366 367} NET_R_TRUST_DOM_LIST; 368 369 370/* NEG_FLAGS */ 371typedef struct neg_flags_info 372{ 373 uint32 neg_flags; /* negotiated flags */ 374 375} NEG_FLAGS; 376 377 378/* NET_Q_REQ_CHAL */ 379typedef struct net_q_req_chal_info 380{ 381 uint32 undoc_buffer; /* undocumented buffer pointer */ 382 UNISTR2 uni_logon_srv; /* logon server unicode string */ 383 UNISTR2 uni_logon_clnt; /* logon client unicode string */ 384 DOM_CHAL clnt_chal; /* client challenge */ 385 386} NET_Q_REQ_CHAL; 387 388 389/* NET_R_REQ_CHAL */ 390typedef struct net_r_req_chal_info 391{ 392 DOM_CHAL srv_chal; /* server challenge */ 393 NTSTATUS status; /* return code */ 394} NET_R_REQ_CHAL; 395 396/* NET_Q_AUTH */ 397typedef struct net_q_auth_info 398{ 399 DOM_LOG_INFO clnt_id; /* client identification info */ 400 DOM_CHAL clnt_chal; /* client-calculated credentials */ 401} NET_Q_AUTH; 402 403/* NET_R_AUTH */ 404typedef struct net_r_auth_info 405{ 406 DOM_CHAL srv_chal; /* server-calculated credentials */ 407 NTSTATUS status; /* return code */ 408} NET_R_AUTH; 409 410/* NET_Q_AUTH_2 */ 411typedef struct net_q_auth2_info 412{ 413 DOM_LOG_INFO clnt_id; /* client identification info */ 414 DOM_CHAL clnt_chal; /* client-calculated credentials */ 415 416 NEG_FLAGS clnt_flgs; /* usually 0x0000 01ff */ 417 418} NET_Q_AUTH_2; 419 420 421/* NET_R_AUTH_2 */ 422typedef struct net_r_auth2_info 423{ 424 DOM_CHAL srv_chal; /* server-calculated credentials */ 425 NEG_FLAGS srv_flgs; /* usually 0x0000 01ff */ 426 NTSTATUS status; /* return code */ 427} NET_R_AUTH_2; 428 429/* NET_Q_AUTH_3 */ 430typedef struct net_q_auth3_info 431{ 432 DOM_LOG_INFO clnt_id; /* client identification info */ 433 DOM_CHAL clnt_chal; /* client-calculated credentials */ 434 NEG_FLAGS clnt_flgs; /* usually 0x6007 ffff */ 435} NET_Q_AUTH_3; 436 437/* NET_R_AUTH_3 */ 438typedef struct net_r_auth3_info 439{ 440 DOM_CHAL srv_chal; /* server-calculated credentials */ 441 NEG_FLAGS srv_flgs; /* usually 0x6007 ffff */ 442 uint32 unknown; /* 0x0000045b */ 443 NTSTATUS status; /* return code */ 444} NET_R_AUTH_3; 445 446 447/* NET_Q_SRV_PWSET */ 448typedef struct net_q_srv_pwset_info 449{ 450 DOM_CLNT_INFO clnt_id; /* client identification/authentication info */ 451 uint8 pwd[16]; /* new password - undocumented. */ 452 453} NET_Q_SRV_PWSET; 454 455/* NET_R_SRV_PWSET */ 456typedef struct net_r_srv_pwset_info 457{ 458 DOM_CRED srv_cred; /* server-calculated credentials */ 459 460 NTSTATUS status; /* return code */ 461 462} NET_R_SRV_PWSET; 463 464/* NET_ID_INFO_2 */ 465typedef struct net_network_info_2 466{ 467 uint32 ptr_id_info2; /* pointer to id_info_2 */ 468 UNIHDR hdr_domain_name; /* domain name unicode header */ 469 uint32 param_ctrl; /* param control (0x2) */ 470 DOM_LOGON_ID logon_id; /* logon ID */ 471 UNIHDR hdr_user_name; /* user name unicode header */ 472 UNIHDR hdr_wksta_name; /* workstation name unicode header */ 473 uint8 lm_chal[8]; /* lan manager 8 byte challenge */ 474 STRHDR hdr_nt_chal_resp; /* nt challenge response */ 475 STRHDR hdr_lm_chal_resp; /* lm challenge response */ 476 477 UNISTR2 uni_domain_name; /* domain name unicode string */ 478 UNISTR2 uni_user_name; /* user name unicode string */ 479 UNISTR2 uni_wksta_name; /* workgroup name unicode string */ 480 STRING2 nt_chal_resp; /* nt challenge response */ 481 STRING2 lm_chal_resp; /* lm challenge response */ 482 483} NET_ID_INFO_2; 484 485/* NET_ID_INFO_1 */ 486typedef struct id_info_1 487{ 488 uint32 ptr_id_info1; /* pointer to id_info_1 */ 489 UNIHDR hdr_domain_name; /* domain name unicode header */ 490 uint32 param_ctrl; /* param control */ 491 DOM_LOGON_ID logon_id; /* logon ID */ 492 UNIHDR hdr_user_name; /* user name unicode header */ 493 UNIHDR hdr_wksta_name; /* workstation name unicode header */ 494 OWF_INFO lm_owf; /* LM OWF Password */ 495 OWF_INFO nt_owf; /* NT OWF Password */ 496 UNISTR2 uni_domain_name; /* domain name unicode string */ 497 UNISTR2 uni_user_name; /* user name unicode string */ 498 UNISTR2 uni_wksta_name; /* workgroup name unicode string */ 499 500} NET_ID_INFO_1; 501 502#define INTERACTIVE_LOGON_TYPE 1 503#define NET_LOGON_TYPE 2 504 505/* NET_ID_INFO_CTR */ 506typedef struct net_id_info_ctr_info 507{ 508 uint16 switch_value; 509 510 union 511 { 512 NET_ID_INFO_1 id1; /* auth-level 1 - interactive user login */ 513 NET_ID_INFO_2 id2; /* auth-level 2 - workstation referred login */ 514 515 } auth; 516 517} NET_ID_INFO_CTR; 518 519/* SAM_INFO - sam logon/off id structure */ 520typedef struct sam_info 521{ 522 DOM_CLNT_INFO2 client; 523 uint32 ptr_rtn_cred; /* pointer to return credentials */ 524 DOM_CRED rtn_cred; /* return credentials */ 525 uint16 logon_level; 526 NET_ID_INFO_CTR *ctr; 527 528} DOM_SAM_INFO; 529 530/* NET_Q_SAM_LOGON */ 531typedef struct net_q_sam_logon_info 532{ 533 DOM_SAM_INFO sam_id; 534 uint16 validation_level; 535 536} NET_Q_SAM_LOGON; 537 538/* NET_R_SAM_LOGON */ 539typedef struct net_r_sam_logon_info 540{ 541 uint32 buffer_creds; /* undocumented buffer pointer */ 542 DOM_CRED srv_creds; /* server credentials. server time stamp appears to be ignored. */ 543 544 uint16 switch_value; /* 3 - indicates type of USER INFO */ 545 NET_USER_INFO_3 *user; 546 547 uint32 auth_resp; /* 1 - Authoritative response; 0 - Non-Auth? */ 548 549 NTSTATUS status; /* return code */ 550 551} NET_R_SAM_LOGON; 552 553 554/* NET_Q_SAM_LOGOFF */ 555typedef struct net_q_sam_logoff_info 556{ 557 DOM_SAM_INFO sam_id; 558 559} NET_Q_SAM_LOGOFF; 560 561/* NET_R_SAM_LOGOFF */ 562typedef struct net_r_sam_logoff_info 563{ 564 uint32 buffer_creds; /* undocumented buffer pointer */ 565 DOM_CRED srv_creds; /* server credentials. server time stamp appears to be ignored. */ 566 567 NTSTATUS status; /* return code */ 568 569} NET_R_SAM_LOGOFF; 570 571/* NET_Q_SAM_SYNC */ 572typedef struct net_q_sam_sync_info 573{ 574 UNISTR2 uni_srv_name; /* \\PDC */ 575 UNISTR2 uni_cli_name; /* BDC */ 576 DOM_CRED cli_creds; 577 DOM_CRED ret_creds; 578 579 uint32 database_id; 580 uint32 restart_state; 581 uint32 sync_context; 582 583 uint32 max_size; /* preferred maximum length */ 584 585} NET_Q_SAM_SYNC; 586 587/* SAM_DELTA_HDR */ 588typedef struct sam_delta_hdr_info 589{ 590 uint16 type; /* type of structure attached */ 591 uint16 type2; 592 uint32 target_rid; 593 594 uint32 type3; 595 uint32 ptr_delta; 596 597} SAM_DELTA_HDR; 598 599/* LOCKOUT_STRING */ 600typedef struct account_lockout_string { 601 uint32 array_size; 602 uint32 offset; 603 uint32 length; 604/* uint16 *bindata; */ 605 UINT64_S lockout_duration; 606 UINT64_S reset_count; 607 uint32 bad_attempt_lockout; 608 uint32 dummy; 609 610} LOCKOUT_STRING; 611 612/* HDR_LOCKOUT_STRING */ 613typedef struct hdr_account_lockout_string { 614 uint16 size; 615 uint16 length; 616 uint32 buffer; 617 618} HDR_LOCKOUT_STRING; 619 620/* SAM_DOMAIN_INFO (0x1) */ 621typedef struct sam_domain_info_info 622{ 623 UNIHDR hdr_dom_name; 624 UNIHDR hdr_oem_info; 625 626 UINT64_S force_logoff; 627 uint16 min_pwd_len; 628 uint16 pwd_history_len; 629 UINT64_S max_pwd_age; 630 UINT64_S min_pwd_age; 631 UINT64_S dom_mod_count; 632 NTTIME creation_time; 633 uint32 security_information; 634 635 BUFHDR4 hdr_sec_desc; /* security descriptor */ 636 637 HDR_LOCKOUT_STRING hdr_account_lockout; 638 639 UNIHDR hdr_unknown2; 640 UNIHDR hdr_unknown3; 641 UNIHDR hdr_unknown4; 642 643 UNISTR2 uni_dom_name; 644 UNISTR2 buf_oem_info; 645 646 BUFFER4 buf_sec_desc; 647 648 LOCKOUT_STRING account_lockout; 649 650 UNISTR2 buf_unknown2; 651 UNISTR2 buf_unknown3; 652 UNISTR2 buf_unknown4; 653 654 uint32 logon_chgpass; 655 uint32 unknown6; 656 uint32 unknown7; 657 uint32 unknown8; 658 659 660} SAM_DOMAIN_INFO; 661 662/* SAM_GROUP_INFO (0x2) */ 663typedef struct sam_group_info_info 664{ 665 UNIHDR hdr_grp_name; 666 DOM_GID gid; 667 UNIHDR hdr_grp_desc; 668 BUFHDR2 hdr_sec_desc; /* security descriptor */ 669 uint8 reserved[48]; 670 671 UNISTR2 uni_grp_name; 672 UNISTR2 uni_grp_desc; 673 BUFFER4 buf_sec_desc; 674 675} SAM_GROUP_INFO; 676 677/* SAM_PWD */ 678typedef struct sam_passwd_info 679{ 680 /* this structure probably contains password history */ 681 /* this is probably a count of lm/nt pairs */ 682 uint32 unk_0; /* 0x0000 0002 */ 683 684 UNIHDR hdr_lm_pwd; 685 uint8 buf_lm_pwd[16]; 686 687 UNIHDR hdr_nt_pwd; 688 uint8 buf_nt_pwd[16]; 689 690 UNIHDR hdr_empty_lm; 691 UNIHDR hdr_empty_nt; 692 693} SAM_PWD; 694 695/* SAM_ACCOUNT_INFO (0x5) */ 696typedef struct sam_account_info_info 697{ 698 UNIHDR hdr_acct_name; 699 UNIHDR hdr_full_name; 700 701 uint32 user_rid; 702 uint32 group_rid; 703 704 UNIHDR hdr_home_dir; 705 UNIHDR hdr_dir_drive; 706 UNIHDR hdr_logon_script; 707 UNIHDR hdr_acct_desc; 708 UNIHDR hdr_workstations; 709 710 NTTIME logon_time; 711 NTTIME logoff_time; 712 713 uint32 logon_divs; /* 0xA8 */ 714 uint32 ptr_logon_hrs; 715 716 uint16 bad_pwd_count; 717 uint16 logon_count; 718 NTTIME pwd_last_set_time; 719 NTTIME acct_expiry_time; 720 721 uint32 acb_info; 722 uint8 nt_pwd[16]; 723 uint8 lm_pwd[16]; 724 uint8 nt_pwd_present; 725 uint8 lm_pwd_present; 726 uint8 pwd_expired; 727 728 UNIHDR hdr_comment; 729 UNIHDR hdr_parameters; 730 uint16 country; 731 uint16 codepage; 732 733 BUFHDR2 hdr_sec_desc; /* security descriptor */ 734 735 UNIHDR hdr_profile; 736 UNIHDR hdr_reserved[3]; /* space for more strings */ 737 uint32 dw_reserved[4]; /* space for more data - first two seem to 738 be an NTTIME */ 739 740 UNISTR2 uni_acct_name; 741 UNISTR2 uni_full_name; 742 UNISTR2 uni_home_dir; 743 UNISTR2 uni_dir_drive; 744 UNISTR2 uni_logon_script; 745 UNISTR2 uni_acct_desc; 746 UNISTR2 uni_workstations; 747 748 uint32 unknown1; /* 0x4EC */ 749 uint32 unknown2; /* 0 */ 750 751 BUFFER4 buf_logon_hrs; 752 UNISTR2 uni_comment; 753 UNISTR2 uni_parameters; 754 SAM_PWD pass; 755 BUFFER4 buf_sec_desc; 756 UNISTR2 uni_profile; 757 758} SAM_ACCOUNT_INFO; 759 760/* SAM_GROUP_MEM_INFO (0x8) */ 761typedef struct sam_group_mem_info_info 762{ 763 uint32 ptr_rids; 764 uint32 ptr_attribs; 765 uint32 num_members; 766 uint8 unknown[16]; 767 768 uint32 num_members2; 769 uint32 *rids; 770 771 uint32 num_members3; 772 uint32 *attribs; 773 774} SAM_GROUP_MEM_INFO; 775 776/* SAM_ALIAS_INFO (0x9) */ 777typedef struct sam_alias_info_info 778{ 779 UNIHDR hdr_als_name; 780 uint32 als_rid; 781 BUFHDR2 hdr_sec_desc; /* security descriptor */ 782 UNIHDR hdr_als_desc; 783 uint8 reserved[40]; 784 785 UNISTR2 uni_als_name; 786 BUFFER4 buf_sec_desc; 787 UNISTR2 uni_als_desc; 788 789} SAM_ALIAS_INFO; 790 791/* SAM_ALIAS_MEM_INFO (0xC) */ 792typedef struct sam_alias_mem_info_info 793{ 794 uint32 num_members; 795 uint32 ptr_members; 796 uint8 unknown[16]; 797 798 uint32 num_sids; 799 uint32 *ptr_sids; 800 DOM_SID2 *sids; 801 802} SAM_ALIAS_MEM_INFO; 803 804 805/* SAM_DELTA_POLICY (0x0D) */ 806typedef struct 807{ 808 uint32 max_log_size; /* 0x5000 */ 809 UINT64_S audit_retention_period; /* 0 */ 810 uint32 auditing_mode; /* 0 */ 811 uint32 num_events; 812 uint32 ptr_events; 813 UNIHDR hdr_dom_name; 814 uint32 sid_ptr; 815 816 uint32 paged_pool_limit; /* 0x02000000 */ 817 uint32 non_paged_pool_limit; /* 0x00100000 */ 818 uint32 min_workset_size; /* 0x00010000 */ 819 uint32 max_workset_size; /* 0x0f000000 */ 820 uint32 page_file_limit; /* 0 */ 821 UINT64_S time_limit; /* 0 */ 822 NTTIME modify_time; /* 0x3c*/ 823 NTTIME create_time; /* a7080110 */ 824 BUFHDR2 hdr_sec_desc; 825 826 uint32 num_event_audit_options; 827 uint32 event_audit_option; 828 829 UNISTR2 domain_name; 830 DOM_SID2 domain_sid; 831 832 BUFFER4 buf_sec_desc; 833} SAM_DELTA_POLICY; 834 835/* SAM_DELTA_TRUST_DOMS */ 836typedef struct 837{ 838 uint32 buf_size; 839 SEC_DESC *sec_desc; 840 DOM_SID2 sid; 841 UNIHDR hdr_domain; 842 843 uint32 unknown0; 844 uint32 unknown1; 845 uint32 unknown2; 846 847 uint32 buf_size2; 848 uint32 ptr; 849 850 uint32 unknown3; 851 UNISTR2 domain; 852 853} SAM_DELTA_TRUSTDOMS; 854 855/* SAM_DELTA_PRIVS (0x10) */ 856typedef struct 857{ 858 DOM_SID2 sid; 859 860 uint32 priv_count; 861 uint32 priv_control; 862 863 uint32 priv_attr_ptr; 864 uint32 priv_name_ptr; 865 866 uint32 paged_pool_limit; /* 0x02000000 */ 867 uint32 non_paged_pool_limit; /* 0x00100000 */ 868 uint32 min_workset_size; /* 0x00010000 */ 869 uint32 max_workset_size; /* 0x0f000000 */ 870 uint32 page_file_limit; /* 0 */ 871 UINT64_S time_limit; /* 0 */ 872 uint32 system_flags; /* 1 */ 873 BUFHDR2 hdr_sec_desc; 874 875 uint32 buf_size2; 876 877 uint32 attribute_count; 878 uint32 *attributes; 879 880 uint32 privlist_count; 881 UNIHDR *hdr_privslist; 882 UNISTR2 *uni_privslist; 883 884 BUFFER4 buf_sec_desc; 885} SAM_DELTA_PRIVS; 886 887/* SAM_DELTA_SECRET */ 888typedef struct 889{ 890 uint32 buf_size; 891 SEC_DESC *sec_desc; 892 UNISTR2 secret; 893 894 uint32 count1; 895 uint32 count2; 896 uint32 ptr; 897 NTTIME time1; 898 uint32 count3; 899 uint32 count4; 900 uint32 ptr2; 901 NTTIME time2; 902 uint32 unknow1; 903 904 uint32 buf_size2; 905 uint32 ptr3; 906 uint32 unknow2; /* 0x0 12 times */ 907 908 uint32 chal_len; 909 uint32 reserved1; /* 0 */ 910 uint32 chal_len2; 911 uint8 chal[16]; 912 913 uint32 key_len; 914 uint32 reserved2; /* 0 */ 915 uint32 key_len2; 916 uint8 key[8]; 917 918 uint32 buf_size3; 919 SEC_DESC *sec_desc2; 920 921} SAM_DELTA_SECRET; 922 923/* SAM_DELTA_MOD_COUNT (0x16) */ 924typedef struct 925{ 926 uint32 seqnum; 927 uint32 dom_mod_count_ptr; 928 UINT64_S dom_mod_count; /* domain mod count at last sync */ 929} SAM_DELTA_MOD_COUNT; 930 931typedef union sam_delta_ctr_info 932{ 933 SAM_DOMAIN_INFO domain_info ; 934 SAM_GROUP_INFO group_info ; 935 SAM_ACCOUNT_INFO account_info; 936 SAM_GROUP_MEM_INFO grp_mem_info; 937 SAM_ALIAS_INFO alias_info ; 938 SAM_ALIAS_MEM_INFO als_mem_info; 939 SAM_DELTA_POLICY policy_info; 940 SAM_DELTA_PRIVS privs_info; 941 SAM_DELTA_MOD_COUNT mod_count; 942 SAM_DELTA_TRUSTDOMS trustdoms_info; 943 SAM_DELTA_SECRET secret_info; 944} SAM_DELTA_CTR; 945 946/* NET_R_SAM_SYNC */ 947typedef struct net_r_sam_sync_info 948{ 949 DOM_CRED srv_creds; 950 951 uint32 sync_context; 952 953 uint32 ptr_deltas; 954 uint32 num_deltas; 955 uint32 ptr_deltas2; 956 uint32 num_deltas2; 957 958 SAM_DELTA_HDR *hdr_deltas; 959 SAM_DELTA_CTR *deltas; 960 961 NTSTATUS status; 962} NET_R_SAM_SYNC; 963 964/* NET_Q_SAM_DELTAS */ 965typedef struct net_q_sam_deltas_info 966{ 967 UNISTR2 uni_srv_name; 968 UNISTR2 uni_cli_name; 969 DOM_CRED cli_creds; 970 DOM_CRED ret_creds; 971 972 uint32 database_id; 973 UINT64_S dom_mod_count; /* domain mod count at last sync */ 974 975 uint32 max_size; /* preferred maximum length */ 976 977} NET_Q_SAM_DELTAS; 978 979/* NET_R_SAM_DELTAS */ 980typedef struct net_r_sam_deltas_info 981{ 982 DOM_CRED srv_creds; 983 984 UINT64_S dom_mod_count; /* new domain mod count */ 985 986 uint32 ptr_deltas; 987 uint32 num_deltas; 988 uint32 num_deltas2; 989 990 SAM_DELTA_HDR *hdr_deltas; 991 SAM_DELTA_CTR *deltas; 992 993 NTSTATUS status; 994} NET_R_SAM_DELTAS; 995 996#endif /* _RPC_NETLOGON_H */ 997