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