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 //! LSA Policy Lookup API 7 use shared::guiddef::GUID; 8 use shared::minwindef::{ULONG, USHORT}; 9 use shared::ntdef::NTSTATUS; 10 use um::winnt::{ACCESS_MASK, HANDLE, LONG, PCHAR, PSID, PVOID, PWSTR, SID_NAME_USE}; 11 STRUCT!{struct LSA_UNICODE_STRING { 12 Length: USHORT, 13 MaximumLength: USHORT, 14 Buffer: PWSTR, 15 }} 16 pub type PLSA_UNICODE_STRING = *mut LSA_UNICODE_STRING; 17 STRUCT!{struct LSA_STRING { 18 Length: USHORT, 19 MaximumLength: USHORT, 20 Buffer: PCHAR, 21 }} 22 pub type PLSA_STRING = *mut LSA_STRING; 23 STRUCT!{struct LSA_OBJECT_ATTRIBUTES { 24 Length: ULONG, 25 RootDirectory: HANDLE, 26 ObjectName: PLSA_UNICODE_STRING, 27 Attributes: ULONG, 28 SecurityDescriptor: PVOID, 29 SecurityQualityOfService: PVOID, 30 }} 31 pub type PLSA_OBJECT_ATTRIBUTES = *mut LSA_OBJECT_ATTRIBUTES; 32 STRUCT!{struct LSA_TRUST_INFORMATION { 33 Name: LSA_UNICODE_STRING, 34 Sid: PSID, 35 }} 36 pub type PLSA_TRUST_INFORMATION = *mut LSA_TRUST_INFORMATION; 37 STRUCT!{struct LSA_REFERENCED_DOMAIN_LIST { 38 Entries: ULONG, 39 Domains: PLSA_TRUST_INFORMATION, 40 }} 41 pub type PLSA_REFERENCED_DOMAIN_LIST = *mut LSA_REFERENCED_DOMAIN_LIST; 42 STRUCT!{struct LSA_TRANSLATED_SID2 { 43 Use: SID_NAME_USE, 44 Sid: PSID, 45 DomainIndex: LONG, 46 Flags: ULONG, 47 }} 48 pub type PLSA_TRANSLATED_SID2 = *mut LSA_TRANSLATED_SID2; 49 STRUCT!{struct LSA_TRANSLATED_NAME { 50 Use: SID_NAME_USE, 51 Name: LSA_UNICODE_STRING, 52 DomainIndex: LONG, 53 }} 54 pub type PLSA_TRANSLATED_NAME = *mut LSA_TRANSLATED_NAME; 55 STRUCT!{struct POLICY_ACCOUNT_DOMAIN_INFO { 56 DomainName: LSA_UNICODE_STRING, 57 DomainSid: PSID, 58 }} 59 pub type PPOLICY_ACCOUNT_DOMAIN_INFO = *mut POLICY_ACCOUNT_DOMAIN_INFO; 60 STRUCT!{struct POLICY_DNS_DOMAIN_INFO { 61 Name: LSA_UNICODE_STRING, 62 DnsDomainName: LSA_UNICODE_STRING, 63 DnsForestName: LSA_UNICODE_STRING, 64 DomainGuid: GUID, 65 Sid: PSID, 66 }} 67 pub type PPOLICY_DNS_DOMAIN_INFO = *mut POLICY_DNS_DOMAIN_INFO; 68 pub const LOOKUP_VIEW_LOCAL_INFORMATION: ACCESS_MASK = 0x00000001; 69 pub const LOOKUP_TRANSLATE_NAMES: ACCESS_MASK = 0x00000800; 70 ENUM!{enum LSA_LOOKUP_DOMAIN_INFO_CLASS { 71 AccountDomainInformation = 5, 72 DnsDomainInformation = 12, 73 }} 74 pub type PLSA_LOOKUP_DOMAIN_INFO_CLASS = *mut LSA_LOOKUP_DOMAIN_INFO_CLASS; 75 pub type LSA_LOOKUP_HANDLE = PVOID; 76 pub type PLSA_LOOKUP_HANDLE = *mut PVOID; 77 extern "C" { LsaLookupOpenLocalPolicy( ObjectAttributes: PLSA_OBJECT_ATTRIBUTES, AccessMask: ACCESS_MASK, PolicyHandle: PLSA_LOOKUP_HANDLE, ) -> NTSTATUS78 pub fn LsaLookupOpenLocalPolicy( 79 ObjectAttributes: PLSA_OBJECT_ATTRIBUTES, 80 AccessMask: ACCESS_MASK, 81 PolicyHandle: PLSA_LOOKUP_HANDLE, 82 ) -> NTSTATUS; LsaLookupClose( ObjectHandle: LSA_LOOKUP_HANDLE, ) -> NTSTATUS83 pub fn LsaLookupClose( 84 ObjectHandle: LSA_LOOKUP_HANDLE, 85 ) -> NTSTATUS; LsaLookupTranslateSids( PolicyHandle: LSA_LOOKUP_HANDLE, Count: ULONG, Sids: *mut PSID, ReferencedDomains: *mut PLSA_REFERENCED_DOMAIN_LIST, Names: *mut PLSA_TRANSLATED_NAME, ) -> NTSTATUS86 pub fn LsaLookupTranslateSids( 87 PolicyHandle: LSA_LOOKUP_HANDLE, 88 Count: ULONG, 89 Sids: *mut PSID, 90 ReferencedDomains: *mut PLSA_REFERENCED_DOMAIN_LIST, 91 Names: *mut PLSA_TRANSLATED_NAME, 92 ) -> NTSTATUS; LsaLookupTranslateNames( PolicyHandle: LSA_LOOKUP_HANDLE, Flags: ULONG, Count: ULONG, Names: PLSA_UNICODE_STRING, ReferencedDomains: *mut PLSA_REFERENCED_DOMAIN_LIST, Sids: *mut PLSA_TRANSLATED_SID2, ) -> NTSTATUS93 pub fn LsaLookupTranslateNames( 94 PolicyHandle: LSA_LOOKUP_HANDLE, 95 Flags: ULONG, 96 Count: ULONG, 97 Names: PLSA_UNICODE_STRING, 98 ReferencedDomains: *mut PLSA_REFERENCED_DOMAIN_LIST, 99 Sids: *mut PLSA_TRANSLATED_SID2, 100 ) -> NTSTATUS; LsaLookupGetDomainInfo( PolicyHandle: LSA_LOOKUP_HANDLE, DomainInfoClass: LSA_LOOKUP_DOMAIN_INFO_CLASS, DomainInfo: *mut PVOID, ) -> NTSTATUS101 pub fn LsaLookupGetDomainInfo( 102 PolicyHandle: LSA_LOOKUP_HANDLE, 103 DomainInfoClass: LSA_LOOKUP_DOMAIN_INFO_CLASS, 104 DomainInfo: *mut PVOID, 105 ) -> NTSTATUS; LsaLookupFreeMemory( Buffer: PVOID, ) -> NTSTATUS106 pub fn LsaLookupFreeMemory( 107 Buffer: PVOID, 108 ) -> NTSTATUS; 109 } 110