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