r4195: added IDL, test suite and server side code for lsa_LookupPrivValue
[samba.git] / source / librpc / idl / lsa.idl
1 #include "idl_types.h"
2
3 /*
4   lsa interface definition
5 */
6
7 [ uuid("12345778-1234-abcd-ef00-0123456789ab"),
8   version(0.0),
9   endpoint("ncacn_np:[\\pipe\\lsarpc]","ncacn_np:[\\pipe\\lsass]", "ncacn_ip_tcp:"),
10   pointer_default(unique),
11   helpstring("Local Server Authentication(?)"),
12   depends(security)
13 ] interface lsarpc
14 {
15         /******************/
16         /* Function: 0x00 */
17         NTSTATUS lsa_Close (
18                 [in,out,ref]     policy_handle *handle
19                 );
20         
21
22         /******************/
23         /* Function: 0x01 */
24         NTSTATUS lsa_Delete (
25                 [in,ref]     policy_handle *handle
26                 );
27
28
29         /******************/
30         /* Function: 0x02 */
31
32         typedef struct {
33                 [value(2*strlen_m(r->string))] uint16 length;
34                 [value(r->length)] uint16 size;
35                 unistr_noterm *string;
36         } lsa_String;
37
38         typedef struct {
39                 uint32 low;
40                 uint32 high;
41         } lsa_LUID;
42         
43         typedef struct {
44                 lsa_String name;
45                 lsa_LUID luid;
46         } lsa_PrivEntry;
47
48         typedef struct {
49                 uint32 count;
50                 [size_is(count)] lsa_PrivEntry *privs;
51         } lsa_PrivArray;
52
53         NTSTATUS lsa_EnumPrivs (
54                 [in,ref]     policy_handle *handle,
55                 [in,out,ref] uint32 *resume_handle,
56                 [in]         uint32 max_count,
57                 [out,ref]    lsa_PrivArray *privs
58                 );
59
60         /******************/
61         /* Function: 0x03 */
62
63         NTSTATUS lsa_QuerySecurity (
64                 [in,ref]     policy_handle *handle,
65                 [in]         uint32 sec_info,
66                 [out]        sec_desc_buf *sdbuf
67                 );
68
69
70         /******************/
71         /* Function: 0x04 */
72         NTSTATUS lsa_SetSecObj ();
73
74
75         /******************/
76         /* Function: 0x05 */
77         NTSTATUS lsa_ChangePassword ();
78
79
80         /******************/
81         /* Function: 0x06 */
82         typedef struct {
83                 uint32  len; /* ignored */
84                 uint16  impersonation_level;
85                 uint8   context_mode;
86                 uint8   effective_only;
87         } lsa_QosInfo;
88         
89         typedef struct {
90                 uint32 len; /* ignored */
91                 uint8 *root_dir;
92                 unistr *object_name;
93                 uint32 attributes;
94                 security_descriptor *sec_desc;
95                 lsa_QosInfo *sec_qos;
96         } lsa_ObjectAttribute;
97
98         /* notice the screwup with the system_name - thats why MS created
99            OpenPolicy2 */
100         NTSTATUS lsa_OpenPolicy (
101                 [in]       uint16 *system_name,
102                 [in,ref]   lsa_ObjectAttribute *attr,
103                 [in]       uint32 access_mask,
104                 [out,ref]  policy_handle *handle
105                 );
106         
107
108
109         /******************/
110         /* Function: 0x07 */
111
112         typedef struct {
113                 uint32 percent_full;
114                 uint32 log_size;
115                 NTTIME retention_time;
116                 uint8  shutdown_in_progress;
117                 NTTIME time_to_shutdown;
118                 uint32 next_audit_record;
119                 uint32 unknown;
120         } lsa_AuditLogInfo;
121
122         typedef struct {
123                 uint32 auditing_mode;
124                 [size_is(count)] uint32 *settings;
125                 uint32 count;
126         } lsa_AuditEventsInfo;
127
128         typedef struct {
129                 lsa_String name;
130                 dom_sid2 *sid;
131         } lsa_DomainInfo;
132
133         typedef struct {
134                 lsa_String name;
135         } lsa_PDAccountInfo;
136
137         typedef struct {
138                 uint16 unknown; /* an midl padding bug? */
139                 uint16 role;
140         } lsa_ServerRole;
141
142         typedef struct {
143                 lsa_String source;
144                 lsa_String account;
145         } lsa_ReplicaSourceInfo;
146
147         typedef struct {
148                 uint32 paged_pool;
149                 uint32 non_paged_pool;
150                 uint32 min_wss;
151                 uint32 max_wss;
152                 uint32 pagefile;
153                 HYPER_T unknown;
154         } lsa_DefaultQuotaInfo;
155
156         typedef struct {
157                 HYPER_T modified_id;
158                 NTTIME db_create_time;
159         } lsa_ModificationInfo;
160
161         typedef struct {
162                 uint8 shutdown_on_full;
163         } lsa_AuditFullSetInfo;
164
165         typedef struct {
166                 uint16 unknown; /* an midl padding bug? */
167                 uint8 shutdown_on_full;
168                 uint8 log_is_full;
169         } lsa_AuditFullQueryInfo;
170
171         typedef struct {
172                 lsa_String name;
173                 lsa_String dns_domain;
174                 lsa_String dns_forest;
175                 GUID domain_guid;
176                 dom_sid2 *sid;
177         } lsa_DnsDomainInfo;
178
179         typedef enum {
180                 LSA_POLICY_INFO_AUDIT_LOG=1,
181                 LSA_POLICY_INFO_AUDIT_EVENTS=2,
182                 LSA_POLICY_INFO_DOMAIN=3,
183                 LSA_POLICY_INFO_PD=4,
184                 LSA_POLICY_INFO_ACCOUNT_DOMAIN=5,
185                 LSA_POLICY_INFO_ROLE=6,
186                 LSA_POLICY_INFO_REPLICA=7,
187                 LSA_POLICY_INFO_QUOTA=8,
188                 LSA_POLICY_INFO_DB=9,
189                 LSA_POLICY_INFO_AUDIT_FULL_SET=10,
190                 LSA_POLICY_INFO_AUDIT_FULL_QUERY=11,
191                 LSA_POLICY_INFO_DNS=12
192         } lsaPolicyInfo;
193
194         typedef union {
195                 [case(LSA_POLICY_INFO_AUDIT_LOG)]        lsa_AuditLogInfo       audit_log;
196                 [case(LSA_POLICY_INFO_AUDIT_EVENTS)]     lsa_AuditEventsInfo    audit_events;
197                 [case(LSA_POLICY_INFO_DOMAIN)]           lsa_DomainInfo         domain;
198                 [case(LSA_POLICY_INFO_PD)]               lsa_PDAccountInfo      pd;
199                 [case(LSA_POLICY_INFO_ACCOUNT_DOMAIN)]   lsa_DomainInfo         account_domain;
200                 [case(LSA_POLICY_INFO_ROLE)]             lsa_ServerRole         role;
201                 [case(LSA_POLICY_INFO_REPLICA)]          lsa_ReplicaSourceInfo  replica;
202                 [case(LSA_POLICY_INFO_QUOTA)]            lsa_DefaultQuotaInfo   quota;
203                 [case(LSA_POLICY_INFO_DB)]               lsa_ModificationInfo   db;
204                 [case(LSA_POLICY_INFO_AUDIT_FULL_SET)]   lsa_AuditFullSetInfo   auditfullset;
205                 [case(LSA_POLICY_INFO_AUDIT_FULL_QUERY)] lsa_AuditFullQueryInfo auditfullquery;
206                 [case(LSA_POLICY_INFO_DNS)]              lsa_DnsDomainInfo      dns;
207         } lsa_PolicyInformation;
208
209         NTSTATUS lsa_QueryInfoPolicy (
210                 [in,ref]                 policy_handle *handle,
211                 [in]                     uint16 level,
212                 [out,switch_is(level)]   lsa_PolicyInformation *info
213                 );
214
215         /******************/
216         /* Function:       0x08 */
217         NTSTATUS lsa_SetInfoPolicy ();
218
219         /******************/
220         /* Function:       0x09 */
221         NTSTATUS lsa_ClearAuditLog ();
222
223         /******************/
224         /* Function: 0x0a */
225         NTSTATUS lsa_CreateAccount (
226                 [in,ref]    policy_handle *handle,
227                 [in,ref]    dom_sid2 *sid,
228                 [in]        uint32 access_mask,
229                 [out,ref]   policy_handle *acct_handle
230                 );
231
232         /******************/
233         /* Function: 0x0b */
234         typedef struct {
235                 dom_sid2 *sid;
236         } lsa_SidPtr;
237         
238         typedef [public] struct {
239                 [range(0,1000)] uint32 num_sids;
240                 [size_is(num_sids)] lsa_SidPtr *sids;
241         } lsa_SidArray;
242
243         NTSTATUS lsa_EnumAccounts (
244                 [in,ref]     policy_handle *handle,
245                 [in,out,ref] uint32 *resume_handle,
246                 [in,range(0,1000)] uint32 num_entries,
247                 [out,ref]    lsa_SidArray *sids
248                 );
249
250
251         /*************************************************/
252         /* Function: 0x0c                                */
253
254         typedef struct {
255                 lsa_String name;
256                 dom_sid2  *sid;
257         } lsa_TrustInformation;
258
259         NTSTATUS lsa_CreateTrustedDomain(
260                 [in,ref]     policy_handle *handle,
261                 [in,ref]     lsa_TrustInformation *info,
262                 [in]         uint32 access_mask,
263                 [out,ref]    policy_handle *dom_handle
264                 );
265
266
267         /******************/
268         /* Function: 0x0d */
269
270         typedef struct {
271                 lsa_String name;
272                 dom_sid2 *sid;
273         } lsa_DomainInformation;
274
275         typedef struct {
276                 uint32 count;
277                 [size_is(count)] lsa_DomainInformation *domains;
278         } lsa_DomainList;
279
280         NTSTATUS lsa_EnumTrustDom (
281                 [in,ref]     policy_handle *handle,
282                 [in,out,ref] uint32 *resume_handle,
283                 [in,range(0,1000)] uint32 num_entries,
284                 [out,ref]    lsa_DomainList *domains
285                 );
286
287
288         /******************/
289         /* Function: 0x0e */
290
291         typedef struct {
292                 uint16 sid_type;
293                 uint32 rid;
294                 uint32 sid_index;
295         } lsa_TranslatedSid;
296
297         typedef struct {
298                 [range(0,1000)] uint32 count;
299                 [size_is(count)] lsa_TranslatedSid *sids;
300         } lsa_TransSidArray;
301
302         typedef struct {
303                 [range(0,1000)] uint32 count;
304                 [size_is(count)] lsa_TrustInformation *domains;
305                 uint32 max_count;
306         } lsa_RefDomainList;
307
308         NTSTATUS lsa_LookupNames (
309                 [in,ref]     policy_handle *handle,
310                 [in,range(0,1000)] uint32 num_names,
311                 [in,ref,size_is(num_names)]  lsa_String *names,
312                 [out]        lsa_RefDomainList *domains,
313                 [in,out,ref] lsa_TransSidArray *sids,
314                 [in]         uint16 level,
315                 [in,out,ref] uint32 *count
316                 );
317
318
319         /******************/
320         /* Function: 0x0f */
321
322         typedef struct {
323                 uint16 sid_type;
324                 lsa_String name;
325                 uint32 sid_index;
326         } lsa_TranslatedName;
327
328         typedef struct {
329                 [range(0,1000)] uint32 count;
330                 [size_is(count)] lsa_TranslatedName *names;
331         } lsa_TransNameArray;
332
333         NTSTATUS lsa_LookupSids (
334                 [in,ref]     policy_handle *handle,
335                 [in,ref]     lsa_SidArray *sids,
336                 [out]        lsa_RefDomainList *domains,
337                 [in,out,ref] lsa_TransNameArray *names,
338                 [in]         uint16 level,
339                 [in,out,ref] uint32 *count
340                 );
341
342
343         /* Function:        0x10 */
344         NTSTATUS lsa_CreateSecret(
345                 [in,ref]     policy_handle *handle,
346                 [in]         lsa_String       name,
347                 [in]         uint32         access_mask,
348                 [out,ref]    policy_handle *sec_handle
349                 );
350
351
352         /*****************************************/
353         /* Function:     0x11                    */
354         NTSTATUS lsa_OpenAccount (
355                 [in,ref]     policy_handle *handle,
356                 [in,ref]     dom_sid2 *sid,
357                 [in]         uint32 access_mask,
358                 [out,ref]    policy_handle *acct_handle
359                 );
360
361
362         /****************************************/
363         /* Function:    0x12                    */
364
365         typedef struct {
366                 lsa_LUID luid;
367                 uint32 attribute;
368         } lsa_LUIDAttribute;
369         
370         typedef struct {
371                 uint32 count;
372                 uint32 unknown;
373                 [size_is(count)] lsa_LUIDAttribute set[*];
374         } lsa_PrivilegeSet;
375         
376         NTSTATUS lsa_EnumPrivsAccount (
377                 [in,ref]     policy_handle *handle,
378                 [out]        lsa_PrivilegeSet *privs
379                 );
380
381
382         /* Function:            0x13 */
383         NTSTATUS lsa_AddPrivilegesToAccount();
384         
385         /* Function:         0x14 */
386         NTSTATUS lsa_RemovePrivilegesFromAccount();
387
388         /* Function:           0x15 */
389         NTSTATUS lsa_GetQuotasForAccount();
390         
391         /* Function:           0x16 */
392         NTSTATUS lsa_SetQuotasForAccount();
393         
394         /* Function:    0x17 */
395         NTSTATUS lsa_GetSystemAccessAccount();
396         /* Function:    0x18 */
397         NTSTATUS lsa_SetSystemAccessAccount();
398
399         /* Function:        0x19 */
400         NTSTATUS lsa_OpenTrustedDomain(
401                 [in,ref]     policy_handle *handle,
402                 [in,ref]     dom_sid2      *sid,
403                 [in]         uint32         access_mask,
404                 [out,ref]    policy_handle *trustdom_handle
405                 );
406
407         typedef [flag(NDR_PAHEX)] struct {
408                 uint32 length;
409                 uint32 size;
410                 [size_is(size),length_is(length)] uint8 *data;
411         } lsa_DATA_BUF;
412
413         typedef [flag(NDR_PAHEX)] struct {
414                 uint32 size;
415                 [size_is(size)] uint8 *data;
416         } lsa_DATA_BUF2;
417
418         typedef enum {
419                 LSA_TRUSTED_DOMAIN_INFO_NAME=1,
420                 LSA_TRUSTED_DOMAIN_INFO_2=2,
421                 LSA_TRUSTED_DOMAIN_INFO_FLAGS=3,
422                 LSA_TRUSTED_DOMAIN_INFO_PASSWORD=4,
423                 LSA_TRUSTED_DOMAIN_INFO_5=5,
424                 LSA_TRUSTED_DOMAIN_INFO_INFO_EX=6,
425                 LSA_TRUSTED_DOMAIN_INFO_AUTH_INFO=7,
426                 LSA_TRUSTED_DOMAIN_INFO_FULL_INFO=8,
427                 LSA_TRUSTED_DOMAIN_INFO_INFO_ALL=12
428         } lsa_TrustDomInfoEnum;
429
430         typedef struct {
431                 lsa_String     netbios_name;
432         } lsa_TrustDomainInfoName;
433
434         typedef struct {
435                 uint32        flags;
436         } lsa_TrustDomainInfoFlags;
437
438         typedef struct {
439                 lsa_DATA_BUF *password;
440                 lsa_DATA_BUF *old_password;
441         } lsa_TrustDomainInfoPassword;
442
443         typedef struct {
444                 lsa_String     netbios_name;
445                 dom_sid2    *sid;
446         } lsa_TrustDomainInfo5;
447
448         typedef struct {
449                 lsa_String     domain_name;
450                 lsa_String     netbios_name;
451                 dom_sid2    *sid;
452                 uint32       unknown1;
453                 uint32       unknown2;
454                 uint32       unknown3;
455         } lsa_TrustDomainInfoInfoEx;
456
457         typedef struct {
458                 HYPER_T      unknown1;
459                 uint32       unknown2;
460                 lsa_DATA_BUF2 data;
461         } lsa_TrustDomainInfoBuffer;
462
463         typedef struct {
464                 uint32       unknown1;
465                 lsa_TrustDomainInfoBuffer *buff1;
466                 lsa_TrustDomainInfoBuffer *buff2;
467                 uint32       unknown2;
468                 lsa_TrustDomainInfoBuffer *buff3;
469                 lsa_TrustDomainInfoBuffer *buff4;
470         } lsa_TrustDomainInfoAuthInfo;
471
472         typedef struct {
473                 lsa_TrustDomainInfoInfoEx info_ex;
474                 lsa_TrustDomainInfoFlags flags;
475                 lsa_TrustDomainInfoAuthInfo  auth_info;
476         } lsa_TrustDomainInfoFullInfo;
477
478         typedef struct {
479                 lsa_TrustDomainInfoInfoEx info_ex;
480                 lsa_DATA_BUF2        data1;
481         } lsa_TrustDomainInfo11;
482
483         typedef struct {
484                 lsa_TrustDomainInfoInfoEx info_ex;
485                 lsa_DATA_BUF2        data1;
486                 lsa_TrustDomainInfoFlags flags;
487                 lsa_TrustDomainInfoAuthInfo  auth_info;
488         } lsa_TrustDomainInfoInfoAll;
489
490         typedef union {
491                 [case(LSA_TRUSTED_DOMAIN_INFO_NAME)]      lsa_TrustDomainInfoName      name;
492                 [case(LSA_TRUSTED_DOMAIN_INFO_FLAGS)]     lsa_TrustDomainInfoFlags     flags;
493                 [case(LSA_TRUSTED_DOMAIN_INFO_PASSWORD)]  lsa_TrustDomainInfoPassword  password;
494                 [case(LSA_TRUSTED_DOMAIN_INFO_5)]         lsa_TrustDomainInfo5         info5;
495                 [case(LSA_TRUSTED_DOMAIN_INFO_INFO_EX)]   lsa_TrustDomainInfoInfoEx    info_ex;
496                 [case(LSA_TRUSTED_DOMAIN_INFO_AUTH_INFO)] lsa_TrustDomainInfoAuthInfo  auth_info;
497                 [case(LSA_TRUSTED_DOMAIN_INFO_FULL_INFO)] lsa_TrustDomainInfoFullInfo  full_info;
498                 [case(11)]    lsa_TrustDomainInfo11 info11;
499                 [case(LSA_TRUSTED_DOMAIN_INFO_INFO_ALL)]  lsa_TrustDomainInfoInfoAll   info_all;
500         } lsa_TrustedDomainInfo;
501
502         /* Function:       0x1a */
503         NTSTATUS lsa_QueryTrustedDomainInfo(
504                 [in,ref]     policy_handle *trustdom_handle,
505                 [in]         uint16         level, 
506                 [out,switch_is(level)] lsa_TrustedDomainInfo *info
507                 );
508
509         /* Function:     0x1b */
510         NTSTATUS lsa_SetInformationTrustedDomain();
511
512         /* Function:          0x1c */
513         NTSTATUS lsa_OpenSecret(
514                 [in,ref]     policy_handle *handle,
515                 [in]         lsa_String       name,
516                 [in]         uint32         access_mask,
517                 [out,ref]    policy_handle *sec_handle
518                 );
519
520         /* Function:           0x1d */
521
522         NTSTATUS lsa_SetSecret(
523                 [in,ref]     policy_handle *handle,
524                 [in]         lsa_DATA_BUF     *new_val,
525                 [in]         lsa_DATA_BUF     *old_val
526                 );
527
528         typedef struct {
529                 lsa_DATA_BUF *buf;
530         } lsa_DATA_BUF_PTR;
531
532         /* Function:         0x1e */
533         NTSTATUS lsa_QuerySecret (
534                 [in,ref]     policy_handle *handle,
535                 [in,out]     lsa_DATA_BUF_PTR  *new_val,
536                 [in,out]     NTTIME            *new_mtime,
537                 [in,out]     lsa_DATA_BUF_PTR  *old_val,
538                 [in,out]     NTTIME            *old_mtime
539                 );
540
541         /* Function:     0x1f */
542         NTSTATUS lsa_LookupPrivValue(
543                 [in,ref]     policy_handle *handle,
544                 [in,ref]     lsa_String *name,
545                 [out,ref]    lsa_LUID *luid
546                 );
547
548
549         /* Function:      0x20 */
550         NTSTATUS lsa_LookupPrivName (
551                 [in,ref]     policy_handle *handle,
552                 [in,ref]     lsa_LUID *luid,
553                 [out]        lsa_String *name
554                 );
555
556
557         /*******************/
558         /* Function:  0x21 */
559         NTSTATUS lsa_LookupPrivDisplayName (
560                 [in,ref]     policy_handle *handle,
561                 [in,ref]     lsa_String *name,
562                 [out]        lsa_String *disp_name,
563                 /* see http://www.microsoft.com/globaldev/nlsweb/ for
564                    language definitions */
565                 [in,out,ref] uint16 *language_id,
566                 [in]         uint16 unknown
567                 );
568
569         /* Function:        0x22 */
570         NTSTATUS lsa_DeleteObject();
571
572         
573         /*******************/
574         /* Function:      0x23 */
575         NTSTATUS lsa_EnumAccountsWithUserRight (
576                 [in,ref]     policy_handle *handle,
577                 [in]         lsa_String *name,
578                 [out,ref]    lsa_SidArray *sids
579                 );
580
581         /* Function:      0x24 */
582         typedef struct {
583                 unistr *name;
584         } lsa_RightAttribute;
585         
586         typedef struct {
587                 uint32 count;
588                 [size_is(count)] lsa_String *names;
589         } lsa_RightSet;
590         
591         NTSTATUS lsa_EnumAccountRights (
592                 [in,ref]     policy_handle *handle,
593                 [in,ref]     dom_sid2 *sid,
594                 [out,ref]    lsa_RightSet *rights
595                 );
596
597
598         /**********************/
599         /* Function:       0x25 */
600         NTSTATUS lsa_AddAccountRights (
601                 [in,ref]     policy_handle *handle,
602                 [in,ref]     dom_sid2 *sid,
603                 [in,ref]     lsa_RightSet *rights
604                 );
605         
606         /**********************/
607         /* Function:       0x26 */
608         NTSTATUS lsa_RemoveAccountRights (
609                 [in,ref]     policy_handle *handle,
610                 [in,ref]     dom_sid2 *sid,
611                 [in]         uint32 unknown,
612                 [in,ref]     lsa_RightSet *rights
613                 );
614
615         /* Function:   0x27 */
616         NTSTATUS lsa_QueryTrustedDomainInfoBySid(
617                 [in,ref]               policy_handle         *handle,
618                 [in,ref]               dom_sid2              *dom_sid,
619                 [in]                   uint16                 level, 
620                 [out,switch_is(level)] lsa_TrustedDomainInfo *info
621         );
622
623         /* Function:     0x28 */
624         NTSTATUS lsa_SetTrustDomainInfo();
625         /* Function:      0x29 */
626         NTSTATUS lsa_DeleteTrustDomain();
627         /* Function:       0x2a */
628         NTSTATUS lsa_StorePrivateData();
629         /* Function:        0x2b */
630         NTSTATUS lsa_RetrievePrivateData();
631
632
633         /**********************/
634         /* Function:     0x2c */
635         NTSTATUS lsa_OpenPolicy2 (
636                 [in]      unistr *system_name,
637                 [in,ref]  lsa_ObjectAttribute *attr,
638                 [in]      uint32 access_mask,
639                 [out,ref] policy_handle *handle
640                 );
641
642
643         /* Function:    0x2d */
644         NTSTATUS lsa_GetUserName();
645
646         /**********************/
647         /* Function:          0x2e */
648
649         NTSTATUS lsa_QueryInfoPolicy2(
650                 [in,ref]                 policy_handle *handle,
651                 [in]                     uint16 level,
652                 [out,switch_is(level)]   lsa_PolicyInformation *info
653                 );
654
655         /* Function 0x2f */
656         NTSTATUS lsa_SetInfoPolicy2();
657
658         /**********************/
659         /* Function 0x30 */
660         NTSTATUS lsa_QueryTrustedDomainInfoByName(
661                 [in,ref]               policy_handle         *handle,
662                 [in]                   lsa_String             trusted_domain,
663                 [in]                   uint16                 level, 
664                 [out,switch_is(level)] lsa_TrustedDomainInfo *info
665                 );
666
667         /* Function 0x31 */
668         NTSTATUS lsa_SetTrustedDomainInfoByName();
669
670         /* Function 0x32 */
671         NTSTATUS lsa_EnumTrustedDomainsEx();
672
673         /* Function 0x33 */
674         NTSTATUS lsa_CreateTrustedDomainEx();
675
676         /* Function 0x34 */
677         NTSTATUS lsa_CloseTrustedDomainEx();
678
679         /* Function 0x35 */
680         NTSTATUS lsa_QueryDomainInformationPolicy();
681
682         /* Function 0x36 */
683         NTSTATUS lsa_SetDomInfoPolicy();
684
685         /**********************/
686         /* Function 0x37 */
687         NTSTATUS lsa_OpenTrustedDomainByName(
688                 [in,ref]     policy_handle *handle,
689                 [in]         lsa_String     name,
690                 [in]         uint32         access_mask,
691                 [out,ref]    policy_handle *trustdom_handle
692                 );
693
694         /* Function 0x38 */
695         NTSTATUS lsa_TestCall();
696
697         /**********************/
698         /* Function 0x39 */
699
700         typedef struct {
701                 uint16 sid_type;
702                 lsa_String name;
703                 uint32 sid_index;
704                 uint32 unknown;
705         } lsa_TranslatedName2;
706
707         typedef struct {
708                 [range(0,1000)] uint32 count;
709                 [size_is(count)] lsa_TranslatedName2 *names;
710         } lsa_TransNameArray2;
711
712         NTSTATUS lsa_LookupSids2(
713                 [in,ref]     policy_handle *handle,
714                 [in,ref]     lsa_SidArray *sids,
715                 [out]        lsa_RefDomainList *domains,
716                 [in,out,ref] lsa_TransNameArray2 *names,
717                 [in]         uint16 level,
718                 [in,out,ref] uint32 *count,
719                 [in]         uint32 unknown1,
720                 [in]         uint32 unknown2
721                 );
722
723         /**********************/
724         /* Function 0x3a */
725
726         typedef struct {
727                 uint16 sid_type;
728                 uint32 rid;
729                 uint32 sid_index;
730                 uint32 unknown;
731         } lsa_TranslatedSid2;
732
733         typedef struct {
734                 [range(0,1000)] uint32 count;
735                 [size_is(count)] lsa_TranslatedSid2 *sids;
736         } lsa_TransSidArray2;
737
738         NTSTATUS lsa_LookupNames2 (
739                 [in,ref]     policy_handle *handle,
740                 [in,range(0,1000)] uint32 num_names,
741                 [in,ref,size_is(num_names)]  lsa_String *names,
742                 [out]        lsa_RefDomainList *domains,
743                 [in,out,ref] lsa_TransSidArray2 *sids,
744                 [in]         uint16 level,
745                 [in,out,ref] uint32 *count,
746                 [in]         uint32 unknown1,
747                 [in]         uint32 unknown2
748                 );
749
750         /* Function 0x3b */
751         NTSTATUS lsa_CreateTrustedDomainEx2();
752 }