root/trunk/win32/ntsecapi.d

Revision 155, 25.5 kB (checked in by Don Clugston, 6 years ago)

Committed on behalf of Stewart.

  • Property svn:eol-style set to native
Line 
1 /***********************************************************************\
2 *                              ntsecapi.d                               *
3 *                                                                       *
4 *                       Windows API header module                       *
5 *                                                                       *
6 *                 Translated from MinGW Windows headers                 *
7 *                           by Stewart Gordon                           *
8 *                                                                       *
9 *                       Placed into public domain                       *
10 \***********************************************************************/
11 module win32.ntsecapi;
12
13 private import
14   win32.basetyps, win32.ntdef, win32.windef, win32.winnt, win32.w32api;
15
16 // FIXME: check types and grouping of constants
17 // FIXME: check Windows version support
18
19 const KERB_WRAP_NO_ENCRYPT        = 0x80000001;
20
21 const LOGON_GUEST                 = 0x00000001;
22 const LOGON_NOENCRYPTION          = 0x00000002;
23 const LOGON_CACHED_ACCOUNT        = 0x00000004;
24 const LOGON_USED_LM_PASSWORD      = 0x00000008;
25 const LOGON_EXTRA_SIDS            = 0x00000020;
26 const LOGON_SUBAUTH_SESSION_KEY   = 0x00000040;
27 const LOGON_SERVER_TRUST_ACCOUNT  = 0x00000080;
28 const LOGON_NTLMV2_ENABLED        = 0x00000100;
29 const LOGON_RESOURCE_GROUPS       = 0x00000200;
30 const LOGON_PROFILE_PATH_RETURNED = 0x00000400;
31 const LOGON_GRACE_LOGON           = 0x01000000;
32
33 enum {
34     LSA_MODE_PASSWORD_PROTECTED = 1,
35     LSA_MODE_INDIVIDUAL_ACCOUNTS,
36     LSA_MODE_MANDATORY_ACCESS,
37     LSA_MODE_LOG_FULL
38 }
39
40 bool LSA_SUCCESS(int x) { return x >= 0; }
41
42 /*  TOTHINKABOUT: These constants don't have ANSI/Unicode versioned
43  *  aliases.  Should we merge them anyway?
44  */
45 const char[]  MICROSOFT_KERBEROS_NAME_A = "Kerberos";
46 const wchar[] MICROSOFT_KERBEROS_NAME_W = "Kerberos";
47 const char[]  MSV1_0_PACKAGE_NAME  = "MICROSOFT_AUTHENTICATION_PACKAGE_V1_0";
48 const wchar[] MSV1_0_PACKAGE_NAMEW = "MICROSOFT_AUTHENTICATION_PACKAGE_V1_0";
49
50 const MSV1_0_ALLOW_SERVER_TRUST_ACCOUNT      =       32;
51 const MSV1_0_ALLOW_WORKSTATION_TRUST_ACCOUNT =     2048;
52 const MSV1_0_CLEARTEXT_PASSWORD_ALLOWED      =        2;
53 const MSV1_0_CRED_LM_PRESENT                 =        1;
54 const MSV1_0_CRED_NT_PRESENT                 =        2;
55 const MSV1_0_CRED_VERSION                    =        0;
56 const MSV1_0_DONT_TRY_GUEST_ACCOUNT          =       16;
57 const MSV1_0_MAX_NTLM3_LIFE                  =     1800;
58 const MSV1_0_MAX_AVL_SIZE                    =    64000;
59 const MSV1_0_MNS_LOGON                       = 16777216;
60
61 const size_t
62     MSV1_0_CHALLENGE_LENGTH          = 8,
63     MSV1_0_LANMAN_SESSION_KEY_LENGTH = 8,
64     MSV1_0_NTLM3_RESPONSE_LENGTH     = 16,
65     MSV1_0_NTLM3_OWF_LENGTH          = 16,
66     MSV1_0_NTLM3_INPUT_LENGTH        = MSV1_0_NTLM3_RESPONSE.sizeof
67                                        - MSV1_0_NTLM3_RESPONSE_LENGTH,
68     MSV1_0_OWF_PASSWORD_LENGTH       = 16,
69     MSV1_0_PACKAGE_NAMEW_LENGTH      = MSV1_0_PACKAGE_NAMEW.sizeof
70                                        - WCHAR.sizeof;
71
72 const MSV1_0_RETURN_USER_PARAMETERS      =          8;
73 const MSV1_0_RETURN_PASSWORD_EXPIRY      =         64;
74 const MSV1_0_RETURN_PROFILE_PATH         =        512;
75 const MSV1_0_SUBAUTHENTICATION_DLL_EX    =    1048576;
76 const MSV1_0_SUBAUTHENTICATION_DLL       = 0xff000000;
77 const MSV1_0_SUBAUTHENTICATION_DLL_SHIFT =         24;
78 const MSV1_0_SUBAUTHENTICATION_DLL_RAS   =          2;
79 const MSV1_0_SUBAUTHENTICATION_DLL_IIS   =        132;
80 const MSV1_0_SUBAUTHENTICATION_FLAGS     = 0xff000000;
81 const MSV1_0_TRY_GUEST_ACCOUNT_ONLY      =        256;
82 const MSV1_0_TRY_SPECIFIED_DOMAIN_ONLY   =       1024;
83 const MSV1_0_UPDATE_LOGON_STATISTICS     =          4;
84 const MSV1_0_USE_CLIENT_CHALLENGE        =        128;
85 const MSV1_0_USER_SESSION_KEY_LENGTH     =         16;
86
87 const char[]
88     MSV1_0_SUBAUTHENTICATION_KEY
89       = `System\CurrentControlSet\Control\Lsa\MSV1_0`,
90     MSV1_0_SUBAUTHENTICATION_VALUE = "Auth";
91
92 const ACCESS_MASK
93     POLICY_VIEW_LOCAL_INFORMATION   = 0x0001,
94     POLICY_VIEW_AUDIT_INFORMATION   = 0x0002,
95     POLICY_GET_PRIVATE_INFORMATION  = 0x0004,
96     POLICY_TRUST_ADMIN              = 0x0008,
97     POLICY_CREATE_ACCOUNT           = 0x0010,
98     POLICY_CREATE_SECRET            = 0x0020,
99     POLICY_CREATE_PRIVILEGE         = 0x0040,
100     POLICY_SET_DEFAULT_QUOTA_LIMITS = 0x0080,
101     POLICY_SET_AUDIT_REQUIREMENTS   = 0x0100,
102     POLICY_AUDIT_LOG_ADMIN          = 0x0200,
103     POLICY_SERVER_ADMIN             = 0x0400,
104     POLICY_LOOKUP_NAMES             = 0x0800,
105
106     POLICY_READ                     = STANDARD_RIGHTS_READ     | 0x0006,
107     POLICY_WRITE                    = STANDARD_RIGHTS_WRITE    | 0x07F8,
108     POLICY_EXECUTE                  = STANDARD_RIGHTS_EXECUTE  | 0x0801,
109     POLICY_ALL_ACCESS               = STANDARD_RIGHTS_REQUIRED | 0x0FFF;
110
111 const POLICY_AUDIT_EVENT_UNCHANGED = 0;
112 const POLICY_AUDIT_EVENT_SUCCESS   = 1;
113 const POLICY_AUDIT_EVENT_FAILURE   = 2;
114 const POLICY_AUDIT_EVENT_NONE      = 4;
115 const POLICY_AUDIT_EVENT_MASK      = 7;
116
117 enum {
118     POLICY_LOCATION_LOCAL = 1,
119     POLICY_LOCATION_DS
120 }
121
122 enum : uint {
123     POLICY_MACHINE_POLICY_LOCAL     =          0,
124     POLICY_MACHINE_POLICY_DEFAULTED,
125     POLICY_MACHINE_POLICY_EXPLICIT,
126     POLICY_MACHINE_POLICY_UNKNOWN   = 0xFFFFFFFF
127 }
128
129
130 const POLICY_QOS_SCHANEL_REQUIRED            = 0x0001;
131 const POLICY_QOS_OUTBOUND_INTEGRITY          = 0x0002;
132 const POLICY_QOS_OUTBOUND_CONFIDENTIALITY    = 0x0004;
133 const POLICY_QOS_INBOUND_INTEGREITY          = 0x0008;
134 const POLICY_QOS_INBOUND_CONFIDENTIALITY     = 0x0010;
135 const POLICY_QOS_ALLOW_LOCAL_ROOT_CERT_STORE = 0x0020;
136 const POLICY_QOS_RAS_SERVER_ALLOWED          = 0x0040;
137 const POLICY_QOS_DHCP_SERVER_ALLOWD          = 0x0080;
138
139 const POLICY_KERBEROS_FORWARDABLE  = 1;
140 const POLICY_KERBEROS_PROXYABLE    = 2;
141 const POLICY_KERBEROS_RENEWABLE    = 4;
142 const POLICY_KERBEROS_POSTDATEABLE = 8;
143
144 const char[]
145     SAM_PASSWORD_CHANGE_NOTIFY_ROUTINE = "PasswordChangeNotify",
146     SAM_INIT_NOTIFICATION_ROUTINE      = "InitializeChangeNotify",
147     SAM_PASSWORD_FILTER_ROUTINE        = "PasswordFilter";
148
149 const TCHAR[]
150     SE_INTERACTIVE_LOGON_NAME          = "SeInteractiveLogonRight",
151     SE_NETWORK_LOGON_NAME              = "SeNetworkLogonRight",
152     SE_BATCH_LOGON_NAME                = "SeBatchLogonRight",
153     SE_SERVICE_LOGON_NAME              = "SeServiceLogonRight";
154
155 enum {
156     TRUST_ATTRIBUTE_NON_TRANSITIVE =         1,
157     TRUST_ATTRIBUTE_UPLEVEL_ONLY   =         2,
158     TRUST_ATTRIBUTE_TREE_PARENT    =   4194304,
159     TRUST_ATTRIBUTES_VALID         = -16580609
160 }
161
162 enum {
163     TRUST_AUTH_TYPE_NONE,
164     TRUST_AUTH_TYPE_NT4OWF,
165     TRUST_AUTH_TYPE_CLEAR
166 }
167
168 enum {
169     TRUST_DIRECTION_DISABLED,
170     TRUST_DIRECTION_INBOUND,
171     TRUST_DIRECTION_OUTBOUND,
172     TRUST_DIRECTION_BIDIRECTIONAL
173 }
174
175 enum {
176     TRUST_TYPE_DOWNLEVEL = 1,
177     TRUST_TYPE_UPLEVEL,
178     TRUST_TYPE_MIT,
179     TRUST_TYPE_DCE
180 }
181
182 alias UNICODE_STRING LSA_UNICODE_STRING;
183 alias UNICODE_STRING* PLSA_UNICODE_STRING;
184 alias STRING LSA_STRING;
185 alias STRING* PLSA_STRING;
186
187 enum MSV1_0_LOGON_SUBMIT_TYPE {
188     MsV1_0InteractiveLogon       = 2,
189     MsV1_0Lm20Logon,
190     MsV1_0NetworkLogon,
191     MsV1_0SubAuthLogon,
192     MsV1_0WorkstationUnlockLogon = 7
193 }
194 alias MSV1_0_LOGON_SUBMIT_TYPE* PMSV1_0_LOGON_SUBMIT_TYPE;
195
196 enum MSV1_0_PROFILE_BUFFER_TYPE {
197     MsV1_0InteractiveProfile = 2,
198     MsV1_0Lm20LogonProfile,
199     MsV1_0SmartCardProfile
200 }
201 alias MSV1_0_PROFILE_BUFFER_TYPE* PMSV1_0_PROFILE_BUFFER_TYPE;
202
203
204 enum MSV1_0_AVID {
205     MsvAvEOL,
206     MsvAvNbComputerName,
207     MsvAvNbDomainName,
208     MsvAvDnsComputerName,
209     MsvAvDnsDomainName
210 }
211
212 enum MSV1_0_PROTOCOL_MESSAGE_TYPE {
213     MsV1_0Lm20ChallengeRequest = 0,
214     MsV1_0Lm20GetChallengeResponse,
215     MsV1_0EnumerateUsers,
216     MsV1_0GetUserInfo,
217     MsV1_0ReLogonUsers,
218     MsV1_0ChangePassword,
219     MsV1_0ChangeCachedPassword,
220     MsV1_0GenericPassthrough,
221     MsV1_0CacheLogon,
222     MsV1_0SubAuth,
223     MsV1_0DeriveCredential,
224     MsV1_0CacheLookup
225 }
226 alias MSV1_0_PROTOCOL_MESSAGE_TYPE* PMSV1_0_PROTOCOL_MESSAGE_TYPE;
227
228 enum POLICY_LSA_SERVER_ROLE {
229     PolicyServerRoleBackup = 2,
230     PolicyServerRolePrimary
231 }
232 alias POLICY_LSA_SERVER_ROLE* PPOLICY_LSA_SERVER_ROLE;
233
234 enum POLICY_SERVER_ENABLE_STATE {
235     PolicyServerEnabled = 2,
236     PolicyServerDisabled
237 }
238 alias POLICY_SERVER_ENABLE_STATE* PPOLICY_SERVER_ENABLE_STATE;
239
240 enum POLICY_INFORMATION_CLASS {
241     PolicyAuditLogInformation = 1,
242     PolicyAuditEventsInformation,
243     PolicyPrimaryDomainInformation,
244     PolicyPdAccountInformation,
245     PolicyAccountDomainInformation,
246     PolicyLsaServerRoleInformation,
247     PolicyReplicaSourceInformation,
248     PolicyDefaultQuotaInformation,
249     PolicyModificationInformation,
250     PolicyAuditFullSetInformation,
251     PolicyAuditFullQueryInformation,
252     PolicyDnsDomainInformation,
253     PolicyEfsInformation
254 }
255 alias POLICY_INFORMATION_CLASS* PPOLICY_INFORMATION_CLASS;
256
257 enum POLICY_AUDIT_EVENT_TYPE {
258     AuditCategorySystem,
259     AuditCategoryLogon,
260     AuditCategoryObjectAccess,
261     AuditCategoryPrivilegeUse,
262     AuditCategoryDetailedTracking,
263     AuditCategoryPolicyChange,
264     AuditCategoryAccountManagement,
265     AuditCategoryDirectoryServiceAccess,
266     AuditCategoryAccountLogon
267 }
268 alias POLICY_AUDIT_EVENT_TYPE* PPOLICY_AUDIT_EVENT_TYPE;
269
270 enum POLICY_LOCAL_INFORMATION_CLASS {
271     PolicyLocalAuditEventsInformation = 1,
272     PolicyLocalPdAccountInformation,
273     PolicyLocalAccountDomainInformation,
274     PolicyLocalLsaServerRoleInformation,
275     PolicyLocalReplicaSourceInformation,
276     PolicyLocalModificationInformation,
277     PolicyLocalAuditFullSetInformation,
278     PolicyLocalAuditFullQueryInformation,
279     PolicyLocalDnsDomainInformation,
280     PolicyLocalIPSecReferenceInformation,
281     PolicyLocalMachinePasswordInformation,
282     PolicyLocalQualityOfServiceInformation,
283     PolicyLocalPolicyLocationInformation
284 }
285 alias POLICY_LOCAL_INFORMATION_CLASS* PPOLICY_LOCAL_INFORMATION_CLASS;
286
287 enum POLICY_DOMAIN_INFORMATION_CLASS {
288     PolicyDomainIPSecReferenceInformation = 1,
289     PolicyDomainQualityOfServiceInformation,
290     PolicyDomainEfsInformation,
291     PolicyDomainPublicKeyInformation,
292     PolicyDomainPasswordPolicyInformation,
293     PolicyDomainLockoutInformation,
294     PolicyDomainKerberosTicketInformation
295 }
296 alias POLICY_DOMAIN_INFORMATION_CLASS* PPOLICY_DOMAIN_INFORMATION_CLASS;
297
298 enum SECURITY_LOGON_TYPE {
299     Interactive = 2,
300     Network,
301     Batch,
302     Service,
303     Proxy,
304     Unlock
305 }
306 alias SECURITY_LOGON_TYPE* PSECURITY_LOGON_TYPE;
307
308 enum TRUSTED_INFORMATION_CLASS {
309     TrustedDomainNameInformation = 1,
310     TrustedControllersInformation,
311     TrustedPosixOffsetInformation,
312     TrustedPasswordInformation,
313     TrustedDomainInformationBasic,
314     TrustedDomainInformationEx,
315     TrustedDomainAuthInformation,
316     TrustedDomainFullInformation
317 }
318 alias TRUSTED_INFORMATION_CLASS* PTRUSTED_INFORMATION_CLASS;
319
320 struct DOMAIN_PASSWORD_INFORMATION {
321     USHORT        MinPasswordLength;
322     USHORT        PasswordHistoryLength;
323     ULONG         PasswordProperties;
324     LARGE_INTEGER MaxPasswordAge;
325     LARGE_INTEGER MinPasswordAge;
326 }
327 alias DOMAIN_PASSWORD_INFORMATION* PDOMAIN_PASSWORD_INFORMATION;
328
329 struct LSA_ENUMERATION_INFORMATION {
330     PSID Sid;
331 }
332 alias LSA_ENUMERATION_INFORMATION* PLSA_ENUMERATION_INFORMATION;
333
334 alias OBJECT_ATTRIBUTES LSA_OBJECT_ATTRIBUTES;
335 alias OBJECT_ATTRIBUTES* PLSA_OBJECT_ATTRIBUTES;
336
337 struct LSA_TRUST_INFORMATION {
338     LSA_UNICODE_STRING Name;
339     PSID               Sid;
340 }
341 alias LSA_TRUST_INFORMATION TRUSTED_DOMAIN_INFORMATION_BASIC;
342 alias LSA_TRUST_INFORMATION* PLSA_TRUST_INFORMATION;
343 /*  in MinGW (further down the code):
344  *      typedef PLSA_TRUST_INFORMATION *PTRUSTED_DOMAIN_INFORMATION_BASIC;
345  *  but it doesn't look right....
346  */
347 alias LSA_TRUST_INFORMATION** PTRUSTED_DOMAIN_INFORMATION_BASIC;
348
349 struct LSA_REFERENCED_DOMAIN_LIST {
350     ULONG                  Entries;
351     PLSA_TRUST_INFORMATION Domains;
352 }
353 alias LSA_REFERENCED_DOMAIN_LIST* PLSA_REFERENCED_DOMAIN_LIST;
354
355 struct LSA_TRANSLATED_SID {
356     SID_NAME_USE Use;
357     ULONG        RelativeId;
358     LONG         DomainIndex;
359 }
360 alias LSA_TRANSLATED_SID* PLSA_TRANSLATED_SID;
361
362 struct LSA_TRANSLATED_NAME {
363     SID_NAME_USE       Use;
364     LSA_UNICODE_STRING Name;
365     LONG               DomainIndex;
366 }
367 alias LSA_TRANSLATED_NAME* PLSA_TRANSLATED_NAME;
368
369 struct MSV1_0_INTERACTIVE_LOGON {
370     MSV1_0_LOGON_SUBMIT_TYPE MessageType;
371     UNICODE_STRING           LogonDomainName;
372     UNICODE_STRING           UserName;
373     UNICODE_STRING           Password;
374 }
375 alias MSV1_0_INTERACTIVE_LOGON* PMSV1_0_INTERACTIVE_LOGON;
376
377 struct MSV1_0_INTERACTIVE_PROFILE {
378     MSV1_0_PROFILE_BUFFER_TYPE MessageType;
379     USHORT                     LogonCount;
380     USHORT                     BadPasswordCount;
381     LARGE_INTEGER              LogonTime;
382     LARGE_INTEGER              LogoffTime;
383     LARGE_INTEGER              KickOffTime;
384     LARGE_INTEGER              PasswordLastSet;
385     LARGE_INTEGER              PasswordCanChange;
386     LARGE_INTEGER              PasswordMustChange;
387     UNICODE_STRING             LogonScript;
388     UNICODE_STRING             HomeDirectory;
389     UNICODE_STRING             FullName;
390     UNICODE_STRING             ProfilePath;
391     UNICODE_STRING             HomeDirectoryDrive;
392     UNICODE_STRING             LogonServer;
393     ULONG                      UserFlags;
394 }
395 alias MSV1_0_INTERACTIVE_PROFILE* PMSV1_0_INTERACTIVE_PROFILE;
396
397 struct MSV1_0_LM20_LOGON {
398     MSV1_0_LOGON_SUBMIT_TYPE       MessageType;
399     UNICODE_STRING                 LogonDomainName;
400     UNICODE_STRING                 UserName;
401     UNICODE_STRING                 Workstation;
402     UCHAR[MSV1_0_CHALLENGE_LENGTH] ChallengeToClient;
403     STRING                         CaseSensitiveChallengeResponse;
404     STRING                         CaseInsensitiveChallengeResponse;
405     ULONG                          ParameterControl;
406 }
407 alias MSV1_0_LM20_LOGON* PMSV1_0_LM20_LOGON;
408
409 static if (_WIN32_WINNT_ONLY && _WIN32_WINNT >= 0x500) {
410     struct MSV1_0_SUBAUTH_LOGON {
411         MSV1_0_LOGON_SUBMIT_TYPE       MessageType;
412         UNICODE_STRING                 LogonDomainName;
413         UNICODE_STRING                 UserName;
414         UNICODE_STRING                 Workstation;
415         UCHAR[MSV1_0_CHALLENGE_LENGTH] ChallengeToClient;
416         STRING                         AuthenticationInfo1;
417         STRING                         AuthenticationInfo2;
418         ULONG                          ParameterControl;
419         ULONG                          SubAuthPackageId;
420     }
421     alias MSV1_0_SUBAUTH_LOGON* PMSV1_0_SUBAUTH_LOGON;
422 }
423
424 struct MSV1_0_LM20_LOGON_PROFILE {
425     MSV1_0_PROFILE_BUFFER_TYPE              MessageType;
426     LARGE_INTEGER                           KickOffTime;
427     LARGE_INTEGER                           LogoffTime;
428     ULONG                                   UserFlags;
429     UCHAR[MSV1_0_USER_SESSION_KEY_LENGTH]   UserSessionKey;
430     UNICODE_STRING                          LogonDomainName;
431     UCHAR[MSV1_0_LANMAN_SESSION_KEY_LENGTH] LanmanSessionKey;
432     UNICODE_STRING                          LogonServer;
433     UNICODE_STRING                          UserParameters;
434 }
435 alias MSV1_0_LM20_LOGON_PROFILE* PMSV1_0_LM20_LOGON_PROFILE;
436
437 struct MSV1_0_SUPPLEMENTAL_CREDENTIAL {
438     ULONG Version;
439     ULONG Flags;
440     UCHAR[MSV1_0_OWF_PASSWORD_LENGTH] LmPassword;
441     UCHAR[MSV1_0_OWF_PASSWORD_LENGTH] NtPassword;
442 }
443 alias MSV1_0_SUPPLEMENTAL_CREDENTIAL* PMSV1_0_SUPPLEMENTAL_CREDENTIAL;
444
445 struct MSV1_0_NTLM3_RESPONSE {
446     UCHAR[MSV1_0_NTLM3_RESPONSE_LENGTH] Response;
447     UCHAR     RespType;
448     UCHAR     HiRespType;
449     USHORT    Flags;
450     ULONG     MsgWord;
451     ULONGLONG TimeStamp;
452     UCHAR[MSV1_0_CHALLENGE_LENGTH]      ChallengeFromClient;
453     ULONG     AvPairsOff;
454     UCHAR     _Buffer;
455     UCHAR*    Buffer() { return &_Buffer; }
456 }
457 alias MSV1_0_NTLM3_RESPONSE* PMSV1_0_NTLM3_RESPONSE;
458
459 struct  MSV1_0_AV_PAIR {
460     USHORT AvId;
461     USHORT AvLen;
462 }
463 alias MSV1_0_AV_PAIR* PMSV1_0_AV_PAIR;
464
465 struct MSV1_0_CHANGEPASSWORD_REQUEST {
466     MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
467     UNICODE_STRING DomainName;
468     UNICODE_STRING AccountName;
469     UNICODE_STRING OldPassword;
470     UNICODE_STRING NewPassword;
471     BOOLEAN        Impersonating;
472 }
473 alias MSV1_0_CHANGEPASSWORD_REQUEST* PMSV1_0_CHANGEPASSWORD_REQUEST;
474
475 struct MSV1_0_CHANGEPASSWORD_RESPONSE {
476     MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
477     BOOLEAN                      PasswordInfoValid;
478     DOMAIN_PASSWORD_INFORMATION  DomainPasswordInfo;
479 }
480 alias MSV1_0_CHANGEPASSWORD_RESPONSE* PMSV1_0_CHANGEPASSWORD_RESPONSE;
481
482 struct MSV1_0_SUBAUTH_REQUEST {
483     MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
484     ULONG  SubAuthPackageId;
485     ULONG  SubAuthInfoLength;
486     PUCHAR SubAuthSubmitBuffer;
487 }
488 alias MSV1_0_SUBAUTH_REQUEST* PMSV1_0_SUBAUTH_REQUEST;
489
490 struct MSV1_0_SUBAUTH_RESPONSE {
491     MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
492     ULONG  SubAuthInfoLength;
493     PUCHAR SubAuthReturnBuffer;
494 }
495 alias MSV1_0_SUBAUTH_RESPONSE* PMSV1_0_SUBAUTH_RESPONSE;
496
497 const MSV1_0_DERIVECRED_TYPE_SHA1 = 0;
498
499 struct MSV1_0_DERIVECRED_REQUEST {
500     MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
501     LUID   LogonId;
502     ULONG  DeriveCredType;
503     ULONG  DeriveCredInfoLength;
504     UCHAR  _DeriveCredSubmitBuffer;
505     UCHAR* DeriveCredSubmitBuffer() { return &_DeriveCredSubmitBuffer; }
506 }
507 alias MSV1_0_DERIVECRED_REQUEST* PMSV1_0_DERIVECRED_REQUEST;
508
509 struct MSV1_0_DERIVECRED_RESPONSE {
510     MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
511     ULONG  DeriveCredInfoLength;
512     UCHAR  _DeriveCredReturnBuffer;
513     UCHAR* DeriveCredReturnBuffer() { return &_DeriveCredReturnBuffer; }
514 }
515 alias MSV1_0_DERIVECRED_RESPONSE* PMSV1_0_DERIVECRED_RESPONSE;
516
517 alias uint LSA_ENUMERATION_HANDLE, LSA_OPERATIONAL_MODE,
518   POLICY_AUDIT_EVENT_OPTIONS;
519 alias uint* PLSA_ENUMERATION_HANDLE, PLSA_OPERATIONAL_MODE,
520   PPOLICY_AUDIT_EVENT_OPTIONS;
521
522 struct POLICY_PRIVILEGE_DEFINITION {
523     LSA_UNICODE_STRING Name;
524     LUID LocalValue;
525 }
526 alias POLICY_PRIVILEGE_DEFINITION* PPOLICY_PRIVILEGE_DEFINITION;
527
528 struct POLICY_AUDIT_LOG_INFO {
529     ULONG         AuditLogPercentFull;
530     ULONG         MaximumLogSize;
531     LARGE_INTEGER AuditRetentionPeriod;
532     BOOLEAN       AuditLogFullShutdownInProgress;
533     LARGE_INTEGER TimeToShutdown;
534     ULONG         NextAuditRecordId;
535 }
536 alias POLICY_AUDIT_LOG_INFO* PPOLICY_AUDIT_LOG_INFO;
537
538 struct POLICY_AUDIT_EVENTS_INFO {
539     BOOLEAN                     AuditingMode;
540     PPOLICY_AUDIT_EVENT_OPTIONS EventAuditingOptions;
541     ULONG                       MaximumAuditEventCount;
542 }
543 alias POLICY_AUDIT_EVENTS_INFO* PPOLICY_AUDIT_EVENTS_INFO;
544
545 struct POLICY_ACCOUNT_DOMAIN_INFO {
546     LSA_UNICODE_STRING DomainName;
547     PSID               DomainSid;
548 }
549 alias POLICY_ACCOUNT_DOMAIN_INFO* PPOLICY_ACCOUNT_DOMAIN_INFO;
550
551 struct POLICY_PRIMARY_DOMAIN_INFO {
552     LSA_UNICODE_STRING Name;
553     PSID               Sid;
554 }
555 alias POLICY_PRIMARY_DOMAIN_INFO* PPOLICY_PRIMARY_DOMAIN_INFO;
556
557 struct POLICY_DNS_DOMAIN_INFO {
558     LSA_UNICODE_STRING Name;
559     LSA_UNICODE_STRING DnsDomainName;
560     LSA_UNICODE_STRING DnsTreeName;
561     GUID               DomainGuid;
562     PSID               Sid;
563 }
564 alias POLICY_DNS_DOMAIN_INFO* PPOLICY_DNS_DOMAIN_INFO;
565
566 struct POLICY_PD_ACCOUNT_INFO {
567     LSA_UNICODE_STRING Name;
568 }
569 alias POLICY_PD_ACCOUNT_INFO* PPOLICY_PD_ACCOUNT_INFO;
570
571 struct POLICY_LSA_SERVER_ROLE_INFO {
572     POLICY_LSA_SERVER_ROLE LsaServerRole;
573 }
574 alias POLICY_LSA_SERVER_ROLE_INFO* PPOLICY_LSA_SERVER_ROLE_INFO;
575
576 struct POLICY_REPLICA_SOURCE_INFO {
577     LSA_UNICODE_STRING ReplicaSource;
578     LSA_UNICODE_STRING ReplicaAccountName;
579 }
580 alias POLICY_REPLICA_SOURCE_INFO* PPOLICY_REPLICA_SOURCE_INFO;
581
582 struct POLICY_DEFAULT_QUOTA_INFO {
583     QUOTA_LIMITS QuotaLimits;
584 }
585 alias POLICY_DEFAULT_QUOTA_INFO* PPOLICY_DEFAULT_QUOTA_INFO;
586
587 struct POLICY_MODIFICATION_INFO {
588     LARGE_INTEGER ModifiedId;
589     LARGE_INTEGER DatabaseCreationTime;
590 }
591 alias POLICY_MODIFICATION_INFO* PPOLICY_MODIFICATION_INFO;
592
593 struct POLICY_AUDIT_FULL_SET_INFO {
594     BOOLEAN ShutDownOnFull;
595 }
596 alias POLICY_AUDIT_FULL_SET_INFO* PPOLICY_AUDIT_FULL_SET_INFO;
597
598 struct POLICY_AUDIT_FULL_QUERY_INFO {
599     BOOLEAN ShutDownOnFull;
600     BOOLEAN LogIsFull;
601 }
602 alias POLICY_AUDIT_FULL_QUERY_INFO* PPOLICY_AUDIT_FULL_QUERY_INFO;
603
604 struct POLICY_EFS_INFO {
605     ULONG InfoLength;
606     PUCHAR EfsBlob;
607 }
608 alias POLICY_EFS_INFO* PPOLICY_EFS_INFO;
609
610 struct POLICY_LOCAL_IPSEC_REFERENCE_INFO {
611     LSA_UNICODE_STRING ObjectPath;
612 }
613 alias POLICY_LOCAL_IPSEC_REFERENCE_INFO* PPOLICY_LOCAL_IPSEC_REFERENCE_INFO;
614
615 struct POLICY_LOCAL_MACHINE_PASSWORD_INFO {
616     LARGE_INTEGER PasswordChangeInterval;
617 }
618 alias POLICY_LOCAL_MACHINE_PASSWORD_INFO* PPOLICY_LOCAL_MACHINE_PASSWORD_INFO;
619
620 struct POLICY_LOCAL_POLICY_LOCATION_INFO {
621     ULONG PolicyLocation;
622 }
623 alias POLICY_LOCAL_POLICY_LOCATION_INFO* PPOLICY_LOCAL_POLICY_LOCATION_INFO;
624
625 struct POLICY_LOCAL_QUALITY_OF_SERVICE_INFO{
626     ULONG QualityOfService;
627 }
628 alias POLICY_LOCAL_QUALITY_OF_SERVICE_INFO
629   POLICY_DOMAIN_QUALITY_OF_SERVICE_INFO;
630 alias POLICY_LOCAL_QUALITY_OF_SERVICE_INFO*
631   PPOLICY_LOCAL_QUALITY_OF_SERVICE_INFO,
632   PPOLICY_DOMAIN_QUALITY_OF_SERVICE_INFO;
633
634 struct POLICY_DOMAIN_PUBLIC_KEY_INFO {
635     ULONG  InfoLength;
636     PUCHAR PublicKeyInfo;
637 }
638 alias POLICY_DOMAIN_PUBLIC_KEY_INFO* PPOLICY_DOMAIN_PUBLIC_KEY_INFO;
639
640 struct POLICY_DOMAIN_LOCKOUT_INFO {
641     LARGE_INTEGER LockoutDuration;
642     LARGE_INTEGER LockoutObservationWindow;
643     USHORT        LockoutThreshold;
644 }
645 alias POLICY_DOMAIN_LOCKOUT_INFO* PPOLICY_DOMAIN_LOCKOUT_INFO;
646
647 struct POLICY_DOMAIN_PASSWORD_INFO {
648     USHORT        MinPasswordLength;
649     USHORT        PasswordHistoryLength;
650     ULONG         PasswordProperties;
651     LARGE_INTEGER MaxPasswordAge;
652     LARGE_INTEGER MinPasswordAge;
653 }
654 alias POLICY_DOMAIN_PASSWORD_INFO* PPOLICY_DOMAIN_PASSWORD_INFO;
655
656 struct POLICY_DOMAIN_KERBEROS_TICKET_INFO {
657     ULONG         AuthenticationOptions;
658     LARGE_INTEGER MinTicketAge;
659     LARGE_INTEGER MaxTicketAge;
660     LARGE_INTEGER MaxRenewAge;
661     LARGE_INTEGER ProxyLifetime;
662     LARGE_INTEGER ForceLogoff;
663 }
664 alias POLICY_DOMAIN_KERBEROS_TICKET_INFO* PPOLICY_DOMAIN_KERBEROS_TICKET_INFO;
665
666 alias HANDLE LSA_HANDLE;
667 alias HANDLE* PLSA_HANDLE;
668
669 struct TRUSTED_DOMAIN_NAME_INFO {
670     LSA_UNICODE_STRING Name;
671 }
672 alias TRUSTED_DOMAIN_NAME_INFO* PTRUSTED_DOMAIN_NAME_INFO;
673
674 struct TRUSTED_CONTROLLERS_INFO {
675     ULONG               Entries;
676     PLSA_UNICODE_STRING Names;
677 }
678 alias TRUSTED_CONTROLLERS_INFO* PTRUSTED_CONTROLLERS_INFO;
679
680 struct TRUSTED_POSIX_OFFSET_INFO {
681     ULONG Offset;
682 }
683 alias TRUSTED_POSIX_OFFSET_INFO* PTRUSTED_POSIX_OFFSET_INFO;
684
685 struct TRUSTED_PASSWORD_INFO {
686     LSA_UNICODE_STRING Password;
687     LSA_UNICODE_STRING OldPassword;
688 }
689 alias TRUSTED_PASSWORD_INFO* PTRUSTED_PASSWORD_INFO;
690
691 struct TRUSTED_DOMAIN_INFORMATION_EX {
692     LSA_UNICODE_STRING Name;
693     LSA_UNICODE_STRING FlatName;
694     PSID               Sid;
695     ULONG              TrustDirection;
696     ULONG              TrustType;
697     ULONG              TrustAttributes;
698 }
699 alias TRUSTED_DOMAIN_INFORMATION_EX* PTRUSTED_DOMAIN_INFORMATION_EX;
700
701 struct LSA_AUTH_INFORMATION {
702     LARGE_INTEGER LastUpdateTime;
703     ULONG         AuthType;
704     ULONG         AuthInfoLength;
705     PUCHAR        AuthInfo;
706 }
707 alias LSA_AUTH_INFORMATION* PLSA_AUTH_INFORMATION;
708
709 struct TRUSTED_DOMAIN_AUTH_INFORMATION {
710     ULONG                 IncomingAuthInfos;
711     PLSA_AUTH_INFORMATION IncomingAuthenticationInformation;
712     PLSA_AUTH_INFORMATION IncomingPreviousAuthenticationInformation;
713     ULONG                 OutgoingAuthInfos;
714     PLSA_AUTH_INFORMATION OutgoingAuthenticationInformation;
715     PLSA_AUTH_INFORMATION OutgoingPreviousAuthenticationInformation;
716 }
717 alias TRUSTED_DOMAIN_AUTH_INFORMATION* PTRUSTED_DOMAIN_AUTH_INFORMATION;
718
719 struct TRUSTED_DOMAIN_FULL_INFORMATION {
720     TRUSTED_DOMAIN_INFORMATION_EX   Information;
721     TRUSTED_POSIX_OFFSET_INFO       PosixOffset;
722     TRUSTED_DOMAIN_AUTH_INFORMATION AuthInformation;
723 }
724 alias TRUSTED_DOMAIN_FULL_INFORMATION* PTRUSTED_DOMAIN_FULL_INFORMATION;
725
726 extern (Windows) {
727     NTSTATUS LsaAddAccountRights(LSA_HANDLE, PSID, PLSA_UNICODE_STRING,
728       ULONG);
729     NTSTATUS LsaCallAuthenticationPackage(HANDLE, ULONG, PVOID, ULONG,
730       PVOID*, PULONG, PNTSTATUS);
731     NTSTATUS LsaClose(LSA_HANDLE);
732     NTSTATUS LsaConnectUntrusted(PHANDLE);
733     NTSTATUS LsaCreateTrustedDomainEx(LSA_HANDLE,
734       PTRUSTED_DOMAIN_INFORMATION_EX, PTRUSTED_DOMAIN_AUTH_INFORMATION,
735       ACCESS_MASK, PLSA_HANDLE);
736     NTSTATUS LsaDeleteTrustedDomain(LSA_HANDLE, PSID);
737     NTSTATUS LsaDeregisterLogonProcess(HANDLE);
738     NTSTATUS LsaEnumerateAccountRights(LSA_HANDLE, PSID, PLSA_UNICODE_STRING*,
739       PULONG);
740     NTSTATUS LsaEnumerateAccountsWithUserRight(LSA_HANDLE,
741       PLSA_UNICODE_STRING, PVOID*, PULONG);
742     NTSTATUS LsaEnumerateTrustedDomains(LSA_HANDLE, PLSA_ENUMERATION_HANDLE,
743       PVOID*, ULONG, PULONG);
744     NTSTATUS LsaEnumerateTrustedDomainsEx(LSA_HANDLE, PLSA_ENUMERATION_HANDLE,
745       TRUSTED_INFORMATION_CLASS, PVOID*, ULONG, PULONG);
746     NTSTATUS LsaFreeMemory(PVOID);
747     NTSTATUS LsaFreeReturnBuffer(PVOID);
748     NTSTATUS LsaLogonUser(HANDLE, PLSA_STRING, SECURITY_LOGON_TYPE, ULONG,
749       PVOID, ULONG, PTOKEN_GROUPS, PTOKEN_SOURCE, PVOID*, PULONG, PLUID,
750       PHANDLE, PQUOTA_LIMITS, PNTSTATUS);
751     NTSTATUS LsaLookupAuthenticationPackage(HANDLE, PLSA_STRING, PULONG);
752     NTSTATUS LsaLookupNames(LSA_HANDLE, ULONG, PLSA_UNICODE_STRING,
753       PLSA_REFERENCED_DOMAIN_LIST*, PLSA_TRANSLATED_SID*);
754     NTSTATUS LsaLookupSids(LSA_HANDLE, ULONG, PSID*,
755       PLSA_REFERENCED_DOMAIN_LIST*, PLSA_TRANSLATED_NAME*);
756     ULONG LsaNtStatusToWinError(NTSTATUS);
757     NTSTATUS LsaOpenPolicy(PLSA_UNICODE_STRING, PLSA_OBJECT_ATTRIBUTES,
758       ACCESS_MASK, PLSA_HANDLE);
759     NTSTATUS LsaQueryDomainInformationPolicy(LSA_HANDLE,
760       POLICY_DOMAIN_INFORMATION_CLASS, PVOID*);
761     NTSTATUS LsaQueryInformationPolicy(LSA_HANDLE, POLICY_INFORMATION_CLASS,
762       PVOID*);
763     NTSTATUS LsaQueryLocalInformationPolicy(LSA_HANDLE,
764       POLICY_LOCAL_INFORMATION_CLASS, PVOID*);
765     NTSTATUS LsaQueryTrustedDomainInfo(LSA_HANDLE, PSID,
766       TRUSTED_INFORMATION_CLASS, PVOID*);
767     NTSTATUS LsaQueryTrustedDomainInfoByName(LSA_HANDLE, PLSA_UNICODE_STRING,
768       TRUSTED_INFORMATION_CLASS, PVOID*);
769     NTSTATUS LsaRegisterLogonProcess(PLSA_STRING, PHANDLE,
770       PLSA_OPERATIONAL_MODE);
771     NTSTATUS LsaRemoveAccountRights(LSA_HANDLE, PSID, BOOLEAN,
772       PLSA_UNICODE_STRING, ULONG);
773     NTSTATUS LsaRetrievePrivateData(LSA_HANDLE, PLSA_UNICODE_STRING,
774       PLSA_UNICODE_STRING*);
775     NTSTATUS LsaSetDomainInformationPolicy(LSA_HANDLE,
776       POLICY_DOMAIN_INFORMATION_CLASS, PVOID);
777     NTSTATUS LsaSetInformationPolicy(LSA_HANDLE, POLICY_INFORMATION_CLASS,
778       PVOID);
779     NTSTATUS LsaSetLocalInformationPolicy(LSA_HANDLE,
780       POLICY_LOCAL_INFORMATION_CLASS, PVOID);
781     NTSTATUS LsaSetTrustedDomainInformation(LSA_HANDLE, PSID,
782       TRUSTED_INFORMATION_CLASS, PVOID);
783     NTSTATUS LsaSetTrustedDomainInfoByName(LSA_HANDLE, PLSA_UNICODE_STRING,
784       TRUSTED_INFORMATION_CLASS, PVOID);
785     NTSTATUS LsaStorePrivateData(LSA_HANDLE, PLSA_UNICODE_STRING,
786       PLSA_UNICODE_STRING);
787 }
788
789 alias NTSTATUS function(PUNICODE_STRING, ULONG, PUNICODE_STRING)
790   PSAM_PASSWORD_NOTIFICATION_ROUTINE;
791 alias BOOLEAN function() PSAM_INIT_NOTIFICATION_ROUTINE;
792 alias BOOLEAN function(PUNICODE_STRING, PUNICODE_STRING,
793   PUNICODE_STRING, BOOLEAN) PSAM_PASSWORD_FILTER_ROUTINE;
Note: See TracBrowser for help on using the browser.