Revision control
Copy as Markdown
Other Tools
// Licensed under the Apache License, Version 2.0
// All files in the project carrying such notice may not be copied, modified, or distributed
// except according to those terms.
//! LSA Policy Lookup API
use shared::guiddef::GUID;
use shared::minwindef::{ULONG, USHORT};
use shared::ntdef::NTSTATUS;
use um::winnt::{ACCESS_MASK, HANDLE, LONG, PCHAR, PSID, PVOID, PWSTR, SID_NAME_USE};
STRUCT!{struct LSA_UNICODE_STRING {
Length: USHORT,
MaximumLength: USHORT,
Buffer: PWSTR,
}}
pub type PLSA_UNICODE_STRING = *mut LSA_UNICODE_STRING;
STRUCT!{struct LSA_STRING {
Length: USHORT,
MaximumLength: USHORT,
Buffer: PCHAR,
}}
pub type PLSA_STRING = *mut LSA_STRING;
STRUCT!{struct LSA_OBJECT_ATTRIBUTES {
Length: ULONG,
RootDirectory: HANDLE,
ObjectName: PLSA_UNICODE_STRING,
Attributes: ULONG,
SecurityDescriptor: PVOID,
SecurityQualityOfService: PVOID,
}}
pub type PLSA_OBJECT_ATTRIBUTES = *mut LSA_OBJECT_ATTRIBUTES;
STRUCT!{struct LSA_TRUST_INFORMATION {
Name: LSA_UNICODE_STRING,
Sid: PSID,
}}
pub type PLSA_TRUST_INFORMATION = *mut LSA_TRUST_INFORMATION;
STRUCT!{struct LSA_REFERENCED_DOMAIN_LIST {
Entries: ULONG,
Domains: PLSA_TRUST_INFORMATION,
}}
pub type PLSA_REFERENCED_DOMAIN_LIST = *mut LSA_REFERENCED_DOMAIN_LIST;
STRUCT!{struct LSA_TRANSLATED_SID2 {
Use: SID_NAME_USE,
Sid: PSID,
DomainIndex: LONG,
Flags: ULONG,
}}
pub type PLSA_TRANSLATED_SID2 = *mut LSA_TRANSLATED_SID2;
STRUCT!{struct LSA_TRANSLATED_NAME {
Use: SID_NAME_USE,
Name: LSA_UNICODE_STRING,
DomainIndex: LONG,
}}
pub type PLSA_TRANSLATED_NAME = *mut LSA_TRANSLATED_NAME;
STRUCT!{struct POLICY_ACCOUNT_DOMAIN_INFO {
DomainName: LSA_UNICODE_STRING,
DomainSid: PSID,
}}
pub type PPOLICY_ACCOUNT_DOMAIN_INFO = *mut POLICY_ACCOUNT_DOMAIN_INFO;
STRUCT!{struct POLICY_DNS_DOMAIN_INFO {
Name: LSA_UNICODE_STRING,
DnsDomainName: LSA_UNICODE_STRING,
DnsForestName: LSA_UNICODE_STRING,
DomainGuid: GUID,
Sid: PSID,
}}
pub type PPOLICY_DNS_DOMAIN_INFO = *mut POLICY_DNS_DOMAIN_INFO;
pub const LOOKUP_VIEW_LOCAL_INFORMATION: ACCESS_MASK = 0x00000001;
pub const LOOKUP_TRANSLATE_NAMES: ACCESS_MASK = 0x00000800;
ENUM!{enum LSA_LOOKUP_DOMAIN_INFO_CLASS {
AccountDomainInformation = 5,
DnsDomainInformation = 12,
}}
pub type PLSA_LOOKUP_DOMAIN_INFO_CLASS = *mut LSA_LOOKUP_DOMAIN_INFO_CLASS;
pub type LSA_LOOKUP_HANDLE = PVOID;
pub type PLSA_LOOKUP_HANDLE = *mut PVOID;
extern "C" {
pub fn LsaLookupOpenLocalPolicy(
ObjectAttributes: PLSA_OBJECT_ATTRIBUTES,
AccessMask: ACCESS_MASK,
PolicyHandle: PLSA_LOOKUP_HANDLE,
) -> NTSTATUS;
pub fn LsaLookupClose(
ObjectHandle: LSA_LOOKUP_HANDLE,
) -> NTSTATUS;
pub fn LsaLookupTranslateSids(
PolicyHandle: LSA_LOOKUP_HANDLE,
Count: ULONG,
Sids: *mut PSID,
ReferencedDomains: *mut PLSA_REFERENCED_DOMAIN_LIST,
Names: *mut PLSA_TRANSLATED_NAME,
) -> NTSTATUS;
pub fn LsaLookupTranslateNames(
PolicyHandle: LSA_LOOKUP_HANDLE,
Flags: ULONG,
Count: ULONG,
Names: PLSA_UNICODE_STRING,
ReferencedDomains: *mut PLSA_REFERENCED_DOMAIN_LIST,
Sids: *mut PLSA_TRANSLATED_SID2,
) -> NTSTATUS;
pub fn LsaLookupGetDomainInfo(
PolicyHandle: LSA_LOOKUP_HANDLE,
DomainInfoClass: LSA_LOOKUP_DOMAIN_INFO_CLASS,
DomainInfo: *mut PVOID,
) -> NTSTATUS;
pub fn LsaLookupFreeMemory(
Buffer: PVOID,
) -> NTSTATUS;
}