1use shared::basetsd::{SIZE_T, ULONG_PTR};
7use shared::guiddef::GUID;
8use shared::minwindef::{PUCHAR, PULONG, UCHAR, ULONG, USHORT};
9use shared::ntdef::{NTSTATUS, PNTSTATUS};
10use um::lsalookup::{
11 LSA_TRUST_INFORMATION, LSA_UNICODE_STRING, PLSA_OBJECT_ATTRIBUTES,
12 PLSA_REFERENCED_DOMAIN_LIST, PLSA_STRING, PLSA_TRANSLATED_NAME, PLSA_TRANSLATED_SID2,
13 PLSA_TRUST_INFORMATION, PLSA_UNICODE_STRING,
14};
15use um::ntsecapi::PLSA_HANDLE;
16use um::subauth::{PUNICODE_STRING, UNICODE_STRING};
17use um::winnt::{
18 ACCESS_MASK, ANYSIZE_ARRAY, BOOLEAN, HANDLE, LARGE_INTEGER, LONG, LUID, PBOOLEAN,
19 PCLAIMS_BLOB, PHANDLE, PLARGE_INTEGER, PLUID, PPRIVILEGE_SET, PQUOTA_LIMITS,
20 PSECURITY_DESCRIPTOR, PSHORT, PSID, PTOKEN_GROUPS, PTOKEN_PRIVILEGES, PTOKEN_SOURCE, PVOID,
21 PWSTR, QUOTA_LIMITS, SECURITY_INFORMATION, SID_NAME_USE, STANDARD_RIGHTS_EXECUTE,
22 STANDARD_RIGHTS_READ, STANDARD_RIGHTS_REQUIRED, STANDARD_RIGHTS_WRITE, TOKEN_DEFAULT_DACL,
23 TOKEN_DEVICE_CLAIMS, TOKEN_OWNER, TOKEN_PRIMARY_GROUP, TOKEN_USER, TOKEN_USER_CLAIMS,
24};
25pub type LSA_OPERATIONAL_MODE = ULONG;
26pub type PLSA_OPERATIONAL_MODE = *mut LSA_OPERATIONAL_MODE;
27pub const LSA_MODE_PASSWORD_PROTECTED: ULONG = 0x00000001;
28pub const LSA_MODE_INDIVIDUAL_ACCOUNTS: ULONG = 0x00000002;
29pub const LSA_MODE_MANDATORY_ACCESS: ULONG = 0x00000004;
30pub const LSA_MODE_LOG_FULL: ULONG = 0x00000008;
31pub const LSA_MAXIMUM_SID_COUNT: SIZE_T = 0x00000100;
32pub const LSA_MAXIMUM_ENUMERATION_LENGTH: SIZE_T = 32000;
33pub const LSA_CALL_LICENSE_SERVER: ULONG = 0x80000000;
34ENUM!{enum SECURITY_LOGON_TYPE {
35 UndefinedLogonType = 0,
36 Interactive = 2,
37 Network,
38 Batch,
39 Service,
40 Proxy,
41 Unlock,
42 NetworkCleartext,
43 NewCredentials,
44 RemoteInteractive,
45 CachedInteractive,
46 CachedRemoteInteractive,
47 CachedUnlock,
48}}
49pub type PSECURITY_LOGON_TYPE = *mut SECURITY_LOGON_TYPE;
50pub const SECURITY_ACCESS_INTERACTIVE_LOGON: ULONG = 0x00000001;
51pub const SECURITY_ACCESS_NETWORK_LOGON: ULONG = 0x00000002;
52pub const SECURITY_ACCESS_BATCH_LOGON: ULONG = 0x00000004;
53pub const SECURITY_ACCESS_SERVICE_LOGON: ULONG = 0x00000010;
54pub const SECURITY_ACCESS_PROXY_LOGON: ULONG = 0x00000020;
55pub const SECURITY_ACCESS_DENY_INTERACTIVE_LOGON: ULONG = 0x00000040;
56pub const SECURITY_ACCESS_DENY_NETWORK_LOGON: ULONG = 0x00000080;
57pub const SECURITY_ACCESS_DENY_BATCH_LOGON: ULONG = 0x00000100;
58pub const SECURITY_ACCESS_DENY_SERVICE_LOGON: ULONG = 0x00000200;
59pub const SECURITY_ACCESS_REMOTE_INTERACTIVE_LOGON: ULONG = 0x00000400;
60pub const SECURITY_ACCESS_DENY_REMOTE_INTERACTIVE_LOGON: ULONG = 0x00000800;
61ENUM!{enum SE_ADT_PARAMETER_TYPE {
62 SeAdtParmTypeNone = 0,
63 SeAdtParmTypeString,
64 SeAdtParmTypeFileSpec,
65 SeAdtParmTypeUlong,
66 SeAdtParmTypeSid,
67 SeAdtParmTypeLogonId,
68 SeAdtParmTypeNoLogonId,
69 SeAdtParmTypeAccessMask,
70 SeAdtParmTypePrivs,
71 SeAdtParmTypeObjectTypes,
72 SeAdtParmTypeHexUlong,
73 SeAdtParmTypePtr,
74 SeAdtParmTypeTime,
75 SeAdtParmTypeGuid,
76 SeAdtParmTypeLuid,
77 SeAdtParmTypeHexInt64,
78 SeAdtParmTypeStringList,
79 SeAdtParmTypeSidList,
80 SeAdtParmTypeDuration,
81 SeAdtParmTypeUserAccountControl,
82 SeAdtParmTypeNoUac,
83 SeAdtParmTypeMessage,
84 SeAdtParmTypeDateTime,
85 SeAdtParmTypeSockAddr,
86 SeAdtParmTypeSD,
87 SeAdtParmTypeLogonHours,
88 SeAdtParmTypeLogonIdNoSid,
89 SeAdtParmTypeUlongNoConv,
90 SeAdtParmTypeSockAddrNoPort,
91 SeAdtParmTypeAccessReason,
92 SeAdtParmTypeStagingReason,
93 SeAdtParmTypeResourceAttribute,
94 SeAdtParmTypeClaims,
95 SeAdtParmTypeLogonIdAsSid,
96 SeAdtParmTypeMultiSzString,
97 SeAdtParmTypeLogonIdEx,
98}}
99pub type PSE_ADT_PARAMETER_TYPE = *mut SE_ADT_PARAMETER_TYPE;
100pub const SE_ADT_OBJECT_ONLY: USHORT = 0x1;
101STRUCT!{struct SE_ADT_OBJECT_TYPE {
102 ObjectType: GUID,
103 Flags: USHORT,
104 Level: USHORT,
105 AccessMask: ACCESS_MASK,
106}}
107pub type PSE_ADT_OBJECT_TYPE = *mut SE_ADT_OBJECT_TYPE;
108STRUCT!{struct SE_ADT_PARAMETER_ARRAY_ENTRY {
109 Type: SE_ADT_PARAMETER_TYPE,
110 Length: ULONG,
111 Data: [ULONG_PTR; 2],
112 Address: PVOID,
113}}
114pub type PSE_ADT_PARAMETER_ARRAY_ENTRY = *mut SE_ADT_PARAMETER_ARRAY_ENTRY;
115STRUCT!{struct SE_ADT_ACCESS_REASON {
116 AccessMask: ACCESS_MASK,
117 AccessReasons: [ULONG; 32],
118 ObjectTypeIndex: ULONG,
119 AccessGranted: ULONG,
120 SecurityDescriptor: PSECURITY_DESCRIPTOR,
121}}
122pub type PSE_ADT_ACCESS_REASON = *mut SE_ADT_ACCESS_REASON;
123STRUCT!{struct SE_ADT_CLAIMS {
124 Length: ULONG,
125 Claims: PCLAIMS_BLOB,
126}}
127pub type PSE_ADT_CLAIMS = *mut SE_ADT_CLAIMS;
128pub const SE_MAX_AUDIT_PARAMETERS: SIZE_T = 32;
129pub const SE_MAX_GENERIC_AUDIT_PARAMETERS: SIZE_T = 28;
130STRUCT!{struct SE_ADT_PARAMETER_ARRAY {
131 CategoryId: ULONG,
132 AuditId: ULONG,
133 ParameterCount: ULONG,
134 Length: ULONG,
135 FlatSubCategoryId: USHORT,
136 Type: USHORT,
137 Flags: ULONG,
138 Parameters: [SE_ADT_PARAMETER_ARRAY_ENTRY; SE_MAX_AUDIT_PARAMETERS],
139}}
140pub type PSE_ADT_PARAMETER_ARRAY = *mut SE_ADT_PARAMETER_ARRAY;
141STRUCT!{struct SE_ADT_PARAMETER_ARRAY_EX {
142 CategoryId: ULONG,
143 AuditId: ULONG,
144 Version: ULONG,
145 ParameterCount: ULONG,
146 Length: ULONG,
147 FlatSubCategoryId: USHORT,
148 Type: USHORT,
149 Flags: ULONG,
150 Parameters: [SE_ADT_PARAMETER_ARRAY_ENTRY; SE_MAX_AUDIT_PARAMETERS],
151}}
152pub type PSE_ADT_PARAMETER_ARRAY_EX = *mut SE_ADT_PARAMETER_ARRAY_EX;
153pub const SE_ADT_PARAMETERS_SELF_RELATIVE: ULONG = 0x00000001;
154pub const SE_ADT_PARAMETERS_SEND_TO_LSA: ULONG = 0x00000002;
155pub const SE_ADT_PARAMETER_EXTENSIBLE_AUDIT: ULONG = 0x00000004;
156pub const SE_ADT_PARAMETER_GENERIC_AUDIT: ULONG = 0x00000008;
157pub const SE_ADT_PARAMETER_WRITE_SYNCHRONOUS: ULONG = 0x00000010;
158#[cfg(target_pointer_width = "32")]
159#[inline]
160pub fn LSAP_SE_ADT_PARAMETER_ARRAY_TRUE_SIZE(
161 AuditParameters: SE_ADT_PARAMETER_ARRAY,
162) -> SIZE_T {
163 664 - (20 * (SE_MAX_AUDIT_PARAMETERS - AuditParameters.ParameterCount as SIZE_T))
166}
167#[cfg(target_pointer_width = "64")]
168#[inline]
169pub fn LSAP_SE_ADT_PARAMETER_ARRAY_TRUE_SIZE(
170 AuditParameters: SE_ADT_PARAMETER_ARRAY,
171) -> SIZE_T {
172 1048 - (32 * (SE_MAX_AUDIT_PARAMETERS - AuditParameters.ParameterCount as SIZE_T))
175}
176STRUCT!{struct LSA_ADT_STRING_LIST_ENTRY {
177 Flags: ULONG,
178 String: UNICODE_STRING,
179}}
180pub type PLSA_ADT_STRING_LIST_ENTRY = *mut LSA_ADT_STRING_LIST_ENTRY;
181STRUCT!{struct LSA_ADT_STRING_LIST {
182 cStrings: ULONG,
183 String: PLSA_ADT_STRING_LIST_ENTRY,
184}}
185pub type PLSA_ADT_STRING_LIST = *mut LSA_ADT_STRING_LIST;
186STRUCT!{struct LSA_ADT_SID_LIST_ENTRY {
187 Flags: ULONG,
188 Sid: PSID,
189}}
190pub type PLSA_ADT_SID_LIST_ENTRY = *mut LSA_ADT_SID_LIST_ENTRY;
191STRUCT!{struct LSA_ADT_SID_LIST {
192 cSids: ULONG,
193 Sid: PLSA_ADT_SID_LIST_ENTRY,
194}}
195pub type PLSA_ADT_SID_LIST = *mut LSA_ADT_SID_LIST;
196pub const LSA_ADT_SECURITY_SOURCE_NAME: &'static str = "Microsoft-Windows-Security-Auditing";
197pub const LSA_ADT_LEGACY_SECURITY_SOURCE_NAME: &'static str = "Security";
198pub const SE_ADT_POLICY_AUDIT_EVENT_TYPE_EX_BEGIN: ULONG = 100;
199ENUM!{enum POLICY_AUDIT_EVENT_TYPE_EX {
200 iSystem_SecurityStateChange = SE_ADT_POLICY_AUDIT_EVENT_TYPE_EX_BEGIN,
201 iSystem_SecuritySubsystemExtension,
202 iSystem_Integrity,
203 iSystem_IPSecDriverEvents,
204 iSystem_Others,
205 iLogon_Logon,
206 iLogon_Logoff,
207 iLogon_AccountLockout,
208 iLogon_IPSecMainMode,
209 iLogon_SpecialLogon,
210 iLogon_IPSecQuickMode,
211 iLogon_IPSecUsermode,
212 iLogon_Others,
213 iLogon_NPS,
214 iLogon_Claims,
215 iLogon_Groups,
216 iObjectAccess_FileSystem,
217 iObjectAccess_Registry,
218 iObjectAccess_Kernel,
219 iObjectAccess_Sam,
220 iObjectAccess_Other,
221 iObjectAccess_CertificationAuthority,
222 iObjectAccess_ApplicationGenerated,
223 iObjectAccess_HandleBasedAudits,
224 iObjectAccess_Share,
225 iObjectAccess_FirewallPacketDrops,
226 iObjectAccess_FirewallConnection,
227 iObjectAccess_DetailedFileShare,
228 iObjectAccess_RemovableStorage,
229 iObjectAccess_CbacStaging,
230 iPrivilegeUse_Sensitive,
231 iPrivilegeUse_NonSensitive,
232 iPrivilegeUse_Others,
233 iDetailedTracking_ProcessCreation,
234 iDetailedTracking_ProcessTermination,
235 iDetailedTracking_DpapiActivity,
236 iDetailedTracking_RpcCall,
237 iDetailedTracking_PnpActivity,
238 iDetailedTracking_TokenRightAdjusted,
239 iPolicyChange_AuditPolicy,
240 iPolicyChange_AuthenticationPolicy,
241 iPolicyChange_AuthorizationPolicy,
242 iPolicyChange_MpsscvRulePolicy,
243 iPolicyChange_WfpIPSecPolicy,
244 iPolicyChange_Others,
245 iAccountManagement_UserAccount,
246 iAccountManagement_ComputerAccount,
247 iAccountManagement_SecurityGroup,
248 iAccountManagement_DistributionGroup,
249 iAccountManagement_ApplicationGroup,
250 iAccountManagement_Others,
251 iDSAccess_DSAccess,
252 iDSAccess_AdAuditChanges,
253 iDS_Replication,
254 iDS_DetailedReplication,
255 iAccountLogon_CredentialValidation,
256 iAccountLogon_Kerberos,
257 iAccountLogon_Others,
258 iAccountLogon_KerbCredentialValidation,
259 iUnknownSubCategory = 999,
260}}
261pub type PPOLICY_AUDIT_EVENT_TYPE_EX = *mut POLICY_AUDIT_EVENT_TYPE_EX;
262ENUM!{enum POLICY_AUDIT_EVENT_TYPE {
263 AuditCategorySystem = 0,
264 AuditCategoryLogon,
265 AuditCategoryObjectAccess,
266 AuditCategoryPrivilegeUse,
267 AuditCategoryDetailedTracking,
268 AuditCategoryPolicyChange,
269 AuditCategoryAccountManagement,
270 AuditCategoryDirectoryServiceAccess,
271 AuditCategoryAccountLogon,
272}}
273pub type PPOLICY_AUDIT_EVENT_TYPE = *mut POLICY_AUDIT_EVENT_TYPE;
274pub const POLICY_AUDIT_EVENT_UNCHANGED: ULONG = 0x00000000;
275pub const POLICY_AUDIT_EVENT_SUCCESS: ULONG = 0x00000001;
276pub const POLICY_AUDIT_EVENT_FAILURE: ULONG = 0x00000002;
277pub const POLICY_AUDIT_EVENT_NONE: ULONG = 0x00000004;
278pub const POLICY_AUDIT_EVENT_MASK: ULONG = POLICY_AUDIT_EVENT_SUCCESS | POLICY_AUDIT_EVENT_FAILURE
279 | POLICY_AUDIT_EVENT_UNCHANGED | POLICY_AUDIT_EVENT_NONE;
280#[inline]
281pub fn LSA_SUCCESS(Error: NTSTATUS) -> bool {
282 (Error as LONG) >= 0
283}
284extern "system" {
285 pub fn LsaRegisterLogonProcess(
286 LogonProcessName: PLSA_STRING,
287 LsaHandle: PHANDLE,
288 SecurityMode: PLSA_OPERATIONAL_MODE,
289 ) -> NTSTATUS;
290 pub fn LsaLogonUser(
291 LsaHandle: HANDLE,
292 OriginName: PLSA_STRING,
293 LogonType: SECURITY_LOGON_TYPE,
294 AuthenticationPackage: ULONG,
295 AuthenticationInformation: PVOID,
296 AuthenticationInformationLength: ULONG,
297 LocalGroups: PTOKEN_GROUPS,
298 SourceContext: PTOKEN_SOURCE,
299 ProfileBuffer: *mut PVOID,
300 ProfileBufferLength: PULONG,
301 LogonId: PLUID,
302 Token: PHANDLE,
303 Quotas: PQUOTA_LIMITS,
304 SubStatus: PNTSTATUS,
305 ) -> NTSTATUS;
306 pub fn LsaLookupAuthenticationPackage(
307 LsaHandle: HANDLE,
308 PackageName: PLSA_STRING,
309 AuthenticationPackage: PULONG,
310 ) -> NTSTATUS;
311 pub fn LsaFreeReturnBuffer(
312 Buffer: PVOID,
313 ) -> NTSTATUS;
314 pub fn LsaCallAuthenticationPackage(
315 LsaHandle: HANDLE,
316 AuthenticationPackage: ULONG,
317 ProtocolSubmitBuffer: PVOID,
318 SubmitBufferLength: ULONG,
319 ProtocolReturnBuffer: *mut PVOID,
320 ReturnBufferLength: PULONG,
321 ProtocolStatus: PNTSTATUS,
322 ) -> NTSTATUS;
323 pub fn LsaDeregisterLogonProcess(
324 LsaHandle: HANDLE,
325 ) -> NTSTATUS;
326 pub fn LsaConnectUntrusted(
327 LsaHandle: PHANDLE,
328 ) -> NTSTATUS;
329}
330extern "C" {
331 pub fn LsaInsertProtectedProcessAddress(
332 BufferAddress: PVOID,
333 BufferSize: ULONG,
334 ) -> NTSTATUS;
335 pub fn LsaRemoveProtectedProcessAddress(
336 BufferAddress: PVOID,
337 BufferSize: ULONG,
338 ) -> NTSTATUS;
339}
340FN!{stdcall PFN_LSA_CALL_AUTH_PKG(
341 LsaHandle: HANDLE,
342 AuthenticationPackage: ULONG,
343 ProtocolSubmitBuffer: PVOID,
344 SubmitBufferLength: ULONG,
345 ProtocolReturnBuffer: *mut PVOID,
346 ReturnBufferLength: PULONG,
347 ProtocolStatus: PNTSTATUS,
348) -> NTSTATUS}
349FN!{stdcall PFN_LSA_DEREGISTER_PROC(
350 LsaHandle: HANDLE,
351) -> NTSTATUS}
352FN!{stdcall PFN_LSA_FREE_BUFFER(
353 Buffer: PVOID,
354) -> NTSTATUS}
355FN!{stdcall PFN_LSA_LOGON_USER(
356 LsaHandle: HANDLE,
357 OriginName: PLSA_STRING,
358 LogonType: SECURITY_LOGON_TYPE,
359 AuthenticationPackage: ULONG,
360 AuthenticationInformation: PVOID,
361 AuthenticationInformationLength: ULONG,
362 LocalGroups: PTOKEN_GROUPS,
363 SourceContext: PTOKEN_SOURCE,
364 ProfileBuffer: *mut PVOID,
365 ProfileBufferLength: PULONG,
366 LogonId: PLUID,
367 Token: PHANDLE,
368 Quotas: PQUOTA_LIMITS,
369 SubStatus: PNTSTATUS,
370) -> NTSTATUS}
371FN!{stdcall PFN_LOOKUP_AUTH_PKG(
372 LsaHandle: HANDLE,
373 PackageName: PLSA_STRING,
374 AuthenticationPackage: PULONG,
375) -> NTSTATUS}
376FN!{stdcall PFN_LSA_REGISTER_PROC(
377 LogonProcessName: PLSA_STRING,
378 LsaHandle: PHANDLE,
379 SecurityMode: PLSA_OPERATIONAL_MODE,
380) -> NTSTATUS}
381STRUCT!{struct LSA_AUTH_CALLBACKS {
382 LsaCallAuthPkgFn: PFN_LSA_CALL_AUTH_PKG,
383 LsaDeregisterProcFn: PFN_LSA_DEREGISTER_PROC,
384 LsaFreeReturnBufferFn: PFN_LSA_FREE_BUFFER,
385 LsaLogonUserFn: PFN_LSA_LOGON_USER,
386 LsaLookupAuthPkgFn: PFN_LOOKUP_AUTH_PKG,
387 LsaRegisterProcFn: PFN_LSA_REGISTER_PROC,
388}}
389pub type PLSA_AUTH_CALLBACKS = *mut LSA_AUTH_CALLBACKS;
390pub type PCLSA_AUTH_CALLBACKS = *const LSA_AUTH_CALLBACKS;
391pub type PLSA_CLIENT_REQUEST = *mut PVOID;
392ENUM!{enum LSA_TOKEN_INFORMATION_TYPE {
393 LsaTokenInformationNull,
394 LsaTokenInformationV1,
395 LsaTokenInformationV2,
396 LsaTokenInformationV3,
397}}
398pub type PLSA_TOKEN_INFORMATION_TYPE = *mut LSA_TOKEN_INFORMATION_TYPE;
399STRUCT!{struct LSA_TOKEN_INFORMATION_NULL {
400 ExpirationTime: LARGE_INTEGER,
401 Groups: PTOKEN_GROUPS,
402}}
403pub type PLSA_TOKEN_INFORMATION_NULL = *mut LSA_TOKEN_INFORMATION_NULL;
404STRUCT!{struct LSA_TOKEN_INFORMATION_V1 {
405 ExpirationTime: LARGE_INTEGER,
406 User: TOKEN_USER,
407 Groups: PTOKEN_GROUPS,
408 PrimaryGroup: TOKEN_PRIMARY_GROUP,
409 Privileges: PTOKEN_PRIVILEGES,
410 Owner: TOKEN_OWNER,
411 DefaultDacl: TOKEN_DEFAULT_DACL,
412}}
413pub type PLSA_TOKEN_INFORMATION_V1 = *mut LSA_TOKEN_INFORMATION_V1;
414pub type LSA_TOKEN_INFORMATION_V2 = LSA_TOKEN_INFORMATION_V1;
415pub type PLSA_TOKEN_INFORMATION_V2 = *mut LSA_TOKEN_INFORMATION_V2;
416STRUCT!{struct LSA_TOKEN_INFORMATION_V3 {
417 ExpirationTime: LARGE_INTEGER,
418 User: TOKEN_USER,
419 Groups: PTOKEN_GROUPS,
420 PrimaryGroup: TOKEN_PRIMARY_GROUP,
421 Privileges: PTOKEN_PRIVILEGES,
422 Owner: TOKEN_OWNER,
423 DefaultDacl: TOKEN_DEFAULT_DACL,
424 UserClaims: TOKEN_USER_CLAIMS,
425 DeviceClaims: TOKEN_DEVICE_CLAIMS,
426 DeviceGroups: PTOKEN_GROUPS,
427}}
428pub type PLSA_TOKEN_INFORMATION_V3 = *mut LSA_TOKEN_INFORMATION_V3;
429FN!{stdcall PLSA_CREATE_LOGON_SESSION(
430 LogonId: PLUID,
431) -> NTSTATUS}
432FN!{stdcall PLSA_DELETE_LOGON_SESSION(
433 LogonId: PLUID,
434) -> NTSTATUS}
435FN!{stdcall PLSA_ADD_CREDENTIAL(
436 LogonId: PLUID,
437 AuthenticationPackage: ULONG,
438 PrimaryKeyValue: PLSA_STRING,
439 Credentials: PLSA_STRING,
440) -> NTSTATUS}
441FN!{stdcall PLSA_GET_CREDENTIALS(
442 LogonId: PLUID,
443 AuthenticationPackage: ULONG,
444 QueryContext: PULONG,
445 RetrieveAllCredentials: BOOLEAN,
446 PrimaryKeyValue: PLSA_STRING,
447 PrimaryKeyLength: PULONG,
448 Credentials: PLSA_STRING,
449) -> NTSTATUS}
450FN!{stdcall PLSA_DELETE_CREDENTIAL(
451 LogonId: PLUID,
452 AuthenticationPackage: ULONG,
453 PrimaryKeyValue: PLSA_STRING,
454) -> NTSTATUS}
455FN!{stdcall PLSA_ALLOCATE_LSA_HEAP(
456 Length: ULONG,
457) -> PVOID}
458FN!{stdcall PLSA_FREE_LSA_HEAP(
459 Base: PVOID,
460) -> ()}
461FN!{stdcall PLSA_ALLOCATE_PRIVATE_HEAP(
462 Length: SIZE_T,
463) -> PVOID}
464FN!{stdcall PLSA_FREE_PRIVATE_HEAP(
465 Base: PVOID,
466) -> ()}
467FN!{stdcall PLSA_ALLOCATE_CLIENT_BUFFER(
468 ClientRequest: PLSA_CLIENT_REQUEST,
469 LengthRequired: ULONG,
470 ClientBaseAddress: *mut PVOID,
471) -> NTSTATUS}
472FN!{stdcall PLSA_FREE_CLIENT_BUFFER(
473 ClientRequest: PLSA_CLIENT_REQUEST,
474 ClientBaseAddress: PVOID,
475) -> NTSTATUS}
476FN!{stdcall PLSA_COPY_TO_CLIENT_BUFFER(
477 ClientRequest: PLSA_CLIENT_REQUEST,
478 Length: ULONG,
479 ClientBaseAddress: PVOID,
480 BufferToCopy: PVOID,
481) -> NTSTATUS}
482FN!{stdcall PLSA_COPY_FROM_CLIENT_BUFFER(
483 ClientRequest: PLSA_CLIENT_REQUEST,
484 Length: ULONG,
485 BufferToCopy: PVOID,
486 ClientBaseAddress: PVOID,
487) -> NTSTATUS}
488STRUCT!{struct LSA_DISPATCH_TABLE {
489 CreateLogonSession: PLSA_CREATE_LOGON_SESSION,
490 DeleteLogonSession: PLSA_DELETE_LOGON_SESSION,
491 AddCredential: PLSA_ADD_CREDENTIAL,
492 GetCredentials: PLSA_GET_CREDENTIALS,
493 DeleteCredential: PLSA_DELETE_CREDENTIAL,
494 AllocateLsaHeap: PLSA_ALLOCATE_LSA_HEAP,
495 FreeLsaHeap: PLSA_FREE_LSA_HEAP,
496 AllocateClientBuffer: PLSA_ALLOCATE_CLIENT_BUFFER,
497 FreeClientBuffer: PLSA_FREE_CLIENT_BUFFER,
498 CopyToClientBuffer: PLSA_COPY_TO_CLIENT_BUFFER,
499 CopyFromClientBuffer: PLSA_COPY_FROM_CLIENT_BUFFER,
500}}
501pub type PLSA_DISPATCH_TABLE = *mut LSA_DISPATCH_TABLE;
502pub const LSA_AP_NAME_INITIALIZE_PACKAGE: &'static str = "LsaApInitializePackage";
503pub const LSA_AP_NAME_LOGON_USER: &'static str = "LsaApLogonUser";
504pub const LSA_AP_NAME_LOGON_USER_EX: &'static str = "LsaApLogonUserEx";
505pub const LSA_AP_NAME_CALL_PACKAGE: &'static str = "LsaApCallPackage";
506pub const LSA_AP_NAME_LOGON_TERMINATED: &'static str = "LsaApLogonTerminated";
507pub const LSA_AP_NAME_CALL_PACKAGE_UNTRUSTED: &'static str = "LsaApCallPackageUntrusted";
508pub const LSA_AP_NAME_CALL_PACKAGE_PASSTHROUGH: &'static str = "LsaApCallPackagePassthrough";
509FN!{stdcall PLSA_AP_INITIALIZE_PACKAGE(
510 AuthenticationPackageId: ULONG,
511 LsaDispatchTable: PLSA_DISPATCH_TABLE,
512 Database: PLSA_STRING,
513 Confidentiality: PLSA_STRING,
514 AuthenticationPackageName: *mut PLSA_STRING,
515) -> NTSTATUS}
516FN!{stdcall PLSA_AP_LOGON_USER(
517 ClientRequest: PLSA_CLIENT_REQUEST,
518 LogonType: SECURITY_LOGON_TYPE,
519 AuthenticationInformation: PVOID,
520 ClientAuthentication: PVOID,
521 AuthenticationInformationLength: ULONG,
522 ProfileBuffer: *mut PVOID,
523 ProfileBufferLength: PULONG,
524 LogonId: PLUID,
525 SubStatus: PNTSTATUS,
526 TokenInformationType: PLSA_TOKEN_INFORMATION_TYPE,
527 TokenInformation: *mut PVOID,
528 AccountName: *mut PLSA_UNICODE_STRING,
529 AuthenticatingAutority: *mut PLSA_UNICODE_STRING,
530) -> NTSTATUS}
531FN!{stdcall PLSA_AP_LOGON_USER_EX(
532 ClientRequest: PLSA_CLIENT_REQUEST,
533 LogonType: SECURITY_LOGON_TYPE,
534 AuthenticationInformation: PVOID,
535 ClientAuthentication: PVOID,
536 AuthenticationInformationLength: ULONG,
537 ProfileBuffer: *mut PVOID,
538 ProfileBufferLength: PULONG,
539 LogonId: PLUID,
540 SubStatus: PNTSTATUS,
541 TokenInformationType: PLSA_TOKEN_INFORMATION_TYPE,
542 TokenInformation: *mut PVOID,
543 AccountName: *mut PLSA_UNICODE_STRING,
544 AuthenticatingAutority: *mut PLSA_UNICODE_STRING,
545 MachineName: *mut PUNICODE_STRING,
546) -> NTSTATUS}
547FN!{stdcall PLSA_AP_CALL_PACKAGE(
548 ClientRequest: PLSA_CLIENT_REQUEST,
549 ProtocolSubmitBuffer: PVOID,
550 ClientBufferBase: PVOID,
551 SubmitBufferLength: ULONG,
552 ProtocolReturnBuffer: *mut PVOID,
553 ReturnBufferLength: PULONG,
554 ProtocolStatus: PNTSTATUS,
555) -> NTSTATUS}
556FN!{stdcall PLSA_AP_CALL_PACKAGE_PASSTHROUGH(
557 ClientRequest: PLSA_CLIENT_REQUEST,
558 ProtocolSubmitBuffer: PVOID,
559 ClientBufferBase: PVOID,
560 SubmitBufferLength: ULONG,
561 ProtocolReturnBuffer: *mut PVOID,
562 ReturnBufferLength: PULONG,
563 ProtocolStatus: PNTSTATUS,
564) -> NTSTATUS}
565FN!{stdcall PLSA_AP_LOGON_TERMINATED(
566 LogonId: PLUID,
567) -> ()}
568pub const POLICY_VIEW_LOCAL_INFORMATION: ULONG = 0x00000001;
569pub const POLICY_VIEW_AUDIT_INFORMATION: ULONG = 0x00000002;
570pub const POLICY_GET_PRIVATE_INFORMATION: ULONG = 0x00000004;
571pub const POLICY_TRUST_ADMIN: ULONG = 0x00000008;
572pub const POLICY_CREATE_ACCOUNT: ULONG = 0x00000010;
573pub const POLICY_CREATE_SECRET: ULONG = 0x00000020;
574pub const POLICY_CREATE_PRIVILEGE: ULONG = 0x00000040;
575pub const POLICY_SET_DEFAULT_QUOTA_LIMITS: ULONG = 0x00000080;
576pub const POLICY_SET_AUDIT_REQUIREMENTS: ULONG = 0x00000100;
577pub const POLICY_AUDIT_LOG_ADMIN: ULONG = 0x00000200;
578pub const POLICY_SERVER_ADMIN: ULONG = 0x00000400;
579pub const POLICY_LOOKUP_NAMES: ULONG = 0x00000800;
580pub const POLICY_NOTIFICATION: ULONG = 0x00001000;
581pub const POLICY_ALL_ACCESS: ULONG = STANDARD_RIGHTS_REQUIRED | POLICY_VIEW_LOCAL_INFORMATION
582 | POLICY_VIEW_AUDIT_INFORMATION | POLICY_GET_PRIVATE_INFORMATION | POLICY_TRUST_ADMIN
583 | POLICY_CREATE_ACCOUNT | POLICY_CREATE_SECRET | POLICY_CREATE_PRIVILEGE
584 | POLICY_SET_DEFAULT_QUOTA_LIMITS | POLICY_SET_AUDIT_REQUIREMENTS | POLICY_AUDIT_LOG_ADMIN
585 | POLICY_SERVER_ADMIN | POLICY_LOOKUP_NAMES;
586pub const POLICY_READ: ULONG = STANDARD_RIGHTS_READ | POLICY_VIEW_AUDIT_INFORMATION
587 | POLICY_GET_PRIVATE_INFORMATION;
588pub const POLICY_WRITE: ULONG = STANDARD_RIGHTS_WRITE | POLICY_TRUST_ADMIN | POLICY_CREATE_ACCOUNT
589 | POLICY_CREATE_SECRET | POLICY_CREATE_PRIVILEGE | POLICY_SET_DEFAULT_QUOTA_LIMITS
590 | POLICY_SET_AUDIT_REQUIREMENTS | POLICY_AUDIT_LOG_ADMIN | POLICY_SERVER_ADMIN;
591pub const POLICY_EXECUTE: ULONG = STANDARD_RIGHTS_EXECUTE | POLICY_VIEW_LOCAL_INFORMATION
592 | POLICY_LOOKUP_NAMES;
593STRUCT!{struct LSA_TRANSLATED_SID {
594 Use: SID_NAME_USE,
595 RelativeId: ULONG,
596 DomainIndex: LONG,
597}}
598pub type PLSA_TRANSLATED_SID = *mut LSA_TRANSLATED_SID;
599pub type POLICY_SYSTEM_ACCESS_MODE = ULONG;
600pub type PPOLICY_SYSTEM_ACCESS_MODE = *mut POLICY_SYSTEM_ACCESS_MODE;
601pub const POLICY_MODE_INTERACTIVE: ULONG = SECURITY_ACCESS_INTERACTIVE_LOGON;
602pub const POLICY_MODE_NETWORK: ULONG = SECURITY_ACCESS_NETWORK_LOGON;
603pub const POLICY_MODE_BATCH: ULONG = SECURITY_ACCESS_BATCH_LOGON;
604pub const POLICY_MODE_SERVICE: ULONG = SECURITY_ACCESS_SERVICE_LOGON;
605pub const POLICY_MODE_PROXY: ULONG = SECURITY_ACCESS_PROXY_LOGON;
606pub const POLICY_MODE_DENY_INTERACTIVE: ULONG = SECURITY_ACCESS_DENY_INTERACTIVE_LOGON;
607pub const POLICY_MODE_DENY_NETWORK: ULONG = SECURITY_ACCESS_DENY_NETWORK_LOGON;
608pub const POLICY_MODE_DENY_BATCH: ULONG = SECURITY_ACCESS_DENY_BATCH_LOGON;
609pub const POLICY_MODE_DENY_SERVICE: ULONG = SECURITY_ACCESS_DENY_SERVICE_LOGON;
610pub const POLICY_MODE_REMOTE_INTERACTIVE: ULONG = SECURITY_ACCESS_REMOTE_INTERACTIVE_LOGON;
611pub const POLICY_MODE_DENY_REMOTE_INTERACTIVE: ULONG =
612 SECURITY_ACCESS_DENY_REMOTE_INTERACTIVE_LOGON;
613pub const POLICY_MODE_ALL: ULONG = POLICY_MODE_INTERACTIVE | POLICY_MODE_NETWORK
614 | POLICY_MODE_BATCH | POLICY_MODE_SERVICE | POLICY_MODE_PROXY | POLICY_MODE_DENY_INTERACTIVE
615 | POLICY_MODE_DENY_NETWORK | SECURITY_ACCESS_DENY_BATCH_LOGON
616 | SECURITY_ACCESS_DENY_SERVICE_LOGON | POLICY_MODE_REMOTE_INTERACTIVE
617 | POLICY_MODE_DENY_REMOTE_INTERACTIVE ;
618pub const POLICY_MODE_ALL_NT4: ULONG = POLICY_MODE_INTERACTIVE | POLICY_MODE_NETWORK
619 | POLICY_MODE_BATCH | POLICY_MODE_SERVICE;
620ENUM!{enum POLICY_LSA_SERVER_ROLE {
621 PolicyServerRoleBackup = 2,
622 PolicyServerRolePrimary,
623}}
624pub type PPOLICY_LSA_SERVER_ROLE = *mut POLICY_LSA_SERVER_ROLE;
625ENUM!{enum POLICY_SERVER_ENABLE_STATE {
626 PolicyServerEnabled = 2,
627 PolicyServerDisabled,
628}}
629pub type PPOLICY_SERVER_ENABLE_STATE = *mut POLICY_SERVER_ENABLE_STATE;
630pub type POLICY_AUDIT_EVENT_OPTIONS = ULONG;
631pub type PPOLICY_AUDIT_EVENT_OPTIONS = *mut POLICY_AUDIT_EVENT_OPTIONS;
632STRUCT!{struct POLICY_PRIVILEGE_DEFINITION {
633 Name: LSA_UNICODE_STRING,
634 LocalValue: LUID,
635}}
636pub type PPOLICY_PRIVILEGE_DEFINITION = *mut POLICY_PRIVILEGE_DEFINITION;
637pub const LSA_LOOKUP_ISOLATED_AS_LOCAL: ULONG = 0x80000000;
638pub const LSA_LOOKUP_DISALLOW_CONNECTED_ACCOUNT_INTERNET_SID: ULONG = 0x80000000;
639pub const LSA_LOOKUP_PREFER_INTERNET_NAMES: ULONG = 0x40000000;
640ENUM!{enum POLICY_INFORMATION_CLASS {
641 PolicyAuditLogInformation = 1,
642 PolicyAuditEventsInformation,
643 PolicyPrimaryDomainInformation,
644 PolicyPdAccountInformation,
645 PolicyAccountDomainInformation,
646 PolicyLsaServerRoleInformation,
647 PolicyReplicaSourceInformation,
648 PolicyDefaultQuotaInformation,
649 PolicyModificationInformation,
650 PolicyAuditFullSetInformation,
651 PolicyAuditFullQueryInformation,
652 PolicyDnsDomainInformation,
653 PolicyDnsDomainInformationInt,
654 PolicyLocalAccountDomainInformation,
655 PolicyLastEntry,
656}}
657pub type PPOLICY_INFORMATION_CLASS = *mut POLICY_INFORMATION_CLASS;
658STRUCT!{struct POLICY_AUDIT_LOG_INFO {
659 AuditLogPercentFull: ULONG,
660 MaximumLogSize: ULONG,
661 AuditRetentionPeriod: LARGE_INTEGER,
662 AuditLogFullShutdownInProgress: BOOLEAN,
663 TimeToShutdown: LARGE_INTEGER,
664 NextAuditRecordId: ULONG,
665}}
666pub type PPOLICY_AUDIT_LOG_INFO = *mut POLICY_AUDIT_LOG_INFO;
667STRUCT!{struct POLICY_AUDIT_EVENTS_INFO {
668 AuditingMode: BOOLEAN,
669 EventAuditingOptions: PPOLICY_AUDIT_EVENT_OPTIONS,
670 MaximumAuditEventCount: ULONG,
671}}
672pub type PPOLICY_AUDIT_EVENTS_INFO = *mut POLICY_AUDIT_EVENTS_INFO;
673STRUCT!{struct POLICY_AUDIT_SUBCATEGORIES_INFO {
674 MaximumSubCategoryCount: ULONG,
675 EventAuditingOptions: PPOLICY_AUDIT_EVENT_OPTIONS,
676}}
677pub type PPOLICY_AUDIT_SUBCATEGORIES_INFO = *mut POLICY_AUDIT_SUBCATEGORIES_INFO;
678STRUCT!{struct POLICY_AUDIT_CATEGORIES_INFO {
679 MaximumCategoryCount: ULONG,
680 SubCategoriesInfo: PPOLICY_AUDIT_SUBCATEGORIES_INFO,
681}}
682pub type PPOLICY_AUDIT_CATEGORIES_INFO = *mut POLICY_AUDIT_CATEGORIES_INFO;
683pub const PER_USER_POLICY_UNCHANGED: UCHAR = 0x00;
684pub const PER_USER_AUDIT_SUCCESS_INCLUDE: UCHAR = 0x01;
685pub const PER_USER_AUDIT_SUCCESS_EXCLUDE: UCHAR = 0x02;
686pub const PER_USER_AUDIT_FAILURE_INCLUDE: UCHAR = 0x04;
687pub const PER_USER_AUDIT_FAILURE_EXCLUDE: UCHAR = 0x08;
688pub const PER_USER_AUDIT_NONE: UCHAR = 0x10;
689pub const VALID_PER_USER_AUDIT_POLICY_FLAG: UCHAR = PER_USER_AUDIT_SUCCESS_INCLUDE
690 | PER_USER_AUDIT_SUCCESS_EXCLUDE | PER_USER_AUDIT_FAILURE_INCLUDE
691 | PER_USER_AUDIT_FAILURE_EXCLUDE | PER_USER_AUDIT_NONE;
692STRUCT!{struct POLICY_PRIMARY_DOMAIN_INFO {
693 Name: LSA_UNICODE_STRING,
694 Sid: PSID,
695}}
696pub type PPOLICY_PRIMARY_DOMAIN_INFO = *mut POLICY_PRIMARY_DOMAIN_INFO;
697STRUCT!{struct POLICY_PD_ACCOUNT_INFO {
698 Name: LSA_UNICODE_STRING,
699}}
700pub type PPOLICY_PD_ACCOUNT_INFO = *mut POLICY_PD_ACCOUNT_INFO;
701STRUCT!{struct POLICY_LSA_SERVER_ROLE_INFO {
702 LsaServerRole: POLICY_LSA_SERVER_ROLE,
703}}
704pub type PPOLICY_LSA_SERVER_ROLE_INFO = *mut POLICY_LSA_SERVER_ROLE_INFO;
705STRUCT!{struct POLICY_REPLICA_SOURCE_INFO {
706 ReplicaSource: LSA_UNICODE_STRING,
707 ReplicaAccountName: LSA_UNICODE_STRING,
708}}
709pub type PPOLICY_REPLICA_SOURCE_INFO = *mut POLICY_REPLICA_SOURCE_INFO;
710STRUCT!{struct POLICY_DEFAULT_QUOTA_INFO {
711 QuotaLimits: QUOTA_LIMITS,
712}}
713pub type PPOLICY_DEFAULT_QUOTA_INFO = *mut POLICY_DEFAULT_QUOTA_INFO;
714STRUCT!{struct POLICY_MODIFICATION_INFO {
715 ModifiedId: LARGE_INTEGER,
716 DatabaseCreationTime: LARGE_INTEGER,
717}}
718pub type PPOLICY_MODIFICATION_INFO = *mut POLICY_MODIFICATION_INFO;
719STRUCT!{struct POLICY_AUDIT_FULL_SET_INFO {
720 ShutDownOnFull: BOOLEAN,
721}}
722pub type PPOLICY_AUDIT_FULL_SET_INFO = *mut POLICY_AUDIT_FULL_SET_INFO;
723STRUCT!{struct POLICY_AUDIT_FULL_QUERY_INFO {
724 ShutDownOnFull: BOOLEAN,
725 LogIsFull: BOOLEAN,
726}}
727pub type PPOLICY_AUDIT_FULL_QUERY_INFO = *mut POLICY_AUDIT_FULL_QUERY_INFO;
728ENUM!{enum POLICY_DOMAIN_INFORMATION_CLASS {
729 PolicyDomainEfsInformation = 2,
730 PolicyDomainKerberosTicketInformation,
731}}
732pub type PPOLICY_DOMAIN_INFORMATION_CLASS = *mut POLICY_DOMAIN_INFORMATION_CLASS;
733pub const POLICY_QOS_SCHANNEL_REQUIRED: ULONG = 0x00000001;
734pub const POLICY_QOS_OUTBOUND_INTEGRITY: ULONG = 0x00000002;
735pub const POLICY_QOS_OUTBOUND_CONFIDENTIALITY: ULONG = 0x00000004;
736pub const POLICY_QOS_INBOUND_INTEGRITY: ULONG = 0x00000008;
737pub const POLICY_QOS_INBOUND_CONFIDENTIALITY: ULONG = 0x00000010;
738pub const POLICY_QOS_ALLOW_LOCAL_ROOT_CERT_STORE: ULONG = 0x00000020;
739pub const POLICY_QOS_RAS_SERVER_ALLOWED: ULONG = 0x00000040;
740pub const POLICY_QOS_DHCP_SERVER_ALLOWED: ULONG = 0x00000080;
741STRUCT!{struct POLICY_DOMAIN_EFS_INFO {
742 InfoLength: ULONG,
743 EfsBlob: PUCHAR,
744}}
745pub type PPOLICY_DOMAIN_EFS_INFO = *mut POLICY_DOMAIN_EFS_INFO;
746pub const POLICY_KERBEROS_VALIDATE_CLIENT: ULONG = 0x00000080;
747STRUCT!{struct POLICY_DOMAIN_KERBEROS_TICKET_INFO {
748 AuthenticationOptions: ULONG,
749 MaxServiceTicketAge: LARGE_INTEGER,
750 MaxTicketAge: LARGE_INTEGER,
751 MaxRenewAge: LARGE_INTEGER,
752 MaxClockSkew: LARGE_INTEGER,
753 Reserved: LARGE_INTEGER,
754}}
755pub type PPOLICY_DOMAIN_KERBEROS_TICKET_INFO = *mut POLICY_DOMAIN_KERBEROS_TICKET_INFO;
756ENUM!{enum POLICY_NOTIFICATION_INFORMATION_CLASS {
757 PolicyNotifyAuditEventsInformation = 1,
758 PolicyNotifyAccountDomainInformation,
759 PolicyNotifyServerRoleInformation,
760 PolicyNotifyDnsDomainInformation,
761 PolicyNotifyDomainEfsInformation,
762 PolicyNotifyDomainKerberosTicketInformation,
763 PolicyNotifyMachineAccountPasswordInformation,
764 PolicyNotifyGlobalSaclInformation,
765 PolicyNotifyMax,
766}}
767pub type PPOLICY_NOTIFICATION_INFORMATION_CLASS = *mut POLICY_NOTIFICATION_INFORMATION_CLASS;
768pub const ACCOUNT_VIEW: ULONG = 0x00000001;
769pub const ACCOUNT_ADJUST_PRIVILEGES: ULONG = 0x00000002;
770pub const ACCOUNT_ADJUST_QUOTAS: ULONG = 0x00000004;
771pub const ACCOUNT_ADJUST_SYSTEM_ACCESS: ULONG = 0x00000008;
772pub const ACCOUNT_ALL_ACCESS: ULONG = STANDARD_RIGHTS_REQUIRED | ACCOUNT_VIEW
773 | ACCOUNT_ADJUST_PRIVILEGES | ACCOUNT_ADJUST_QUOTAS | ACCOUNT_ADJUST_SYSTEM_ACCESS;
774pub const ACCOUNT_READ: ULONG = STANDARD_RIGHTS_READ | ACCOUNT_VIEW;
775pub const ACCOUNT_WRITE: ULONG = STANDARD_RIGHTS_WRITE | ACCOUNT_ADJUST_PRIVILEGES
776 | ACCOUNT_ADJUST_QUOTAS | ACCOUNT_ADJUST_SYSTEM_ACCESS;
777pub const ACCOUNT_EXECUTE: ULONG = STANDARD_RIGHTS_EXECUTE;
778DECLARE_HANDLE!{LSA_HANDLE, __LSA_HANDLE}
779pub const TRUSTED_QUERY_DOMAIN_NAME: ULONG = 0x00000001;
780pub const TRUSTED_QUERY_CONTROLLERS: ULONG = 0x00000002;
781pub const TRUSTED_SET_CONTROLLERS: ULONG = 0x00000004;
782pub const TRUSTED_QUERY_POSIX: ULONG = 0x00000008;
783pub const TRUSTED_SET_POSIX: ULONG = 0x00000010;
784pub const TRUSTED_SET_AUTH: ULONG = 0x00000020;
785pub const TRUSTED_QUERY_AUTH: ULONG = 0x00000040;
786pub const TRUSTED_ALL_ACCESS: ULONG = STANDARD_RIGHTS_REQUIRED | TRUSTED_QUERY_DOMAIN_NAME
787 | TRUSTED_QUERY_CONTROLLERS | TRUSTED_SET_CONTROLLERS | TRUSTED_QUERY_POSIX | TRUSTED_SET_POSIX
788 | TRUSTED_SET_AUTH | TRUSTED_QUERY_AUTH;
789pub const TRUSTED_READ: ULONG = STANDARD_RIGHTS_READ | TRUSTED_QUERY_DOMAIN_NAME;
790pub const TRUSTED_WRITE: ULONG = STANDARD_RIGHTS_WRITE | TRUSTED_SET_CONTROLLERS
791 | TRUSTED_SET_POSIX | TRUSTED_SET_AUTH;
792pub const TRUSTED_EXECUTE: ULONG = STANDARD_RIGHTS_EXECUTE | TRUSTED_QUERY_CONTROLLERS
793 | TRUSTED_QUERY_POSIX;
794ENUM!{enum TRUSTED_INFORMATION_CLASS {
795 TrustedDomainNameInformation = 1,
796 TrustedControllersInformation,
797 TrustedPosixOffsetInformation,
798 TrustedPasswordInformation,
799 TrustedDomainInformationBasic,
800 TrustedDomainInformationEx,
801 TrustedDomainAuthInformation,
802 TrustedDomainFullInformation,
803 TrustedDomainAuthInformationInternal,
804 TrustedDomainFullInformationInternal,
805 TrustedDomainInformationEx2Internal,
806 TrustedDomainFullInformation2Internal,
807 TrustedDomainSupportedEncryptionTypes,
808}}
809pub type PTRUSTED_INFORMATION_CLASS = *mut TRUSTED_INFORMATION_CLASS;
810STRUCT!{struct TRUSTED_DOMAIN_NAME_INFO {
811 Name: LSA_UNICODE_STRING,
812}}
813pub type PTRUSTED_DOMAIN_NAME_INFO = *mut TRUSTED_DOMAIN_NAME_INFO;
814STRUCT!{struct TRUSTED_CONTROLLERS_INFO {
815 Entries: ULONG,
816 Names: PLSA_UNICODE_STRING,
817}}
818pub type PTRUSTED_CONTROLLERS_INFO = *mut TRUSTED_CONTROLLERS_INFO;
819STRUCT!{struct TRUSTED_POSIX_OFFSET_INFO {
820 Offset: ULONG,
821}}
822pub type PTRUSTED_POSIX_OFFSET_INFO = *mut TRUSTED_POSIX_OFFSET_INFO;
823STRUCT!{struct TRUSTED_PASSWORD_INFO {
824 Password: LSA_UNICODE_STRING,
825 OldPassword: LSA_UNICODE_STRING,
826}}
827pub type PTRUSTED_PASSWORD_INFO = *mut TRUSTED_PASSWORD_INFO;
828pub type TRUSTED_DOMAIN_INFORMATION_BASIC = LSA_TRUST_INFORMATION;
829pub type PTRUSTED_DOMAIN_INFORMATION_BASIC = PLSA_TRUST_INFORMATION;
830pub const TRUST_DIRECTION_DISABLED: ULONG = 0x00000000;
832pub const TRUST_DIRECTION_INBOUND: ULONG = 0x00000001;
833pub const TRUST_DIRECTION_OUTBOUND: ULONG = 0x00000002;
834pub const TRUST_DIRECTION_BIDIRECTIONAL: ULONG = TRUST_DIRECTION_INBOUND
835 | TRUST_DIRECTION_OUTBOUND;
836pub const TRUST_TYPE_DOWNLEVEL: ULONG = 0x00000001;
837pub const TRUST_TYPE_UPLEVEL: ULONG = 0x00000002;
838pub const TRUST_TYPE_MIT: ULONG = 0x00000003;
839pub const TRUST_ATTRIBUTE_NON_TRANSITIVE: ULONG = 0x00000001;
840pub const TRUST_ATTRIBUTE_UPLEVEL_ONLY: ULONG = 0x00000002;
841pub const TRUST_ATTRIBUTE_QUARANTINED_DOMAIN: ULONG = 0x00000004;
842pub const TRUST_ATTRIBUTE_FOREST_TRANSITIVE: ULONG = 0x00000008;
843pub const TRUST_ATTRIBUTE_CROSS_ORGANIZATION: ULONG = 0x00000010;
844pub const TRUST_ATTRIBUTE_WITHIN_FOREST: ULONG = 0x00000020;
845pub const TRUST_ATTRIBUTE_TREAT_AS_EXTERNAL: ULONG = 0x00000040;
846pub const TRUST_ATTRIBUTE_TRUST_USES_RC4_ENCRYPTION: ULONG = 0x00000080;
847pub const TRUST_ATTRIBUTE_TRUST_USES_AES_KEYS: ULONG = 0x00000100;
848pub const TRUST_ATTRIBUTE_CROSS_ORGANIZATION_NO_TGT_DELEGATION: ULONG = 0x00000200;
849pub const TRUST_ATTRIBUTE_PIM_TRUST: ULONG = 0x00000400;
850pub const TRUST_ATTRIBUTES_VALID: ULONG = 0xFF03FFFF;
851pub const TRUST_ATTRIBUTES_USER: ULONG = 0xFF000000;
852STRUCT!{struct TRUSTED_DOMAIN_INFORMATION_EX {
853 Name: LSA_UNICODE_STRING,
854 FlatName: LSA_UNICODE_STRING,
855 Sid: PSID,
856 TrustDirection: ULONG,
857 TrustType: ULONG,
858 TrustAttributes: ULONG,
859}}
860pub type PTRUSTED_DOMAIN_INFORMATION_EX = *mut TRUSTED_DOMAIN_INFORMATION_EX;
861STRUCT!{struct TRUSTED_DOMAIN_INFORMATION_EX2 {
862 Name: LSA_UNICODE_STRING,
863 FlatName: LSA_UNICODE_STRING,
864 Sid: PSID,
865 TrustDirection: ULONG,
866 TrustType: ULONG,
867 TrustAttributes: ULONG,
868 ForestTrustLength: ULONG,
869 ForestTrustInfo: PUCHAR,
870}}
871pub type PTRUSTED_DOMAIN_INFORMATION_EX2 = *mut TRUSTED_DOMAIN_INFORMATION_EX2;
872pub const TRUST_AUTH_TYPE_NONE: ULONG = 0;
873pub const TRUST_AUTH_TYPE_NT4OWF: ULONG = 1;
874pub const TRUST_AUTH_TYPE_CLEAR: ULONG = 2;
875pub const TRUST_AUTH_TYPE_VERSION: ULONG = 3;
876STRUCT!{struct LSA_AUTH_INFORMATION {
877 LastUpdateTime: LARGE_INTEGER,
878 AuthType: ULONG,
879 AuthInfoLength: ULONG,
880 AuthInfo: PUCHAR,
881}}
882pub type PLSA_AUTH_INFORMATION = *mut LSA_AUTH_INFORMATION;
883STRUCT!{struct TRUSTED_DOMAIN_AUTH_INFORMATION {
884 IncomingAuthInfos: ULONG,
885 IncomingAuthenticationInformation: PLSA_AUTH_INFORMATION,
886 IncomingPreviousAuthenticationInformation: PLSA_AUTH_INFORMATION,
887 OutgoingAuthInfos: ULONG,
888 OutgoingAuthenticationInformation: PLSA_AUTH_INFORMATION,
889 OutgoingPreviousAuthenticationInformation: PLSA_AUTH_INFORMATION,
890}}
891pub type PTRUSTED_DOMAIN_AUTH_INFORMATION = *mut TRUSTED_DOMAIN_AUTH_INFORMATION;
892STRUCT!{struct TRUSTED_DOMAIN_FULL_INFORMATION {
893 Information: TRUSTED_DOMAIN_INFORMATION_EX,
894 PosixOffset: TRUSTED_POSIX_OFFSET_INFO,
895 AuthInformation: TRUSTED_DOMAIN_AUTH_INFORMATION,
896}}
897pub type PTRUSTED_DOMAIN_FULL_INFORMATION = *mut TRUSTED_DOMAIN_FULL_INFORMATION;
898STRUCT!{struct TRUSTED_DOMAIN_FULL_INFORMATION2 {
899 Information: TRUSTED_DOMAIN_INFORMATION_EX2,
900 PosixOffset: TRUSTED_POSIX_OFFSET_INFO,
901 AuthInformation: TRUSTED_DOMAIN_AUTH_INFORMATION,
902}}
903pub type PTRUSTED_DOMAIN_FULL_INFORMATION2 = *mut TRUSTED_DOMAIN_FULL_INFORMATION2;
904STRUCT!{struct TRUSTED_DOMAIN_SUPPORTED_ENCRYPTION_TYPES {
905 SupportedEncryptionTypes: ULONG,
906}}
907pub type PTRUSTED_DOMAIN_SUPPORTED_ENCRYPTION_TYPES =
908 *mut TRUSTED_DOMAIN_SUPPORTED_ENCRYPTION_TYPES;
909ENUM!{enum LSA_FOREST_TRUST_RECORD_TYPE {
910 ForestTrustTopLevelName,
911 ForestTrustTopLevelNameEx,
912 ForestTrustDomainInfo,
913 ForestTrustRecordTypeLast = ForestTrustDomainInfo,
914}}
915pub const LSA_FTRECORD_DISABLED_REASONS: ULONG = 0x0000FFFF;
916pub const LSA_TLN_DISABLED_NEW: ULONG = 0x00000001;
917pub const LSA_TLN_DISABLED_ADMIN: ULONG = 0x00000002;
918pub const LSA_TLN_DISABLED_CONFLICT: ULONG = 0x00000004;
919pub const LSA_SID_DISABLED_ADMIN: ULONG = 0x00000001;
920pub const LSA_SID_DISABLED_CONFLICT: ULONG = 0x00000002;
921pub const LSA_NB_DISABLED_ADMIN: ULONG = 0x00000004;
922pub const LSA_NB_DISABLED_CONFLICT: ULONG = 0x00000008;
923STRUCT!{struct LSA_FOREST_TRUST_DOMAIN_INFO {
924 Sid: PSID,
925 DnsName: LSA_UNICODE_STRING,
926 NetbiosName: LSA_UNICODE_STRING,
927}}
928pub type PLSA_FOREST_TRUST_DOMAIN_INFO = *mut LSA_FOREST_TRUST_DOMAIN_INFO;
929pub const MAX_FOREST_TRUST_BINARY_DATA_SIZE: SIZE_T = 128 * 1024;
930STRUCT!{struct LSA_FOREST_TRUST_BINARY_DATA {
931 Length: ULONG,
932 Buffer: PUCHAR,
933}}
934pub type PLSA_FOREST_TRUST_BINARY_DATA = *mut LSA_FOREST_TRUST_BINARY_DATA;
935UNION!{union LSA_FOREST_TRUST_RECORD_FORESTTRUSTDATA {
936 [u32; 5] [u64; 5],
937 TopLevelName TopLevelName_mut: LSA_UNICODE_STRING,
938 DomainInfo DomainInfo_mut: LSA_FOREST_TRUST_DOMAIN_INFO,
939 Data Data_mut: LSA_FOREST_TRUST_BINARY_DATA,
940}}
941STRUCT!{struct LSA_FOREST_TRUST_RECORD {
942 Flags: ULONG,
943 ForestTrustType: LSA_FOREST_TRUST_RECORD_TYPE,
944 Time: LARGE_INTEGER,
945 ForestTrustData: LSA_FOREST_TRUST_RECORD_FORESTTRUSTDATA,
946}}
947pub type PLSA_FOREST_TRUST_RECORD = *mut LSA_FOREST_TRUST_RECORD;
948pub const MAX_RECORDS_IN_FOREST_TRUST_INFO: SIZE_T = 4000;
949STRUCT!{struct LSA_FOREST_TRUST_INFORMATION {
950 RecordCount: ULONG,
951 Entries: *mut PLSA_FOREST_TRUST_RECORD,
952}}
953pub type PLSA_FOREST_TRUST_INFORMATION = LSA_FOREST_TRUST_INFORMATION;
954ENUM!{enum LSA_FOREST_TRUST_COLLISION_RECORD_TYPE {
955 CollisionTdo,
956 CollisionXref,
957 CollisionOther,
958}}
959STRUCT!{struct LSA_FOREST_TRUST_COLLISION_RECORD {
960 Index: ULONG,
961 Type: LSA_FOREST_TRUST_COLLISION_RECORD_TYPE,
962 Flags: ULONG,
963 Name: LSA_UNICODE_STRING,
964}}
965pub type PLSA_FOREST_TRUST_COLLISION_RECORD = *mut LSA_FOREST_TRUST_COLLISION_RECORD;
966STRUCT!{struct LSA_FOREST_TRUST_COLLISION_INFORMATION {
967 RecordCount: ULONG,
968 Entries: *mut PLSA_FOREST_TRUST_COLLISION_RECORD,
969}}
970pub type PLSA_FOREST_TRUST_COLLISION_INFORMATION = *mut LSA_FOREST_TRUST_COLLISION_INFORMATION;
971pub const SECRET_SET_VALUE: ULONG = 0x00000001;
972pub const SECRET_QUERY_VALUE: ULONG = 0x00000002;
973pub const SECRET_ALL_ACCESS: ULONG = STANDARD_RIGHTS_REQUIRED | SECRET_SET_VALUE
974 | SECRET_QUERY_VALUE;
975pub const SECRET_READ: ULONG = STANDARD_RIGHTS_READ | SECRET_QUERY_VALUE;
976pub const SECRET_WRITE: ULONG = STANDARD_RIGHTS_WRITE | SECRET_SET_VALUE;
977pub const SECRET_EXECUTE: ULONG = STANDARD_RIGHTS_EXECUTE;
978pub const LSA_GLOBAL_SECRET_PREFIX: &'static str = "G$";
979pub const LSA_GLOBAL_SECRET_PREFIX_LENGTH: SIZE_T = 2;
980pub const LSA_LOCAL_SECRET_PREFIX: &'static str = "L$";
981pub const LSA_LOCAL_SECRET_PREFIX_LENGTH: SIZE_T = 2;
982pub const LSA_MACHINE_SECRET_PREFIX: &'static str = "M$";
983pub const LSA_MACHINE_SECRET_PREFIX_LENGTH: SIZE_T = 2;
984pub const LSA_SECRET_MAXIMUM_COUNT: SIZE_T = 0x00001000;
985pub const LSA_SECRET_MAXIMUM_LENGTH: SIZE_T = 0x00000200;
986DECLARE_HANDLE!{LSA_ENUMERATION_HANDLE, __LSA_ENUMERATION_HANDLE}
987pub type PLSA_ENUMERATION_HANDLE = *mut LSA_ENUMERATION_HANDLE;
988STRUCT!{struct LSA_ENUMERATION_INFORMATION {
989 Sid: PSID,
990}}
991pub type PLSA_ENUMERATION_INFORMATION = *mut LSA_ENUMERATION_INFORMATION;
992extern "system" {
993 pub fn LsaFreeMemory(
994 Buffer: PVOID,
995 ) -> NTSTATUS;
996 pub fn LsaClose(
997 ObjectHandle: LSA_HANDLE,
998 ) -> NTSTATUS;
999 pub fn LsaDelete(
1000 ObjectHandle: LSA_HANDLE,
1001 ) -> NTSTATUS;
1002 pub fn LsaQuerySecurityObject(
1003 ObjectHandle: LSA_HANDLE,
1004 SecurityInformation: SECURITY_INFORMATION,
1005 SecurityDescriptor: *mut PSECURITY_DESCRIPTOR,
1006 ) -> NTSTATUS;
1007 pub fn LsaSetSecurityObject(
1008 ObjectHandle: LSA_HANDLE,
1009 SecurityInformation: SECURITY_INFORMATION,
1010 SecurityDescriptor: PSECURITY_DESCRIPTOR,
1011 ) -> NTSTATUS;
1012 pub fn LsaChangePassword(
1013 ServerName: PLSA_UNICODE_STRING,
1014 DomainName: PLSA_UNICODE_STRING,
1015 AccountName: PLSA_UNICODE_STRING,
1016 OldPassword: PLSA_UNICODE_STRING,
1017 NewPassword: PLSA_UNICODE_STRING,
1018 ) -> NTSTATUS;
1019}
1020STRUCT!{struct LSA_LAST_INTER_LOGON_INFO {
1021 LastSuccessfulLogon: LARGE_INTEGER,
1022 LastFailedLogon: LARGE_INTEGER,
1023 FailedAttemptCountSinceLastSuccessfulLogon: ULONG,
1024}}
1025pub type PLSA_LAST_INTER_LOGON_INFO = *mut LSA_LAST_INTER_LOGON_INFO;
1026STRUCT!{struct SECURITY_LOGON_SESSION_DATA {
1027 Size: ULONG,
1028 LogonId: LUID,
1029 UserName: LSA_UNICODE_STRING,
1030 LogonDomain: LSA_UNICODE_STRING,
1031 AuthenticationPackage: LSA_UNICODE_STRING,
1032 LogonType: ULONG,
1033 Session: ULONG,
1034 Sid: PSID,
1035 LogonTime: LARGE_INTEGER,
1036 LogonServer: LSA_UNICODE_STRING,
1037 DnsDomainName: LSA_UNICODE_STRING,
1038 Upn: LSA_UNICODE_STRING,
1039 UserFlags: ULONG,
1040 LastLogonInfo: LSA_LAST_INTER_LOGON_INFO,
1041 LogonScript: LSA_UNICODE_STRING,
1042 ProfilePath: LSA_UNICODE_STRING,
1043 HomeDirectory: LSA_UNICODE_STRING,
1044 HomeDirectoryDrive: LSA_UNICODE_STRING,
1045 LogoffTime: LARGE_INTEGER,
1046 KickOffTime: LARGE_INTEGER,
1047 PasswordLastSet: LARGE_INTEGER,
1048 PasswordCanChange: LARGE_INTEGER,
1049 PasswordMustChange: LARGE_INTEGER,
1050}}
1051pub type PSECURITY_LOGON_SESSION_DATA = *mut SECURITY_LOGON_SESSION_DATA;
1052extern "system" {
1053 pub fn LsaEnumerateLogonSessions(
1054 LogonSessionCount: PULONG,
1055 LogonSessionList: *mut PLUID,
1056 ) -> NTSTATUS;
1057 pub fn LsaGetLogonSessionData(
1058 LogonId: PLUID,
1059 ppLogonSessionData: *mut PSECURITY_LOGON_SESSION_DATA,
1060 ) -> NTSTATUS;
1061 pub fn LsaOpenPolicy(
1062 SystemName: PLSA_UNICODE_STRING,
1063 ObjectAttributes: PLSA_OBJECT_ATTRIBUTES,
1064 DesiredAccess: ACCESS_MASK,
1065 PolicyHandle: PLSA_HANDLE,
1066 ) -> NTSTATUS;
1067 pub fn LsaOpenPolicySce(
1068 SystemName: PLSA_UNICODE_STRING,
1069 ObjectAttributes: PLSA_OBJECT_ATTRIBUTES,
1070 DesiredAccess: ACCESS_MASK,
1071 PolicyHandle: PLSA_HANDLE,
1072 ) -> NTSTATUS;
1073}
1074pub const MAXIMUM_CAPES_PER_CAP: SIZE_T = 0x7F;
1075pub const CENTRAL_ACCESS_POLICY_OWNER_RIGHTS_PRESENT_FLAG: ULONG = 0x00000001;
1076pub const CENTRAL_ACCESS_POLICY_STAGED_OWNER_RIGHTS_PRESENT_FLAG: ULONG = 0x00000100;
1077#[inline]
1078pub fn STAGING_FLAG(Effective: ULONG) -> ULONG {
1079 (Effective & 0xF) << 8
1080}
1081pub const CENTRAL_ACCESS_POLICY_STAGED_FLAG: ULONG = 0x00010000;
1082pub const CENTRAL_ACCESS_POLICY_VALID_FLAG_MASK: ULONG =
1083 CENTRAL_ACCESS_POLICY_OWNER_RIGHTS_PRESENT_FLAG
1084 | CENTRAL_ACCESS_POLICY_STAGED_OWNER_RIGHTS_PRESENT_FLAG | CENTRAL_ACCESS_POLICY_STAGED_FLAG;
1085pub const LSASETCAPS_RELOAD_FLAG: ULONG = 0x00000001;
1086pub const LSASETCAPS_VALID_FLAG_MASK: ULONG = LSASETCAPS_RELOAD_FLAG;
1087STRUCT!{struct CENTRAL_ACCESS_POLICY_ENTRY {
1088 Name: LSA_UNICODE_STRING,
1089 Description: LSA_UNICODE_STRING,
1090 ChangeId: LSA_UNICODE_STRING,
1091 LengthAppliesTo: ULONG,
1092 AppliesTo: PUCHAR,
1093 LengthSD: ULONG,
1094 SD: PSECURITY_DESCRIPTOR,
1095 LengthStagedSD: ULONG,
1096 StagedSD: PSECURITY_DESCRIPTOR,
1097 Flags: ULONG,
1098}}
1099pub type PCENTRAL_ACCESS_POLICY_ENTRY = *mut CENTRAL_ACCESS_POLICY_ENTRY;
1100pub type PCCENTRAL_ACCESS_POLICY_ENTRY = *const CENTRAL_ACCESS_POLICY_ENTRY;
1101STRUCT!{struct CENTRAL_ACCESS_POLICY {
1102 CAPID: PSID,
1103 Name: LSA_UNICODE_STRING,
1104 Description: LSA_UNICODE_STRING,
1105 ChangeId: LSA_UNICODE_STRING,
1106 Flags: ULONG,
1107 CAPECount: ULONG,
1108 CAPEs: *mut PCENTRAL_ACCESS_POLICY_ENTRY,
1109}}
1110pub type PCENTRAL_ACCESS_POLICY = *mut CENTRAL_ACCESS_POLICY;
1111pub type PCCENTRAL_ACCESS_POLICY = *const CENTRAL_ACCESS_POLICY;
1112extern "system" {
1113 pub fn LsaSetCAPs(
1114 CAPDNs: PLSA_UNICODE_STRING,
1115 CAPDNCount: ULONG,
1116 Flags: ULONG,
1117 ) -> NTSTATUS;
1118 pub fn LsaGetAppliedCAPIDs(
1119 SystemName: PLSA_UNICODE_STRING,
1120 CAPIDs: *mut *mut PSID,
1121 CAPIDCount: PULONG,
1122 ) -> NTSTATUS;
1123 pub fn LsaQueryCAPs(
1124 CAPIDs: *mut PSID,
1125 CAPIDCount: ULONG,
1126 CAPs: *mut PCENTRAL_ACCESS_POLICY,
1127 CAPCount: PULONG,
1128 ) -> NTSTATUS;
1129 pub fn LsaQueryInformationPolicy(
1130 PolicyHandle: LSA_HANDLE,
1131 InformationClass: POLICY_INFORMATION_CLASS,
1132 Buffer: *mut PVOID,
1133 ) -> NTSTATUS;
1134 pub fn LsaSetInformationPolicy(
1135 PolicyHandle: LSA_HANDLE,
1136 InformationClass: POLICY_INFORMATION_CLASS,
1137 Buffer: PVOID,
1138 ) -> NTSTATUS;
1139 pub fn LsaQueryDomainInformationPolicy(
1140 PolicyHandle: LSA_HANDLE,
1141 InformationClass: POLICY_DOMAIN_INFORMATION_CLASS,
1142 Buffer: *mut PVOID,
1143 ) -> NTSTATUS;
1144 pub fn LsaSetDomainInformationPolicy(
1145 PolicyHandle: LSA_HANDLE,
1146 InformationClass: POLICY_DOMAIN_INFORMATION_CLASS,
1147 Buffer: PVOID,
1148 ) -> NTSTATUS;
1149 pub fn LsaRegisterPolicyChangeNotification(
1150 InformationClass: POLICY_NOTIFICATION_INFORMATION_CLASS,
1151 NotifcationEventHandle: HANDLE,
1152 ) -> NTSTATUS;
1153 pub fn LsaUnregisterPolicyChangeNotification(
1154 InformationClass: POLICY_NOTIFICATION_INFORMATION_CLASS,
1155 NotifcationEventHandle: HANDLE,
1156 ) -> NTSTATUS;
1157 pub fn LsaClearAuditLog(
1158 PolicyHandle: LSA_HANDLE,
1159 ) -> NTSTATUS;
1160 pub fn LsaCreateAccount(
1161 PolicyHandle: LSA_HANDLE,
1162 AccountSid: PSID,
1163 DesiredAccess: ACCESS_MASK,
1164 AccountHandle: PLSA_HANDLE,
1165 ) -> NTSTATUS;
1166 pub fn LsaEnumerateAccounts(
1167 PolicyHandle: LSA_HANDLE,
1168 EnumerationContext: PLSA_ENUMERATION_HANDLE,
1169 Buffer: *mut PVOID,
1170 PreferredMaximumLength: ULONG,
1171 CountReturned: PULONG,
1172 ) -> NTSTATUS;
1173 pub fn LsaCreateTrustedDomain(
1174 PolicyHandle: LSA_HANDLE,
1175 TrustedDomainInformation: PLSA_TRUST_INFORMATION,
1176 DesiredAccess: ACCESS_MASK,
1177 TrustedDomainHandle: PLSA_HANDLE,
1178 ) -> NTSTATUS;
1179 pub fn LsaEnumerateTrustedDomains(
1180 PolicyHandle: LSA_HANDLE,
1181 EnumerationContext: PLSA_ENUMERATION_HANDLE,
1182 Buffer: *mut PVOID,
1183 PreferredMaximumLength: ULONG,
1184 CountReturned: PULONG,
1185 ) -> NTSTATUS;
1186 pub fn LsaEnumeratePrivileges(
1187 PolicyHandle: LSA_HANDLE,
1188 EnumerationContext: PLSA_ENUMERATION_HANDLE,
1189 Buffer: *mut PVOID,
1190 PreferredMaximumLength: ULONG,
1191 CountReturned: PULONG,
1192 ) -> NTSTATUS;
1193 pub fn LsaLookupNames(
1194 PolicyHandle: LSA_HANDLE,
1195 Count: ULONG,
1196 Names: PLSA_UNICODE_STRING,
1197 ReferencedDomains: *mut PLSA_REFERENCED_DOMAIN_LIST,
1198 Sids: *mut PLSA_TRANSLATED_SID,
1199 ) -> NTSTATUS;
1200 pub fn LsaLookupNames2(
1201 PolicyHandle: LSA_HANDLE,
1202 Flags: ULONG,
1203 Count: ULONG,
1204 Names: PLSA_UNICODE_STRING,
1205 ReferencedDomains: *mut PLSA_REFERENCED_DOMAIN_LIST,
1206 Sids: *mut PLSA_TRANSLATED_SID2,
1207 ) -> NTSTATUS;
1208 pub fn LsaLookupSids(
1209 PolicyHandle: LSA_HANDLE,
1210 Count: ULONG,
1211 Sids: *mut PSID,
1212 ReferencedDomains: *mut PLSA_REFERENCED_DOMAIN_LIST,
1213 Names: *mut PLSA_TRANSLATED_NAME,
1214 ) -> NTSTATUS;
1215 pub fn LsaLookupSids2(
1216 PolicyHandle: LSA_HANDLE,
1217 LookupOptions: ULONG,
1218 Count: ULONG,
1219 Sids: *mut PSID,
1220 ReferencedDomains: *mut PLSA_REFERENCED_DOMAIN_LIST,
1221 Names: *mut PLSA_TRANSLATED_NAME,
1222 ) -> NTSTATUS;
1223 pub fn LsaCreateSecret(
1224 PolicyHandle: LSA_HANDLE,
1225 SecretName: PLSA_UNICODE_STRING,
1226 DesiredAccess: ACCESS_MASK,
1227 SecretHandle: PLSA_HANDLE,
1228 ) -> NTSTATUS;
1229 pub fn LsaOpenAccount(
1230 PolicyHandle: LSA_HANDLE,
1231 AccountSid: PSID,
1232 DesiredAccess: ACCESS_MASK,
1233 AccountHandle: PLSA_HANDLE,
1234 ) -> NTSTATUS;
1235 pub fn LsaEnumeratePrivilegesOfAccount(
1236 AccountHandle: LSA_HANDLE,
1237 Privileges: *mut PPRIVILEGE_SET,
1238 ) -> NTSTATUS;
1239 pub fn LsaAddPrivilegesToAccount(
1240 AccountHandle: LSA_HANDLE,
1241 Privileges: PPRIVILEGE_SET,
1242 ) -> NTSTATUS;
1243 pub fn LsaRemovePrivilegesFromAccount(
1244 AccountHandle: LSA_HANDLE,
1245 AllPrivileges: BOOLEAN,
1246 Privileges: PPRIVILEGE_SET,
1247 ) -> NTSTATUS;
1248 pub fn LsaGetQuotasForAccount(
1249 AccountHandle: LSA_HANDLE,
1250 QuotaLimits: PQUOTA_LIMITS,
1251 ) -> NTSTATUS;
1252 pub fn LsaSetQuotasForAccount(
1253 AccountHandle: LSA_HANDLE,
1254 QuotaLimits: PQUOTA_LIMITS,
1255 ) -> NTSTATUS;
1256 pub fn LsaGetSystemAccessAccount(
1257 AccountHandle: LSA_HANDLE,
1258 SystemAccess: PULONG,
1259 ) -> NTSTATUS;
1260 pub fn LsaSetSystemAccessAccount(
1261 AccountHandle: LSA_HANDLE,
1262 SystemAccess: ULONG,
1263 ) -> NTSTATUS;
1264 pub fn LsaOpenTrustedDomain(
1265 PolicyHandle: LSA_HANDLE,
1266 TrustedDomainSid: PSID,
1267 DesiredAccess: ACCESS_MASK,
1268 TrustedDomainHandle: PLSA_HANDLE,
1269 ) -> NTSTATUS;
1270 pub fn LsaQueryInfoTrustedDomain(
1271 TrustedDomainHandle: LSA_HANDLE,
1272 InformationClass: TRUSTED_INFORMATION_CLASS,
1273 Buffer: *mut PVOID,
1274 ) -> NTSTATUS;
1275 pub fn LsaSetInformationTrustedDomain(
1276 TrustedDomainHandle: LSA_HANDLE,
1277 InformationClass: TRUSTED_INFORMATION_CLASS,
1278 Buffer: PVOID,
1279 ) -> NTSTATUS;
1280 pub fn LsaOpenSecret(
1281 PolicyHandle: LSA_HANDLE,
1282 SecretName: PLSA_UNICODE_STRING,
1283 DesiredAccess: ACCESS_MASK,
1284 SecretHandle: PLSA_HANDLE,
1285 ) -> NTSTATUS;
1286 pub fn LsaSetSecret(
1287 SecretHandle: LSA_HANDLE,
1288 CurrentValue: PLSA_UNICODE_STRING,
1289 OldValue: PLSA_UNICODE_STRING,
1290 ) -> NTSTATUS;
1291 pub fn LsaQuerySecret(
1292 SecretHandle: LSA_HANDLE,
1293 CurrentValue: *mut PLSA_UNICODE_STRING,
1294 CurrentValueSetTime: PLARGE_INTEGER,
1295 OldValue: *mut PLSA_UNICODE_STRING,
1296 OldValueSetTime: PLARGE_INTEGER,
1297 ) -> NTSTATUS;
1298 pub fn LsaLookupPrivilegeValue(
1299 PolicyHandle: LSA_HANDLE,
1300 Name: PLSA_UNICODE_STRING,
1301 Value: PLUID,
1302 ) -> NTSTATUS;
1303 pub fn LsaLookupPrivilegeName(
1304 PolicyHandle: LSA_HANDLE,
1305 Value: PLUID,
1306 Name: *mut PLSA_UNICODE_STRING,
1307 ) -> NTSTATUS;
1308 pub fn LsaLookupPrivilegeDisplayName(
1309 PolicyHandle: LSA_HANDLE,
1310 Name: PLSA_UNICODE_STRING,
1311 DisplayName: *mut PLSA_UNICODE_STRING,
1312 LanguageReturned: PSHORT,
1313 ) -> NTSTATUS;
1314}
1315extern "C" {
1316 pub fn LsaGetUserName(
1317 UserName: *mut PLSA_UNICODE_STRING,
1318 DomainName: *mut PLSA_UNICODE_STRING,
1319 ) -> NTSTATUS;
1320 pub fn LsaGetRemoteUserName(
1321 SystemName: PLSA_UNICODE_STRING,
1322 UserName: *mut PLSA_UNICODE_STRING,
1323 DomainName: *mut PLSA_UNICODE_STRING,
1324 ) -> NTSTATUS;
1325}
1326pub const SE_INTERACTIVE_LOGON_NAME: &'static str = "SeInteractiveLogonRight";
1327pub const SE_NETWORK_LOGON_NAME: &'static str = "SeNetworkLogonRight";
1328pub const SE_BATCH_LOGON_NAME: &'static str = "SeBatchLogonRight";
1329pub const SE_SERVICE_LOGON_NAME: &'static str = "SeServiceLogonRight";
1330pub const SE_DENY_INTERACTIVE_LOGON_NAME: &'static str = "SeDenyInteractiveLogonRight";
1331pub const SE_DENY_NETWORK_LOGON_NAME: &'static str = "SeDenyNetworkLogonRight";
1332pub const SE_DENY_BATCH_LOGON_NAME: &'static str = "SeDenyBatchLogonRight";
1333pub const SE_DENY_SERVICE_LOGON_NAME: &'static str = "SeDenyServiceLogonRight";
1334pub const SE_REMOTE_INTERACTIVE_LOGON_NAME: &'static str = "SeRemoteInteractiveLogonRight";
1335pub const SE_DENY_REMOTE_INTERACTIVE_LOGON_NAME: &'static str =
1336 "SeDenyRemoteInteractiveLogonRight";
1337extern "system" {
1338 pub fn LsaEnumerateAccountsWithUserRight(
1339 PolictHandle: LSA_HANDLE,
1340 UserRights: PLSA_UNICODE_STRING,
1341 EnumerationBuffer: *mut PVOID,
1342 CountReturned: PULONG,
1343 ) -> NTSTATUS;
1344 pub fn LsaEnumerateAccountRights(
1345 PolicyHandle: LSA_HANDLE,
1346 AccountSid: PSID,
1347 UserRights: *mut PLSA_UNICODE_STRING,
1348 CountOfRights: PULONG,
1349 ) -> NTSTATUS;
1350 pub fn LsaAddAccountRights(
1351 PolicyHandle: LSA_HANDLE,
1352 AccountSid: PSID,
1353 UserRights: PLSA_UNICODE_STRING,
1354 CountOfRights: ULONG,
1355 ) -> NTSTATUS;
1356 pub fn LsaRemoveAccountRights(
1357 PolicyHandle: LSA_HANDLE,
1358 AccountSid: PSID,
1359 AllRights: BOOLEAN,
1360 UserRights: PLSA_UNICODE_STRING,
1361 CountOfRights: ULONG,
1362 ) -> NTSTATUS;
1363 pub fn LsaOpenTrustedDomainByName(
1364 PolicyHandle: LSA_HANDLE,
1365 TrustedDomainName: PLSA_UNICODE_STRING,
1366 DesiredAccess: ACCESS_MASK,
1367 TrustedDomainHandle: PLSA_HANDLE,
1368 ) -> NTSTATUS;
1369 pub fn LsaQueryTrustedDomainInfo(
1370 PolicyHandle: LSA_HANDLE,
1371 TrustedDomainSid: PSID,
1372 InformationClass: TRUSTED_INFORMATION_CLASS,
1373 Buffer: *mut PVOID,
1374 ) -> NTSTATUS;
1375 pub fn LsaSetTrustedDomainInformation(
1376 PolicyHandle: LSA_HANDLE,
1377 TrustedDomainSid: PSID,
1378 InformationClass: TRUSTED_INFORMATION_CLASS,
1379 Buffer: PVOID,
1380 ) -> NTSTATUS;
1381 pub fn LsaDeleteTrustedDomain(
1382 PolicyHandle: LSA_HANDLE,
1383 TrustedDomainSid: PSID,
1384 ) -> NTSTATUS;
1385 pub fn LsaQueryTrustedDomainInfoByName(
1386 PolicyHandle: LSA_HANDLE,
1387 TrustedDomainName: PLSA_UNICODE_STRING,
1388 InformationClass: TRUSTED_INFORMATION_CLASS,
1389 Buffer: *mut PVOID,
1390 ) -> NTSTATUS;
1391 pub fn LsaSetTrustedDomainInfoByName(
1392 PolicyHandle: LSA_HANDLE,
1393 TrustedDomainName: PLSA_UNICODE_STRING,
1394 InformationClass: TRUSTED_INFORMATION_CLASS,
1395 Buffer: PVOID,
1396 ) -> NTSTATUS;
1397 pub fn LsaEnumerateTrustedDomainsEx(
1398 PolicyHandle: LSA_HANDLE,
1399 EnumerationContext: PLSA_ENUMERATION_HANDLE,
1400 Buffer: *mut PVOID,
1401 PreferredMaximumLength: ULONG,
1402 CountReturned: PULONG,
1403 ) -> NTSTATUS;
1404 pub fn LsaCreateTrustedDomainEx(
1405 PolicyHandle: LSA_HANDLE,
1406 TrustedDomainInformation: PTRUSTED_DOMAIN_INFORMATION_EX,
1407 AuthenticationInformation: PTRUSTED_DOMAIN_AUTH_INFORMATION,
1408 DesiredAccess: ACCESS_MASK,
1409 TrustedDomainHandle: PLSA_HANDLE,
1410 ) -> NTSTATUS;
1411 pub fn LsaQueryForestTrustInformation(
1412 PolicyHandle: LSA_HANDLE,
1413 TrustedDomainName: PLSA_UNICODE_STRING,
1414 ForestTrustInfo: *mut PLSA_FOREST_TRUST_INFORMATION,
1415 ) -> NTSTATUS;
1416 pub fn LsaSetForestTrustInformation(
1417 PolicyHandle: LSA_HANDLE,
1418 TrustedDomainName: PLSA_UNICODE_STRING,
1419 ForestTrustInfo: PLSA_FOREST_TRUST_INFORMATION,
1420 CheckOnly: BOOLEAN,
1421 CollisionInfo: *mut PLSA_FOREST_TRUST_COLLISION_INFORMATION,
1422 ) -> NTSTATUS;
1423 pub fn LsaForestTrustFindMatch(
1424 PolicyHandle: LSA_HANDLE,
1425 Type: ULONG,
1426 Name: PLSA_UNICODE_STRING,
1427 Match: *mut PLSA_UNICODE_STRING,
1428 ) -> NTSTATUS;
1429 pub fn LsaStorePrivateData(
1430 PolicyHandle: LSA_HANDLE,
1431 KeyName: PLSA_UNICODE_STRING,
1432 PrivateData: PLSA_UNICODE_STRING,
1433 ) -> NTSTATUS;
1434 pub fn LsaRetrievePrivateData(
1435 PolicyHandle: LSA_HANDLE,
1436 KeyName: PLSA_UNICODE_STRING,
1437 PrivateData: *mut PLSA_UNICODE_STRING,
1438 ) -> NTSTATUS;
1439 pub fn LsaNtStatusToWinError(
1440 Status: NTSTATUS,
1441 ) -> ULONG;
1442}
1443ENUM!{enum NEGOTIATE_MESSAGES {
1444 NegEnumPackagePrefixes = 0,
1445 NegGetCallerName = 1,
1446 NegTransferCredentials = 2,
1447 NegEnumPackageNames = 3,
1448 NegCallPackageMax,
1449}}
1450pub const NEGOTIATE_MAX_PREFIX: SIZE_T = 32;
1451STRUCT!{struct NEGOTIATE_PACKAGE_PREFIX {
1452 PackageId: ULONG_PTR,
1453 PackageDataA: PVOID,
1454 PackageDataW: PVOID,
1455 PrefixLen: ULONG_PTR,
1456 Prefix: [UCHAR; NEGOTIATE_MAX_PREFIX],
1457}}
1458pub type PNEGOTIATE_PACKAGE_PREFIX = *mut NEGOTIATE_PACKAGE_PREFIX;
1459STRUCT!{struct NEGOTIATE_PACKAGE_PREFIXES {
1460 MessageType: ULONG,
1461 PrefixCount: ULONG,
1462 Offset: ULONG,
1463 Pad: ULONG,
1464}}
1465pub type PNEGOTIATE_PACKAGE_PREFIXES = *mut NEGOTIATE_PACKAGE_PREFIXES;
1466STRUCT!{struct NEGOTIATE_CALLER_NAME_REQUEST {
1467 MessageType: ULONG,
1468 LogonId: LUID,
1469}}
1470pub type PNEGOTIATE_CALLER_NAME_REQUEST = *mut NEGOTIATE_CALLER_NAME_REQUEST;
1471STRUCT!{struct NEGOTIATE_CALLER_NAME_RESPONSE {
1472 Messagetype: ULONG,
1473 CallerName: PWSTR,
1474}}
1475pub type PNEGOTIATE_CALLER_NAME_RESPONSE = *mut NEGOTIATE_CALLER_NAME_RESPONSE;
1476STRUCT!{struct NEGOTIATE_PACKAGE_NAMES {
1477 NamesCount: ULONG,
1478 Names: [UNICODE_STRING; ANYSIZE_ARRAY],
1479}}
1480pub type PNEGOTIATE_PACKAGE_NAMES = *mut NEGOTIATE_PACKAGE_NAMES;
1481pub const NEGOTIATE_ALLOW_NTLM: ULONG = 0x10000000;
1482pub const NEGOTIATE_NEG_NTLM: ULONG = 0x20000000;
1483STRUCT!{struct NEGOTIATE_PACKAGE_PREFIX_WOW {
1484 PackageId: ULONG,
1485 PackageDataA: ULONG,
1486 PackageDataW: ULONG,
1487 PrefixLen: ULONG,
1488 Prefix: [UCHAR; NEGOTIATE_MAX_PREFIX],
1489}}
1490pub type PNEGOTIATE_PACKAGE_PREFIX_WOW = *mut NEGOTIATE_PACKAGE_PREFIX_WOW;
1491STRUCT!{struct NEGOTIATE_CALLER_NAME_RESPONSE_WOW {
1492 MessageType: ULONG,
1493 CallerName: ULONG,
1494}}
1495pub type PNEGOTIATE_CALLER_NAME_RESPONSE_WOW = *mut NEGOTIATE_CALLER_NAME_RESPONSE_WOW;
1496extern "system" {
1497 pub fn LsaSetPolicyReplicationHandle(
1498 PolicyHandle: PLSA_HANDLE,
1499 ) -> NTSTATUS;
1500}
1501pub const MAX_USER_RECORDS: SIZE_T = 1000;
1502STRUCT!{struct LSA_USER_REGISTRATION_INFO {
1503 Sid: LSA_UNICODE_STRING,
1504 DeviceId: LSA_UNICODE_STRING,
1505 Username: LSA_UNICODE_STRING,
1506 Thumbprint: LSA_UNICODE_STRING,
1507 RegistrationTime: LARGE_INTEGER,
1508}}
1509pub type PLSA_USER_REGISTRATION_INFO = *mut LSA_USER_REGISTRATION_INFO;
1510STRUCT!{struct LSA_REGISTRATION_INFO {
1511 RegisteredCount: ULONG,
1512 UserRegistrationInfo: *mut PLSA_USER_REGISTRATION_INFO,
1513}}
1514pub type PLSA_REGISTRATION_INFO = *mut LSA_REGISTRATION_INFO;
1515extern "system" {
1516 pub fn LsaGetDeviceRegistrationInfo(
1517 RegistrationInfo: *mut PLSA_REGISTRATION_INFO,
1518 ) -> NTSTATUS;
1519}
1520ENUM!{enum LSA_CREDENTIAL_KEY_SOURCE_TYPE {
1521 eFromPrecomputed = 1,
1522 eFromClearPassword,
1523 eFromNtOwf,
1524}}
1525pub type PLSA_CREDENTIAL_KEY_SOURCE_TYPE = *mut LSA_CREDENTIAL_KEY_SOURCE_TYPE;
1526extern "C" {
1527 pub fn SeciIsProtectedUser(
1528 ProtectedUser: PBOOLEAN,
1529 ) -> NTSTATUS;
1530}