* fixed level2 of QueryUserInfo
[samba.git] / source / librpc / idl / samr.idl
1 /*
2   samr interface definition
3
4 */
5
6 /*
7   Thanks to Todd Sabin for some information from his samr.idl in acltools
8 */
9
10 [ uuid(12345778-1234-abcd-ef00-0123456789ac),
11   version(1.0),
12   pointer_default(unique)
13 ] interface samr
14 {
15         /******************/
16         /* Function: 0x00 */
17         NTSTATUS samr_Connect (
18                 /* notice the lack of [string] */
19                 [in]       uint16 *system_name,
20                 [in]       uint32 access_mask,
21                 [out,ref]  policy_handle *handle
22                 );
23
24
25         /******************/
26         /* Function: 0x01 */
27         NTSTATUS samr_Close (
28                 [in,out,ref]  policy_handle *handle
29                 );
30
31         /******************/
32         /* Function: 0x02 */
33         NTSTATUS samr_SetSecurity ();
34
35         /******************/
36         /* Function: 0x03 */
37
38         typedef struct {
39                 uint32 sd_size;
40                 [subcontext] security_descriptor *sd;
41         } samr_SdBuf;
42
43         NTSTATUS samr_QuerySecurity (
44                 [in,ref]          policy_handle *handle,
45                 [in]              uint32 sec_info,
46                 [out]             samr_SdBuf *sdbuf
47                 );
48
49         /******************/
50         /* Function: 0x04 */
51         NTSTATUS samr_Shutdown ();
52
53         /******************/
54         /* Function: 0x05 */
55         typedef struct {
56                 [value(2*strlen_m(r->name))] uint16 name_len;
57                 [value(2*strlen_m(r->name))] uint16 name_size;
58                 unistr_noterm *name;
59         } samr_Name;    
60
61         NTSTATUS samr_LookupDomain (
62                 [in,ref]  policy_handle *handle,                
63                 [in,ref]  samr_Name *domain,
64                 [out]     dom_sid2 *sid
65                 );
66
67
68         /******************/
69         /* Function: 0x06 */
70
71         typedef struct {
72                 uint32 idx;
73                 samr_Name name;
74         } samr_SamEntry;
75
76         typedef struct {
77                 uint32 count;
78                 [size_is(count)] samr_SamEntry *entries;
79         } samr_SamArray;
80
81         NTSTATUS samr_EnumDomains (
82                 [in,ref]      policy_handle *handle,
83                 [in,out,ref]  uint32 *resume_handle,
84                 [in]          uint32 buf_size,
85                 [out]         samr_SamArray *sam,
86                 [out,ref]     uint32 *num_entries
87                 );
88
89
90         /************************/
91         /* Function    0x07     */
92         NTSTATUS samr_OpenDomain(
93                 [in,ref]      policy_handle *handle,
94                 [in]          uint32 access_mask,
95                 [in,ref]      dom_sid2 *sid,
96                 [out,ref]     policy_handle *domain_handle
97                 );
98
99         /************************/
100         /* Function    0x08     */
101
102         typedef struct {
103                 uint16 min_length_password;
104                 uint16 password_history;
105                 uint32 flag;
106                 NTTIME expire;
107                 NTTIME min_passwordage;
108         } samr_DomInfo1;
109
110         typedef struct {
111                 HYPER_T force_logoff_time;
112                 samr_Name unknown1;
113                 samr_Name domain;  /* domain name */
114                 samr_Name primary; /* PDC name if this is a BDC */
115                 HYPER_T sequence_num;
116                 uint32 unknown2;
117                 uint32 role;
118                 uint32 unknown3;
119                 uint32 num_users;
120                 uint32 num_groups;
121                 uint32 num_aliases;
122         } samr_DomInfo2;
123
124         typedef struct {
125                 HYPER_T force_logoff_time;
126         } samr_DomInfo3;
127
128         typedef struct {
129                 samr_Name unknown;
130         } samr_DomInfo4;
131
132         typedef struct {
133                 samr_Name domain;
134         } samr_DomInfo5;
135
136         typedef struct {
137                 samr_Name primary;
138         } samr_DomInfo6;
139
140         typedef struct {
141                 uint32 role;
142         } samr_DomInfo7;
143
144         typedef struct {
145                 HYPER_T sequence_num;
146                 NTTIME last_xxx_time;
147         } samr_DomInfo8;
148
149         typedef struct {
150                 uint32 unknown;
151         } samr_DomInfo9;
152
153         typedef struct {
154                 HYPER_T force_logoff_time;
155                 samr_Name unknown1;
156                 samr_Name domain;
157                 samr_Name primary;
158                 HYPER_T sequence_num;
159                 uint32 unknown2;
160                 uint32 role;
161                 uint32 unknown3;
162                 uint32 num_users;
163                 uint32 num_groups;
164                 uint32 num_aliases;
165                 HYPER_T lockout_duration;
166                 HYPER_T lockout_window;
167                 uint16 lockout_threshold;
168         } samr_DomInfo11;
169
170         typedef struct {
171                 HYPER_T lockout_duration;
172                 HYPER_T lockout_window;
173                 uint16 lockout_threshold;
174         } samr_DomInfo12;
175
176         typedef struct {
177                 HYPER_T sequence_num;
178                 NTTIME last_xxx_time;
179                 uint32 unknown1;
180                 uint32 unknown2;
181         } samr_DomInfo13;
182
183         typedef union {
184                 [case(1)] samr_DomInfo1 info1;
185                 [case(2)] samr_DomInfo2 info2;
186                 [case(3)] samr_DomInfo3 info3;
187                 [case(4)] samr_DomInfo4 info4;
188                 [case(5)] samr_DomInfo5 info5;
189                 [case(6)] samr_DomInfo6 info6;
190                 [case(7)] samr_DomInfo7 info7;
191                 [case(8)] samr_DomInfo8 info8;
192                 [case(9)] samr_DomInfo9 info9;
193                 [case(11)] samr_DomInfo11 info11;
194                 [case(12)] samr_DomInfo12 info12;
195                 [case(13)] samr_DomInfo13 info13;
196         } samr_DomainInfo;
197
198         NTSTATUS samr_QueryDomainInfo(
199                 [in,ref]      policy_handle *handle,
200                 [in]          uint16 level,
201                 [out,switch_is(level)] samr_DomainInfo *info
202                 );
203
204         /************************/
205         /* Function    0x09     */
206         NTSTATUS samr_SET_DOMAIN_INFO();
207
208         /************************/
209         /* Function    0x0a     */
210         NTSTATUS samr_CREATE_DOM_GROUP();
211
212         /************************/
213         /* Function    0x0b     */
214         NTSTATUS samr_EnumDomainGroups(
215                 [in,ref]      policy_handle *handle,
216                 [in,out,ref]  uint32 *resume_handle,
217                 [in]          uint32 max_size,
218                 [out]         samr_SamArray *sam,
219                 [out,ref]     uint32 num_entries
220                 );
221
222         /************************/
223         /* Function    0x0c     */
224         NTSTATUS samr_CreateUser(
225                 [in,ref]      policy_handle *handle,
226                 [in,ref]      samr_Name *username,
227                 [in]          uint32 access_mask,
228                 [out,ref]     policy_handle *acct_handle,
229                 [out,ref]     uint32 *rid
230                 );
231
232         /************************/
233         /* Function    0x0d     */
234         NTSTATUS samr_EnumDomainUsers(
235                 [in,ref]      policy_handle *handle,
236                 [in,out,ref]  uint32 *resume_handle,
237                 [in]          uint32 acct_flags,
238                 [in]          uint32 max_size,
239                 [out]         samr_SamArray *sam,
240                 [out,ref]     uint32 num_entries
241                 );
242
243         /************************/
244         /* Function    0x0e     */
245         NTSTATUS samr_CREATE_DOM_ALIAS();
246
247         /************************/
248         /* Function    0x0f     */
249         NTSTATUS samr_EnumDomainAliases(
250                 [in,ref]      policy_handle *handle,
251                 [in,out,ref]  uint32 *resume_handle,
252                 [in]          uint32 max_size,
253                 [out]         samr_SamArray *sam,
254                 [out,ref]     uint32 num_entries
255                 );
256
257         /************************/
258         /* Function    0x10     */
259
260         typedef struct {
261                 uint32 count;
262                 [size_is(count)] dom_sid2 *sids;
263         } samr_Sids;
264
265         typedef struct {
266                 uint32 count;
267                 [size_is(count)] uint32 *ids;
268         } samr_Ids;
269
270         NTSTATUS samr_GetAliasMembership(
271                 [in,ref]      policy_handle *handle,
272                 [in]          samr_Sids *sids,
273                 [out]         samr_Ids *rids
274                 );
275
276         /************************/
277         /* Function    0x11     */
278
279         NTSTATUS samr_LookupNames(
280                 [in,ref]      policy_handle *handle,
281                 [in]          uint32 num_names,
282                 [in,ref,size_is(1000),length_is(num_names)] samr_Name *names,
283                 [out]         samr_Ids rids,
284                 [out]         samr_Ids types
285                 );
286
287
288         /************************/
289         /* Function    0x12     */
290
291         typedef struct {
292                 uint32 count;
293                 [size_is(count)] samr_Name *names;
294         } samr_Names;
295
296         NTSTATUS samr_LookupRids(
297                 [in,ref]      policy_handle *handle,
298                 [in]          uint32 num_rids,
299                 [in,ref,size_is(1000),length_is(num_rids)] uint32 *rids,
300                 [out]         samr_Names names,
301                 [out]         samr_Ids types
302                 );
303
304         /************************/
305         /* Function    0x13     */
306         NTSTATUS samr_OpenGroup(
307                 [in,ref]      policy_handle *handle,
308                 [in]          uint32 access_mask,
309                 [in]          uint32 rid,
310                 [out,ref]     policy_handle *acct_handle
311                 );
312
313
314         /************************/
315         /* Function    0x14     */
316
317         typedef struct {
318                 samr_Name name;
319                 uint32 unknown;
320                 uint32 num_members;
321                 samr_Name description;
322         } samr_GroupInfoAll;
323
324         typedef struct {
325                 samr_Name Name;
326         } samr_GroupInfoName;
327
328         typedef struct {
329                 uint32 unknown;
330         } samr_GroupInfoX;
331
332         typedef struct {
333                 samr_Name description;
334         } samr_GroupInfoDesciption;
335
336         typedef union {
337                 [case(1)] samr_GroupInfoAll all;
338                 [case(2)] samr_GroupInfoName name;
339                 [case(3)] samr_GroupInfoX unknown;
340                 [case(4)] samr_GroupInfoDesciption description;
341         } samr_GroupInfo;
342
343         NTSTATUS samr_QueryGroupInfo(
344                 [in,ref]                  policy_handle *handle,
345                 [in]                      uint16 level,
346                 [out,switch_is(level)]    samr_GroupInfo *info
347                 );
348
349         /************************/
350         /* Function    0x15     */
351         NTSTATUS samr_SET_GROUPINFO();
352
353         /************************/
354         /* Function    0x16     */
355         NTSTATUS samr_ADD_GROUPMEM();
356
357         /************************/
358         /* Function    0x17     */
359         NTSTATUS samr_DELETE_DOM_GROUP();
360
361         /************************/
362         /* Function    0x18     */
363         NTSTATUS samr_DEL_GROUPMEM();
364
365         /************************/
366         /* Function    0x19     */
367         NTSTATUS samr_QUERY_GROUPMEM();
368
369         /************************/
370         /* Function    0x1a     */
371         NTSTATUS samr_SET_MEMBER_ATTRIBUTES_OF_GROUP();
372
373
374         /************************/
375         /* Function    0x1b     */
376         NTSTATUS samr_OpenAlias (
377                 [in,ref]      policy_handle *handle,
378                 [in]          uint32 access_mask,
379                 [in]          uint32 rid,
380                 [out,ref]     policy_handle *acct_handle
381                 );
382
383
384         /************************/
385         /* Function    0x1c     */
386
387         typedef struct {
388                 samr_Name name;
389                 uint32 num_members;
390                 samr_Name description;
391         } samr_AliasInfoAll;
392
393         typedef struct {
394                 samr_Name name;
395         } samr_AliasInfoName;
396
397         typedef struct {
398                 samr_Name description;
399         } samr_AliasInfoDescription;
400
401         typedef union {
402                 [case(1)] samr_AliasInfoAll all;
403                 [case(2)] samr_AliasInfoName name;
404                 [case(3)] samr_AliasInfoDescription description;
405         } samr_AliasInfo;
406
407         NTSTATUS samr_QueryAliasInfo(
408                 [in,ref]                  policy_handle *handle,
409                 [in]                      uint16 level,
410                 [out,switch_is(level)]    samr_AliasInfo *info
411                 );
412
413         /************************/
414         /* Function    0x1d     */
415         NTSTATUS samr_SET_ALIASINFO();
416
417         /************************/
418         /* Function    0x1e     */
419         NTSTATUS samr_DELETE_DOM_ALIAS();
420
421         /************************/
422         /* Function    0x1f     */
423         NTSTATUS samr_ADD_ALIASMEM();
424
425         /************************/
426         /* Function    0x20     */
427         NTSTATUS samr_DEL_ALIASMEM();
428
429         /************************/
430         /* Function    0x21     */
431         NTSTATUS samr_GET_MEMBERS_IN_ALIAS();
432
433         /************************/
434         /* Function    0x22     */
435         NTSTATUS samr_OpenUser(
436                 [in,ref]      policy_handle *handle,
437                 [in]          uint32 access_mask,
438                 [in]          uint32 rid,
439                 [out,ref]     policy_handle *acct_handle
440                 );
441
442         /************************/
443         /* Function    0x23     */
444         NTSTATUS samr_DeleteUser(
445                 [in,out,ref]   policy_handle *handle
446                 );
447
448         /************************/
449         /* Function    0x24     */
450         typedef struct {
451                 samr_Name username;
452                 samr_Name full_name;
453                 uint32 primary_group_rid;
454                 samr_Name description;
455                 samr_Name comment;
456         } samr_UserInfo1;
457
458         typedef struct {
459                 samr_Name comment;
460                 samr_Name unknown; /* settable, but doesn't stick. probably obsolete */
461                 uint16 country_code;
462                 uint16 code_page;
463         } samr_UserInfo2;
464
465         typedef struct {
466                 samr_Name username;
467                 samr_Name full_name;
468                 uint32 Rid;
469                 uint32 primary_group_rid;
470                 samr_Name home_directory;
471                 samr_Name home_drive;
472                 samr_Name logon_script;
473                 samr_Name profile;
474                 samr_Name workstations;
475                 NTTIME last_logon;
476                 NTTIME last_logoff;
477                 NTTIME last_pwd_change;
478                 NTTIME allow_pwd_change;
479                 NTTIME force_pwd_change;
480                 uint32 units_per_week;
481                 [size_is(1260), length_is(units_per_week/8)] uint8 *logon_hours;
482                 uint16 bad_pwd_count;
483                 uint16 num_logons;
484                 uint32 acct_flags;
485         } samr_UserInfo3;
486
487         typedef struct {
488                 uint32 units_per_week;
489                 [size_is(1260), length_is(units_per_week/8)] uint8 *logon_hours;
490         } samr_UserInfo4;
491
492         typedef struct {
493                 samr_Name username;
494                 samr_Name full_name;
495                 uint32 rid;
496                 uint32 primary_group_rid;
497                 samr_Name home_directory;
498                 samr_Name home_drive;
499                 samr_Name logon_script;
500                 samr_Name profile;
501                 samr_Name description;
502                 samr_Name workstations;
503                 NTTIME last_logon;
504                 NTTIME last_logoff;
505                 uint32 units_per_week;
506                 [size_is(1260), length_is(units_per_week/8)] uint8 *logon_hours;
507                 uint16 bad_pwd_count;
508                 uint16 num_logons;
509                 NTTIME last_pwd_change;
510                 NTTIME acct_expiry;
511                 uint32 acct_flags;
512         } samr_UserInfo5;
513
514         typedef struct {
515                 samr_Name username;
516                 samr_Name full_name;
517         } samr_UserInfo6;
518
519         typedef struct {
520                 samr_Name username;
521         } samr_UserInfo7;
522
523         typedef struct {
524                 samr_Name full_name;
525         } samr_UserInfo8;
526
527         typedef struct {
528                 uint32 PrimaryGroupRid;
529         } samr_UserInfo9;
530
531         typedef struct {
532                 samr_Name home_dir;
533                 samr_Name home_drive;
534         } samr_UserInfo10;
535
536         typedef struct {
537                 samr_Name logon_script;
538         } samr_UserInfo11;
539
540         typedef struct {
541                 samr_Name profile;
542         } samr_UserInfo12;
543
544         typedef struct {
545                 samr_Name description;
546         } samr_UserInfo13;
547
548         typedef struct {
549                 samr_Name workstations;
550         } samr_UserInfo14;
551
552         typedef struct {
553                 uint32 acct_flags;
554         } samr_UserInfo16;
555         
556         typedef struct {
557                 NTTIME acct_expiry;
558         } samr_UserInfo17;
559
560         typedef struct {
561                 samr_Name callback;
562         } samr_UserInfo20;
563
564         typedef struct {
565                 NTTIME last_logon;
566                 NTTIME last_logoff;
567                 NTTIME last_pwd_change;
568                 NTTIME acct_expiry;
569                 NTTIME allow_pwd_change;
570                 NTTIME force_pwd_change;
571                 samr_Name username;
572                 samr_Name full_name;
573                 samr_Name home_dir;
574                 samr_Name home_drive;
575                 samr_Name logon_script;
576                 samr_Name profile;
577                 samr_Name description;
578                 samr_Name workstations;
579                 samr_Name comment;
580                 samr_Name callback;
581                 samr_Name unknown1;
582                 samr_Name unknown2;
583                 samr_Name unknown3;
584                 uint32 buf_count;
585                 [size_is(buf_count)] uint8 *buffer;
586                 uint32 rid;
587                 uint32 primary_group_rid;
588                 uint32 acct_flags;
589                 uint32 fields_present;
590                 uint32 units_per_week;
591                 [size_is(1260), length_is(units_per_week/8)] uint8 *logon_hours;
592                 uint16 bad_pwd_count;
593                 uint16 num_logons;
594                 uint16 country_code;
595                 uint16 code_page;
596                 uint8  nt_pwd_set;
597                 uint8  lm_pwd_set;
598                 uint8  expired_flag;
599                 uint8  unknown4;
600         } samr_UserInfo21;
601
602         typedef union {
603                 [case(1)] samr_UserInfo1 info1;
604                 [case(2)] samr_UserInfo2 info2;
605                 [case(3)] samr_UserInfo3 info3;
606                 [case(4)] samr_UserInfo4 info4;
607                 [case(5)] samr_UserInfo5 info5;
608                 [case(6)] samr_UserInfo6 info6;
609                 [case(7)] samr_UserInfo7 info7;
610                 [case(8)] samr_UserInfo8 info8;
611                 [case(9)] samr_UserInfo9 info9;
612                 [case(10)] samr_UserInfo10 info10;
613                 [case(11)] samr_UserInfo11 info11;
614                 [case(12)] samr_UserInfo12 info12;
615                 [case(13)] samr_UserInfo13 info13;
616                 [case(14)] samr_UserInfo14 info14;
617                 [case(16)] samr_UserInfo16 info16;
618                 [case(17)] samr_UserInfo17 info17;
619                 [case(20)] samr_UserInfo20 info20;
620                 [case(21)] samr_UserInfo21 info21;
621         } samr_UserInfo;
622
623         NTSTATUS samr_QueryUserInfo(
624                 [in,ref]                  policy_handle *handle,
625                 [in]                      uint16 level,
626                 [out,switch_is(level)]    samr_UserInfo *info
627                 );
628
629
630         /************************/
631         /* Function    0x25     */
632         NTSTATUS samr_SetUserInfo(
633                 [in,ref]                   policy_handle *handle,
634                 [in]                       uint16 level,
635                 [in,ref,switch_is(level)]  samr_UserInfo *info
636                 );
637
638         /************************/
639         /* Function    0x26     */
640         NTSTATUS samr_CHANGE_PASSWORD_USER();
641
642         /************************/
643         /* Function    0x27     */
644         NTSTATUS samr_GET_GROUPS_FOR_USER();
645
646         /************************/
647         /* Function    0x28     */
648         NTSTATUS samr_QUERY_DISPINFO();
649
650         /************************/
651         /* Function    0x29     */
652         NTSTATUS samr_GET_DISPLAY_ENUMERATION_INDEX();
653
654         /************************/
655         /* Function    0x2a     */
656         NTSTATUS samr_TEST_PRIVATE_FUNCTIONS_DOMAIN();
657
658         /************************/
659         /* Function    0x2b     */
660         NTSTATUS samr_TEST_PRIVATE_FUNCTIONS_USER();
661
662         /************************/
663         /* Function    0x2c     */
664         NTSTATUS samr_GET_USRDOM_PWINFO();
665
666         /************************/
667         /* Function    0x2d     */
668         NTSTATUS samr_REMOVE_MEMBER_FROM_FOREIGN_DOMAIN();
669
670         /************************/
671         /* Function    0x2e     */
672         NTSTATUS samr_QUERY_INFORMATION_DOMAIN2();
673
674         /************************/
675         /* Function    0x2f     */
676         NTSTATUS samr_QUERY_INFORMATION_USER2();
677
678         /************************/
679         /* Function    0x30     */
680         NTSTATUS samr_QUERY_DISPINFO2();
681
682         /************************/
683         /* Function    0x31     */
684         NTSTATUS samr_GET_DISPLAY_ENUMERATION_INDEX2();
685
686         /************************/
687         /* Function    0x32     */
688         NTSTATUS samr_CREATE_USER2_IN_DOMAIN();
689
690         /************************/
691         /* Function    0x33     */
692         NTSTATUS samr_QUERY_DISPINFO3();
693
694         /************************/
695         /* Function    0x34     */
696         NTSTATUS samr_ADD_MULTIPLE_MEMBERS_TO_ALIAS();
697
698         /************************/
699         /* Function    0x35     */
700         NTSTATUS samr_REMOVE_MULTIPLE_MEMBERS_FROM_ALIAS();
701
702         /************************/
703         /* Function    0x36     */
704         NTSTATUS samr_OEM_CHANGE_PASSWORD_USER2();
705
706         /************************/
707         /* Function    0x37     */
708         NTSTATUS samr_UNICODE_CHANGE_PASSWORD_USER2();
709
710         /************************/
711         /* Function    0x38     */
712         NTSTATUS samr_GET_DOM_PWINFO();
713
714         /************************/
715         /* Function    0x39     */
716         NTSTATUS samr_CONNECT2();
717
718         /************************/
719         /* Function    0x3a     */
720         NTSTATUS samr_SET_USERINFO2();
721
722         /************************/
723         /* Function    0x3b     */
724         NTSTATUS samr_SET_BOOT_KEY_INFORMATION();
725
726         /************************/
727         /* Function    0x3c     */
728         NTSTATUS samr_GET_BOOT_KEY_INFORMATION();
729
730         /************************/
731         /* Function    0x3d     */
732         NTSTATUS samr_CONNECT3();
733
734         /************************/
735         /* Function    0x3e     */
736         NTSTATUS samr_Connect4(
737                 [in] unistr *system_name,
738                 [in] uint32 unknown,
739                 [in] uint32 access_mask,
740                 [out,ref]  policy_handle *handle
741                 );
742
743         /************************/
744         /* Function    0x3f     */
745         NTSTATUS samr_UNICODE_CHANGE_PASSWORD_USER3();
746
747         /************************/
748         /* Function    0x40      */
749         NTSTATUS samr_CONNECT5();
750
751         /************************/
752         /* Function    0x41     */
753         NTSTATUS samr_RID_TO_SID();
754
755         /************************/
756         /* Function    0x42     */
757         NTSTATUS samr_SET_DSRM_PASSWORD();
758
759         /************************/
760         /* Function    0x43     */
761         NTSTATUS samr_VALIDATE_PASSWORD();
762
763 }