1 // Licensed under the Apache License, Version 2.0
2 // <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
3 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
4 // All files in the project carrying such notice may not be copied, modified, or distributed
5 // except according to those terms.
6 //! This module defines the Local Security Authority APIs.
7 use shared::basetsd::{ULONG64, ULONG_PTR};
8 use shared::guiddef::GUID;
9 use shared::minwindef::{PUCHAR, PULONG, UCHAR, ULONG, USHORT};
10 use shared::ntdef::NTSTATUS;
11 use shared::sspi::SecHandle;
12 use um::lsalookup::{
13     LSA_TRUST_INFORMATION, LSA_UNICODE_STRING, PLSA_TRUST_INFORMATION, PLSA_UNICODE_STRING
14 };
15 use um::subauth::{PUNICODE_STRING, STRING, UNICODE_STRING};
16 use um::winnt::{
17     ACCESS_MASK, ANYSIZE_ARRAY, BOOLEAN, HANDLE, LARGE_INTEGER, LONG, LUID, PACL, PCSTR, PCWSTR,
18     PSECURITY_DESCRIPTOR, PSID, PSTR, PVOID, PWSTR, QUOTA_LIMITS, SECURITY_INFORMATION, SHORT, SID,
19     SID_NAME_USE, STANDARD_RIGHTS_EXECUTE, STANDARD_RIGHTS_READ, STANDARD_RIGHTS_REQUIRED,
20     STANDARD_RIGHTS_WRITE, ULONGLONG
21 };
22 DEFINE_GUID!{Audit_System_SecurityStateChange,
23     0x0cce9210, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
24 DEFINE_GUID!{Audit_System_SecuritySubsystemExtension,
25     0x0cce9211, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
26 DEFINE_GUID!{Audit_System_Integrity,
27     0x0cce9212, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
28 DEFINE_GUID!{Audit_System_IPSecDriverEvents,
29     0x0cce9213, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
30 DEFINE_GUID!{Audit_System_Others,
31     0x0cce9214, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
32 DEFINE_GUID!{Audit_Logon_Logon,
33     0x0cce9215, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
34 DEFINE_GUID!{Audit_Logon_Logoff,
35     0x0cce9216, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
36 DEFINE_GUID!{Audit_Logon_AccountLockout,
37     0x0cce9217, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
38 DEFINE_GUID!{Audit_Logon_IPSecMainMode,
39     0x0cce9218, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
40 DEFINE_GUID!{Audit_Logon_IPSecQuickMode,
41     0x0cce9219, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
42 DEFINE_GUID!{Audit_Logon_IPSecUserMode,
43     0x0cce921a, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
44 DEFINE_GUID!{Audit_Logon_SpecialLogon,
45     0x0cce921b, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
46 DEFINE_GUID!{Audit_Logon_Others,
47     0x0cce921c, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
48 DEFINE_GUID!{Audit_ObjectAccess_FileSystem,
49     0x0cce921d, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
50 DEFINE_GUID!{Audit_ObjectAccess_Registry,
51     0x0cce921e, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
52 DEFINE_GUID!{Audit_ObjectAccess_Kernel,
53     0x0cce921f, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
54 DEFINE_GUID!{Audit_ObjectAccess_Sam,
55     0x0cce9220, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
56 DEFINE_GUID!{Audit_ObjectAccess_CertificationServices,
57     0x0cce9221, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
58 DEFINE_GUID!{Audit_ObjectAccess_ApplicationGenerated,
59     0x0cce9222, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
60 DEFINE_GUID!{Audit_ObjectAccess_Handle,
61     0x0cce9223, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
62 DEFINE_GUID!{Audit_ObjectAccess_Share,
63     0x0cce9224, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
64 DEFINE_GUID!{Audit_ObjectAccess_FirewallPacketDrops,
65     0x0cce9225, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
66 DEFINE_GUID!{Audit_ObjectAccess_FirewallConnection,
67     0x0cce9226, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
68 DEFINE_GUID!{Audit_ObjectAccess_Other,
69     0x0cce9227, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
70 DEFINE_GUID!{Audit_PrivilegeUse_Sensitive,
71     0x0cce9228, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
72 DEFINE_GUID!{Audit_PrivilegeUse_NonSensitive,
73     0x0cce9229, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
74 DEFINE_GUID!{Audit_PrivilegeUse_Others,
75     0x0cce922a, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
76 DEFINE_GUID!{Audit_DetailedTracking_ProcessCreation,
77     0x0cce922b, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
78 DEFINE_GUID!{Audit_DetailedTracking_ProcessTermination,
79     0x0cce922c, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
80 DEFINE_GUID!{Audit_DetailedTracking_DpapiActivity,
81     0x0cce922d, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
82 DEFINE_GUID!{Audit_DetailedTracking_RpcCall,
83     0x0cce922e, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
84 DEFINE_GUID!{Audit_PolicyChange_AuditPolicy,
85     0x0cce922f, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
86 DEFINE_GUID!{Audit_PolicyChange_AuthenticationPolicy,
87     0x0cce9230, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
88 DEFINE_GUID!{Audit_PolicyChange_AuthorizationPolicy,
89     0x0cce9231, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
90 DEFINE_GUID!{Audit_PolicyChange_MpsscvRulePolicy,
91     0x0cce9232, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
92 DEFINE_GUID!{Audit_PolicyChange_WfpIPSecPolicy,
93     0x0cce9233, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
94 DEFINE_GUID!{Audit_PolicyChange_Others,
95     0x0cce9234, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
96 DEFINE_GUID!{Audit_AccountManagement_UserAccount,
97     0x0cce9235, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
98 DEFINE_GUID!{Audit_AccountManagement_ComputerAccount,
99     0x0cce9236, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
100 DEFINE_GUID!{Audit_AccountManagement_SecurityGroup,
101     0x0cce9237, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
102 DEFINE_GUID!{Audit_AccountManagement_DistributionGroup,
103     0x0cce9238, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
104 DEFINE_GUID!{Audit_AccountManagement_ApplicationGroup,
105     0x0cce9239, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
106 DEFINE_GUID!{Audit_AccountManagement_Others,
107     0x0cce923a, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
108 DEFINE_GUID!{Audit_DSAccess_DSAccess,
109     0x0cce923b, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
110 DEFINE_GUID!{Audit_DsAccess_AdAuditChanges,
111     0x0cce923c, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
112 DEFINE_GUID!{Audit_Ds_Replication,
113     0x0cce923d, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
114 DEFINE_GUID!{Audit_Ds_DetailedReplication,
115     0x0cce923e, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
116 DEFINE_GUID!{Audit_AccountLogon_CredentialValidation,
117     0x0cce923f, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
118 DEFINE_GUID!{Audit_AccountLogon_Kerberos,
119     0x0cce9240, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
120 DEFINE_GUID!{Audit_AccountLogon_Others,
121     0x0cce9241, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
122 DEFINE_GUID!{Audit_AccountLogon_KerbCredentialValidation,
123     0x0cce9242, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
124 DEFINE_GUID!{Audit_Logon_NPS,
125     0x0cce9243, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
126 DEFINE_GUID!{Audit_ObjectAccess_DetailedFileShare,
127     0x0cce9244, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
128 DEFINE_GUID!{Audit_ObjectAccess_RemovableStorage,
129     0x0cce9245, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
130 DEFINE_GUID!{Audit_ObjectAccess_CbacStaging,
131     0x0cce9246, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
132 DEFINE_GUID!{Audit_Logon_Claims,
133     0x0cce9247, 0x69ae, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
134 DEFINE_GUID!{Audit_System,
135     0x69979848, 0x797a, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
136 DEFINE_GUID!{Audit_Logon,
137     0x69979849, 0x797a, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
138 DEFINE_GUID!{Audit_ObjectAccess,
139     0x6997984a, 0x797a, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
140 DEFINE_GUID!{Audit_PrivilegeUse,
141     0x6997984b, 0x797a, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
142 DEFINE_GUID!{Audit_DetailedTracking,
143     0x6997984c, 0x797a, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
144 DEFINE_GUID!{Audit_PolicyChange,
145     0x6997984d, 0x797a, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
146 DEFINE_GUID!{Audit_AccountManagement,
147     0x6997984e, 0x797a, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
148 DEFINE_GUID!{Audit_DirectoryServiceAccess,
149     0x6997984f, 0x797a, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
150 DEFINE_GUID!{Audit_AccountLogon,
151     0x69979850, 0x797a, 0x11d9, 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30}
152 ENUM!{enum POLICY_AUDIT_EVENT_TYPE {
153     AuditCategorySystem = 0,
154     AuditCategoryLogon,
155     AuditCategoryObjectAccess,
156     AuditCategoryPrivilegeUse,
157     AuditCategoryDetailedTracking,
158     AuditCategoryPolicyChange,
159     AuditCategoryAccountManagement,
160     AuditCategoryDirectoryServiceAccess,
161     AuditCategoryAccountLogon,
162 }}
163 pub type PPOLICY_AUDIT_EVENT_TYPE = *mut POLICY_AUDIT_EVENT_TYPE;
164 pub const POLICY_AUDIT_EVENT_UNCHANGED: POLICY_AUDIT_EVENT_OPTIONS = 0x00000000;
165 pub const POLICY_AUDIT_EVENT_SUCCESS: POLICY_AUDIT_EVENT_OPTIONS = 0x00000001;
166 pub const POLICY_AUDIT_EVENT_FAILURE: POLICY_AUDIT_EVENT_OPTIONS = 0x00000002;
167 pub const POLICY_AUDIT_EVENT_NONE: POLICY_AUDIT_EVENT_OPTIONS = 0x00000004;
168 pub const POLICY_AUDIT_EVENT_MASK: POLICY_AUDIT_EVENT_OPTIONS = POLICY_AUDIT_EVENT_SUCCESS
169     | POLICY_AUDIT_EVENT_FAILURE | POLICY_AUDIT_EVENT_UNCHANGED | POLICY_AUDIT_EVENT_NONE;
170 pub const POLICY_VIEW_LOCAL_INFORMATION: ACCESS_MASK = 0x00000001;
171 pub const POLICY_VIEW_AUDIT_INFORMATION: ACCESS_MASK = 0x00000002;
172 pub const POLICY_GET_PRIVATE_INFORMATION: ACCESS_MASK = 0x00000004;
173 pub const POLICY_TRUST_ADMIN: ACCESS_MASK = 0x00000008;
174 pub const POLICY_CREATE_ACCOUNT: ACCESS_MASK = 0x00000010;
175 pub const POLICY_CREATE_SECRET: ACCESS_MASK = 0x00000020;
176 pub const POLICY_CREATE_PRIVILEGE: ACCESS_MASK = 0x00000040;
177 pub const POLICY_SET_DEFAULT_QUOTA_LIMITS: ACCESS_MASK = 0x00000080;
178 pub const POLICY_SET_AUDIT_REQUIREMENTS: ACCESS_MASK = 0x00000100;
179 pub const POLICY_AUDIT_LOG_ADMIN: ACCESS_MASK = 0x00000200;
180 pub const POLICY_SERVER_ADMIN: ACCESS_MASK = 0x00000400;
181 pub const POLICY_LOOKUP_NAMES: ACCESS_MASK = 0x00000800;
182 pub const POLICY_NOTIFICATION: ACCESS_MASK = 0x00001000;
183 pub const POLICY_ALL_ACCESS: ACCESS_MASK = STANDARD_RIGHTS_REQUIRED
184     | POLICY_VIEW_LOCAL_INFORMATION | POLICY_VIEW_AUDIT_INFORMATION
185     | POLICY_GET_PRIVATE_INFORMATION | POLICY_TRUST_ADMIN | POLICY_CREATE_ACCOUNT
186     | POLICY_CREATE_SECRET | POLICY_CREATE_PRIVILEGE | POLICY_SET_DEFAULT_QUOTA_LIMITS
187     | POLICY_SET_AUDIT_REQUIREMENTS | POLICY_AUDIT_LOG_ADMIN | POLICY_SERVER_ADMIN
188     | POLICY_LOOKUP_NAMES;
189 pub const POLICY_READ: ACCESS_MASK = STANDARD_RIGHTS_READ | POLICY_VIEW_AUDIT_INFORMATION
190     | POLICY_GET_PRIVATE_INFORMATION;
191 pub const POLICY_WRITE: ACCESS_MASK = STANDARD_RIGHTS_WRITE | POLICY_TRUST_ADMIN
192     | POLICY_CREATE_ACCOUNT | POLICY_CREATE_SECRET | POLICY_CREATE_PRIVILEGE
193     | POLICY_SET_DEFAULT_QUOTA_LIMITS | POLICY_SET_AUDIT_REQUIREMENTS | POLICY_AUDIT_LOG_ADMIN
194     | POLICY_SERVER_ADMIN;
195 pub const POLICY_EXECUTE: ACCESS_MASK = STANDARD_RIGHTS_EXECUTE
196     | POLICY_VIEW_LOCAL_INFORMATION | POLICY_LOOKUP_NAMES;
197 STRUCT!{struct LSA_TRANSLATED_SID {
198     Use: SID_NAME_USE,
199     RelativeId: ULONG,
200     DomainIndex: LONG,
201 }}
202 pub type PLSA_TRANSLATED_SID = *mut LSA_TRANSLATED_SID;
203 ENUM!{enum POLICY_LSA_SERVER_ROLE {
204     PolicyServerRoleBackup = 2,
205     PolicyServerRolePrimary,
206 }}
207 pub type PPOLICY_LSA_SERVER_ROLE = *mut POLICY_LSA_SERVER_ROLE;
208 pub type POLICY_AUDIT_EVENT_OPTIONS = ULONG;
209 pub type PPOLICY_AUDIT_EVENT_OPTIONS = *mut ULONG;
210 ENUM!{enum POLICY_INFORMATION_CLASS {
211     PolicyAuditLogInformation = 1,
212     PolicyAuditEventsInformation,
213     PolicyPrimaryDomainInformation,
214     PolicyPdAccountInformation,
215     PolicyAccountDomainInformation,
216     PolicyLsaServerRoleInformation,
217     PolicyReplicaSourceInformation,
218     PolicyDefaultQuotaInformation,
219     PolicyModificationInformation,
220     PolicyAuditFullSetInformation,
221     PolicyAuditFullQueryInformation,
222     PolicyDnsDomainInformation,
223     PolicyDnsDomainInformationInt,
224     PolicyLocalAccountDomainInformation,
225     PolicyLastEntry,
226 }}
227 pub type PPOLICY_INFORMATION_CLASS = *mut POLICY_INFORMATION_CLASS;
228 STRUCT!{struct POLICY_AUDIT_LOG_INFO {
229     AuditLogPercentFull: ULONG,
230     MaximumLogSize: ULONG,
231     AuditRetentionPeriod: LARGE_INTEGER,
232     AuditLogFullShutdownInProgress: BOOLEAN,
233     TimeToShutdown: LARGE_INTEGER,
234     NextAuditRecordId: ULONG,
235 }}
236 pub type PPOLICY_AUDIT_LOG_INFO = *mut POLICY_AUDIT_LOG_INFO;
237 STRUCT!{struct POLICY_AUDIT_EVENTS_INFO {
238     AuditingMode: BOOLEAN,
239     EventAuditingOptions: PPOLICY_AUDIT_EVENT_OPTIONS,
240     MaximumAuditEventCount: ULONG,
241 }}
242 pub type PPOLICY_AUDIT_EVENTS_INFO = *mut POLICY_AUDIT_EVENTS_INFO;
243 STRUCT!{struct POLICY_AUDIT_SUBCATEGORIES_INFO {
244     MaximumSubCategoryCount: ULONG,
245     EventAuditingOptions: PPOLICY_AUDIT_EVENT_OPTIONS,
246 }}
247 pub type PPOLICY_AUDIT_SUBCATEGORIES_INFO = *mut POLICY_AUDIT_SUBCATEGORIES_INFO;
248 STRUCT!{struct POLICY_AUDIT_CATEGORIES_INFO {
249     MaximumSubCategoryCount: ULONG,
250     SubCategoriesInfo: PPOLICY_AUDIT_SUBCATEGORIES_INFO,
251 }}
252 pub type PPOLICY_AUDIT_CATEGORIES_INFO = *mut POLICY_AUDIT_CATEGORIES_INFO;
253 pub const PER_USER_POLICY_UNCHANGED: ULONG = 0x00;
254 pub const PER_USER_AUDIT_SUCCESS_INCLUDE: ULONG = 0x01;
255 pub const PER_USER_AUDIT_SUCCESS_EXCLUDE: ULONG = 0x02;
256 pub const PER_USER_AUDIT_FAILURE_INCLUDE: ULONG = 0x04;
257 pub const PER_USER_AUDIT_FAILURE_EXCLUDE: ULONG = 0x08;
258 pub const PER_USER_AUDIT_NONE: ULONG = 0x10;
259 pub const VALID_PER_USER_AUDIT_POLICY_FLAG: ULONG = PER_USER_AUDIT_SUCCESS_INCLUDE
260     | PER_USER_AUDIT_SUCCESS_EXCLUDE | PER_USER_AUDIT_FAILURE_INCLUDE
261     | PER_USER_AUDIT_FAILURE_EXCLUDE | PER_USER_AUDIT_NONE;
262 STRUCT!{struct POLICY_PRIMARY_DOMAIN_INFO {
263     Name: LSA_UNICODE_STRING,
264     Sid: PSID,
265 }}
266 pub type PPOLICY_PRIMARY_DOMAIN_INFO = *mut POLICY_PRIMARY_DOMAIN_INFO;
267 STRUCT!{struct POLICY_PD_ACCOUNT_INFO {
268     Name: LSA_UNICODE_STRING,
269 }}
270 pub type PPOLICY_PD_ACCOUNT_INFO = *mut POLICY_PD_ACCOUNT_INFO;
271 STRUCT!{struct POLICY_LSA_SERVER_ROLE_INFO {
272     LsaServerRole: POLICY_LSA_SERVER_ROLE,
273 }}
274 pub type PPOLICY_LSA_SERVER_ROLE_INFO = *mut POLICY_LSA_SERVER_ROLE_INFO;
275 STRUCT!{struct POLICY_REPLICA_SOURCE_INFO {
276     ReplicaSource: LSA_UNICODE_STRING,
277     ReplicaAccountName: LSA_UNICODE_STRING,
278 }}
279 pub type PPOLICY_REPLICA_SOURCE_INFO = *mut POLICY_REPLICA_SOURCE_INFO;
280 STRUCT!{struct POLICY_DEFAULT_QUOTA_INFO {
281     QuotaLimits: QUOTA_LIMITS,
282 }}
283 pub type PPOLICY_DEFAULT_QUOTA_INFO = *mut POLICY_DEFAULT_QUOTA_INFO;
284 STRUCT!{struct POLICY_MODIFICATION_INFO {
285     ModifiedId: LARGE_INTEGER,
286     DatabaseCreationTime: LARGE_INTEGER,
287 }}
288 pub type PPOLICY_MODIFICATION_INFO = *mut POLICY_MODIFICATION_INFO;
289 STRUCT!{struct POLICY_AUDIT_FULL_SET_INFO {
290     ShutDownOnFull: BOOLEAN,
291 }}
292 pub type PPOLICY_AUDIT_FULL_SET_INFO = *mut POLICY_AUDIT_FULL_SET_INFO;
293 STRUCT!{struct POLICY_AUDIT_FULL_QUERY_INFO {
294     ShutDownOnFull: BOOLEAN,
295     LogIsFull: BOOLEAN,
296 }}
297 pub type PPOLICY_AUDIT_FULL_QUERY_INFO = *mut POLICY_AUDIT_FULL_QUERY_INFO;
298 ENUM!{enum POLICY_DOMAIN_INFORMATION_CLASS {
299     PolicyDomainEfsInformation = 2,
300     PolicyDomainKerberosTicketInformation,
301 }}
302 pub type PPOLICY_DOMAIN_INFORMATION_CLASS = *mut POLICY_DOMAIN_INFORMATION_CLASS;
303 STRUCT!{struct POLICY_DOMAIN_EFS_INFO {
304     InfoLength: ULONG,
305     EfsBlob: PUCHAR,
306 }}
307 pub type PPOLICY_DOMAIN_EFS_INFO = *mut POLICY_DOMAIN_EFS_INFO;
308 STRUCT!{struct POLICY_DOMAIN_KERBEROS_TICKET_INFO {
309     AuthenticationOptions: ULONG,
310     MaxServiceTicketAge: LARGE_INTEGER,
311     MaxTicketAge: LARGE_INTEGER,
312     MaxRenewAge: LARGE_INTEGER,
313     MaxClockSkew: LARGE_INTEGER,
314     Reserved: LARGE_INTEGER,
315 }}
316 pub type PPOLICY_DOMAIN_KERBEROS_TICKET_INFO = *mut POLICY_DOMAIN_KERBEROS_TICKET_INFO;
317 ENUM!{enum POLICY_NOTIFICATION_INFORMATION_CLASS {
318     PolicyNotifyAuditEventsInformation = 1,
319     PolicyNotifyAccountDomainInformation,
320     PolicyNotifyServerRoleInformation,
321     PolicyNotifyDnsDomainInformation,
322     PolicyNotifyDomainEfsInformation,
323     PolicyNotifyDomainKerberosTicketInformation,
324     PolicyNotifyMachineAccountPasswordInformation,
325     PolicyNotifyGlobalSaclInformation,
326     PolicyNotifyMax,
327 }}
328 pub type PPOLICY_NOTIFICATION_INFORMATION_CLASS = *mut POLICY_NOTIFICATION_INFORMATION_CLASS;
329 pub type LSA_HANDLE = PVOID;
330 pub type PLSA_HANDLE = *mut PVOID;
331 ENUM!{enum TRUSTED_INFORMATION_CLASS {
332     TrustedDomainNameInformation = 1,
333     TrustedControllersInformation,
334     TrustedPosixOffsetInformation,
335     TrustedPasswordInformation,
336     TrustedDomainInformationBasic,
337     TrustedDomainInformationEx,
338     TrustedDomainAuthInformation,
339     TrustedDomainFullInformation,
340     TrustedDomainAuthInformationInternal,
341     TrustedDomainFullInformationInternal,
342     TrustedDomainInformationEx2Internal,
343     TrustedDomainFullInformation2Internal,
344     TrustedDomainSupportedEncryptionTypes,
345 }}
346 pub type PTRUSTED_INFORMATION_CLASS = *mut TRUSTED_INFORMATION_CLASS;
347 STRUCT!{struct TRUSTED_DOMAIN_NAME_INFO {
348     Name: LSA_UNICODE_STRING,
349 }}
350 pub type PTRUSTED_DOMAIN_NAME_INFO = *mut TRUSTED_DOMAIN_NAME_INFO;
351 STRUCT!{struct TRUSTED_CONTROLLERS_INFO {
352     Entries: ULONG,
353     Names: PLSA_UNICODE_STRING,
354 }}
355 pub type PTRUSTED_CONTROLLERS_INFO = *mut TRUSTED_CONTROLLERS_INFO;
356 STRUCT!{struct TRUSTED_POSIX_OFFSET_INFO {
357     Offset: ULONG,
358 }}
359 pub type PTRUSTED_POSIX_OFFSET_INFO = *mut TRUSTED_POSIX_OFFSET_INFO;
360 STRUCT!{struct TRUSTED_PASSWORD_INFO {
361     Password: LSA_UNICODE_STRING,
362     OldPassword: LSA_UNICODE_STRING,
363 }}
364 pub type PTRUSTED_PASSWORD_INFO = *mut TRUSTED_PASSWORD_INFO;
365 pub type TRUSTED_DOMAIN_INFORMATION_BASIC = LSA_TRUST_INFORMATION;
366 pub type PTRUSTED_DOMAIN_INFORMATION_BASIC = PLSA_TRUST_INFORMATION;
367 pub const TRUST_DIRECTION_DISABLED: ULONG = 0x00000000;
368 pub const TRUST_DIRECTION_INBOUND: ULONG = 0x00000001;
369 pub const TRUST_DIRECTION_OUTBOUND: ULONG = 0x00000002;
370 pub const TRUST_DIRECTION_BIDIRECTIONAL: ULONG = TRUST_DIRECTION_INBOUND
371     | TRUST_DIRECTION_OUTBOUND;
372 pub const TRUST_TYPE_DOWNLEVEL: ULONG = 0x00000001;
373 pub const TRUST_TYPE_UPLEVEL: ULONG = 0x00000002;
374 pub const TRUST_TYPE_MIT: ULONG = 0x00000003;
375 pub const TRUST_ATTRIBUTE_NON_TRANSITIVE: ULONG = 0x00000001;
376 pub const TRUST_ATTRIBUTE_UPLEVEL_ONLY: ULONG = 0x00000002;
377 pub const TRUST_ATTRIBUTE_QUARANTINED_DOMAIN: ULONG = 0x00000004;
378 pub const TRUST_ATTRIBUTE_FOREST_TRANSITIVE: ULONG = 0x00000008;
379 pub const TRUST_ATTRIBUTE_CROSS_ORGANIZATION: ULONG = 0x00000010;
380 pub const TRUST_ATTRIBUTE_WITHIN_FOREST: ULONG = 0x00000020;
381 pub const TRUST_ATTRIBUTE_TREAT_AS_EXTERNAL: ULONG = 0x00000040;
382 pub const TRUST_ATTRIBUTE_TRUST_USES_RC4_ENCRYPTION: ULONG = 0x00000080;
383 pub const TRUST_ATTRIBUTE_TRUST_USES_AES_KEYS: ULONG = 0x00000100;
384 pub const TRUST_ATTRIBUTE_CROSS_ORGANIZATION_NO_TGT_DELEGATION: ULONG = 0x00000200;
385 pub const TRUST_ATTRIBUTES_VALID: ULONG = 0xFF03FFFF;
386 pub const TRUST_ATTRIBUTES_USER: ULONG = 0xFF000000;
387 STRUCT!{struct TRUSTED_DOMAIN_INFORMATION_EX {
388     Name: LSA_UNICODE_STRING,
389     FlatName: LSA_UNICODE_STRING,
390     Sid: PSID,
391     TrustDirection: ULONG,
392     TrustType: ULONG,
393     TrustAttributes: ULONG,
394 }}
395 pub type PTRUSTED_DOMAIN_INFORMATION_EX = *mut TRUSTED_DOMAIN_INFORMATION_EX;
396 STRUCT!{struct TRUSTED_DOMAIN_INFORMATION_EX2 {
397     Name: LSA_UNICODE_STRING,
398     FlatName: LSA_UNICODE_STRING,
399     Sid: PSID,
400     TrustDirection: ULONG,
401     TrustType: ULONG,
402     TrustAttributes: ULONG,
403     ForestTrustLength: ULONG,
404     ForestTrustInfo: PUCHAR,
405 }}
406 pub type PTRUSTED_DOMAIN_INFORMATION_EX2 = *mut TRUSTED_DOMAIN_INFORMATION_EX2;
407 pub const TRUST_AUTH_TYPE_NONE: ULONG = 0;
408 pub const TRUST_AUTH_TYPE_NT4OWF: ULONG = 1;
409 pub const TRUST_AUTH_TYPE_CLEAR: ULONG = 2;
410 pub const TRUST_AUTH_TYPE_VERSION: ULONG = 3;
411 STRUCT!{struct LSA_AUTH_INFORMATION {
412     LastUpdateTime: LARGE_INTEGER,
413     AuthType: ULONG,
414     AuthInfoLength: ULONG,
415     AuthInfo: PUCHAR,
416 }}
417 pub type PLSA_AUTH_INFORMATION = *mut LSA_AUTH_INFORMATION;
418 STRUCT!{struct TRUSTED_DOMAIN_AUTH_INFORMATION {
419     IncomingAuthInfos: ULONG,
420     IncomingAuthenticationInformation: PLSA_AUTH_INFORMATION,
421     IncomingPreviousAuthenticationInformation: PLSA_AUTH_INFORMATION,
422     OutgoingAuthInfos: ULONG,
423     OutgoingAuthenticationInformation: PLSA_AUTH_INFORMATION,
424     OutgoingPreviousAuthenticationInformation: PLSA_AUTH_INFORMATION,
425 }}
426 pub type PTRUSTED_DOMAIN_AUTH_INFORMATION = *mut TRUSTED_DOMAIN_AUTH_INFORMATION;
427 STRUCT!{struct TRUSTED_DOMAIN_FULL_INFORMATION {
428     Information: TRUSTED_DOMAIN_INFORMATION_EX,
429     PosixOffset: TRUSTED_POSIX_OFFSET_INFO,
430     AuthInformation: TRUSTED_DOMAIN_AUTH_INFORMATION,
431 }}
432 pub type PTRUSTED_DOMAIN_FULL_INFORMATION = *mut TRUSTED_DOMAIN_FULL_INFORMATION;
433 STRUCT!{struct TRUSTED_DOMAIN_FULL_INFORMATION2 {
434     Information: TRUSTED_DOMAIN_INFORMATION_EX2,
435     PosixOffset: TRUSTED_POSIX_OFFSET_INFO,
436     AuthInformation: TRUSTED_DOMAIN_AUTH_INFORMATION,
437 }}
438 pub type PTRUSTED_DOMAIN_FULL_INFORMATION2 = *mut TRUSTED_DOMAIN_FULL_INFORMATION2;
439 STRUCT!{struct TRUSTED_DOMAIN_SUPPORTED_ENCRYPTION_TYPES {
440     SupportedEncryptionTypes: ULONG,
441 }}
442 pub type PTRUSTED_DOMAIN_SUPPORTED_ENCRYPTION_TYPES =
443     *mut TRUSTED_DOMAIN_SUPPORTED_ENCRYPTION_TYPES;
444 ENUM!{enum LSA_FOREST_TRUST_RECORD_TYPE {
445     ForestTrustTopLevelName,
446     ForestTrustTopLevelNameEx,
447     ForestTrustDomainInfo,
448     ForestTrustRecordTypeLast, // = ForestTrustDomainInfo,
449 }}
450 pub const LSA_FTRECORD_DISABLED_REASONS: ULONG = 0x0000FFFF;
451 pub const LSA_TLN_DISABLED_NEW: ULONG = 0x00000001;
452 pub const LSA_TLN_DISABLED_ADMIN: ULONG = 0x00000002;
453 pub const LSA_TLN_DISABLED_CONFLICT: ULONG = 0x00000004;
454 pub const LSA_SID_DISABLED_ADMIN: ULONG = 0x00000001;
455 pub const LSA_SID_DISABLED_CONFLICT: ULONG = 0x00000002;
456 pub const LSA_NB_DISABLED_ADMIN: ULONG = 0x00000004;
457 pub const LSA_NB_DISABLED_CONFLICT: ULONG = 0x00000008;
458 STRUCT!{struct LSA_FOREST_TRUST_DOMAIN_INFO {
459     Sid: PSID,
460     DnsName: LSA_UNICODE_STRING,
461     NetbiosName: LSA_UNICODE_STRING,
462 }}
463 pub type PLSA_FOREST_TRUST_DOMAIN_INFO = *mut LSA_FOREST_TRUST_DOMAIN_INFO;
464 pub const MAX_FOREST_TRUST_BINARY_DATA_SIZE: ULONG = 128 * 1024;
465 STRUCT!{struct LSA_FOREST_TRUST_BINARY_DATA {
466     Length: ULONG,
467     Buffer: PUCHAR,
468 }}
469 pub type PLSA_FOREST_TRUST_BINARY_DATA = *mut LSA_FOREST_TRUST_BINARY_DATA;
470 UNION!{union LSA_FOREST_TRUST_RECORD_ForestTrustData {
471     [usize; 5],
472     TopLevelName TopLevelName_mut: LSA_UNICODE_STRING,
473     DomainInfo DomainInfo_mut: LSA_FOREST_TRUST_DOMAIN_INFO,
474     Data Data_mut: LSA_FOREST_TRUST_BINARY_DATA,
475 }}
476 STRUCT!{struct LSA_FOREST_TRUST_RECORD {
477     Flags: ULONG,
478     ForestTrustType: LSA_FOREST_TRUST_RECORD_TYPE,
479     Time: LARGE_INTEGER,
480     ForestTrustData: LSA_FOREST_TRUST_RECORD_ForestTrustData,
481 }}
482 pub type PLSA_FOREST_TRUST_RECORD = *mut LSA_FOREST_TRUST_RECORD;
483 pub const MAX_RECORDS_IN_FOREST_TRUST_INFO: ULONG = 4000;
484 STRUCT!{struct LSA_FOREST_TRUST_INFORMATION {
485     RecordCount: ULONG,
486     Entries: *mut PLSA_FOREST_TRUST_RECORD,
487 }}
488 pub type PLSA_FOREST_TRUST_INFORMATION = *mut LSA_FOREST_TRUST_INFORMATION;
489 ENUM!{enum LSA_FOREST_TRUST_COLLISION_RECORD_TYPE {
490     CollisionTdo,
491     CollisionXref,
492     CollisionOther,
493 }}
494 STRUCT!{struct LSA_FOREST_TRUST_COLLISION_RECORD {
495     Index: ULONG,
496     Type: LSA_FOREST_TRUST_COLLISION_RECORD_TYPE,
497     Flags: ULONG,
498     Name: LSA_UNICODE_STRING,
499 }}
500 pub type PLSA_FOREST_TRUST_COLLISION_RECORD = *mut LSA_FOREST_TRUST_COLLISION_RECORD;
501 STRUCT!{struct LSA_FOREST_TRUST_COLLISION_INFORMATION {
502     RecordCount: ULONG,
503     Entries: *mut PLSA_FOREST_TRUST_COLLISION_RECORD,
504 }}
505 pub type PLSA_FOREST_TRUST_COLLISION_INFORMATION = *mut LSA_FOREST_TRUST_COLLISION_INFORMATION;
506 pub type LSA_ENUMERATION_HANDLE = ULONG;
507 pub type PLSA_ENUMERATION_HANDLE = *mut ULONG;
508 STRUCT!{struct LSA_ENUMERATION_INFORMATION {
509     Sid: PSID,
510 }}
511 pub type PLSA_ENUMERATION_INFORMATION = *mut LSA_ENUMERATION_INFORMATION;
512 STRUCT!{struct LSA_LAST_INTER_LOGON_INFO {
513     LastSuccessfulLogon: LARGE_INTEGER,
514     LastFailedLogon: LARGE_INTEGER,
515     FailedAttemptCountSinceLastSuccessfulLogon: ULONG,
516 }}
517 pub type PLSA_LAST_INTER_LOGON_INFO = *mut LSA_LAST_INTER_LOGON_INFO;
518 STRUCT!{struct SECURITY_LOGON_SESSION_DATA {
519     Size: ULONG,
520     LogonId: LUID,
521     UserName: LSA_UNICODE_STRING,
522     LogonDomain: LSA_UNICODE_STRING,
523     AuthenticationPackage: LSA_UNICODE_STRING,
524     LogonType: ULONG,
525     Session: ULONG,
526     Sid: PSID,
527     LogonTime: LARGE_INTEGER,
528     LogonServer: LSA_UNICODE_STRING,
529     DnsDomainName: LSA_UNICODE_STRING,
530     Upn: LSA_UNICODE_STRING,
531     UserFlags: ULONG,
532     LastLogonInfo: LSA_LAST_INTER_LOGON_INFO,
533     LogonScript: LSA_UNICODE_STRING,
534     ProfilePath: LSA_UNICODE_STRING,
535     HomeDirectory: LSA_UNICODE_STRING,
536     HomeDirectoryDrive: LSA_UNICODE_STRING,
537     LogoffTime: LARGE_INTEGER,
538     KickOffTime: LARGE_INTEGER,
539     PasswordLastSet: LARGE_INTEGER,
540     PasswordCanChange: LARGE_INTEGER,
541     PasswordMustChange: LARGE_INTEGER,
542 }}
543 pub type PSECURITY_LOGON_SESSION_DATA = *mut SECURITY_LOGON_SESSION_DATA;
544 pub const CENTRAL_ACCESS_POLICY_OWNER_RIGHTS_PRESENT_FLAG: ULONG = 0x00000001;
545 pub const CENTRAL_ACCESS_POLICY_STAGED_OWNER_RIGHTS_PRESENT_FLAG: ULONG = 0x00000100;
546 pub const CENTRAL_ACCESS_POLICY_STAGED_FLAG: ULONG = 0x00010000;
547 pub const CENTRAL_ACCESS_POLICY_VALID_FLAG_MASK: ULONG =
548     CENTRAL_ACCESS_POLICY_OWNER_RIGHTS_PRESENT_FLAG
549     | CENTRAL_ACCESS_POLICY_STAGED_OWNER_RIGHTS_PRESENT_FLAG
550     | CENTRAL_ACCESS_POLICY_STAGED_FLAG;
551 pub const LSASETCAPS_RELOAD_FLAG: ULONG = 0x00000001;
552 pub const LSASETCAPS_VALID_FLAG_MASK: ULONG = LSASETCAPS_RELOAD_FLAG;
553 STRUCT!{struct CENTRAL_ACCESS_POLICY_ENTRY {
554     Name: LSA_UNICODE_STRING,
555     Description: LSA_UNICODE_STRING,
556     ChangeId: LSA_UNICODE_STRING,
557     LengthAppliesTo: ULONG,
558     AppliesTo: PUCHAR,
559     LengthSD: ULONG,
560     SD: PSECURITY_DESCRIPTOR,
561     LengthStagedSD: ULONG,
562     StagedSD: PSECURITY_DESCRIPTOR,
563     Flags: ULONG,
564 }}
565 pub type PCENTRAL_ACCESS_POLICY_ENTRY = *mut CENTRAL_ACCESS_POLICY_ENTRY;
566 pub type PCCENTRAL_ACCESS_POLICY_ENTRY = *const CENTRAL_ACCESS_POLICY_ENTRY;
567 STRUCT!{struct CENTRAL_ACCESS_POLICY {
568     CAPID: PSID,
569     Name: LSA_UNICODE_STRING,
570     Description: LSA_UNICODE_STRING,
571     ChangeId: LSA_UNICODE_STRING,
572     Flags: ULONG,
573     CAPECount: ULONG,
574     CAPEs: *mut PCENTRAL_ACCESS_POLICY_ENTRY,
575 }}
576 pub type PCENTRAL_ACCESS_POLICY = *mut CENTRAL_ACCESS_POLICY;
577 pub type PCCENTRAL_ACCESS_POLICY = *const CENTRAL_ACCESS_POLICY;
578 ENUM!{enum NEGOTIATE_MESSAGES {
579     NegEnumPackagePrefixes = 0,
580     NegGetCallerName = 1,
581     NegTransferCredentials = 2,
582     NegCallPackageMax,
583 }}
584 pub const NEGOTIATE_MAX_PREFIX: usize = 32;
585 STRUCT!{struct NEGOTIATE_PACKAGE_PREFIX {
586     PackageId: ULONG_PTR,
587     PackageDataA: PVOID,
588     PackageDataW: PVOID,
589     PrefixLen: ULONG_PTR,
590     Prefix: [UCHAR; NEGOTIATE_MAX_PREFIX],
591 }}
592 pub type PNEGOTIATE_PACKAGE_PREFIX = *mut NEGOTIATE_PACKAGE_PREFIX;
593 STRUCT!{struct NEGOTIATE_PACKAGE_PREFIXES {
594     MessageType: ULONG,
595     PrefixCount: ULONG,
596     Offset: ULONG,
597     Pad: ULONG,
598 }}
599 pub type PNEGOTIATE_PACKAGE_PREFIXES = *mut NEGOTIATE_PACKAGE_PREFIXES;
600 STRUCT!{struct NEGOTIATE_CALLER_NAME_REQUEST {
601     MessageType: ULONG,
602     LogonId: LUID,
603 }}
604 pub type PNEGOTIATE_CALLER_NAME_REQUEST = *mut NEGOTIATE_CALLER_NAME_REQUEST;
605 STRUCT!{struct NEGOTIATE_CALLER_NAME_RESPONSE {
606     MessageType: ULONG,
607     CallerName: PWSTR,
608 }}
609 pub type PNEGOTIATE_CALLER_NAME_RESPONSE = *mut NEGOTIATE_CALLER_NAME_RESPONSE;
610 STRUCT!{struct DOMAIN_PASSWORD_INFORMATION {
611     MinPasswordLength: USHORT,
612     PasswordHistoryLength: USHORT,
613     PasswordProperties: ULONG,
614     MaxPasswordAge: LARGE_INTEGER,
615     MinPasswordAge: LARGE_INTEGER,
616 }}
617 pub type PDOMAIN_PASSWORD_INFORMATION = *mut DOMAIN_PASSWORD_INFORMATION;
618 pub const DOMAIN_PASSWORD_COMPLEX: ULONG = 0x00000001;
619 pub const DOMAIN_PASSWORD_NO_ANON_CHANGE: ULONG = 0x00000002;
620 pub const DOMAIN_PASSWORD_NO_CLEAR_CHANGE: ULONG = 0x00000004;
621 pub const DOMAIN_LOCKOUT_ADMINS: ULONG = 0x00000008;
622 pub const DOMAIN_PASSWORD_STORE_CLEARTEXT: ULONG = 0x00000010;
623 pub const DOMAIN_REFUSE_PASSWORD_CHANGE: ULONG = 0x00000020;
624 pub const DOMAIN_NO_LM_OWF_CHANGE: ULONG = 0x00000040;
625 FN!{stdcall PSAM_PASSWORD_NOTIFICATION_ROUTINE(
626     UserName: PUNICODE_STRING,
627     RelativeId: ULONG,
628     NewPassword: PUNICODE_STRING,
629 ) -> NTSTATUS}
630 FN!{stdcall PSAM_INIT_NOTIFICATION_ROUTINE() -> BOOLEAN}
631 FN!{stdcall PSAM_PASSWORD_FILTER_ROUTINE(
632     AccountName: PUNICODE_STRING,
633     FullName: PUNICODE_STRING,
634     Password: PUNICODE_STRING,
635     SetOperation: BOOLEAN,
636 ) -> BOOLEAN}
637 ENUM!{enum MSV1_0_LOGON_SUBMIT_TYPE {
638     MsV1_0InteractiveLogon = 2,
639     MsV1_0Lm20Logon,
640     MsV1_0NetworkLogon,
641     MsV1_0SubAuthLogon,
642     MsV1_0WorkstationUnlockLogon = 7,
643     MsV1_0S4ULogon = 12,
644     MsV1_0VirtualLogon = 82,
645     MsV1_0NoElevationLogon = 83,
646     MsV1_0LuidLogon = 84,
647 }}
648 pub type PMSV1_0_LOGON_SUBMIT_TYPE = *mut MSV1_0_LOGON_SUBMIT_TYPE;
649 ENUM!{enum MSV1_0_PROFILE_BUFFER_TYPE {
650     MsV1_0InteractiveProfile = 2,
651     MsV1_0Lm20LogonProfile,
652     MsV1_0SmartCardProfile,
653 }}
654 pub type PMSV1_0_PROFILE_BUFFER_TYPE = *mut MSV1_0_PROFILE_BUFFER_TYPE;
655 STRUCT!{struct MSV1_0_INTERACTIVE_LOGON {
656     MessageType: MSV1_0_LOGON_SUBMIT_TYPE,
657     LogonDomainName: UNICODE_STRING,
658     UserName: UNICODE_STRING,
659     Password: UNICODE_STRING,
660 }}
661 pub type PMSV1_0_INTERACTIVE_LOGON = *mut MSV1_0_INTERACTIVE_LOGON;
662 STRUCT!{struct MSV1_0_INTERACTIVE_PROFILE {
663     MessageType: MSV1_0_PROFILE_BUFFER_TYPE,
664     LogonCount: USHORT,
665     BadPasswordCount: USHORT,
666     LogonTime: LARGE_INTEGER,
667     LogoffTime: LARGE_INTEGER,
668     KickOffTime: LARGE_INTEGER,
669     PasswordLastSet: LARGE_INTEGER,
670     PasswordCanChange: LARGE_INTEGER,
671     PasswordMustChange: LARGE_INTEGER,
672     LogonScript: UNICODE_STRING,
673     HomeDirectory: UNICODE_STRING,
674     FullName: UNICODE_STRING,
675     ProfilePath: UNICODE_STRING,
676     HomeDirectoryDrive: UNICODE_STRING,
677     LogonServer: UNICODE_STRING,
678     UserFlags: ULONG,
679 }}
680 pub type PMSV1_0_INTERACTIVE_PROFILE = *mut MSV1_0_INTERACTIVE_PROFILE;
681 pub const MSV1_0_CHALLENGE_LENGTH: usize = 8;
682 pub const MSV1_0_USER_SESSION_KEY_LENGTH: usize = 16;
683 pub const MSV1_0_LANMAN_SESSION_KEY_LENGTH: usize = 8;
684 pub const MSV1_0_CLEARTEXT_PASSWORD_ALLOWED: ULONG = 0x02;
685 pub const MSV1_0_UPDATE_LOGON_STATISTICS: ULONG = 0x04;
686 pub const MSV1_0_RETURN_USER_PARAMETERS: ULONG = 0x08;
687 pub const MSV1_0_DONT_TRY_GUEST_ACCOUNT: ULONG = 0x10;
688 pub const MSV1_0_ALLOW_SERVER_TRUST_ACCOUNT: ULONG = 0x20;
689 pub const MSV1_0_RETURN_PASSWORD_EXPIRY: ULONG = 0x40;
690 pub const MSV1_0_USE_CLIENT_CHALLENGE: ULONG = 0x80;
691 pub const MSV1_0_TRY_GUEST_ACCOUNT_ONLY: ULONG = 0x100;
692 pub const MSV1_0_RETURN_PROFILE_PATH: ULONG = 0x200;
693 pub const MSV1_0_TRY_SPECIFIED_DOMAIN_ONLY: ULONG = 0x400;
694 pub const MSV1_0_ALLOW_WORKSTATION_TRUST_ACCOUNT: ULONG = 0x800;
695 pub const MSV1_0_DISABLE_PERSONAL_FALLBACK: ULONG = 0x00001000;
696 pub const MSV1_0_ALLOW_FORCE_GUEST: ULONG = 0x00002000;
697 pub const MSV1_0_CLEARTEXT_PASSWORD_SUPPLIED: ULONG = 0x00004000;
698 pub const MSV1_0_USE_DOMAIN_FOR_ROUTING_ONLY: ULONG = 0x00008000;
699 pub const MSV1_0_SUBAUTHENTICATION_DLL_EX: ULONG = 0x00100000;
700 pub const MSV1_0_ALLOW_MSVCHAPV2: ULONG = 0x00010000;
701 pub const MSV1_0_S4U2SELF: ULONG = 0x00020000;
702 pub const MSV1_0_CHECK_LOGONHOURS_FOR_S4U: ULONG = 0x00040000;
703 pub const MSV1_0_INTERNET_DOMAIN: ULONG = 0x00080000;
704 pub const MSV1_0_SUBAUTHENTICATION_DLL: ULONG = 0xFF000000;
705 pub const MSV1_0_SUBAUTHENTICATION_DLL_SHIFT: ULONG = 24;
706 pub const MSV1_0_MNS_LOGON: ULONG = 0x01000000;
707 pub const MSV1_0_SUBAUTHENTICATION_DLL_RAS: ULONG = 2;
708 pub const MSV1_0_SUBAUTHENTICATION_DLL_IIS: ULONG = 132;
709 STRUCT!{struct MSV1_0_LM20_LOGON {
710     MessageType: MSV1_0_LOGON_SUBMIT_TYPE,
711     LogonDomainName: UNICODE_STRING,
712     UserName: UNICODE_STRING,
713     Workstation: UNICODE_STRING,
714     ChallengeToClient: [UCHAR; MSV1_0_CHALLENGE_LENGTH],
715     CaseSensitiveChallengeResponse: STRING,
716     CaseInsensitiveChallengeResponse: STRING,
717     ParameterControl: ULONG,
718 }}
719 pub type PMSV1_0_LM20_LOGON = *mut MSV1_0_LM20_LOGON;
720 STRUCT!{struct MSV1_0_SUBAUTH_LOGON {
721     MessageType: MSV1_0_LOGON_SUBMIT_TYPE,
722     LogonDomainName: UNICODE_STRING,
723     UserName: UNICODE_STRING,
724     Workstation: UNICODE_STRING,
725     ChallengeToClient: [UCHAR; MSV1_0_CHALLENGE_LENGTH],
726     AuthenticationInfo1: STRING,
727     AuthenticationInfo2: STRING,
728     ParameterControl: ULONG,
729     SubAuthPackageId: ULONG,
730 }}
731 pub type PMSV1_0_SUBAUTH_LOGON = *mut MSV1_0_SUBAUTH_LOGON;
732 STRUCT!{struct MSV1_0_S4U_LOGON {
733     MessageType: MSV1_0_LOGON_SUBMIT_TYPE,
734     MSV1_0_LOGON_SUBMIT_TYPE: ULONG,
735     UserPrincipalName: UNICODE_STRING,
736     DomainName: UNICODE_STRING,
737 }}
738 pub type PMSV1_0_S4U_LOGON = *mut MSV1_0_S4U_LOGON;
739 pub const LOGON_GUEST: ULONG = 0x01;
740 pub const LOGON_NOENCRYPTION: ULONG = 0x02;
741 pub const LOGON_CACHED_ACCOUNT: ULONG = 0x04;
742 pub const LOGON_USED_LM_PASSWORD: ULONG = 0x08;
743 pub const LOGON_EXTRA_SIDS: ULONG = 0x20;
744 pub const LOGON_SUBAUTH_SESSION_KEY: ULONG = 0x40;
745 pub const LOGON_SERVER_TRUST_ACCOUNT: ULONG = 0x80;
746 pub const LOGON_NTLMV2_ENABLED: ULONG = 0x100;
747 pub const LOGON_RESOURCE_GROUPS: ULONG = 0x200;
748 pub const LOGON_PROFILE_PATH_RETURNED: ULONG = 0x400;
749 pub const LOGON_NT_V2: ULONG = 0x800;
750 pub const LOGON_LM_V2: ULONG = 0x1000;
751 pub const LOGON_NTLM_V2: ULONG = 0x2000;
752 pub const LOGON_OPTIMIZED: ULONG = 0x4000;
753 pub const LOGON_WINLOGON: ULONG = 0x8000;
754 pub const LOGON_PKINIT: ULONG = 0x10000;
755 pub const LOGON_NO_OPTIMIZED: ULONG = 0x20000;
756 pub const LOGON_NO_ELEVATION: ULONG = 0x40000;
757 pub const LOGON_MANAGED_SERVICE: ULONG = 0x80000;
758 pub const LOGON_GRACE_LOGON: ULONG = 0x01000000;
759 STRUCT!{struct MSV1_0_LM20_LOGON_PROFILE {
760     MessageType: MSV1_0_PROFILE_BUFFER_TYPE,
761     KickOffTime: LARGE_INTEGER,
762     LogoffTime: LARGE_INTEGER,
763     UserFlags: ULONG,
764     UserSessionKey: [UCHAR; MSV1_0_USER_SESSION_KEY_LENGTH],
765     LogonDomainName: UNICODE_STRING,
766     LanmanSessionKey: [UCHAR; MSV1_0_LANMAN_SESSION_KEY_LENGTH],
767     LogonServer: UNICODE_STRING,
768     UserParameters: UNICODE_STRING,
769 }}
770 pub type PMSV1_0_LM20_LOGON_PROFILE = *mut MSV1_0_LM20_LOGON_PROFILE;
771 pub const MSV1_0_OWF_PASSWORD_LENGTH: usize = 16;
772 STRUCT!{struct MSV1_0_SUPPLEMENTAL_CREDENTIAL {
773     Version: ULONG,
774     Flags: ULONG,
775     LmPassword: [UCHAR; MSV1_0_OWF_PASSWORD_LENGTH],
776     NtPassword: [UCHAR; MSV1_0_OWF_PASSWORD_LENGTH],
777 }}
778 pub type PMSV1_0_SUPPLEMENTAL_CREDENTIAL = *mut MSV1_0_SUPPLEMENTAL_CREDENTIAL;
779 pub const MSV1_0_NTLM3_RESPONSE_LENGTH: usize = 16;
780 pub const MSV1_0_NTLM3_OWF_LENGTH: usize = 16;
781 STRUCT!{struct MSV1_0_NTLM3_RESPONSE {
782     Response: [UCHAR; MSV1_0_NTLM3_RESPONSE_LENGTH],
783     RespType: UCHAR,
784     HiRespType: UCHAR,
785     Flags: USHORT,
786     MsgWord: ULONG,
787     TimeStamp: ULONGLONG,
788     ChallengeFromClient: [UCHAR; MSV1_0_CHALLENGE_LENGTH],
789     AvPairsOff: ULONG,
790     Buffer: [UCHAR; 1],
791 }}
792 pub type PMSV1_0_NTLM3_RESPONSE = *mut MSV1_0_NTLM3_RESPONSE;
793 ENUM!{enum MSV1_0_AVID {
794     MsvAvEOL,
795     MsvAvNbComputerName,
796     MsvAvNbDomainName,
797     MsvAvDnsComputerName,
798     MsvAvDnsDomainName,
799     MsvAvDnsTreeName,
800     MsvAvFlags,
801     MsvAvTimestamp,
802     MsvAvRestrictions,
803     MsvAvTargetName,
804     MsvAvChannelBindings,
805 }}
806 STRUCT!{struct MSV1_0_AV_PAIR {
807     AvId: USHORT,
808     AvLen: USHORT,
809 }}
810 pub type PMSV1_0_AV_PAIR = *mut MSV1_0_AV_PAIR;
811 ENUM!{enum MSV1_0_PROTOCOL_MESSAGE_TYPE {
812     MsV1_0Lm20ChallengeRequest = 0,
813     MsV1_0Lm20GetChallengeResponse,
814     MsV1_0EnumerateUsers,
815     MsV1_0GetUserInfo,
816     MsV1_0ReLogonUsers,
817     MsV1_0ChangePassword,
818     MsV1_0ChangeCachedPassword,
819     MsV1_0GenericPassthrough,
820     MsV1_0CacheLogon,
821     MsV1_0SubAuth,
822     MsV1_0DeriveCredential,
823     MsV1_0CacheLookup,
824     MsV1_0SetProcessOption,
825     MsV1_0ConfigLocalAliases,
826     MsV1_0ClearCachedCredentials,
827     MsV1_0LookupToken,
828     MsV1_0ValidateAuth,
829     MsV1_0CacheLookupEx,
830     MsV1_0GetCredentialKey,
831     MsV1_0SetThreadOption,
832 }}
833 pub type PMSV1_0_PROTOCOL_MESSAGE_TYPE = *mut MSV1_0_PROTOCOL_MESSAGE_TYPE;
834 STRUCT!{struct MSV1_0_CHANGEPASSWORD_REQUEST {
835     MessageType: MSV1_0_PROTOCOL_MESSAGE_TYPE,
836     DomainName: UNICODE_STRING,
837     AccountName: UNICODE_STRING,
838     OldPassword: UNICODE_STRING,
839     NewPassword: UNICODE_STRING,
840     Impersonating: BOOLEAN,
841 }}
842 pub type PMSV1_0_CHANGEPASSWORD_REQUEST = *mut MSV1_0_CHANGEPASSWORD_REQUEST;
843 STRUCT!{struct MSV1_0_CHANGEPASSWORD_RESPONSE {
844     MessageType: MSV1_0_PROTOCOL_MESSAGE_TYPE,
845     PasswordInfoValid: BOOLEAN,
846     DomainPasswordInfo: DOMAIN_PASSWORD_INFORMATION,
847 }}
848 pub type PMSV1_0_CHANGEPASSWORD_RESPONSE = *mut MSV1_0_CHANGEPASSWORD_RESPONSE;
849 STRUCT!{struct MSV1_0_PASSTHROUGH_REQUEST {
850     MessageType: MSV1_0_PROTOCOL_MESSAGE_TYPE,
851     DomainName: UNICODE_STRING,
852     PackageName: UNICODE_STRING,
853     DataLength: ULONG,
854     LogonData: PUCHAR,
855     Pad: ULONG,
856 }}
857 pub type PMSV1_0_PASSTHROUGH_REQUEST = *mut MSV1_0_PASSTHROUGH_REQUEST;
858 STRUCT!{struct MSV1_0_PASSTHROUGH_RESPONSE {
859     MessageType: MSV1_0_PROTOCOL_MESSAGE_TYPE,
860     Pad: ULONG,
861     DataLength: ULONG,
862     ValidationData: PUCHAR,
863 }}
864 pub type PMSV1_0_PASSTHROUGH_RESPONSE = *mut MSV1_0_PASSTHROUGH_RESPONSE;
865 STRUCT!{struct MSV1_0_SUBAUTH_REQUEST {
866     MessageType: MSV1_0_PROTOCOL_MESSAGE_TYPE,
867     SubAuthPackageId: ULONG,
868     SubAuthInfoLength: ULONG,
869     SubAuthSubmitBuffer: PUCHAR,
870 }}
871 pub type PMSV1_0_SUBAUTH_REQUEST = *mut MSV1_0_SUBAUTH_REQUEST;
872 STRUCT!{struct MSV1_0_SUBAUTH_RESPONSE {
873     MessageType: MSV1_0_PROTOCOL_MESSAGE_TYPE,
874     SubAuthInfoLength: ULONG,
875     SubAuthReturnBuffer: PUCHAR,
876 }}
877 pub type PMSV1_0_SUBAUTH_RESPONSE = *mut MSV1_0_SUBAUTH_RESPONSE;
878 pub use self::SystemFunction036 as RtlGenRandom;
879 pub use self::SystemFunction040 as RtlEncryptMemory;
880 pub use self::SystemFunction041 as RtlDecryptMemory;
881 extern "system" {
SystemFunction036( RandomBuffer: PVOID, RandomBufferLength: ULONG, ) -> BOOLEAN882     pub fn SystemFunction036(
883         RandomBuffer: PVOID,
884         RandomBufferLength: ULONG,
885     ) -> BOOLEAN;
886 }
887 pub const RTL_ENCRYPT_MEMORY_SIZE: ULONG = 8;
888 pub const RTL_ENCRYPT_OPTION_CROSS_PROCESS: ULONG = 0x01;
889 pub const RTL_ENCRYPT_OPTION_SAME_LOGON: ULONG = 0x02;
890 extern "system" {
SystemFunction040( Memory: PVOID, MemorySize: ULONG, OptionFlags: ULONG, ) -> NTSTATUS891     pub fn SystemFunction040(
892         Memory: PVOID,
893         MemorySize: ULONG,
894         OptionFlags: ULONG,
895     ) -> NTSTATUS;
SystemFunction041( Memory: PVOID, MemorySize: ULONG, OptionFlags: ULONG, ) -> NTSTATUS896     pub fn SystemFunction041(
897         Memory: PVOID,
898         MemorySize: ULONG,
899         OptionFlags: ULONG,
900     ) -> NTSTATUS;
901 }
902 pub const KERBEROS_VERSION: ULONG = 5;
903 pub const KERBEROS_REVISION: ULONG = 6;
904 pub const KERB_ETYPE_NULL: LONG = 0;
905 pub const KERB_ETYPE_DES_CBC_CRC: LONG = 1;
906 pub const KERB_ETYPE_DES_CBC_MD4: LONG = 2;
907 pub const KERB_ETYPE_DES_CBC_MD5: LONG = 3;
908 pub const KERB_ETYPE_AES128_CTS_HMAC_SHA1_96: LONG = 17;
909 pub const KERB_ETYPE_AES256_CTS_HMAC_SHA1_96: LONG = 18;
910 pub const KERB_ETYPE_RC4_MD4: LONG = -128;
911 pub const KERB_ETYPE_RC4_PLAIN2: LONG = -129;
912 pub const KERB_ETYPE_RC4_LM: LONG = -130;
913 pub const KERB_ETYPE_RC4_SHA: LONG = -131;
914 pub const KERB_ETYPE_DES_PLAIN: LONG = -132;
915 pub const KERB_ETYPE_RC4_HMAC_OLD: LONG = -133;
916 pub const KERB_ETYPE_RC4_PLAIN_OLD: LONG = -134;
917 pub const KERB_ETYPE_RC4_HMAC_OLD_EXP: LONG = -135;
918 pub const KERB_ETYPE_RC4_PLAIN_OLD_EXP: LONG = -136;
919 pub const KERB_ETYPE_RC4_PLAIN: LONG = -140;
920 pub const KERB_ETYPE_RC4_PLAIN_EXP: LONG = -141;
921 pub const KERB_ETYPE_AES128_CTS_HMAC_SHA1_96_PLAIN: LONG = -148;
922 pub const KERB_ETYPE_AES256_CTS_HMAC_SHA1_96_PLAIN: LONG = -149;
923 pub const KERB_ETYPE_DSA_SHA1_CMS: LONG = 9;
924 pub const KERB_ETYPE_RSA_MD5_CMS: LONG = 10;
925 pub const KERB_ETYPE_RSA_SHA1_CMS: LONG = 11;
926 pub const KERB_ETYPE_RC2_CBC_ENV: LONG = 12;
927 pub const KERB_ETYPE_RSA_ENV: LONG = 13;
928 pub const KERB_ETYPE_RSA_ES_OEAP_ENV: LONG = 14;
929 pub const KERB_ETYPE_DES_EDE3_CBC_ENV: LONG = 15;
930 pub const KERB_ETYPE_DSA_SIGN: LONG = 8;
931 pub const KERB_ETYPE_RSA_PRIV: LONG = 9;
932 pub const KERB_ETYPE_RSA_PUB: LONG = 10;
933 pub const KERB_ETYPE_RSA_PUB_MD5: LONG = 11;
934 pub const KERB_ETYPE_RSA_PUB_SHA1: LONG = 12;
935 pub const KERB_ETYPE_PKCS7_PUB: LONG = 13;
936 pub const KERB_ETYPE_DES3_CBC_MD5: LONG = 5;
937 pub const KERB_ETYPE_DES3_CBC_SHA1: LONG = 7;
938 pub const KERB_ETYPE_DES3_CBC_SHA1_KD: LONG = 16;
939 pub const KERB_ETYPE_DES_CBC_MD5_NT: LONG = 20;
940 pub const KERB_ETYPE_RC4_HMAC_NT: LONG = 23;
941 pub const KERB_ETYPE_RC4_HMAC_NT_EXP: LONG = 24;
942 pub const KERB_CHECKSUM_NONE: LONG = 0;
943 pub const KERB_CHECKSUM_CRC32: LONG = 1;
944 pub const KERB_CHECKSUM_MD4: LONG = 2;
945 pub const KERB_CHECKSUM_KRB_DES_MAC: LONG = 4;
946 pub const KERB_CHECKSUM_KRB_DES_MAC_K: LONG = 5;
947 pub const KERB_CHECKSUM_MD5: LONG = 7;
948 pub const KERB_CHECKSUM_MD5_DES: LONG = 8;
949 pub const KERB_CHECKSUM_SHA1_NEW: LONG = 14;
950 pub const KERB_CHECKSUM_HMAC_SHA1_96_AES128: LONG = 15;
951 pub const KERB_CHECKSUM_HMAC_SHA1_96_AES256: LONG = 16;
952 pub const KERB_CHECKSUM_LM: LONG = -130;
953 pub const KERB_CHECKSUM_SHA1: LONG = -131;
954 pub const KERB_CHECKSUM_REAL_CRC32: LONG = -132;
955 pub const KERB_CHECKSUM_DES_MAC: LONG = -133;
956 pub const KERB_CHECKSUM_DES_MAC_MD5: LONG = -134;
957 pub const KERB_CHECKSUM_MD25: LONG = -135;
958 pub const KERB_CHECKSUM_RC4_MD5: LONG = -136;
959 pub const KERB_CHECKSUM_MD5_HMAC: LONG = -137;
960 pub const KERB_CHECKSUM_HMAC_MD5: LONG = -138;
961 pub const KERB_CHECKSUM_HMAC_SHA1_96_AES128_Ki: LONG = -150;
962 pub const KERB_CHECKSUM_HMAC_SHA1_96_AES256_Ki: LONG = -151;
963 pub const KERB_TICKET_FLAGS_reserved: ULONG = 0x80000000;
964 pub const KERB_TICKET_FLAGS_forwardable: ULONG = 0x40000000;
965 pub const KERB_TICKET_FLAGS_forwarded: ULONG = 0x20000000;
966 pub const KERB_TICKET_FLAGS_proxiable: ULONG = 0x10000000;
967 pub const KERB_TICKET_FLAGS_proxy: ULONG = 0x08000000;
968 pub const KERB_TICKET_FLAGS_may_postdate: ULONG = 0x04000000;
969 pub const KERB_TICKET_FLAGS_postdated: ULONG = 0x02000000;
970 pub const KERB_TICKET_FLAGS_invalid: ULONG = 0x01000000;
971 pub const KERB_TICKET_FLAGS_renewable: ULONG = 0x00800000;
972 pub const KERB_TICKET_FLAGS_initial: ULONG = 0x00400000;
973 pub const KERB_TICKET_FLAGS_pre_authent: ULONG = 0x00200000;
974 pub const KERB_TICKET_FLAGS_hw_authent: ULONG = 0x00100000;
975 pub const KERB_TICKET_FLAGS_ok_as_delegate: ULONG = 0x00040000;
976 pub const KERB_TICKET_FLAGS_name_canonicalize: ULONG = 0x00010000;
977 pub const KERB_TICKET_FLAGS_cname_in_pa_data: ULONG = 0x00040000;
978 pub const KERB_TICKET_FLAGS_enc_pa_rep: ULONG = 0x00010000;
979 pub const KERB_TICKET_FLAGS_reserved1: ULONG = 0x00000001;
980 pub const KRB_NT_UNKNOWN: LONG = 0;
981 pub const KRB_NT_PRINCIPAL: LONG = 1;
982 pub const KRB_NT_PRINCIPAL_AND_ID: LONG = -131;
983 pub const KRB_NT_SRV_INST: LONG = 2;
984 pub const KRB_NT_SRV_INST_AND_ID: LONG = -132;
985 pub const KRB_NT_SRV_HST: LONG = 3;
986 pub const KRB_NT_SRV_XHST: LONG = 4;
987 pub const KRB_NT_UID: LONG = 5;
988 pub const KRB_NT_ENTERPRISE_PRINCIPAL: LONG = 10;
989 pub const KRB_NT_WELLKNOWN: LONG = 11;
990 pub const KRB_NT_ENT_PRINCIPAL_AND_ID: LONG = -130;
991 pub const KRB_NT_MS_PRINCIPAL: LONG = -128;
992 pub const KRB_NT_MS_PRINCIPAL_AND_ID: LONG = -129;
993 pub const KRB_NT_MS_BRANCH_ID: LONG = -133;
994 pub const KRB_NT_X500_PRINCIPAL: LONG = 6;
995 pub const KERB_WRAP_NO_ENCRYPT: ULONG = 0x80000001;
996 ENUM!{enum KERB_LOGON_SUBMIT_TYPE {
997     KerbInteractiveLogon = 2,
998     KerbSmartCardLogon = 6,
999     KerbWorkstationUnlockLogon = 7,
1000     KerbSmartCardUnlockLogon = 8,
1001     KerbProxyLogon = 9,
1002     KerbTicketLogon = 10,
1003     KerbTicketUnlockLogon = 11,
1004     KerbS4ULogon = 12,
1005     KerbCertificateLogon = 13,
1006     KerbCertificateS4ULogon = 14,
1007     KerbCertificateUnlockLogon = 15,
1008     KerbNoElevationLogon = 83,
1009     KerbLuidLogon = 84,
1010 }}
1011 pub type PKERB_LOGON_SUBMIT_TYPE = *mut KERB_LOGON_SUBMIT_TYPE;
1012 STRUCT!{struct KERB_INTERACTIVE_LOGON {
1013     MessageType: KERB_LOGON_SUBMIT_TYPE,
1014     LogonDomainName: UNICODE_STRING,
1015     UserName: UNICODE_STRING,
1016     Password: UNICODE_STRING,
1017 }}
1018 pub type PKERB_INTERACTIVE_LOGON = *mut KERB_INTERACTIVE_LOGON;
1019 STRUCT!{struct KERB_INTERACTIVE_UNLOCK_LOGON {
1020     Logon: KERB_INTERACTIVE_LOGON,
1021     LogonId: LUID,
1022 }}
1023 pub type PKERB_INTERACTIVE_UNLOCK_LOGON = *mut KERB_INTERACTIVE_UNLOCK_LOGON;
1024 STRUCT!{struct KERB_SMART_CARD_LOGON {
1025     MessageType: KERB_LOGON_SUBMIT_TYPE,
1026     Pin: UNICODE_STRING,
1027     CspDataLength: ULONG,
1028     CspData: PUCHAR,
1029 }}
1030 pub type PKERB_SMART_CARD_LOGON = *mut KERB_SMART_CARD_LOGON;
1031 STRUCT!{struct KERB_SMART_CARD_UNLOCK_LOGON {
1032     Logon: KERB_SMART_CARD_LOGON,
1033     LogonId: LUID,
1034 }}
1035 pub type PKERB_SMART_CARD_UNLOCK_LOGON = *mut KERB_SMART_CARD_UNLOCK_LOGON;
1036 pub const KERB_CERTIFICATE_LOGON_FLAG_CHECK_DUPLICATES: ULONG = 0x1;
1037 pub const KERB_CERTIFICATE_LOGON_FLAG_USE_CERTIFICATE_INFO: ULONG = 0x2;
1038 STRUCT!{struct KERB_CERTIFICATE_LOGON {
1039     MessageType: KERB_LOGON_SUBMIT_TYPE,
1040     DomainName: UNICODE_STRING,
1041     UserName: UNICODE_STRING,
1042     Pin: UNICODE_STRING,
1043     Flags: ULONG,
1044     CspDataLength: ULONG,
1045     CspData: PUCHAR,
1046 }}
1047 pub type PKERB_CERTIFICATE_LOGON = *mut KERB_CERTIFICATE_LOGON;
1048 STRUCT!{struct KERB_CERTIFICATE_UNLOCK_LOGON {
1049     Logon: KERB_CERTIFICATE_LOGON,
1050     LogonId: LUID,
1051 }}
1052 pub type PKERB_CERTIFICATE_UNLOCK_LOGON = *mut KERB_CERTIFICATE_UNLOCK_LOGON;
1053 pub const KERB_CERTIFICATE_S4U_LOGON_FLAG_CHECK_DUPLICATES: ULONG = 0x1;
1054 pub const KERB_CERTIFICATE_S4U_LOGON_FLAG_CHECK_LOGONHOURS: ULONG = 0x2;
1055 pub const KERB_CERTIFICATE_S4U_LOGON_FLAG_FAIL_IF_NT_AUTH_POLICY_REQUIRED: ULONG = 0x4;
1056 pub const KERB_CERTIFICATE_S4U_LOGON_FLAG_IDENTIFY: ULONG = 0x8;
1057 STRUCT!{struct KERB_CERTIFICATE_S4U_LOGON {
1058     MessageType: KERB_LOGON_SUBMIT_TYPE,
1059     Flags: ULONG,
1060     UserPrincipalName: UNICODE_STRING,
1061     DomainName: UNICODE_STRING,
1062     CertificateLength: ULONG,
1063     Certificate: PUCHAR,
1064 }}
1065 pub type PKERB_CERTIFICATE_S4U_LOGON = *mut KERB_CERTIFICATE_S4U_LOGON;
1066 STRUCT!{struct KERB_TICKET_LOGON {
1067     MessageType: KERB_LOGON_SUBMIT_TYPE,
1068     Flags: ULONG,
1069     ServiceTicketLength: ULONG,
1070     TicketGrantingTicketLength: ULONG,
1071     ServiceTicket: PUCHAR,
1072     TicketGrantingTicket: PUCHAR,
1073 }}
1074 pub type PKERB_TICKET_LOGON = *mut KERB_TICKET_LOGON;
1075 STRUCT!{struct KERB_TICKET_UNLOCK_LOGON {
1076     Logon: KERB_TICKET_LOGON,
1077     LogonId: LUID,
1078 }}
1079 pub type PKERB_TICKET_UNLOCK_LOGON = *mut KERB_TICKET_UNLOCK_LOGON;
1080 pub const KERB_S4U_LOGON_FLAG_CHECK_LOGONHOURS: ULONG = 0x2;
1081 pub const KERB_S4U_LOGON_FLAG_IDENTIFY: ULONG = 0x8;
1082 STRUCT!{struct KERB_S4U_LOGON {
1083     MessageType: KERB_LOGON_SUBMIT_TYPE,
1084     Flags: ULONG,
1085     ClientUpn: UNICODE_STRING,
1086     ClientRealm: UNICODE_STRING,
1087 }}
1088 pub type PKERB_S4U_LOGON = *mut KERB_S4U_LOGON;
1089 ENUM!{enum KERB_PROFILE_BUFFER_TYPE {
1090     KerbInteractiveProfile = 2,
1091     KerbSmartCardProfile = 4,
1092     KerbTicketProfile = 6,
1093 }}
1094 pub type PKERB_PROFILE_BUFFER_TYPE = *mut KERB_PROFILE_BUFFER_TYPE;
1095 STRUCT!{struct KERB_INTERACTIVE_PROFILE {
1096     MessageType: KERB_PROFILE_BUFFER_TYPE,
1097     LogonCount: USHORT,
1098     BadPasswordCount: USHORT,
1099     LogonTime: LARGE_INTEGER,
1100     LogoffTime: LARGE_INTEGER,
1101     KickOffTime: LARGE_INTEGER,
1102     PasswordLastSet: LARGE_INTEGER,
1103     PasswordCanChange: LARGE_INTEGER,
1104     PasswordMustChange: LARGE_INTEGER,
1105     LogonScript: UNICODE_STRING,
1106     HomeDirectory: UNICODE_STRING,
1107     FullName: UNICODE_STRING,
1108     ProfilePath: UNICODE_STRING,
1109     HomeDirectoryDrive: UNICODE_STRING,
1110     LogonServer: UNICODE_STRING,
1111     UserFlags: ULONG,
1112 }}
1113 pub type PKERB_INTERACTIVE_PROFILE = *mut KERB_INTERACTIVE_PROFILE;
1114 STRUCT!{struct KERB_SMART_CARD_PROFILE {
1115     Profile: KERB_INTERACTIVE_PROFILE,
1116     CertificateSize: ULONG,
1117     CertificateData: PUCHAR,
1118 }}
1119 pub type PKERB_SMART_CARD_PROFILE = *mut KERB_SMART_CARD_PROFILE;
1120 STRUCT!{struct KERB_CRYPTO_KEY {
1121     KeyType: LONG,
1122     Length: ULONG,
1123     Value: PUCHAR,
1124 }}
1125 pub type PKERB_CRYPTO_KEY = *mut KERB_CRYPTO_KEY;
1126 STRUCT!{struct KERB_CRYPTO_KEY32 {
1127     KeyType: LONG,
1128     Length: ULONG,
1129     Offset: ULONG,
1130 }}
1131 pub type PKERB_CRYPTO_KEY32 = *mut KERB_CRYPTO_KEY32;
1132 STRUCT!{struct KERB_TICKET_PROFILE {
1133     Profile: KERB_INTERACTIVE_PROFILE,
1134     SessionKey: KERB_CRYPTO_KEY,
1135 }}
1136 pub type PKERB_TICKET_PROFILE = *mut KERB_TICKET_PROFILE;
1137 ENUM!{enum KERB_PROTOCOL_MESSAGE_TYPE {
1138     KerbDebugRequestMessage = 0,
1139     KerbQueryTicketCacheMessage,
1140     KerbChangeMachinePasswordMessage,
1141     KerbVerifyPacMessage,
1142     KerbRetrieveTicketMessage,
1143     KerbUpdateAddressesMessage,
1144     KerbPurgeTicketCacheMessage,
1145     KerbChangePasswordMessage,
1146     KerbRetrieveEncodedTicketMessage,
1147     KerbDecryptDataMessage,
1148     KerbAddBindingCacheEntryMessage,
1149     KerbSetPasswordMessage,
1150     KerbSetPasswordExMessage,
1151     KerbVerifyCredentialsMessage,
1152     KerbQueryTicketCacheExMessage,
1153     KerbPurgeTicketCacheExMessage,
1154     KerbRefreshSmartcardCredentialsMessage,
1155     KerbAddExtraCredentialsMessage,
1156     KerbQuerySupplementalCredentialsMessage,
1157     KerbTransferCredentialsMessage,
1158     KerbQueryTicketCacheEx2Message,
1159     KerbSubmitTicketMessage,
1160     KerbAddExtraCredentialsExMessage,
1161     KerbQueryKdcProxyCacheMessage,
1162     KerbPurgeKdcProxyCacheMessage,
1163     KerbQueryTicketCacheEx3Message,
1164     KerbCleanupMachinePkinitCredsMessage,
1165     KerbAddBindingCacheEntryExMessage,
1166     KerbQueryBindingCacheMessage,
1167     KerbPurgeBindingCacheMessage,
1168     KerbPinKdcMessage,
1169     KerbUnpinAllKdcsMessage,
1170     KerbQueryDomainExtendedPoliciesMessage,
1171     KerbQueryS4U2ProxyCacheMessage,
1172 }}
1173 pub type PKERB_PROTOCOL_MESSAGE_TYPE = *mut KERB_PROTOCOL_MESSAGE_TYPE;
1174 STRUCT!{struct KERB_QUERY_TKT_CACHE_REQUEST {
1175     MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
1176     LogonId: LUID,
1177 }}
1178 pub type PKERB_QUERY_TKT_CACHE_REQUEST = *mut KERB_QUERY_TKT_CACHE_REQUEST;
1179 STRUCT!{struct KERB_TICKET_CACHE_INFO {
1180     ServerName: UNICODE_STRING,
1181     RealmName: UNICODE_STRING,
1182     StartTime: LARGE_INTEGER,
1183     EndTime: LARGE_INTEGER,
1184     RenewTime: LARGE_INTEGER,
1185     EncryptionType: LONG,
1186     TicketFlags: ULONG,
1187 }}
1188 pub type PKERB_TICKET_CACHE_INFO = *mut KERB_TICKET_CACHE_INFO;
1189 STRUCT!{struct KERB_TICKET_CACHE_INFO_EX {
1190     ClientName: UNICODE_STRING,
1191     ClientRealm: UNICODE_STRING,
1192     ServerName: UNICODE_STRING,
1193     ServerRealm: UNICODE_STRING,
1194     StartTime: LARGE_INTEGER,
1195     EndTime: LARGE_INTEGER,
1196     RenewTime: LARGE_INTEGER,
1197     EncryptionType: LONG,
1198     TicketFlags: ULONG,
1199 }}
1200 pub type PKERB_TICKET_CACHE_INFO_EX = *mut KERB_TICKET_CACHE_INFO_EX;
1201 STRUCT!{struct KERB_TICKET_CACHE_INFO_EX2 {
1202     ClientName: UNICODE_STRING,
1203     ClientRealm: UNICODE_STRING,
1204     ServerName: UNICODE_STRING,
1205     ServerRealm: UNICODE_STRING,
1206     StartTime: LARGE_INTEGER,
1207     EndTime: LARGE_INTEGER,
1208     RenewTime: LARGE_INTEGER,
1209     EncryptionType: LONG,
1210     TicketFlags: ULONG,
1211     SessionKeyType: ULONG,
1212     BranchId: ULONG,
1213 }}
1214 pub type PKERB_TICKET_CACHE_INFO_EX2 = *mut KERB_TICKET_CACHE_INFO_EX2;
1215 STRUCT!{struct KERB_TICKET_CACHE_INFO_EX3 {
1216     ClientName: UNICODE_STRING,
1217     ClientRealm: UNICODE_STRING,
1218     ServerName: UNICODE_STRING,
1219     ServerRealm: UNICODE_STRING,
1220     StartTime: LARGE_INTEGER,
1221     EndTime: LARGE_INTEGER,
1222     RenewTime: LARGE_INTEGER,
1223     EncryptionType: LONG,
1224     TicketFlags: ULONG,
1225     SessionKeyType: ULONG,
1226     BranchId: ULONG,
1227     CacheFlags: ULONG,
1228     KdcCalled: UNICODE_STRING,
1229 }}
1230 pub type PKERB_TICKET_CACHE_INFO_EX3 = *mut KERB_TICKET_CACHE_INFO_EX3;
1231 STRUCT!{struct KERB_QUERY_TKT_CACHE_RESPONSE {
1232     MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
1233     CountOfTickets: ULONG,
1234     Tickets: [KERB_TICKET_CACHE_INFO; ANYSIZE_ARRAY],
1235 }}
1236 pub type PKERB_QUERY_TKT_CACHE_RESPONSE = *mut KERB_QUERY_TKT_CACHE_RESPONSE;
1237 STRUCT!{struct KERB_QUERY_TKT_CACHE_EX_RESPONSE {
1238     MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
1239     CountOfTickets: ULONG,
1240     Tickets: [KERB_TICKET_CACHE_INFO_EX; ANYSIZE_ARRAY],
1241 }}
1242 pub type PKERB_QUERY_TKT_CACHE_EX_RESPONSE = *mut KERB_QUERY_TKT_CACHE_EX_RESPONSE;
1243 STRUCT!{struct KERB_QUERY_TKT_CACHE_EX2_RESPONSE {
1244     MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
1245     CountOfTickets: ULONG,
1246     Tickets: [KERB_TICKET_CACHE_INFO_EX2; ANYSIZE_ARRAY],
1247 }}
1248 pub type PKERB_QUERY_TKT_CACHE_EX2_RESPONSE = *mut KERB_QUERY_TKT_CACHE_EX2_RESPONSE;
1249 STRUCT!{struct KERB_QUERY_TKT_CACHE_EX3_RESPONSE {
1250     MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
1251     CountOfTickets: ULONG,
1252     Tickets: [KERB_TICKET_CACHE_INFO_EX3; ANYSIZE_ARRAY],
1253 }}
1254 pub type PKERB_QUERY_TKT_CACHE_EX3_RESPONSE = *mut KERB_QUERY_TKT_CACHE_EX3_RESPONSE;
1255 pub const KERB_USE_DEFAULT_TICKET_FLAGS: ULONG = 0x0;
1256 pub const KERB_RETRIEVE_TICKET_DEFAULT: ULONG = 0x0;
1257 pub const KERB_RETRIEVE_TICKET_DONT_USE_CACHE: ULONG = 0x1;
1258 pub const KERB_RETRIEVE_TICKET_USE_CACHE_ONLY: ULONG = 0x2;
1259 pub const KERB_RETRIEVE_TICKET_USE_CREDHANDLE: ULONG = 0x4;
1260 pub const KERB_RETRIEVE_TICKET_AS_KERB_CRED: ULONG = 0x8;
1261 pub const KERB_RETRIEVE_TICKET_WITH_SEC_CRED: ULONG = 0x10;
1262 pub const KERB_RETRIEVE_TICKET_CACHE_TICKET: ULONG = 0x20;
1263 pub const KERB_RETRIEVE_TICKET_MAX_LIFETIME: ULONG = 0x40;
1264 STRUCT!{struct KERB_AUTH_DATA {
1265     Type: ULONG,
1266     Length: ULONG,
1267     Data: PUCHAR,
1268 }}
1269 pub type PKERB_AUTH_DATA = *mut KERB_AUTH_DATA;
1270 STRUCT!{struct KERB_NET_ADDRESS {
1271     Family: ULONG,
1272     Length: ULONG,
1273     Address: PUCHAR,
1274 }}
1275 pub type PKERB_NET_ADDRESS = *mut KERB_NET_ADDRESS;
1276 STRUCT!{struct KERB_NET_ADDRESSES {
1277     Number: ULONG,
1278     Addresses: [KERB_NET_ADDRESS; ANYSIZE_ARRAY],
1279 }}
1280 pub type PKERB_NET_ADDRESSES = *mut KERB_NET_ADDRESSES;
1281 STRUCT!{struct KERB_EXTERNAL_NAME {
1282     NameType: SHORT,
1283     NameCount: USHORT,
1284     Names: [UNICODE_STRING; ANYSIZE_ARRAY],
1285 }}
1286 pub type PKERB_EXTERNAL_NAME = *mut KERB_EXTERNAL_NAME;
1287 STRUCT!{struct KERB_EXTERNAL_TICKET {
1288     ServiceName: PKERB_EXTERNAL_NAME,
1289     TargetName: PKERB_EXTERNAL_NAME,
1290     ClientName: PKERB_EXTERNAL_NAME,
1291     DomainName: UNICODE_STRING,
1292     TargetDomainName: UNICODE_STRING,
1293     AltTargetDomainName: UNICODE_STRING,
1294     SessionKey: KERB_CRYPTO_KEY,
1295     TicketFlags: ULONG,
1296     Flags: ULONG,
1297     KeyExpirationTime: LARGE_INTEGER,
1298     StartTime: LARGE_INTEGER,
1299     EndTime: LARGE_INTEGER,
1300     RenewUntil: LARGE_INTEGER,
1301     TimeSkew: LARGE_INTEGER,
1302     EncodedTicketSize: ULONG,
1303     EncodedTicket: PUCHAR,
1304 }}
1305 pub type PKERB_EXTERNAL_TICKET = *mut KERB_EXTERNAL_TICKET;
1306 STRUCT!{struct KERB_RETRIEVE_TKT_REQUEST {
1307     MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
1308     LogonId: LUID,
1309     TargetName: UNICODE_STRING,
1310     TicketFlags: ULONG,
1311     CacheOptions: ULONG,
1312     EncryptionType: LONG,
1313     CredentialsHandle: SecHandle,
1314 }}
1315 pub type PKERB_RETRIEVE_TKT_REQUEST = *mut KERB_RETRIEVE_TKT_REQUEST;
1316 STRUCT!{struct KERB_RETRIEVE_TKT_RESPONSE {
1317     Ticket: KERB_EXTERNAL_TICKET,
1318 }}
1319 pub type PKERB_RETRIEVE_TKT_RESPONSE = *mut KERB_RETRIEVE_TKT_RESPONSE;
1320 STRUCT!{struct KERB_PURGE_TKT_CACHE_REQUEST {
1321     MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
1322     LogonId: LUID,
1323     ServerName: UNICODE_STRING,
1324     RealmName: UNICODE_STRING,
1325 }}
1326 pub type PKERB_PURGE_TKT_CACHE_REQUEST = *mut KERB_PURGE_TKT_CACHE_REQUEST;
1327 pub const KERB_PURGE_ALL_TICKETS: ULONG = 1;
1328 STRUCT!{struct KERB_PURGE_TKT_CACHE_EX_REQUEST {
1329     MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
1330     LogonId: LUID,
1331     Flags: ULONG,
1332     TicketTemplate: KERB_TICKET_CACHE_INFO_EX,
1333 }}
1334 pub type PKERB_PURGE_TKT_CACHE_EX_REQUEST = *mut KERB_PURGE_TKT_CACHE_EX_REQUEST;
1335 STRUCT!{struct KERB_SUBMIT_TKT_REQUEST {
1336     MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
1337     LogonId: LUID,
1338     Flags: ULONG,
1339     Key: KERB_CRYPTO_KEY32,
1340     KerbCredSize: ULONG,
1341     KerbCredOffset: ULONG,
1342 }}
1343 pub type PKERB_SUBMIT_TKT_REQUEST = *mut KERB_SUBMIT_TKT_REQUEST;
1344 STRUCT!{struct KERB_QUERY_KDC_PROXY_CACHE_REQUEST {
1345     MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
1346     Flags: ULONG,
1347     LogonId: LUID,
1348 }}
1349 pub type PKERB_QUERY_KDC_PROXY_CACHE_REQUEST = *mut KERB_QUERY_KDC_PROXY_CACHE_REQUEST;
1350 STRUCT!{struct KDC_PROXY_CACHE_ENTRY_DATA {
1351     SinceLastUsed: ULONG64,
1352     DomainName: UNICODE_STRING,
1353     ProxyServerName: UNICODE_STRING,
1354     ProxyServerVdir: UNICODE_STRING,
1355     ProxyServerPort: USHORT,
1356     LogonId: LUID,
1357     CredUserName: UNICODE_STRING,
1358     CredDomainName: UNICODE_STRING,
1359     GlobalCache: BOOLEAN,
1360 }}
1361 pub type PKDC_PROXY_CACHE_ENTRY_DATA = *mut KDC_PROXY_CACHE_ENTRY_DATA;
1362 STRUCT!{struct KERB_QUERY_KDC_PROXY_CACHE_RESPONSE {
1363     MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
1364     CountOfEntries: ULONG,
1365     Entries: PKDC_PROXY_CACHE_ENTRY_DATA,
1366 }}
1367 pub type PKERB_QUERY_KDC_PROXY_CACHE_RESPONSE = *mut KERB_QUERY_KDC_PROXY_CACHE_RESPONSE;
1368 STRUCT!{struct KERB_PURGE_KDC_PROXY_CACHE_REQUEST {
1369     MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
1370     Flags: ULONG,
1371     LogonId: LUID,
1372 }}
1373 pub type PKERB_PURGE_KDC_PROXY_CACHE_REQUEST = *mut KERB_PURGE_KDC_PROXY_CACHE_REQUEST;
1374 STRUCT!{struct KERB_PURGE_KDC_PROXY_CACHE_RESPONSE {
1375     MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
1376     CountOfPurged: ULONG,
1377 }}
1378 pub type PKERB_PURGE_KDC_PROXY_CACHE_RESPONSE = *mut KERB_PURGE_KDC_PROXY_CACHE_RESPONSE;
1379 pub const KERB_S4U2PROXY_CACHE_ENTRY_INFO_FLAG_NEGATIVE: ULONG = 0x1;
1380 STRUCT!{struct KERB_S4U2PROXY_CACHE_ENTRY_INFO {
1381     ServerName: UNICODE_STRING,
1382     Flags: ULONG,
1383     LastStatus: NTSTATUS,
1384     Expiry: LARGE_INTEGER,
1385 }}
1386 pub type PKERB_S4U2PROXY_CACHE_ENTRY_INFO = *mut KERB_S4U2PROXY_CACHE_ENTRY_INFO;
1387 pub const KERB_S4U2PROXY_CRED_FLAG_NEGATIVE: ULONG = 0x1;
1388 STRUCT!{struct KERB_S4U2PROXY_CRED {
1389     UserName: UNICODE_STRING,
1390     DomainName: UNICODE_STRING,
1391     Flags: ULONG,
1392     LastStatus: NTSTATUS,
1393     Expiry: LARGE_INTEGER,
1394     CountOfEntries: ULONG,
1395     Entries: PKERB_S4U2PROXY_CACHE_ENTRY_INFO,
1396 }}
1397 pub type PKERB_S4U2PROXY_CRED = *mut KERB_S4U2PROXY_CRED;
1398 STRUCT!{struct KERB_QUERY_S4U2PROXY_CACHE_REQUEST {
1399     MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
1400     Flags: ULONG,
1401     LogonId: LUID,
1402 }}
1403 pub type PKERB_QUERY_S4U2PROXY_CACHE_REQUEST = *mut KERB_QUERY_S4U2PROXY_CACHE_REQUEST;
1404 STRUCT!{struct KERB_QUERY_S4U2PROXY_CACHE_RESPONSE {
1405     MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
1406     CountOfCreds: ULONG,
1407     Creds: PKERB_S4U2PROXY_CRED,
1408 }}
1409 pub type PKERB_QUERY_S4U2PROXY_CACHE_RESPONSE = *mut KERB_QUERY_S4U2PROXY_CACHE_RESPONSE;
1410 STRUCT!{struct KERB_CHANGEPASSWORD_REQUEST {
1411     MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
1412     DomainName: UNICODE_STRING,
1413     AccountName: UNICODE_STRING,
1414     OldPassword: UNICODE_STRING,
1415     NewPassword: UNICODE_STRING,
1416     Impersonating: BOOLEAN,
1417 }}
1418 pub type PKERB_CHANGEPASSWORD_REQUEST = *mut KERB_CHANGEPASSWORD_REQUEST;
1419 STRUCT!{struct KERB_SETPASSWORD_REQUEST {
1420     MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
1421     LogonId: LUID,
1422     CredentialsHandle: SecHandle,
1423     Flags: ULONG,
1424     DomainName: UNICODE_STRING,
1425     AccountName: UNICODE_STRING,
1426     Password: UNICODE_STRING,
1427 }}
1428 pub type PKERB_SETPASSWORD_REQUEST = *mut KERB_SETPASSWORD_REQUEST;
1429 STRUCT!{struct KERB_SETPASSWORD_EX_REQUEST {
1430     MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
1431     LogonId: LUID,
1432     CredentialsHandle: SecHandle,
1433     Flags: ULONG,
1434     AccountRealm: UNICODE_STRING,
1435     AccountName: UNICODE_STRING,
1436     Password: UNICODE_STRING,
1437     ClientRealm: UNICODE_STRING,
1438     ClientName: UNICODE_STRING,
1439     Impersonating: BOOLEAN,
1440     KdcAddress: UNICODE_STRING,
1441     KdcAddressType: ULONG,
1442 }}
1443 pub type PKERB_SETPASSWORD_EX_REQUEST = *mut KERB_SETPASSWORD_EX_REQUEST;
1444 pub const DS_UNKNOWN_ADDRESS_TYPE: ULONG = 0;
1445 pub const KERB_SETPASS_USE_LOGONID: ULONG = 1;
1446 pub const KERB_SETPASS_USE_CREDHANDLE: ULONG = 2;
1447 STRUCT!{struct KERB_DECRYPT_REQUEST {
1448     MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
1449     LogonId: LUID,
1450     Flags: ULONG,
1451     CryptoType: LONG,
1452     KeyUsage: LONG,
1453     Key: KERB_CRYPTO_KEY,
1454     EncryptedDataSize: ULONG,
1455     InitialVectorSize: ULONG,
1456     InitialVector: PUCHAR,
1457     EncryptedData: PUCHAR,
1458 }}
1459 pub type PKERB_DECRYPT_REQUEST = *mut KERB_DECRYPT_REQUEST;
1460 pub const KERB_DECRYPT_FLAG_DEFAULT_KEY: ULONG = 0x00000001;
1461 STRUCT!{struct KERB_DECRYPT_RESPONSE {
1462     DecryptedData: [UCHAR; ANYSIZE_ARRAY],
1463 }}
1464 pub type PKERB_DECRYPT_RESPONSE = *mut KERB_DECRYPT_RESPONSE;
1465 STRUCT!{struct KERB_ADD_BINDING_CACHE_ENTRY_REQUEST {
1466     MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
1467     RealmName: UNICODE_STRING,
1468     KdcAddress: UNICODE_STRING,
1469     AddressType: ULONG,
1470 }}
1471 pub type PKERB_ADD_BINDING_CACHE_ENTRY_REQUEST = *mut KERB_ADD_BINDING_CACHE_ENTRY_REQUEST;
1472 STRUCT!{struct KERB_REFRESH_SCCRED_REQUEST {
1473     MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
1474     CredentialBlob: UNICODE_STRING,
1475     LogonId: LUID,
1476     Flags: ULONG,
1477 }}
1478 pub type PKERB_REFRESH_SCCRED_REQUEST = *mut KERB_REFRESH_SCCRED_REQUEST;
1479 pub const KERB_REFRESH_SCCRED_RELEASE: ULONG = 0x0;
1480 pub const KERB_REFRESH_SCCRED_GETTGT: ULONG = 0x1;
1481 STRUCT!{struct KERB_ADD_CREDENTIALS_REQUEST {
1482     MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
1483     UserName: UNICODE_STRING,
1484     DomainName: UNICODE_STRING,
1485     Password: UNICODE_STRING,
1486     LogonId: LUID,
1487     Flags: ULONG,
1488 }}
1489 pub type PKERB_ADD_CREDENTIALS_REQUEST = *mut KERB_ADD_CREDENTIALS_REQUEST;
1490 pub const KERB_REQUEST_ADD_CREDENTIAL: ULONG = 1;
1491 pub const KERB_REQUEST_REPLACE_CREDENTIAL: ULONG = 2;
1492 pub const KERB_REQUEST_REMOVE_CREDENTIAL: ULONG = 4;
1493 STRUCT!{struct KERB_ADD_CREDENTIALS_REQUEST_EX {
1494     Credentials: KERB_ADD_CREDENTIALS_REQUEST,
1495     PrincipalNameCount: ULONG,
1496     PrincipalNames: [UNICODE_STRING; ANYSIZE_ARRAY],
1497 }}
1498 pub type PKERB_ADD_CREDENTIALS_REQUEST_EX = *mut KERB_ADD_CREDENTIALS_REQUEST_EX;
1499 STRUCT!{struct KERB_TRANSFER_CRED_REQUEST {
1500     MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
1501     OriginLogonId: LUID,
1502     DestinationLogonId: LUID,
1503     Flags: ULONG,
1504 }}
1505 pub type PKERB_TRANSFER_CRED_REQUEST = *mut KERB_TRANSFER_CRED_REQUEST;
1506 pub const KERB_TRANSFER_CRED_WITH_TICKETS: ULONG = 0x1;
1507 pub const KERB_TRANSFER_CRED_CLEANUP_CREDENTIALS: ULONG = 0x2;
1508 STRUCT!{struct KERB_CLEANUP_MACHINE_PKINIT_CREDS_REQUEST {
1509     MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
1510     LogonId: LUID,
1511 }}
1512 pub type PKERB_CLEANUP_MACHINE_PKINIT_CREDS_REQUEST =
1513     *mut KERB_CLEANUP_MACHINE_PKINIT_CREDS_REQUEST;
1514 STRUCT!{struct KERB_BINDING_CACHE_ENTRY_DATA {
1515     DiscoveryTime: ULONG64,
1516     RealmName: UNICODE_STRING,
1517     KdcAddress: UNICODE_STRING,
1518     AddressType: ULONG,
1519     Flags: ULONG,
1520     DcFlags: ULONG,
1521     CacheFlags: ULONG,
1522     KdcName: UNICODE_STRING,
1523 }}
1524 pub type PKERB_BINDING_CACHE_ENTRY_DATA = *mut KERB_BINDING_CACHE_ENTRY_DATA;
1525 STRUCT!{struct KERB_QUERY_BINDING_CACHE_RESPONSE {
1526     MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
1527     CountOfEntries: ULONG,
1528     Entries: PKERB_BINDING_CACHE_ENTRY_DATA,
1529 }}
1530 pub type PKERB_QUERY_BINDING_CACHE_RESPONSE = *mut KERB_QUERY_BINDING_CACHE_RESPONSE;
1531 STRUCT!{struct KERB_ADD_BINDING_CACHE_ENTRY_EX_REQUEST {
1532     MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
1533     RealmName: UNICODE_STRING,
1534     KdcAddress: UNICODE_STRING,
1535     AddressType: ULONG,
1536     DcFlags: ULONG,
1537 }}
1538 pub type PKERB_ADD_BINDING_CACHE_ENTRY_EX_REQUEST = *mut KERB_ADD_BINDING_CACHE_ENTRY_EX_REQUEST;
1539 STRUCT!{struct KERB_QUERY_BINDING_CACHE_REQUEST {
1540     MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
1541 }}
1542 pub type PKERB_QUERY_BINDING_CACHE_REQUEST = *mut KERB_QUERY_BINDING_CACHE_REQUEST;
1543 STRUCT!{struct KERB_PURGE_BINDING_CACHE_REQUEST {
1544     MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
1545 }}
1546 pub type PKERB_PURGE_BINDING_CACHE_REQUEST = *mut KERB_PURGE_BINDING_CACHE_REQUEST;
1547 STRUCT!{struct KERB_QUERY_DOMAIN_EXTENDED_POLICIES_REQUEST {
1548     MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
1549     Flags: ULONG,
1550     DomainName: UNICODE_STRING,
1551 }}
1552 pub type PKERB_QUERY_DOMAIN_EXTENDED_POLICIES_REQUEST =
1553     *mut KERB_QUERY_DOMAIN_EXTENDED_POLICIES_REQUEST;
1554 STRUCT!{struct KERB_QUERY_DOMAIN_EXTENDED_POLICIES_RESPONSE {
1555     MessageType: KERB_PROTOCOL_MESSAGE_TYPE,
1556     Flags: ULONG,
1557     ExtendedPolicies: ULONG,
1558     DsFlags: ULONG,
1559 }}
1560 pub type PKERB_QUERY_DOMAIN_EXTENDED_POLICIES_RESPONSE =
1561     *mut KERB_QUERY_DOMAIN_EXTENDED_POLICIES_RESPONSE;
1562 ENUM!{enum KERB_CERTIFICATE_INFO_TYPE {
1563     CertHashInfo = 1,
1564 }}
1565 pub type PKERB_CERTIFICATE_INFO_TYPE = *mut KERB_CERTIFICATE_INFO_TYPE;
1566 STRUCT!{struct KERB_CERTIFICATE_HASHINFO {
1567     StoreNameLength: USHORT,
1568     HashLength: USHORT,
1569 }}
1570 pub type PKERB_CERTIFICATE_HASHINFO = *mut KERB_CERTIFICATE_HASHINFO;
1571 STRUCT!{struct KERB_CERTIFICATE_INFO {
1572     CertInfoSize: ULONG,
1573     InfoType: ULONG,
1574 }}
1575 pub type PKERB_CERTIFICATE_INFO = *mut KERB_CERTIFICATE_INFO;
1576 STRUCT!{struct POLICY_AUDIT_SID_ARRAY {
1577     UsersCount: ULONG,
1578     UserSidArray: *mut PSID,
1579 }}
1580 pub type PPOLICY_AUDIT_SID_ARRAY = *mut POLICY_AUDIT_SID_ARRAY;
1581 STRUCT!{struct AUDIT_POLICY_INFORMATION {
1582     AuditSubCategoryGuid: GUID,
1583     AuditingInformation: ULONG,
1584     AuditCategoryGuid: GUID,
1585 }}
1586 pub type PAUDIT_POLICY_INFORMATION = *mut AUDIT_POLICY_INFORMATION;
1587 pub type LPAUDIT_POLICY_INFORMATION = PAUDIT_POLICY_INFORMATION;
1588 pub type PCAUDIT_POLICY_INFORMATION = *const AUDIT_POLICY_INFORMATION;
1589 pub const AUDIT_SET_SYSTEM_POLICY: ULONG = 0x0001;
1590 pub const AUDIT_QUERY_SYSTEM_POLICY: ULONG = 0x0002;
1591 pub const AUDIT_SET_USER_POLICY: ULONG = 0x0004;
1592 pub const AUDIT_QUERY_USER_POLICY: ULONG = 0x0008;
1593 pub const AUDIT_ENUMERATE_USERS: ULONG = 0x0010;
1594 pub const AUDIT_SET_MISC_POLICY: ULONG = 0x0020;
1595 pub const AUDIT_QUERY_MISC_POLICY: ULONG = 0x0040;
1596 pub const AUDIT_GENERIC_ALL: ULONG = STANDARD_RIGHTS_REQUIRED | AUDIT_SET_SYSTEM_POLICY
1597     | AUDIT_QUERY_SYSTEM_POLICY | AUDIT_SET_USER_POLICY | AUDIT_QUERY_USER_POLICY
1598     | AUDIT_ENUMERATE_USERS | AUDIT_SET_MISC_POLICY | AUDIT_QUERY_MISC_POLICY;
1599 pub const AUDIT_GENERIC_READ: ULONG = STANDARD_RIGHTS_READ | AUDIT_QUERY_SYSTEM_POLICY
1600     | AUDIT_QUERY_USER_POLICY | AUDIT_ENUMERATE_USERS | AUDIT_QUERY_MISC_POLICY;
1601 pub const AUDIT_GENERIC_WRITE: ULONG = STANDARD_RIGHTS_WRITE | AUDIT_SET_USER_POLICY
1602     | AUDIT_SET_MISC_POLICY | AUDIT_SET_SYSTEM_POLICY;
1603 pub const AUDIT_GENERIC_EXECUTE: ULONG = STANDARD_RIGHTS_EXECUTE;
1604 extern "system" {
AuditSetSystemPolicy( pAuditPolicy: PCAUDIT_POLICY_INFORMATION, PolicyCount: ULONG, ) -> BOOLEAN1605     pub fn AuditSetSystemPolicy(
1606         pAuditPolicy: PCAUDIT_POLICY_INFORMATION,
1607         PolicyCount: ULONG,
1608     ) -> BOOLEAN;
AuditSetPerUserPolicy( pSid: *const SID, pAuditPolicy: PCAUDIT_POLICY_INFORMATION, PolicyCount: ULONG, ) -> BOOLEAN1609     pub fn AuditSetPerUserPolicy(
1610         pSid: *const SID,
1611         pAuditPolicy: PCAUDIT_POLICY_INFORMATION,
1612         PolicyCount: ULONG,
1613     ) -> BOOLEAN;
AuditQuerySystemPolicy( pSubCategoryGuids: *const GUID, PolicyCount: ULONG, ppAuditPolicy: *mut PAUDIT_POLICY_INFORMATION, ) -> BOOLEAN1614     pub fn AuditQuerySystemPolicy(
1615         pSubCategoryGuids: *const GUID,
1616         PolicyCount: ULONG,
1617         ppAuditPolicy: *mut PAUDIT_POLICY_INFORMATION,
1618     ) -> BOOLEAN;
AuditQueryPerUserPolicy( pSid: *const SID, pSubCategoryGuids: *const GUID, PolicyCount: ULONG, ppAuditPolicy: *mut PAUDIT_POLICY_INFORMATION, ) -> BOOLEAN1619     pub fn AuditQueryPerUserPolicy(
1620         pSid: *const SID,
1621         pSubCategoryGuids: *const GUID,
1622         PolicyCount: ULONG,
1623         ppAuditPolicy: *mut PAUDIT_POLICY_INFORMATION,
1624     ) -> BOOLEAN;
AuditEnumeratePerUserPolicy( ppAuditSidArray: *mut PPOLICY_AUDIT_SID_ARRAY, ) -> BOOLEAN1625     pub fn AuditEnumeratePerUserPolicy(
1626         ppAuditSidArray: *mut PPOLICY_AUDIT_SID_ARRAY,
1627     ) -> BOOLEAN;
AuditComputeEffectivePolicyBySid( pSid: *const SID, pSubCategoryGuids: *const GUID, dwPolicyCount: ULONG, ppAuditPolicy: *mut PAUDIT_POLICY_INFORMATION, ) -> BOOLEAN1628     pub fn AuditComputeEffectivePolicyBySid(
1629         pSid: *const SID,
1630         pSubCategoryGuids: *const GUID,
1631         dwPolicyCount: ULONG,
1632         ppAuditPolicy: *mut PAUDIT_POLICY_INFORMATION,
1633     ) -> BOOLEAN;
AuditComputeEffectivePolicyByToken( hTokenHandle: HANDLE, pSubCategoryGuids: *const GUID, dwPolicyCount: ULONG, ppAuditPolicy: *mut PAUDIT_POLICY_INFORMATION, ) -> BOOLEAN1634     pub fn AuditComputeEffectivePolicyByToken(
1635         hTokenHandle: HANDLE,
1636         pSubCategoryGuids: *const GUID,
1637         dwPolicyCount: ULONG,
1638         ppAuditPolicy: *mut PAUDIT_POLICY_INFORMATION,
1639     ) -> BOOLEAN;
AuditEnumerateCategories( ppAuditCategoriesArray: *mut *mut GUID, pdwCountReturned: PULONG, ) -> BOOLEAN1640     pub fn AuditEnumerateCategories(
1641         ppAuditCategoriesArray: *mut *mut GUID,
1642         pdwCountReturned: PULONG,
1643     ) -> BOOLEAN;
AuditEnumerateSubCategories( pAuditCategoryGuid: *const GUID, bRetrieveAllSubCategories: BOOLEAN, ppAuditSubCategoriesArray: *mut *mut GUID, pdwCountReturned: PULONG, ) -> BOOLEAN1644     pub fn AuditEnumerateSubCategories(
1645         pAuditCategoryGuid: *const GUID,
1646         bRetrieveAllSubCategories: BOOLEAN,
1647         ppAuditSubCategoriesArray: *mut *mut GUID,
1648         pdwCountReturned: PULONG,
1649     ) -> BOOLEAN;
AuditLookupCategoryNameW( pAuditCategoryGuid: *const GUID, ppszCategoryName: *mut PWSTR, ) -> BOOLEAN1650     pub fn AuditLookupCategoryNameW(
1651         pAuditCategoryGuid: *const GUID,
1652         ppszCategoryName: *mut PWSTR,
1653     ) -> BOOLEAN;
AuditLookupCategoryNameA( pAuditCategoryGuid: *const GUID, ppszCategoryName: *mut PSTR, ) -> BOOLEAN1654     pub fn AuditLookupCategoryNameA(
1655         pAuditCategoryGuid: *const GUID,
1656         ppszCategoryName: *mut PSTR,
1657     ) -> BOOLEAN;
AuditLookupSubCategoryNameW( pAuditSubCategoryGuid: *const GUID, ppszSubCategoryName: *mut PWSTR, ) -> BOOLEAN1658     pub fn AuditLookupSubCategoryNameW(
1659         pAuditSubCategoryGuid: *const GUID,
1660         ppszSubCategoryName: *mut PWSTR,
1661     ) -> BOOLEAN;
AuditLookupSubCategoryNameA( pAuditSubCategoryGuid: *const GUID, ppszSubCategoryName: *mut PSTR, ) -> BOOLEAN1662     pub fn AuditLookupSubCategoryNameA(
1663         pAuditSubCategoryGuid: *const GUID,
1664         ppszSubCategoryName: *mut PSTR,
1665     ) -> BOOLEAN;
AuditLookupCategoryIdFromCategoryGuid( pAuditCategoryGuid: *const GUID, pAuditCategoryId: PPOLICY_AUDIT_EVENT_TYPE, ) -> BOOLEAN1666     pub fn AuditLookupCategoryIdFromCategoryGuid(
1667         pAuditCategoryGuid: *const GUID,
1668         pAuditCategoryId: PPOLICY_AUDIT_EVENT_TYPE,
1669     ) -> BOOLEAN;
AuditLookupCategoryGuidFromCategoryId( AuditCategoryId: POLICY_AUDIT_EVENT_TYPE, pAuditCategoryGuid: *mut GUID, ) -> BOOLEAN1670     pub fn AuditLookupCategoryGuidFromCategoryId(
1671         AuditCategoryId: POLICY_AUDIT_EVENT_TYPE,
1672         pAuditCategoryGuid: *mut GUID,
1673     ) -> BOOLEAN;
AuditSetSecurity( SecurityInformation: SECURITY_INFORMATION, pSecurityDescriptor: PSECURITY_DESCRIPTOR, ) -> BOOLEAN1674     pub fn AuditSetSecurity(
1675         SecurityInformation: SECURITY_INFORMATION,
1676         pSecurityDescriptor: PSECURITY_DESCRIPTOR,
1677     ) -> BOOLEAN;
AuditQuerySecurity( SecurityInformation: SECURITY_INFORMATION, ppSecurityDescriptor: *mut PSECURITY_DESCRIPTOR, ) -> BOOLEAN1678     pub fn AuditQuerySecurity(
1679         SecurityInformation: SECURITY_INFORMATION,
1680         ppSecurityDescriptor: *mut PSECURITY_DESCRIPTOR,
1681     ) -> BOOLEAN;
AuditSetGlobalSaclW( ObjectTypeName: PCWSTR, Acl: PACL, ) -> BOOLEAN1682     pub fn AuditSetGlobalSaclW(
1683         ObjectTypeName: PCWSTR,
1684         Acl: PACL,
1685     ) -> BOOLEAN;
AuditSetGlobalSaclA( ObjectTypeName: PCSTR, Acl: PACL, ) -> BOOLEAN1686     pub fn AuditSetGlobalSaclA(
1687         ObjectTypeName: PCSTR,
1688         Acl: PACL,
1689     ) -> BOOLEAN;
AuditQueryGlobalSaclW( ObjectTypeName: PCWSTR, Acl: *mut PACL, ) -> BOOLEAN1690     pub fn AuditQueryGlobalSaclW(
1691         ObjectTypeName: PCWSTR,
1692         Acl: *mut PACL,
1693     ) -> BOOLEAN;
AuditQueryGlobalSaclA( ObjectTypeName: PCSTR, Acl: *mut PACL, ) -> BOOLEAN1694     pub fn AuditQueryGlobalSaclA(
1695         ObjectTypeName: PCSTR,
1696         Acl: *mut PACL,
1697     ) -> BOOLEAN;
AuditFree( Buffer: PVOID, )1698     pub fn AuditFree(
1699         Buffer: PVOID,
1700     );
1701 }
1702 STRUCT!{struct PKU2U_CERT_BLOB {
1703     CertOffset: ULONG,
1704     CertLength: USHORT,
1705 }}
1706 pub type PPKU2U_CERT_BLOB = *mut PKU2U_CERT_BLOB;
1707 pub const PKU2U_CREDUI_CONTEXT_VERSION: ULONG64 = 0x4154414454524543;
1708 STRUCT!{struct PKU2U_CREDUI_CONTEXT {
1709     Version: ULONG64,
1710     cbHeaderLength: USHORT,
1711     cbStructureLength: ULONG,
1712     CertArrayCount: USHORT,
1713     CertArrayOffset: ULONG,
1714 }}
1715 pub type PPKU2U_CREDUI_CONTEXT = *mut PKU2U_CREDUI_CONTEXT;
1716 ENUM!{enum PKU2U_LOGON_SUBMIT_TYPE {
1717     Pku2uCertificateS4ULogon = 14,
1718 }}
1719 pub type PPKU2U_LOGON_SUBMIT_TYPE = *mut PKU2U_LOGON_SUBMIT_TYPE;
1720 STRUCT!{struct PKU2U_CERTIFICATE_S4U_LOGON {
1721     MessageType: PKU2U_LOGON_SUBMIT_TYPE,
1722     Flags: ULONG,
1723     UserPrincipalName: UNICODE_STRING,
1724     DomainName: UNICODE_STRING,
1725     CertificateLength: ULONG,
1726     Certificate: PUCHAR,
1727 }}
1728 pub type PPKU2U_CERTIFICATE_S4U_LOGON = *mut PKU2U_CERTIFICATE_S4U_LOGON;
1729