winapi_ui_automation/um/
lsalookup.rs

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
7use shared::guiddef::GUID;
8use shared::minwindef::{ULONG, USHORT};
9use shared::ntdef::NTSTATUS;
10use um::winnt::{ACCESS_MASK, HANDLE, LONG, PCHAR, PSID, PVOID, PWSTR, SID_NAME_USE};
11STRUCT!{struct LSA_UNICODE_STRING {
12    Length: USHORT,
13    MaximumLength: USHORT,
14    Buffer: PWSTR,
15}}
16pub type PLSA_UNICODE_STRING = *mut LSA_UNICODE_STRING;
17STRUCT!{struct LSA_STRING {
18    Length: USHORT,
19    MaximumLength: USHORT,
20    Buffer: PCHAR,
21}}
22pub type PLSA_STRING = *mut LSA_STRING;
23STRUCT!{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}}
31pub type PLSA_OBJECT_ATTRIBUTES = *mut LSA_OBJECT_ATTRIBUTES;
32STRUCT!{struct LSA_TRUST_INFORMATION {
33    Name: LSA_UNICODE_STRING,
34    Sid: PSID,
35}}
36pub type PLSA_TRUST_INFORMATION = *mut LSA_TRUST_INFORMATION;
37STRUCT!{struct LSA_REFERENCED_DOMAIN_LIST {
38    Entries: ULONG,
39    Domains: PLSA_TRUST_INFORMATION,
40}}
41pub type PLSA_REFERENCED_DOMAIN_LIST = *mut LSA_REFERENCED_DOMAIN_LIST;
42STRUCT!{struct LSA_TRANSLATED_SID2 {
43    Use: SID_NAME_USE,
44    Sid: PSID,
45    DomainIndex: LONG,
46    Flags: ULONG,
47}}
48pub type PLSA_TRANSLATED_SID2 = *mut LSA_TRANSLATED_SID2;
49STRUCT!{struct LSA_TRANSLATED_NAME {
50    Use: SID_NAME_USE,
51    Name: LSA_UNICODE_STRING,
52    DomainIndex: LONG,
53}}
54pub type PLSA_TRANSLATED_NAME = *mut LSA_TRANSLATED_NAME;
55STRUCT!{struct POLICY_ACCOUNT_DOMAIN_INFO {
56    DomainName: LSA_UNICODE_STRING,
57    DomainSid: PSID,
58}}
59pub type PPOLICY_ACCOUNT_DOMAIN_INFO = *mut POLICY_ACCOUNT_DOMAIN_INFO;
60STRUCT!{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}}
67pub type PPOLICY_DNS_DOMAIN_INFO = *mut POLICY_DNS_DOMAIN_INFO;
68pub const LOOKUP_VIEW_LOCAL_INFORMATION: ACCESS_MASK = 0x00000001;
69pub const LOOKUP_TRANSLATE_NAMES: ACCESS_MASK = 0x00000800;
70ENUM!{enum LSA_LOOKUP_DOMAIN_INFO_CLASS {
71    AccountDomainInformation = 5,
72    DnsDomainInformation = 12,
73}}
74pub type PLSA_LOOKUP_DOMAIN_INFO_CLASS = *mut LSA_LOOKUP_DOMAIN_INFO_CLASS;
75pub type LSA_LOOKUP_HANDLE = PVOID;
76pub type PLSA_LOOKUP_HANDLE = *mut PVOID;
77extern "C" {
78    pub fn LsaLookupOpenLocalPolicy(
79        ObjectAttributes: PLSA_OBJECT_ATTRIBUTES,
80        AccessMask: ACCESS_MASK,
81        PolicyHandle: PLSA_LOOKUP_HANDLE,
82    ) -> NTSTATUS;
83    pub fn LsaLookupClose(
84        ObjectHandle: LSA_LOOKUP_HANDLE,
85    ) -> NTSTATUS;
86    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;
93    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;
101    pub fn LsaLookupGetDomainInfo(
102        PolicyHandle: LSA_LOOKUP_HANDLE,
103        DomainInfoClass: LSA_LOOKUP_DOMAIN_INFO_CLASS,
104        DomainInfo: *mut PVOID,
105    ) -> NTSTATUS;
106    pub fn LsaLookupFreeMemory(
107        Buffer: PVOID,
108    ) -> NTSTATUS;
109}