Synchronize with trunk r58457.
[reactos.git] / include / reactos / idl / sam.idl
1 /*
2 * Security Account Manager interface definition
3 */
4
5 #include <ms-dtyp.idl>
6
7 cpp_quote("#ifndef _NTDEF_")
8 typedef long NTSTATUS;
9 cpp_quote("#endif")
10
11 typedef struct _RPC_STRING
12 {
13 unsigned short Length;
14 unsigned short MaximumLength;
15 [size_is(MaximumLength), length_is(Length)] char *Buffer;
16 } RPC_STRING, *PRPC_STRING;
17
18 typedef struct _OLD_LARGE_INTEGER
19 {
20 unsigned long LowPart;
21 long HighPart;
22 } OLD_LARGE_INTEGER, *POLD_LARGE_INTEGER;
23
24 typedef [handle] wchar_t *PSAMPR_SERVER_NAME;
25
26 typedef [context_handle] void *SAMPR_HANDLE;
27
28 typedef struct _ENCRYPTED_LM_OWF_PASSWORD
29 {
30 char data[16];
31 } ENCRYPTED_LM_OWF_PASSWORD, *PENCRYPTED_LM_OWF_PASSWORD, ENCRYPTED_NT_OWF_PASSWORD, *PENCRYPTED_NT_OWF_PASSWORD;
32
33 typedef struct _SAMPR_ULONG_ARRAY
34 {
35 unsigned long Count;
36 [size_is(Count)] unsigned long *Element;
37 } SAMPR_ULONG_ARRAY, *PSAMPR_ULONG_ARRAY;
38
39 typedef struct _SAMPR_SID_INFORMATION
40 {
41 PRPC_SID SidPointer;
42 } SAMPR_SID_INFORMATION, *PSAMPR_SID_INFORMATION;
43
44 typedef struct _SAMPR_PSID_ARRAY
45 {
46 [range(0, 1024)] unsigned long Count;
47 [size_is(Count)] PSAMPR_SID_INFORMATION Sids;
48 } SAMPR_PSID_ARRAY, *PSAMPR_PSID_ARRAY;
49
50 typedef struct _SAMPR_PSID_ARRAY_OUT
51 {
52 unsigned long Count;
53 [size_is(Count)] PSAMPR_SID_INFORMATION Sids;
54 } SAMPR_PSID_ARRAY_OUT, *PSAMPR_PSID_ARRAY_OUT;
55
56 typedef struct _SAMPR_RETURNED_USTRING_ARRAY
57 {
58 unsigned long Count;
59 [size_is(Count)] PRPC_UNICODE_STRING Element;
60 } SAMPR_RETURNED_USTRING_ARRAY, *PSAMPR_RETURNED_USTRING_ARRAY;
61
62 cpp_quote("#ifndef _WINNT_")
63 typedef enum _SID_NAME_USE
64 {
65 SidTypeUser = 1,
66 SidTypeGroup,
67 SidTypeDomain,
68 SidTypeAlias,
69 SidTypeWellKnownGroup,
70 SidTypeDeletedAccount,
71 SidTypeInvalid,
72 SidTypeUnknown,
73 } SID_NAME_USE, *PSID_NAME_USE;
74 cpp_quote("#endif")
75
76 typedef struct RPC_SHORT_BLOB
77 {
78 unsigned short Length;
79 unsigned short MaximumLength;
80 [size_is(MaximumLength/2), length_is(Length/2)]
81 unsigned short* Buffer;
82 } RPC_SHORT_BLOB, *PRPC_SHORT_BLOB;
83
84 typedef struct _SAMPR_RID_ENUMERATION
85 {
86 unsigned long RelativeId;
87 RPC_UNICODE_STRING Name;
88 } SAMPR_RID_ENUMERATION, *PSAMPR_RID_ENUMERATION;
89
90 typedef struct _SAMPR_ENUMERATION_BUFFER
91 {
92 unsigned long EntriesRead;
93 [size_is(EntriesRead)] PSAMPR_RID_ENUMERATION Buffer;
94 } SAMPR_ENUMERATION_BUFFER, *PSAMPR_ENUMERATION_BUFFER;
95
96 typedef struct _SAMPR_SR_SECURITY_DESCRIPTOR
97 {
98 [range(0, 256 * 1024)] unsigned long Length;
99 [size_is(Length)] unsigned char* SecurityDescriptor;
100 } SAMPR_SR_SECURITY_DESCRIPTOR, *PSAMPR_SR_SECURITY_DESCRIPTOR;
101
102 cpp_quote("#ifndef _NTSAM_")
103 typedef struct _GROUP_MEMBERSHIP
104 {
105 unsigned long RelativeId;
106 unsigned long Attributes;
107 } GROUP_MEMBERSHIP, *PGROUP_MEMBERSHIP;
108 cpp_quote("#endif")
109
110 typedef struct _SAMPR_GET_GROUPS_BUFFER
111 {
112 unsigned long MembershipCount;
113 [size_is(MembershipCount)] PGROUP_MEMBERSHIP Groups;
114 } SAMPR_GET_GROUPS_BUFFER, *PSAMPR_GET_GROUPS_BUFFER;
115
116 typedef struct _SAMPR_GET_MEMBERS_BUFFER
117 {
118 unsigned long MemberCount;
119 [size_is(MemberCount)] unsigned long* Members;
120 [size_is(MemberCount)] unsigned long* Attributes;
121 } SAMPR_GET_MEMBERS_BUFFER, *PSAMPR_GET_MEMBERS_BUFFER;
122
123 typedef struct _SAMPR_REVISION_INFO_V1
124 {
125 unsigned long Revision;
126 unsigned long SupportedFeatures;
127 } SAMPR_REVISION_INFO_V1, *PSAMPR_REVISION_INFO_V1;
128
129 typedef [switch_type(unsigned long)] union
130 {
131 [case(1)] SAMPR_REVISION_INFO_V1 V1;
132 }SAMPR_REVISION_INFO, *PSAMPR_REVISION_INFO;
133
134 typedef struct _USER_DOMAIN_PASSWORD_INFORMATION
135 {
136 unsigned short MinPasswordLength;
137 unsigned long PasswordProperties;
138 } USER_DOMAIN_PASSWORD_INFORMATION, *PUSER_DOMAIN_PASSWORD_INFORMATION;
139
140 cpp_quote("#ifndef _NTSAM_")
141 typedef enum _DOMAIN_SERVER_ENABLE_STATE
142 {
143 DomainServerEnabled = 1,
144 DomainServerDisabled
145 } DOMAIN_SERVER_ENABLE_STATE, *PDOMAIN_SERVER_ENABLE_STATE;
146
147 typedef struct _DOMAIN_STATE_INFORMATION
148 {
149 DOMAIN_SERVER_ENABLE_STATE DomainServerState;
150 } DOMAIN_STATE_INFORMATION, *PDOMAIN_STATE_INFORMATION;
151 cpp_quote("#endif")
152
153 cpp_quote("#ifndef _NTSAM_")
154 typedef enum _DOMAIN_SERVER_ROLE
155 {
156 DomainServerRoleBackup = 2,
157 DomainServerRolePrimary = 3
158 } DOMAIN_SERVER_ROLE, *PDOMAIN_SERVER_ROLE;
159 cpp_quote("#endif")
160
161 cpp_quote("#if !defined(_NTSECAPI_H) && !defined(_NTSAM_)")
162 typedef struct _DOMAIN_PASSWORD_INFORMATION
163 {
164 USHORT MinPasswordLength;
165 USHORT PasswordHistoryLength;
166 ULONG PasswordProperties;
167 OLD_LARGE_INTEGER MaxPasswordAge;
168 OLD_LARGE_INTEGER MinPasswordAge;
169 } DOMAIN_PASSWORD_INFORMATION, *PDOMAIN_PASSWORD_INFORMATION;
170 cpp_quote("#endif")
171
172 cpp_quote("#ifndef _NTSAM_")
173 typedef struct _DOMAIN_LOGOFF_INFORMATION
174 {
175 OLD_LARGE_INTEGER ForceLogoff;
176 } DOMAIN_LOGOFF_INFORMATION, *PDOMAIN_LOGOFF_INFORMATION;
177
178 typedef struct _DOMAIN_SERVER_ROLE_INFORMATION
179 {
180 DOMAIN_SERVER_ROLE DomainServerRole;
181 } DOMAIN_SERVER_ROLE_INFORMATION, *PDOMAIN_SERVER_ROLE_INFORMATION;
182
183 typedef struct _DOMAIN_MODIFIED_INFORMATION
184 {
185 OLD_LARGE_INTEGER DomainModifiedCount;
186 OLD_LARGE_INTEGER CreationTime;
187 } DOMAIN_MODIFIED_INFORMATION, *PDOMAIN_MODIFIED_INFORMATION;
188
189 typedef struct _DOMAIN_MODIFIED_INFORMATION2
190 {
191 OLD_LARGE_INTEGER DomainModifiedCount;
192 OLD_LARGE_INTEGER CreationTime;
193 OLD_LARGE_INTEGER ModifiedCountAtLastPromotion;
194 } DOMAIN_MODIFIED_INFORMATION2, *PDOMAIN_MODIFIED_INFORMATION2;
195 cpp_quote("#endif")
196
197 cpp_quote("#include <pshpack4.h>")
198 typedef struct _SAMPR_DOMAIN_GENERAL_INFORMATION
199 {
200 OLD_LARGE_INTEGER ForceLogoff;
201 RPC_UNICODE_STRING OemInformation;
202 RPC_UNICODE_STRING DomainName;
203 RPC_UNICODE_STRING ReplicaSourceNodeName;
204 OLD_LARGE_INTEGER DomainModifiedCount;
205 unsigned long DomainServerState;
206 unsigned long DomainServerRole;
207 unsigned char UasCompatibilityRequired;
208 unsigned long UserCount;
209 unsigned long GroupCount;
210 unsigned long AliasCount;
211 } SAMPR_DOMAIN_GENERAL_INFORMATION, *PSAMPR_DOMAIN_GENERAL_INFORMATION;
212
213 typedef struct _SAMPR_DOMAIN_GENERAL_INFORMATION2
214 {
215 SAMPR_DOMAIN_GENERAL_INFORMATION I1;
216 LARGE_INTEGER LockoutDuration;
217 LARGE_INTEGER LockoutObservationWindow;
218 unsigned short LockoutThreshold;
219 } SAMPR_DOMAIN_GENERAL_INFORMATION2, *PSAMPR_DOMAIN_GENERAL_INFORMATION2;
220 cpp_quote("#include <poppack.h>")
221
222 typedef struct _SAMPR_DOMAIN_OEM_INFORMATION
223 {
224 RPC_UNICODE_STRING OemInformation;
225 } SAMPR_DOMAIN_OEM_INFORMATION, *PSAMPR_DOMAIN_OEM_INFORMATION;
226
227 typedef struct _SAMPR_DOMAIN_NAME_INFORMATION
228 {
229 RPC_UNICODE_STRING DomainName;
230 } SAMPR_DOMAIN_NAME_INFORMATION, *PSAMPR_DOMAIN_NAME_INFORMATION;
231
232 typedef struct SAMPR_DOMAIN_REPLICATION_INFORMATION
233 {
234 RPC_UNICODE_STRING ReplicaSourceNodeName;
235 } SAMPR_DOMAIN_REPLICATION_INFORMATION, *PSAMPR_DOMAIN_REPLICATION_INFORMATION;
236
237 typedef struct _SAMPR_DOMAIN_LOCKOUT_INFORMATION
238 {
239 LARGE_INTEGER LockoutDuration;
240 LARGE_INTEGER LockoutObservationWindow;
241 unsigned short LockoutThreshold;
242 } SAMPR_DOMAIN_LOCKOUT_INFORMATION, *PSAMPR_DOMAIN_LOCKOUT_INFORMATION;
243
244 cpp_quote("#ifndef _NTSAM_")
245 typedef enum _DOMAIN_INFORMATION_CLASS
246 {
247 DomainPasswordInformation = 1,
248 DomainGeneralInformation = 2,
249 DomainLogoffInformation = 3,
250 DomainOemInformation = 4,
251 DomainNameInformation = 5,
252 DomainReplicationInformation = 6,
253 DomainServerRoleInformation = 7,
254 DomainModifiedInformation = 8,
255 DomainStateInformation = 9,
256 DomainGeneralInformation2 = 11,
257 DomainLockoutInformation = 12,
258 DomainModifiedInformation2 = 13
259 } DOMAIN_INFORMATION_CLASS;
260 cpp_quote("#endif")
261
262 typedef [switch_type(DOMAIN_INFORMATION_CLASS)] union _SAMPR_DOMAIN_INFO_BUFFER
263 {
264 [case(DomainPasswordInformation)] DOMAIN_PASSWORD_INFORMATION Password;
265 [case(DomainGeneralInformation)] SAMPR_DOMAIN_GENERAL_INFORMATION General;
266 [case(DomainLogoffInformation)] DOMAIN_LOGOFF_INFORMATION Logoff;
267 [case(DomainOemInformation)] SAMPR_DOMAIN_OEM_INFORMATION Oem;
268 [case(DomainNameInformation)] SAMPR_DOMAIN_NAME_INFORMATION Name;
269 [case(DomainServerRoleInformation)] DOMAIN_SERVER_ROLE_INFORMATION Role;
270 [case(DomainReplicationInformation)] SAMPR_DOMAIN_REPLICATION_INFORMATION Replication;
271 [case(DomainModifiedInformation)] DOMAIN_MODIFIED_INFORMATION Modified;
272 [case(DomainStateInformation)] DOMAIN_STATE_INFORMATION State;
273 [case(DomainGeneralInformation2)] SAMPR_DOMAIN_GENERAL_INFORMATION2 General2;
274 [case(DomainLockoutInformation)] SAMPR_DOMAIN_LOCKOUT_INFORMATION Lockout;
275 [case(DomainModifiedInformation2)] DOMAIN_MODIFIED_INFORMATION2 Modified2;
276 } SAMPR_DOMAIN_INFO_BUFFER, *PSAMPR_DOMAIN_INFO_BUFFER;
277
278 typedef enum _DOMAIN_DISPLAY_INFORMATION
279 {
280 DomainDisplayUser = 1,
281 DomainDisplayMachine,
282 DomainDisplayGroup,
283 DomainDisplayOemUser,
284 DomainDisplayOemGroup
285 } DOMAIN_DISPLAY_INFORMATION, *PDOMAIN_DISPLAY_INFORMATION;
286
287 typedef struct _SAMPR_DOMAIN_DISPLAY_USER
288 {
289 unsigned long Index;
290 unsigned long Rid;
291 unsigned long AccountControl;
292 RPC_UNICODE_STRING AccountName;
293 RPC_UNICODE_STRING AdminComment;
294 RPC_UNICODE_STRING FullName;
295 } SAMPR_DOMAIN_DISPLAY_USER, *PSAMPR_DOMAIN_DISPLAY_USER;
296
297 typedef struct _SAMPR_DOMAIN_DISPLAY_MACHINE
298 {
299 unsigned long Index;
300 unsigned long Rid;
301 unsigned long AccountControl;
302 RPC_UNICODE_STRING AccountName;
303 RPC_UNICODE_STRING AdminComment;
304 } SAMPR_DOMAIN_DISPLAY_MACHINE, *PSAMPR_DOMAIN_DISPLAY_MACHINE;
305
306 typedef struct _SAMPR_DOMAIN_DISPLAY_GROUP
307 {
308 unsigned long Index;
309 unsigned long Rid;
310 unsigned long Attributes;
311 RPC_UNICODE_STRING AccountName;
312 RPC_UNICODE_STRING AdminComment;
313 } SAMPR_DOMAIN_DISPLAY_GROUP, *PSAMPR_DOMAIN_DISPLAY_GROUP;
314
315 typedef struct _SAMPR_DOMAIN_DISPLAY_OEM_USER
316 {
317 unsigned long Index;
318 RPC_STRING OemAccountName;
319 } SAMPR_DOMAIN_DISPLAY_OEM_USER, *PSAMPR_DOMAIN_DISPLAY_OEM_USER;
320
321 typedef struct _SAMPR_DOMAIN_DISPLAY_OEM_GROUP
322 {
323 unsigned long Index;
324 RPC_STRING OemAccountName;
325 } SAMPR_DOMAIN_DISPLAY_OEM_GROUP, *PSAMPR_DOMAIN_DISPLAY_OEM_GROUP;
326
327 typedef struct _SAMPR_DOMAIN_DISPLAY_USER_BUFFER
328 {
329 unsigned long EntriesRead;
330 [size_is(EntriesRead)] PSAMPR_DOMAIN_DISPLAY_USER Buffer;
331 } SAMPR_DOMAIN_DISPLAY_USER_BUFFER, *PSAMPR_DOMAIN_DISPLAY_USER_BUFFER;
332
333 typedef struct _SAMPR_DOMAIN_DISPLAY_MACHINE_BUFFER
334 {
335 unsigned long EntriesRead;
336 [size_is(EntriesRead)] PSAMPR_DOMAIN_DISPLAY_MACHINE Buffer;
337 } SAMPR_DOMAIN_DISPLAY_MACHINE_BUFFER, *PSAMPR_DOMAIN_DISPLAY_MACHINE_BUFFER;
338
339 typedef struct _SAMPR_DOMAIN_DISPLAY_GROUP_BUFFER
340 {
341 unsigned long EntriesRead;
342 [size_is(EntriesRead)] PSAMPR_DOMAIN_DISPLAY_GROUP Buffer;
343 } SAMPR_DOMAIN_DISPLAY_GROUP_BUFFER, *PSAMPR_DOMAIN_DISPLAY_GROUP_BUFFER;
344
345 typedef struct _SAMPR_DOMAIN_DISPLAY_OEM_USER_BUFFER
346 {
347 unsigned long EntriesRead;
348 [size_is(EntriesRead)] PSAMPR_DOMAIN_DISPLAY_OEM_USER Buffer;
349 } SAMPR_DOMAIN_DISPLAY_OEM_USER_BUFFER, *PSAMPR_DOMAIN_DISPLAY_OEM_USER_BUFFER;
350
351 typedef struct _SAMPR_DOMAIN_DISPLAY_OEM_GROUP_BUFFER
352 {
353 unsigned long EntriesRead;
354 [size_is(EntriesRead)] PSAMPR_DOMAIN_DISPLAY_OEM_GROUP Buffer;
355 } SAMPR_DOMAIN_DISPLAY_OEM_GROUP_BUFFER, *PSAMPR_DOMAIN_DISPLAY_OEM_GROUP_BUFFER;
356
357 typedef [switch_type(DOMAIN_DISPLAY_INFORMATION)] union _SAMPR_DISPLAY_INFO_BUFFER
358 {
359 [case(DomainDisplayUser)] SAMPR_DOMAIN_DISPLAY_USER_BUFFER UserInformation;
360 [case(DomainDisplayMachine)] SAMPR_DOMAIN_DISPLAY_MACHINE_BUFFER MachineInformation;
361 [case(DomainDisplayGroup)] SAMPR_DOMAIN_DISPLAY_GROUP_BUFFER GroupInformation;
362 [case(DomainDisplayOemUser)] SAMPR_DOMAIN_DISPLAY_OEM_USER_BUFFER OemUserInformation;
363 [case(DomainDisplayOemGroup)] SAMPR_DOMAIN_DISPLAY_OEM_GROUP_BUFFER OemGroupInformation;
364 } SAMPR_DISPLAY_INFO_BUFFER, *PSAMPR_DISPLAY_INFO_BUFFER;
365
366 typedef struct _GROUP_ATTRIBUTE_INFORMATION
367 {
368 unsigned long Attributes;
369 } GROUP_ATTRIBUTE_INFORMATION, *PGROUP_ATTRIBUTE_INFORMATION;
370
371 typedef struct _SAMPR_GROUP_GENERAL_INFORMATION
372 {
373 RPC_UNICODE_STRING Name;
374 unsigned long Attributes;
375 unsigned long MemberCount;
376 RPC_UNICODE_STRING AdminComment;
377 } SAMPR_GROUP_GENERAL_INFORMATION, *PSAMPR_GROUP_GENERAL_INFORMATION;
378
379 typedef struct _SAMPR_GROUP_NAME_INFORMATION
380 {
381 RPC_UNICODE_STRING Name;
382 } SAMPR_GROUP_NAME_INFORMATION, *PSAMPR_GROUP_NAME_INFORMATION;
383
384 typedef struct _SAMPR_GROUP_ADM_COMMENT_INFORMATION
385 {
386 RPC_UNICODE_STRING AdminComment;
387 } SAMPR_GROUP_ADM_COMMENT_INFORMATION, *PSAMPR_GROUP_ADM_COMMENT_INFORMATION;
388
389 cpp_quote("#ifndef _NTSAM_")
390 typedef enum _GROUP_INFORMATION_CLASS
391 {
392 GroupGeneralInformation = 1,
393 GroupNameInformation,
394 GroupAttributeInformation,
395 GroupAdminCommentInformation,
396 GroupReplicationInformation
397 } GROUP_INFORMATION_CLASS;
398 cpp_quote("#endif")
399
400 typedef [switch_type(GROUP_INFORMATION_CLASS)] union _SAMPR_GROUP_INFO_BUFFER
401 {
402 [case(GroupGeneralInformation)] SAMPR_GROUP_GENERAL_INFORMATION General;
403 [case(GroupNameInformation)] SAMPR_GROUP_NAME_INFORMATION Name;
404 [case(GroupAttributeInformation)] GROUP_ATTRIBUTE_INFORMATION Attribute;
405 [case(GroupAdminCommentInformation)] SAMPR_GROUP_ADM_COMMENT_INFORMATION AdminComment;
406 [case(GroupReplicationInformation)] SAMPR_GROUP_GENERAL_INFORMATION DoNotUse;
407 } SAMPR_GROUP_INFO_BUFFER, *PSAMPR_GROUP_INFO_BUFFER;
408
409 typedef struct _SAMPR_ALIAS_GENERAL_INFORMATION
410 {
411 RPC_UNICODE_STRING Name;
412 ULONG MemberCount;
413 RPC_UNICODE_STRING AdminComment;
414 } SAMPR_ALIAS_GENERAL_INFORMATION, *PSAMPR_ALIAS_GENERAL_INFORMATION;
415
416 typedef struct _SAMPR_ALIAS_NAME_INFORMATION
417 {
418 RPC_UNICODE_STRING Name;
419 } SAMPR_ALIAS_NAME_INFORMATION, *PSAMPR_ALIAS_NAME_INFORMATION;
420
421 typedef struct _SAMPR_ALIAS_ADM_COMMENT_INFORMATION
422 {
423 RPC_UNICODE_STRING AdminComment;
424 } SAMPR_ALIAS_ADM_COMMENT_INFORMATION, *PSAMPR_ALIAS_ADM_COMMENT_INFORMATION;
425
426 cpp_quote("#ifndef _NTSAM_")
427 typedef enum _ALIAS_INFORMATION_CLASS
428 {
429 AliasGeneralInformation = 1,
430 AliasNameInformation,
431 AliasAdminCommentInformation,
432 } ALIAS_INFORMATION_CLASS;
433 cpp_quote("#endif")
434
435 typedef [switch_type(ALIAS_INFORMATION_CLASS)] union _SAMPR_ALIAS_INFO_BUFFER
436 {
437 [case(AliasGeneralInformation)] SAMPR_ALIAS_GENERAL_INFORMATION General;
438 [case(AliasNameInformation)] SAMPR_ALIAS_NAME_INFORMATION Name;
439 [case(AliasAdminCommentInformation)] SAMPR_ALIAS_ADM_COMMENT_INFORMATION AdminComment;
440 } SAMPR_ALIAS_INFO_BUFFER, *PSAMPR_ALIAS_INFO_BUFFER;
441
442 typedef struct _SAMPR_ENCRYPTED_USER_PASSWORD
443 {
444 unsigned char Buffer[(256 * 2) + 4];
445 } SAMPR_ENCRYPTED_USER_PASSWORD, *PSAMPR_ENCRYPTED_USER_PASSWORD;
446
447 typedef struct _SAMPR_ENCRYPTED_USER_PASSWORD_NEW
448 {
449 unsigned char Buffer[(256 * 2) + 4 + 16];
450 } SAMPR_ENCRYPTED_USER_PASSWORD_NEW, *PSAMPR_ENCRYPTED_USER_PASSWORD_NEW;
451
452 cpp_quote("#ifndef _NTSAM_")
453 typedef struct _USER_PRIMARY_GROUP_INFORMATION
454 {
455 unsigned long PrimaryGroupId;
456 } USER_PRIMARY_GROUP_INFORMATION, *PUSER_PRIMARY_GROUP_INFORMATION;
457
458 typedef struct _USER_CONTROL_INFORMATION
459 {
460 unsigned long UserAccountControl;
461 } USER_CONTROL_INFORMATION, *PUSER_CONTROL_INFORMATION;
462
463 typedef struct _USER_EXPIRES_INFORMATION
464 {
465 OLD_LARGE_INTEGER AccountExpires;
466 } USER_EXPIRES_INFORMATION, *PUSER_EXPIRES_INFORMATION;
467 cpp_quote("#endif")
468
469 typedef struct _SAMPR_LOGON_HOURS
470 {
471 unsigned short UnitsPerWeek;
472 // [size_is(1260), length_is((UnitsPerWeek + 7) / 8)] unsigned char *LogonHours; // FIXME
473 [size_is(1260)] unsigned char *LogonHours;
474 } SAMPR_LOGON_HOURS, *PSAMPR_LOGON_HOURS;
475
476 typedef struct _SAMPR_USER_ALL_INFORMATION
477 {
478 OLD_LARGE_INTEGER LastLogon;
479 OLD_LARGE_INTEGER LastLogoff;
480 OLD_LARGE_INTEGER PasswordLastSet;
481 OLD_LARGE_INTEGER AccountExpires;
482 OLD_LARGE_INTEGER PasswordCanChange;
483 OLD_LARGE_INTEGER PasswordMustChange;
484 RPC_UNICODE_STRING UserName;
485 RPC_UNICODE_STRING FullName;
486 RPC_UNICODE_STRING HomeDirectory;
487 RPC_UNICODE_STRING HomeDirectoryDrive;
488 RPC_UNICODE_STRING ScriptPath;
489 RPC_UNICODE_STRING ProfilePath;
490 RPC_UNICODE_STRING AdminComment;
491 RPC_UNICODE_STRING WorkStations;
492 RPC_UNICODE_STRING UserComment;
493 RPC_UNICODE_STRING Parameters;
494 RPC_SHORT_BLOB LmOwfPassword;
495 RPC_SHORT_BLOB NtOwfPassword;
496 RPC_UNICODE_STRING PrivateData;
497 SAMPR_SR_SECURITY_DESCRIPTOR SecurityDescriptor;
498 unsigned long UserId;
499 unsigned long PrimaryGroupId;
500 unsigned long UserAccountControl;
501 unsigned long WhichFields;
502 SAMPR_LOGON_HOURS LogonHours;
503 unsigned short BadPasswordCount;
504 unsigned short LogonCount;
505 unsigned short CountryCode;
506 unsigned short CodePage;
507 unsigned char LmPasswordPresent;
508 unsigned char NtPasswordPresent;
509 unsigned char PasswordExpired;
510 unsigned char PrivateDataSensitive;
511 } SAMPR_USER_ALL_INFORMATION, *PSAMPR_USER_ALL_INFORMATION;
512
513 typedef struct _SAMPR_USER_GENERAL_INFORMATION
514 {
515 RPC_UNICODE_STRING UserName;
516 RPC_UNICODE_STRING FullName;
517 unsigned long PrimaryGroupId;
518 RPC_UNICODE_STRING AdminComment;
519 RPC_UNICODE_STRING UserComment;
520 } SAMPR_USER_GENERAL_INFORMATION, *PSAMPR_USER_GENERAL_INFORMATION;
521
522 typedef struct _SAMPR_USER_PREFERENCES_INFORMATION
523 {
524 RPC_UNICODE_STRING UserComment;
525 RPC_UNICODE_STRING Reserved1;
526 unsigned short CountryCode;
527 unsigned short CodePage;
528 } SAMPR_USER_PREFERENCES_INFORMATION, *PSAMPR_USER_PREFERENCES_INFORMATION;
529
530 typedef struct _SAMPR_USER_PARAMETERS_INFORMATION
531 {
532 RPC_UNICODE_STRING Parameters;
533 } SAMPR_USER_PARAMETERS_INFORMATION, *PSAMPR_USER_PARAMETERS_INFORMATION;
534
535 typedef struct _SAMPR_USER_LOGON_INFORMATION
536 {
537 RPC_UNICODE_STRING UserName;
538 RPC_UNICODE_STRING FullName;
539 unsigned long UserId;
540 unsigned long PrimaryGroupId;
541 RPC_UNICODE_STRING HomeDirectory;
542 RPC_UNICODE_STRING HomeDirectoryDrive;
543 RPC_UNICODE_STRING ScriptPath;
544 RPC_UNICODE_STRING ProfilePath;
545 RPC_UNICODE_STRING WorkStations;
546 OLD_LARGE_INTEGER LastLogon;
547 OLD_LARGE_INTEGER LastLogoff;
548 OLD_LARGE_INTEGER PasswordLastSet;
549 OLD_LARGE_INTEGER PasswordCanChange;
550 OLD_LARGE_INTEGER PasswordMustChange;
551 SAMPR_LOGON_HOURS LogonHours;
552 unsigned short BadPasswordCount;
553 unsigned short LogonCount;
554 unsigned long UserAccountControl;
555 } SAMPR_USER_LOGON_INFORMATION, *PSAMPR_USER_LOGON_INFORMATION;
556
557 typedef struct _SAMPR_USER_ACCOUNT_INFORMATION
558 {
559 RPC_UNICODE_STRING UserName;
560 RPC_UNICODE_STRING FullName;
561 unsigned long UserId;
562 unsigned long PrimaryGroupId;
563 RPC_UNICODE_STRING HomeDirectory;
564 RPC_UNICODE_STRING HomeDirectoryDrive;
565 RPC_UNICODE_STRING ScriptPath;
566 RPC_UNICODE_STRING ProfilePath;
567 RPC_UNICODE_STRING AdminComment;
568 RPC_UNICODE_STRING WorkStations;
569 OLD_LARGE_INTEGER LastLogon;
570 OLD_LARGE_INTEGER LastLogoff;
571 SAMPR_LOGON_HOURS LogonHours;
572 unsigned short BadPasswordCount;
573 unsigned short LogonCount;
574 OLD_LARGE_INTEGER PasswordLastSet;
575 OLD_LARGE_INTEGER AccountExpires;
576 unsigned long UserAccountControl;
577 } SAMPR_USER_ACCOUNT_INFORMATION, *PSAMPR_USER_ACCOUNT_INFORMATION;
578
579 typedef struct _SAMPR_USER_A_NAME_INFORMATION
580 {
581 RPC_UNICODE_STRING UserName;
582 } SAMPR_USER_A_NAME_INFORMATION, *PSAMPR_USER_A_NAME_INFORMATION;
583
584 typedef struct _SAMPR_USER_F_NAME_INFORMATION
585 {
586 RPC_UNICODE_STRING FullName;
587 } SAMPR_USER_F_NAME_INFORMATION, *PSAMPR_USER_F_NAME_INFORMATION;
588
589 typedef struct _SAMPR_USER_NAME_INFORMATION
590 {
591 RPC_UNICODE_STRING UserName;
592 RPC_UNICODE_STRING FullName;
593 } SAMPR_USER_NAME_INFORMATION, *PSAMPR_USER_NAME_INFORMATION;
594
595 typedef struct _SAMPR_USER_HOME_INFORMATION
596 {
597 RPC_UNICODE_STRING HomeDirectory;
598 RPC_UNICODE_STRING HomeDirectoryDrive;
599 } SAMPR_USER_HOME_INFORMATION, *PSAMPR_USER_HOME_INFORMATION;
600
601 typedef struct _SAMPR_USER_SCRIPT_INFORMATION
602 {
603 RPC_UNICODE_STRING ScriptPath;
604 } SAMPR_USER_SCRIPT_INFORMATION, *PSAMPR_USER_SCRIPT_INFORMATION;
605
606 typedef struct _SAMPR_USER_PROFILE_INFORMATION
607 {
608 RPC_UNICODE_STRING ProfilePath;
609 } SAMPR_USER_PROFILE_INFORMATION, *PSAMPR_USER_PROFILE_INFORMATION;
610
611 typedef struct _SAMPR_USER_ADMIN_COMMENT_INFORMATION
612 {
613 RPC_UNICODE_STRING AdminComment;
614 } SAMPR_USER_ADMIN_COMMENT_INFORMATION, *PSAMPR_USER_ADMIN_COMMENT_INFORMATION;
615
616 typedef struct _SAMPR_USER_WORKSTATIONS_INFORMATION
617 {
618 RPC_UNICODE_STRING WorkStations;
619 } SAMPR_USER_WORKSTATIONS_INFORMATION, *PSAMPR_USER_WORKSTATIONS_INFORMATION;
620
621 typedef struct _SAMPR_USER_SET_PASSWORD_INFORMATION
622 {
623 // SAMPR_ENCRYPTED_USER_PASSWORD Password;
624 RPC_UNICODE_STRING Password;
625 BOOLEAN PasswordExpired;
626 } SAMPR_USER_SET_PASSWORD_INFORMATION, *PSAMPR_USER_SET_PASSWORD_INFORMATION;
627
628 typedef struct _SAMPR_USER_LOGON_HOURS_INFORMATION
629 {
630 SAMPR_LOGON_HOURS LogonHours;
631 } SAMPR_USER_LOGON_HOURS_INFORMATION, *PSAMPR_USER_LOGON_HOURS_INFORMATION;
632
633 typedef struct _SAMPR_USER_INTERNAL1_INFORMATION
634 {
635 ENCRYPTED_NT_OWF_PASSWORD EncryptedNtOwfPassword;
636 ENCRYPTED_LM_OWF_PASSWORD EncryptedLmOwfPassword;
637 BOOLEAN NtPasswordPresent;
638 BOOLEAN LmPasswordPresent;
639 BOOLEAN PasswordExpired;
640 } SAMPR_USER_INTERNAL1_INFORMATION, *PSAMPR_USER_INTERNAL1_INFORMATION;
641
642 typedef struct _SAMPR_USER_INTERNAL4_INFORMATION
643 {
644 SAMPR_USER_ALL_INFORMATION I1;
645 SAMPR_ENCRYPTED_USER_PASSWORD UserPassword;
646 } SAMPR_USER_INTERNAL4_INFORMATION, *PSAMPR_USER_INTERNAL4_INFORMATION;
647
648 typedef struct _SAMPR_USER_INTERNAL4_INFORMATION_NEW
649 {
650 SAMPR_USER_ALL_INFORMATION I1;
651 SAMPR_ENCRYPTED_USER_PASSWORD_NEW UserPassword;
652 } SAMPR_USER_INTERNAL4_INFORMATION_NEW, *PSAMPR_USER_INTERNAL4_INFORMATION_NEW;
653
654 typedef struct _SAMPR_USER_INTERNAL5_INFORMATION
655 {
656 SAMPR_ENCRYPTED_USER_PASSWORD UserPassword;
657 BOOLEAN PasswordExpired;
658 } SAMPR_USER_INTERNAL5_INFORMATION, *PSAMPR_USER_INTERNAL5_INFORMATION;
659
660 typedef struct _SAMPR_USER_INTERNAL5_INFORMATION_NEW
661 {
662 SAMPR_ENCRYPTED_USER_PASSWORD_NEW UserPassword;
663 BOOLEAN PasswordExpired;
664 } SAMPR_USER_INTERNAL5_INFORMATION_NEW, *PSAMPR_USER_INTERNAL5_INFORMATION_NEW;
665
666 cpp_quote("#ifndef _NTSAM_")
667 typedef enum _USER_INFORMATION_CLASS
668 {
669 UserGeneralInformation = 1,
670 UserPreferencesInformation = 2,
671 UserLogonInformation = 3,
672 UserLogonHoursInformation = 4,
673 UserAccountInformation = 5,
674 UserNameInformation = 6,
675 UserAccountNameInformation = 7,
676 UserFullNameInformation = 8,
677 UserPrimaryGroupInformation = 9,
678 UserHomeInformation = 10,
679 UserScriptInformation = 11,
680 UserProfileInformation = 12,
681 UserAdminCommentInformation = 13,
682 UserWorkStationsInformation = 14,
683 UserSetPasswordInformation = 15, /* This is missing from the SAM RPC documentation */
684 UserControlInformation = 16,
685 UserExpiresInformation = 17,
686 UserInternal1Information = 18,
687 UserInternal2Information = 19, /* This is missing from the SAM RPC documentation */
688 UserParametersInformation = 20,
689 UserAllInformation = 21,
690 UserInternal3Information = 22, /* This is missing from the SAM RPC documentation */
691 UserInternal4Information = 23,
692 UserInternal5Information = 24,
693 UserInternal4InformationNew = 25,
694 UserInternal5InformationNew = 26,
695 UserInternal6Information, /* This is missing from the SAM RPC documentation */
696 UserExtendedInformation, /* This is missing from the SAM RPC documentation */
697 UserLogonUIInformation, /* This is missing from the SAM RPC documentation */
698 } USER_INFORMATION_CLASS, *PUSER_INFORMATION_CLASS;
699 cpp_quote("#endif")
700
701 typedef [switch_type(USER_INFORMATION_CLASS)] union _SAMPR_USER_INFO_BUFFER
702 {
703 [case(UserGeneralInformation)] SAMPR_USER_GENERAL_INFORMATION General;
704 [case(UserPreferencesInformation)] SAMPR_USER_PREFERENCES_INFORMATION Preferences;
705 [case(UserLogonInformation)] SAMPR_USER_LOGON_INFORMATION Logon;
706 [case(UserLogonHoursInformation)] SAMPR_USER_LOGON_HOURS_INFORMATION LogonHours;
707 [case(UserAccountInformation)] SAMPR_USER_ACCOUNT_INFORMATION Account;
708 [case(UserNameInformation)] SAMPR_USER_NAME_INFORMATION Name;
709 [case(UserAccountNameInformation)] SAMPR_USER_A_NAME_INFORMATION AccountName;
710 [case(UserFullNameInformation)] SAMPR_USER_F_NAME_INFORMATION FullName;
711 [case(UserPrimaryGroupInformation)] USER_PRIMARY_GROUP_INFORMATION PrimaryGroup;
712 [case(UserHomeInformation)] SAMPR_USER_HOME_INFORMATION Home;
713 [case(UserScriptInformation)] SAMPR_USER_SCRIPT_INFORMATION Script;
714 [case(UserProfileInformation)] SAMPR_USER_PROFILE_INFORMATION Profile;
715 [case(UserAdminCommentInformation)] SAMPR_USER_ADMIN_COMMENT_INFORMATION AdminComment;
716 [case(UserWorkStationsInformation)] SAMPR_USER_WORKSTATIONS_INFORMATION WorkStations;
717 [case(UserSetPasswordInformation)] SAMPR_USER_SET_PASSWORD_INFORMATION SetPassword;
718 [case(UserControlInformation)] USER_CONTROL_INFORMATION Control;
719 [case(UserExpiresInformation)] USER_EXPIRES_INFORMATION Expires;
720 [case(UserInternal1Information)] SAMPR_USER_INTERNAL1_INFORMATION Internal1;
721 [case(UserParametersInformation)] SAMPR_USER_PARAMETERS_INFORMATION Parameters;
722 [case(UserAllInformation)] SAMPR_USER_ALL_INFORMATION All;
723 [case(UserInternal4Information)] SAMPR_USER_INTERNAL4_INFORMATION Internal4;
724 [case(UserInternal5Information)] SAMPR_USER_INTERNAL5_INFORMATION Internal5;
725 [case(UserInternal4InformationNew)] SAMPR_USER_INTERNAL4_INFORMATION_NEW Internal4New;
726 [case(UserInternal5InformationNew)] SAMPR_USER_INTERNAL5_INFORMATION_NEW Internal5New;
727 } SAMPR_USER_INFO_BUFFER, *PSAMPR_USER_INFO_BUFFER;
728
729 typedef enum _PASSWORD_POLICY_VALIDATION_TYPE
730 {
731 SamValidateAuthentication = 1,
732 SamValidatePasswordChange,
733 SamValidatePasswordReset
734 } PASSWORD_POLICY_VALIDATION_TYPE;
735
736 typedef struct _SAM_VALIDATE_PASSWORD_HASH
737 {
738 unsigned long Length;
739 [unique,size_is(Length)] unsigned char* Hash;
740 } SAM_VALIDATE_PASSWORD_HASH, *PSAM_VALIDATE_PASSWORD_HASH;
741
742 typedef struct _SAM_VALIDATE_PERSISTED_FIELDS
743 {
744 unsigned long PresentFields;
745 LARGE_INTEGER PasswordLastSet;
746 LARGE_INTEGER BadPasswordTime;
747 LARGE_INTEGER LockoutTime;
748 unsigned long BadPasswordCount;
749 unsigned long PasswordHistoryLength;
750 [unique,size_is(PasswordHistoryLength)] PSAM_VALIDATE_PASSWORD_HASH PasswordHistory;
751 } SAM_VALIDATE_PERSISTED_FIELDS, *PSAM_VALIDATE_PERSISTED_FIELDS;
752
753 typedef enum _SAM_VALIDATE_VALIDATION_STATUS
754 {
755 SamValidateSuccess = 0,
756 SamValidatePasswordMustChange,
757 SamValidateAccountLockedOut,
758 SamValidatePasswordExpired,
759 SamValidatePasswordIncorrect,
760 SamValidatePasswordIsInHistory,
761 SamValidatePasswordTooShort,
762 SamValidatePasswordTooLong,
763 SamValidatePasswordNotComplexEnough,
764 SamValidatePasswordTooRecent,
765 SamValidatePasswordFilterError
766 } SAM_VALIDATE_VALIDATION_STATUS, *PSAM_VALIDATE_VALIDATION_STATUS;
767
768 typedef struct _SAM_VALIDATE_STANDARD_OUTPUT_ARG
769 {
770 SAM_VALIDATE_PERSISTED_FIELDS ChangedPersistedFields;
771 SAM_VALIDATE_VALIDATION_STATUS ValidationStatus;
772 } SAM_VALIDATE_STANDARD_OUTPUT_ARG, *PSAM_VALIDATE_STANDARD_OUTPUT_ARG;
773
774 typedef struct _SAM_VALIDATE_AUTHENTICATION_INPUT_ARG
775 {
776 SAM_VALIDATE_PERSISTED_FIELDS InputPersistedFields;
777 unsigned char PasswordMatched;
778 } SAM_VALIDATE_AUTHENTICATION_INPUT_ARG, *PSAM_VALIDATE_AUTHENTICATION_INPUT_ARG;
779
780 typedef struct _SAM_VALIDATE_PASSWORD_CHANGE_INPUT_ARG
781 {
782 SAM_VALIDATE_PERSISTED_FIELDS InputPersistedFields;
783 RPC_UNICODE_STRING ClearPassword;
784 RPC_UNICODE_STRING UserAccountName;
785 SAM_VALIDATE_PASSWORD_HASH HashedPassword;
786 unsigned char PasswordMatch;
787 } SAM_VALIDATE_PASSWORD_CHANGE_INPUT_ARG, *PSAM_VALIDATE_PASSWORD_CHANGE_INPUT_ARG;
788
789 typedef struct _SAM_VALIDATE_PASSWORD_RESET_INPUT_ARG
790 {
791 SAM_VALIDATE_PERSISTED_FIELDS InputPersistedFields;
792 RPC_UNICODE_STRING ClearPassword;
793 RPC_UNICODE_STRING UserAccountName;
794 SAM_VALIDATE_PASSWORD_HASH HashedPassword;
795 unsigned char PasswordMustChangeAtNextLogon;
796 unsigned char ClearLockout;
797 } SAM_VALIDATE_PASSWORD_RESET_INPUT_ARG, *PSAM_VALIDATE_PASSWORD_RESET_INPUT_ARG;
798
799 typedef [switch_type(PASSWORD_POLICY_VALIDATION_TYPE)] union _SAM_VALIDATE_INPUT_ARG
800 {
801 [case(SamValidateAuthentication)] SAM_VALIDATE_AUTHENTICATION_INPUT_ARG ValidateAuthenticationInput;
802 [case(SamValidatePasswordChange)] SAM_VALIDATE_PASSWORD_CHANGE_INPUT_ARG ValidatePasswordChangeInput;
803 [case(SamValidatePasswordReset)] SAM_VALIDATE_PASSWORD_RESET_INPUT_ARG ValidatePasswordResetInput;
804 } SAM_VALIDATE_INPUT_ARG, *PSAM_VALIDATE_INPUT_ARG;
805
806 typedef [switch_type(PASSWORD_POLICY_VALIDATION_TYPE)] union _SAM_VALIDATE_OUTPUT_ARG
807 {
808 [case(SamValidateAuthentication)] SAM_VALIDATE_STANDARD_OUTPUT_ARG ValidateAuthenticationOutput;
809 [case(SamValidatePasswordChange)] SAM_VALIDATE_STANDARD_OUTPUT_ARG ValidatePasswordChangeOutput;
810 [case(SamValidatePasswordReset)] SAM_VALIDATE_STANDARD_OUTPUT_ARG ValidatePasswordResetOutput;
811 } SAM_VALIDATE_OUTPUT_ARG, *PSAM_VALIDATE_OUTPUT_ARG;
812
813 [
814 uuid(12345778-1234-ABCD-EF00-0123456789AC),
815 version(1.0),
816 pointer_default(unique),
817 endpoint("ncacn_np:[\\pipe\\samr]")
818 #ifndef __midl
819 ,explicit_handle
820 #endif
821 ]
822 interface samr
823 {
824 /* Function 0 */
825 NTSTATUS
826 __stdcall
827 SamrConnect(
828 [in, unique] PSAMPR_SERVER_NAME ServerName,
829 [out] SAMPR_HANDLE *ServerHandle,
830 [in] ACCESS_MASK DesiredAccess);
831
832 /* Function 1 */
833 NTSTATUS
834 __stdcall
835 SamrCloseHandle(
836 [in,out] SAMPR_HANDLE *SamHandle);
837
838 /* Function 2 */
839 NTSTATUS
840 __stdcall
841 SamrSetSecurityObject(
842 [in] SAMPR_HANDLE ObjectHandle,
843 [in] SECURITY_INFORMATION SecurityInformation,
844 [in] PSAMPR_SR_SECURITY_DESCRIPTOR SecurityDescriptor);
845
846 /* Function 3 */
847 NTSTATUS
848 __stdcall
849 SamrQuerySecurityObject(
850 [in] SAMPR_HANDLE ObjectHandle,
851 [in] SECURITY_INFORMATION SecurityInformation,
852 [out] PSAMPR_SR_SECURITY_DESCRIPTOR *SecurityDescriptor);
853
854 /* Function 4 */
855 NTSTATUS
856 __stdcall
857 SamrShutdownSamServer(
858 [in] SAMPR_HANDLE ServerHandle);
859
860 /* Function 5 */
861 NTSTATUS
862 __stdcall
863 SamrLookupDomainInSamServer(
864 [in] SAMPR_HANDLE ServerHandle,
865 [in] PRPC_UNICODE_STRING Name,
866 [out] PRPC_SID *DomainId);
867
868 /* Function 6 */
869 NTSTATUS
870 __stdcall
871 SamrEnumerateDomainsInSamServer(
872 [in] SAMPR_HANDLE ServerHandle,
873 [in,out] unsigned long *EnumerationContext,
874 [out] PSAMPR_ENUMERATION_BUFFER *Buffer,
875 [in] unsigned long PreferedMaximumLength,
876 [out] unsigned long *CountReturned);
877
878 /* Function 7 */
879 NTSTATUS
880 __stdcall
881 SamrOpenDomain(
882 [in] SAMPR_HANDLE ServerHandle,
883 [in] ACCESS_MASK DesiredAccess,
884 [in] PRPC_SID DomainId,
885 [out] SAMPR_HANDLE *DomainHandle);
886
887 /* Function 8 */
888 NTSTATUS
889 __stdcall
890 SamrQueryInformationDomain(
891 [in] SAMPR_HANDLE DomainHandle,
892 [in] DOMAIN_INFORMATION_CLASS DomainInformationClass,
893 [out, switch_is(DomainInformationClass)] PSAMPR_DOMAIN_INFO_BUFFER *Buffer);
894
895 /* Function 9 */
896 NTSTATUS
897 __stdcall
898 SamrSetInformationDomain(
899 [in] SAMPR_HANDLE DomainHandle,
900 [in] DOMAIN_INFORMATION_CLASS DomainInformationClass,
901 [in, switch_is(DomainInformationClass)] PSAMPR_DOMAIN_INFO_BUFFER DomainInformation);
902
903 /* Function 10 */
904 NTSTATUS
905 __stdcall
906 SamrCreateGroupInDomain(
907 [in] SAMPR_HANDLE DomainHandle,
908 [in] PRPC_UNICODE_STRING Name,
909 [in] ACCESS_MASK DesiredAccess,
910 [out] SAMPR_HANDLE *GroupHandle,
911 [out] unsigned long *RelativeId);
912
913 /* Function 11 */
914 NTSTATUS
915 __stdcall
916 SamrEnumerateGroupsInDomain(
917 [in] SAMPR_HANDLE DomainHandle,
918 [in,out] unsigned long *EnumerationContext,
919 [out] PSAMPR_ENUMERATION_BUFFER *Buffer,
920 [in] unsigned long PreferedMaximumLength,
921 [out] unsigned long *CountReturned);
922
923 /* Function 12 */
924 NTSTATUS
925 __stdcall
926 SamrCreateUserInDomain([in] SAMPR_HANDLE DomainHandle,
927 [in] PRPC_UNICODE_STRING Name,
928 [in] ACCESS_MASK DesiredAccess,
929 [out] SAMPR_HANDLE *UserHandle,
930 [out] unsigned long *RelativeId);
931
932 /* Function 13 */
933 NTSTATUS
934 __stdcall
935 SamrEnumerateUsersInDomain([in] SAMPR_HANDLE DomainHandle,
936 [in,out] unsigned long *EnumerationContext,
937 [in] unsigned long UserAccountControl,
938 [out] PSAMPR_ENUMERATION_BUFFER *Buffer,
939 [in] unsigned long PreferedMaximumLength,
940 [out] unsigned long *CountReturned);
941
942 /* Function 14 */
943 NTSTATUS
944 __stdcall
945 SamrCreateAliasInDomain([in] SAMPR_HANDLE DomainHandle,
946 [in] PRPC_UNICODE_STRING AccountName,
947 [in] ACCESS_MASK DesiredAccess,
948 [out] SAMPR_HANDLE *AliasHandle,
949 [out] unsigned long *RelativeId);
950
951 /* Function 15 */
952 NTSTATUS
953 __stdcall
954 SamrEnumerateAliasesInDomain([in] SAMPR_HANDLE DomainHandle,
955 [in,out] unsigned long *EnumerationContext,
956 [out] PSAMPR_ENUMERATION_BUFFER *Buffer,
957 [in] unsigned long PreferedMaximumLength,
958 [out] unsigned long *CountReturned);
959
960 /* Function 16 */
961 NTSTATUS
962 __stdcall
963 SamrGetAliasMembership([in] SAMPR_HANDLE DomainHandle,
964 [in] PSAMPR_PSID_ARRAY SidArray,
965 [out] PSAMPR_ULONG_ARRAY Membership);
966
967 /* Function 17 */
968 NTSTATUS
969 __stdcall
970 SamrLookupNamesInDomain([in] SAMPR_HANDLE DomainHandle,
971 [in, range(0, 1000)] unsigned long Count,
972 [in, size_is(1000), length_is(Count)] RPC_UNICODE_STRING Names[*],
973 [out] PSAMPR_ULONG_ARRAY RelativeIds,
974 [out] PSAMPR_ULONG_ARRAY Use);
975
976 /* Function 18 */
977 NTSTATUS
978 __stdcall
979 SamrLookupIdsInDomain(
980 [in] SAMPR_HANDLE DomainHandle,
981 [in, range(0, 1000)] unsigned long Count,
982 [in, size_is(1000), length_is(Count)] unsigned long *RelativeIds,
983 [out] PSAMPR_RETURNED_USTRING_ARRAY Names,
984 [out] PSAMPR_ULONG_ARRAY Use);
985
986 /* Function 19 */
987 NTSTATUS
988 __stdcall
989 SamrOpenGroup(
990 [in] SAMPR_HANDLE DomainHandle,
991 [in] ACCESS_MASK DesiredAccess,
992 [in] unsigned long GroupId,
993 [out] SAMPR_HANDLE *GroupHandle);
994
995 /* Function 20 */
996 NTSTATUS
997 __stdcall
998 SamrQueryInformationGroup(
999 [in] SAMPR_HANDLE GroupHandle,
1000 [in] GROUP_INFORMATION_CLASS GroupInformationClass,
1001 [out, switch_is(GroupInformationClass)] PSAMPR_GROUP_INFO_BUFFER *Buffer);
1002
1003 /* Function 21 */
1004 NTSTATUS
1005 __stdcall
1006 SamrSetInformationGroup(
1007 [in] SAMPR_HANDLE GroupHandle,
1008 [in] GROUP_INFORMATION_CLASS GroupInformationClass,
1009 [in, switch_is(GroupInformationClass)] PSAMPR_GROUP_INFO_BUFFER Buffer);
1010
1011 /* Function 22 */
1012 NTSTATUS
1013 __stdcall
1014 SamrAddMemberToGroup(
1015 [in] SAMPR_HANDLE GroupHandle,
1016 [in] unsigned long MemberId,
1017 [in] unsigned long Attributes);
1018
1019 /* Function 21 */
1020 NTSTATUS
1021 __stdcall
1022 SamrDeleteGroup(
1023 [in,out] SAMPR_HANDLE *GroupHandle);
1024
1025 /* Function 24 */
1026 NTSTATUS
1027 __stdcall
1028 SamrRemoveMemberFromGroup(
1029 [in] SAMPR_HANDLE GroupHandle,
1030 [in] unsigned long MemberId);
1031
1032 /* Function 25 */
1033 NTSTATUS
1034 __stdcall
1035 SamrGetMembersInGroup(
1036 [in] SAMPR_HANDLE GroupHandle,
1037 [out] PSAMPR_GET_MEMBERS_BUFFER *Members);
1038
1039 /* Function 26 */
1040 NTSTATUS
1041 __stdcall
1042 SamrSetMemberAttributesOfGroup(
1043 [in] SAMPR_HANDLE GroupHandle,
1044 [in] unsigned long MemberId,
1045 [in] unsigned long Attributes);
1046
1047 /* Function 27 */
1048 NTSTATUS
1049 __stdcall
1050 SamrOpenAlias(
1051 [in] SAMPR_HANDLE DomainHandle,
1052 [in] ACCESS_MASK DesiredAccess,
1053 [in] ULONG AliasId,
1054 [out] SAMPR_HANDLE *AliasHandle);
1055
1056 /* Function 28 */
1057 NTSTATUS
1058 __stdcall
1059 SamrQueryInformationAlias(
1060 [in] SAMPR_HANDLE AliasHandle,
1061 [in] ALIAS_INFORMATION_CLASS AliasInformationClass,
1062 [out, switch_is(AliasInformationClass)] PSAMPR_ALIAS_INFO_BUFFER *Buffer);
1063
1064 /* Function 29 */
1065 NTSTATUS
1066 __stdcall
1067 SamrSetInformationAlias(
1068 [in] SAMPR_HANDLE AliasHandle,
1069 [in] ALIAS_INFORMATION_CLASS AliasInformationClass,
1070 [in, switch_is(AliasInformationClass)] PSAMPR_ALIAS_INFO_BUFFER Buffer);
1071
1072 /* Function 30 */
1073 NTSTATUS
1074 __stdcall
1075 SamrDeleteAlias(
1076 [in, out] SAMPR_HANDLE *AliasHandle);
1077
1078 /* Function 31 */
1079 NTSTATUS
1080 __stdcall
1081 SamrAddMemberToAlias(
1082 [in] SAMPR_HANDLE AliasHandle,
1083 [in] PRPC_SID MemberId);
1084
1085 /* Function 32 */
1086 NTSTATUS
1087 __stdcall
1088 SamrRemoveMemberFromAlias(
1089 [in] SAMPR_HANDLE AliasHandle,
1090 [in] PRPC_SID MemberId);
1091
1092 /* Function 33 */
1093 NTSTATUS
1094 __stdcall
1095 SamrGetMembersInAlias(
1096 [in] SAMPR_HANDLE AliasHandle,
1097 [out] PSAMPR_PSID_ARRAY_OUT Members);
1098
1099 /* Function 34 */
1100 NTSTATUS
1101 __stdcall
1102 SamrOpenUser(
1103 [in] SAMPR_HANDLE DomainHandle,
1104 [in] ACCESS_MASK DesiredAccess,
1105 [in] ULONG UserId,
1106 [out] SAMPR_HANDLE *UserHandle);
1107
1108 /* Function 35 */
1109 NTSTATUS
1110 __stdcall
1111 SamrDeleteUser(
1112 [in,out] SAMPR_HANDLE *UserHandle);
1113
1114 /* Function 36 */
1115 NTSTATUS
1116 __stdcall
1117 SamrQueryInformationUser(
1118 [in] SAMPR_HANDLE UserHandle,
1119 [in] USER_INFORMATION_CLASS UserInformationClass,
1120 [out, switch_is(UserInformationClass)] PSAMPR_USER_INFO_BUFFER *Buffer);
1121
1122 /* Function 37 */
1123 NTSTATUS
1124 __stdcall
1125 SamrSetInformationUser(
1126 [in] SAMPR_HANDLE UserHandle,
1127 [in] USER_INFORMATION_CLASS UserInformationClass,
1128 [in, switch_is(UserInformationClass)] PSAMPR_USER_INFO_BUFFER Buffer);
1129
1130 /* Function 38 */
1131 NTSTATUS
1132 __stdcall
1133 SamrChangePasswordUser(
1134 [in] SAMPR_HANDLE UserHandle,
1135 [in] unsigned char LmPresent,
1136 [in, unique] PENCRYPTED_LM_OWF_PASSWORD OldLmEncryptedWithNewLm,
1137 [in, unique] PENCRYPTED_LM_OWF_PASSWORD NewLmEncryptedWithOldLm,
1138 [in] unsigned char NtPresent,
1139 [in, unique] PENCRYPTED_NT_OWF_PASSWORD OldNtEncryptedWithNewNt,
1140 [in, unique] PENCRYPTED_NT_OWF_PASSWORD NewNtEncryptedWithOldNt,
1141 [in] unsigned char NtCrossEncryptionPresent,
1142 [in, unique] PENCRYPTED_NT_OWF_PASSWORD NewNtEncryptedWithNewLm,
1143 [in] unsigned char LmCrossEncryptionPresent,
1144 [in, unique] PENCRYPTED_LM_OWF_PASSWORD NewLmEncryptedWithNewNt);
1145
1146 /* Function 39 */
1147 NTSTATUS
1148 __stdcall
1149 SamrGetGroupsForUser(
1150 [in] SAMPR_HANDLE UserHandle,
1151 [out] PSAMPR_GET_GROUPS_BUFFER *Groups);
1152
1153 /* Function 40 */
1154 NTSTATUS
1155 __stdcall
1156 SamrQueryDisplayInformation(
1157 [in] SAMPR_HANDLE DomainHandle,
1158 [in] DOMAIN_DISPLAY_INFORMATION DisplayInformationClass,
1159 [in] unsigned long Index,
1160 [in] unsigned long EntryCount,
1161 [in] unsigned long PreferredMaximumLength,
1162 [out] unsigned long * TotalAvailable,
1163 [out] unsigned long * TotalReturned,
1164 [out, switch_is(DisplayInformationClass)] PSAMPR_DISPLAY_INFO_BUFFER Buffer);
1165
1166 /* Function 41 */
1167 NTSTATUS
1168 __stdcall
1169 SamrGetDisplayEnumerationIndex(
1170 [in] SAMPR_HANDLE DomainHandle,
1171 [in] DOMAIN_DISPLAY_INFORMATION DisplayInformationClass,
1172 [in] PRPC_UNICODE_STRING Prefix,
1173 [out] unsigned long *Index);
1174
1175 /* Function 42 */
1176 NTSTATUS
1177 __stdcall
1178 SamrTestPrivateFunctionsDomain(
1179 [in] SAMPR_HANDLE DomainHandle);
1180
1181 /* Function 43 */
1182 NTSTATUS
1183 __stdcall
1184 SamrTestPrivateFunctionsUser(
1185 [in] SAMPR_HANDLE UserHandle);
1186
1187 /* Function 44 */
1188 NTSTATUS
1189 __stdcall
1190 SamrGetUserDomainPasswordInformation(
1191 [in] SAMPR_HANDLE UserHandle,
1192 [out] PUSER_DOMAIN_PASSWORD_INFORMATION PasswordInformation);
1193
1194 /* Function 45 */
1195 NTSTATUS
1196 __stdcall
1197 SamrRemoveMemberFromForeignDomain(
1198 [in] SAMPR_HANDLE DomainHandle,
1199 [in] PRPC_SID MemberSid);
1200
1201 /* Function 46 */
1202 NTSTATUS
1203 __stdcall
1204 SamrQueryInformationDomain2(
1205 [in] SAMPR_HANDLE DomainHandle,
1206 [in] DOMAIN_INFORMATION_CLASS DomainInformationClass,
1207 [out, switch_is(DomainInformationClass)] PSAMPR_DOMAIN_INFO_BUFFER *Buffer);
1208
1209 /* Function 47 */
1210 NTSTATUS
1211 __stdcall
1212 SamrQueryInformationUser2(
1213 [in] SAMPR_HANDLE UserHandle,
1214 [in] USER_INFORMATION_CLASS UserInformationClass,
1215 [out, switch_is(UserInformationClass)] PSAMPR_USER_INFO_BUFFER *Buffer);
1216
1217 /* Function 48 */
1218 NTSTATUS
1219 __stdcall
1220 SamrQueryDisplayInformation2(
1221 [in] SAMPR_HANDLE DomainHandle,
1222 [in] DOMAIN_DISPLAY_INFORMATION DisplayInformationClass,
1223 [in] unsigned long Index,
1224 [in] unsigned long EntryCount,
1225 [in] unsigned long PreferredMaximumLength,
1226 [out] unsigned long *TotalAvailable,
1227 [out] unsigned long *TotalReturned,
1228 [out, switch_is(DisplayInformationClass)] PSAMPR_DISPLAY_INFO_BUFFER Buffer);
1229
1230 /* Function 49 */
1231 NTSTATUS
1232 __stdcall
1233 SamrGetDisplayEnumerationIndex2(
1234 [in] SAMPR_HANDLE DomainHandle,
1235 [in] DOMAIN_DISPLAY_INFORMATION DisplayInformationClass,
1236 [in] PRPC_UNICODE_STRING Prefix,
1237 [out] unsigned long *Index);
1238
1239 /* Function 50 */
1240 NTSTATUS
1241 __stdcall
1242 SamrCreateUser2InDomain(
1243 [in] SAMPR_HANDLE DomainHandle,
1244 [in] PRPC_UNICODE_STRING Name,
1245 [in] unsigned long AccountType,
1246 [in] ACCESS_MASK DesiredAccess,
1247 [out] SAMPR_HANDLE *UserHandle,
1248 [out] unsigned long *GrantedAccess,
1249 [out] unsigned long *RelativeId);
1250
1251 /* Function 51 */
1252 NTSTATUS
1253 __stdcall
1254 SamrQueryDisplayInformation3(
1255 [in] SAMPR_HANDLE DomainHandle,
1256 [in] DOMAIN_DISPLAY_INFORMATION DisplayInformationClass,
1257 [in] unsigned long Index,
1258 [in] unsigned long EntryCount,
1259 [in] unsigned long PreferredMaximumLength,
1260 [out] unsigned long *TotalAvailable,
1261 [out] unsigned long *TotalReturned,
1262 [out, switch_is(DisplayInformationClass)] PSAMPR_DISPLAY_INFO_BUFFER Buffer);
1263
1264 /* Function 52 */
1265 NTSTATUS
1266 __stdcall
1267 SamrAddMultipleMembersToAlias(
1268 [in] SAMPR_HANDLE AliasHandle,
1269 [in] PSAMPR_PSID_ARRAY MembersBuffer);
1270
1271 /* Function 53 */
1272 NTSTATUS
1273 __stdcall
1274 SamrRemoveMultipleMembersFromAlias(
1275 [in] SAMPR_HANDLE AliasHandle,
1276 [in] PSAMPR_PSID_ARRAY MembersBuffer);
1277
1278 /* Function 54 */
1279 NTSTATUS
1280 __stdcall
1281 SamrOemChangePasswordUser2(
1282 [in] handle_t BindingHandle,
1283 [in,unique] PRPC_STRING ServerName,
1284 [in] PRPC_STRING UserName,
1285 [in,unique] PSAMPR_ENCRYPTED_USER_PASSWORD NewPasswordEncryptedWithOldLm,
1286 [in,unique] PENCRYPTED_LM_OWF_PASSWORD OldLmOwfPasswordEncryptedWithNewLm);
1287
1288 /* Function 55 */
1289 NTSTATUS
1290 __stdcall
1291 SamrUnicodeChangePasswordUser2(
1292 [in] handle_t BindingHandle,
1293 [in,unique] PRPC_UNICODE_STRING ServerName,
1294 [in] PRPC_UNICODE_STRING UserName,
1295 [in,unique] PSAMPR_ENCRYPTED_USER_PASSWORD NewPasswordEncryptedWithOldNt,
1296 [in,unique] PENCRYPTED_NT_OWF_PASSWORD OldNtOwfPasswordEncryptedWithNewNt,
1297 [in] unsigned char LmPresent,
1298 [in,unique] PSAMPR_ENCRYPTED_USER_PASSWORD NewPasswordEncryptedWithOldLm,
1299 [in,unique] PENCRYPTED_LM_OWF_PASSWORD OldLmOwfPasswordEncryptedWithNewNt);
1300
1301 /* Function 56 */
1302 NTSTATUS
1303 __stdcall
1304 SamrGetDomainPasswordInformation(
1305 [in] handle_t BindingHandle,
1306 [in,unique] PRPC_UNICODE_STRING Unused,
1307 [out] PUSER_DOMAIN_PASSWORD_INFORMATION PasswordInformation);
1308
1309 /* Function 57 */
1310 NTSTATUS
1311 __stdcall
1312 SamrConnect2(
1313 [in,unique,string] PSAMPR_SERVER_NAME ServerName,
1314 [out] SAMPR_HANDLE *ServerHandle,
1315 [in] ACCESS_MASK DesiredAccess);
1316
1317 /* Function 58 */
1318 NTSTATUS
1319 __stdcall
1320 SamrSetInformationUser2(
1321 [in] SAMPR_HANDLE UserHandle,
1322 [in] USER_INFORMATION_CLASS UserInformationClass,
1323 [in, switch_is(UserInformationClass)] PSAMPR_USER_INFO_BUFFER Buffer);
1324
1325 /* Function 59 */
1326 NTSTATUS
1327 __stdcall
1328 SamrSetBootKeyInformation(
1329 [in] handle_t BindingHandle); /* FIXME */
1330
1331 /* Function 60 */
1332 NTSTATUS
1333 __stdcall
1334 SamrGetBootKeyInformation(
1335 [in] handle_t BindingHandle); /* FIXME */
1336
1337 /* Function 61 */
1338 NTSTATUS
1339 __stdcall
1340 SamrConnect3(
1341 [in] handle_t BindingHandle); /* FIXME */
1342
1343 /* Function 62 */
1344 NTSTATUS
1345 __stdcall
1346 SamrConnect4(
1347 [in,unique,string] PSAMPR_SERVER_NAME ServerName,
1348 [out] SAMPR_HANDLE *ServerHandle,
1349 [in] unsigned long ClientRevision,
1350 [in] ACCESS_MASK DesiredAccess);
1351
1352 /* Function 63 */
1353 NTSTATUS
1354 __stdcall
1355 SamrUnicodeChangePasswordUser3(
1356 [in] handle_t BindingHandle); /* FIXME */
1357
1358 /* Function 64 */
1359 NTSTATUS
1360 __stdcall
1361 SamrConnect5(
1362 [in,unique,string] PSAMPR_SERVER_NAME ServerName,
1363 [in] ACCESS_MASK DesiredAccess,
1364 [in] unsigned long InVersion,
1365 [in,switch_is(InVersion)] SAMPR_REVISION_INFO *InRevisionInfo,
1366 [out] unsigned long *OutVersion,
1367 [out,switch_is(*OutVersion)] SAMPR_REVISION_INFO *OutRevisionInfo,
1368 [out] SAMPR_HANDLE *ServerHandle);
1369
1370 /* Function 65 */
1371 NTSTATUS
1372 __stdcall
1373 SamrRidToSid(
1374 [in] SAMPR_HANDLE ObjectHandle,
1375 [in] unsigned long Rid,
1376 [out] PRPC_SID *Sid);
1377
1378 /* Function 66 */
1379 NTSTATUS
1380 __stdcall
1381 SamrSetDSRMPassword(
1382 [in] handle_t BindingHandle,
1383 [in,unique] PRPC_UNICODE_STRING Unused,
1384 [in] unsigned long UserId,
1385 [in,unique] PENCRYPTED_NT_OWF_PASSWORD EncryptedNtOwfPassword);
1386
1387 /* Function 67 */
1388 NTSTATUS
1389 __stdcall
1390 SamrValidatePassword(
1391 [in] handle_t Handle,
1392 [in] PASSWORD_POLICY_VALIDATION_TYPE ValidationType,
1393 [in,switch_is(ValidationType)] PSAM_VALIDATE_INPUT_ARG InputArg,
1394 [out,switch_is(ValidationType)] PSAM_VALIDATE_OUTPUT_ARG *OutputArg);
1395 }