blob: df9c10a3bb25cab020cc9dc7df8d27217257c8da [file] [log] [blame]
/**
* Windows API header module
*
* Translated from MinGW Windows headers
*
* Authors: Stewart Gordon
* License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
* Source: $(DRUNTIMESRC src/core/sys/windows/_ntsecapi.d)
*/
module core.sys.windows.ntsecapi;
version (Windows):
@system:
pragma(lib, "advapi32");
version (ANSI) {} else version = Unicode;
private import
core.sys.windows.basetyps, core.sys.windows.ntdef, core.sys.windows.windef, core.sys.windows.winnt, core.sys.windows.w32api;
// FIXME: check types and grouping of constants
// FIXME: check Windows version support
enum KERB_WRAP_NO_ENCRYPT = 0x80000001;
enum LOGON_GUEST = 0x00000001;
enum LOGON_NOENCRYPTION = 0x00000002;
enum LOGON_CACHED_ACCOUNT = 0x00000004;
enum LOGON_USED_LM_PASSWORD = 0x00000008;
enum LOGON_EXTRA_SIDS = 0x00000020;
enum LOGON_SUBAUTH_SESSION_KEY = 0x00000040;
enum LOGON_SERVER_TRUST_ACCOUNT = 0x00000080;
enum LOGON_NTLMV2_ENABLED = 0x00000100;
enum LOGON_RESOURCE_GROUPS = 0x00000200;
enum LOGON_PROFILE_PATH_RETURNED = 0x00000400;
enum LOGON_GRACE_LOGON = 0x01000000;
enum {
LSA_MODE_PASSWORD_PROTECTED = 1,
LSA_MODE_INDIVIDUAL_ACCOUNTS,
LSA_MODE_MANDATORY_ACCESS,
LSA_MODE_LOG_FULL
}
bool LSA_SUCCESS(int x) { return x >= 0; }
/* TOTHINKABOUT: These constants don't have ANSI/Unicode versioned
* aliases. Should we merge them anyway?
*/
const char[] MICROSOFT_KERBEROS_NAME_A = "Kerberos";
const wchar[] MICROSOFT_KERBEROS_NAME_W = "Kerberos";
const char[] MSV1_0_PACKAGE_NAME = "MICROSOFT_AUTHENTICATION_PACKAGE_V1_0";
const wchar[] MSV1_0_PACKAGE_NAMEW = "MICROSOFT_AUTHENTICATION_PACKAGE_V1_0";
enum MSV1_0_ALLOW_SERVER_TRUST_ACCOUNT = 32;
enum MSV1_0_ALLOW_WORKSTATION_TRUST_ACCOUNT = 2048;
enum MSV1_0_CLEARTEXT_PASSWORD_ALLOWED = 2;
enum MSV1_0_CRED_LM_PRESENT = 1;
enum MSV1_0_CRED_NT_PRESENT = 2;
enum MSV1_0_CRED_VERSION = 0;
enum MSV1_0_DONT_TRY_GUEST_ACCOUNT = 16;
enum MSV1_0_MAX_NTLM3_LIFE = 1800;
enum MSV1_0_MAX_AVL_SIZE = 64000;
enum MSV1_0_MNS_LOGON = 16777216;
enum size_t
MSV1_0_CHALLENGE_LENGTH = 8,
MSV1_0_LANMAN_SESSION_KEY_LENGTH = 8,
MSV1_0_NTLM3_RESPONSE_LENGTH = 16,
MSV1_0_NTLM3_OWF_LENGTH = 16,
MSV1_0_NTLM3_INPUT_LENGTH = MSV1_0_NTLM3_RESPONSE.sizeof
- MSV1_0_NTLM3_RESPONSE_LENGTH,
MSV1_0_OWF_PASSWORD_LENGTH = 16,
MSV1_0_PACKAGE_NAMEW_LENGTH = MSV1_0_PACKAGE_NAMEW.sizeof
- WCHAR.sizeof;
enum MSV1_0_RETURN_USER_PARAMETERS = 8;
enum MSV1_0_RETURN_PASSWORD_EXPIRY = 64;
enum MSV1_0_RETURN_PROFILE_PATH = 512;
enum MSV1_0_SUBAUTHENTICATION_DLL_EX = 1048576;
enum MSV1_0_SUBAUTHENTICATION_DLL = 0xff000000;
enum MSV1_0_SUBAUTHENTICATION_DLL_SHIFT = 24;
enum MSV1_0_SUBAUTHENTICATION_DLL_RAS = 2;
enum MSV1_0_SUBAUTHENTICATION_DLL_IIS = 132;
enum MSV1_0_SUBAUTHENTICATION_FLAGS = 0xff000000;
enum MSV1_0_TRY_GUEST_ACCOUNT_ONLY = 256;
enum MSV1_0_TRY_SPECIFIED_DOMAIN_ONLY = 1024;
enum MSV1_0_UPDATE_LOGON_STATISTICS = 4;
enum MSV1_0_USE_CLIENT_CHALLENGE = 128;
enum MSV1_0_USER_SESSION_KEY_LENGTH = 16;
const char[]
MSV1_0_SUBAUTHENTICATION_KEY
= `System\CurrentControlSet\Control\Lsa\MSV1_0`,
MSV1_0_SUBAUTHENTICATION_VALUE = "Auth";
enum ACCESS_MASK
POLICY_VIEW_LOCAL_INFORMATION = 0x0001,
POLICY_VIEW_AUDIT_INFORMATION = 0x0002,
POLICY_GET_PRIVATE_INFORMATION = 0x0004,
POLICY_TRUST_ADMIN = 0x0008,
POLICY_CREATE_ACCOUNT = 0x0010,
POLICY_CREATE_SECRET = 0x0020,
POLICY_CREATE_PRIVILEGE = 0x0040,
POLICY_SET_DEFAULT_QUOTA_LIMITS = 0x0080,
POLICY_SET_AUDIT_REQUIREMENTS = 0x0100,
POLICY_AUDIT_LOG_ADMIN = 0x0200,
POLICY_SERVER_ADMIN = 0x0400,
POLICY_LOOKUP_NAMES = 0x0800,
POLICY_READ = STANDARD_RIGHTS_READ | 0x0006,
POLICY_WRITE = STANDARD_RIGHTS_WRITE | 0x07F8,
POLICY_EXECUTE = STANDARD_RIGHTS_EXECUTE | 0x0801,
POLICY_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | 0x0FFF;
enum POLICY_AUDIT_EVENT_UNCHANGED = 0;
enum POLICY_AUDIT_EVENT_SUCCESS = 1;
enum POLICY_AUDIT_EVENT_FAILURE = 2;
enum POLICY_AUDIT_EVENT_NONE = 4;
enum POLICY_AUDIT_EVENT_MASK = 7;
enum {
POLICY_LOCATION_LOCAL = 1,
POLICY_LOCATION_DS
}
enum : uint {
POLICY_MACHINE_POLICY_LOCAL = 0,
POLICY_MACHINE_POLICY_DEFAULTED,
POLICY_MACHINE_POLICY_EXPLICIT,
POLICY_MACHINE_POLICY_UNKNOWN = 0xFFFFFFFF
}
enum POLICY_QOS_SCHANEL_REQUIRED = 0x0001;
enum POLICY_QOS_OUTBOUND_INTEGRITY = 0x0002;
enum POLICY_QOS_OUTBOUND_CONFIDENTIALITY = 0x0004;
enum POLICY_QOS_INBOUND_INTEGREITY = 0x0008;
enum POLICY_QOS_INBOUND_CONFIDENTIALITY = 0x0010;
enum POLICY_QOS_ALLOW_LOCAL_ROOT_CERT_STORE = 0x0020;
enum POLICY_QOS_RAS_SERVER_ALLOWED = 0x0040;
enum POLICY_QOS_DHCP_SERVER_ALLOWD = 0x0080;
enum POLICY_KERBEROS_FORWARDABLE = 1;
enum POLICY_KERBEROS_PROXYABLE = 2;
enum POLICY_KERBEROS_RENEWABLE = 4;
enum POLICY_KERBEROS_POSTDATEABLE = 8;
const char[]
SAM_PASSWORD_CHANGE_NOTIFY_ROUTINE = "PasswordChangeNotify",
SAM_INIT_NOTIFICATION_ROUTINE = "InitializeChangeNotify",
SAM_PASSWORD_FILTER_ROUTINE = "PasswordFilter";
const TCHAR[]
SE_INTERACTIVE_LOGON_NAME = "SeInteractiveLogonRight",
SE_NETWORK_LOGON_NAME = "SeNetworkLogonRight",
SE_BATCH_LOGON_NAME = "SeBatchLogonRight",
SE_SERVICE_LOGON_NAME = "SeServiceLogonRight";
enum {
TRUST_ATTRIBUTE_NON_TRANSITIVE = 1,
TRUST_ATTRIBUTE_UPLEVEL_ONLY = 2,
TRUST_ATTRIBUTE_TREE_PARENT = 4194304,
TRUST_ATTRIBUTES_VALID = -16580609
}
enum {
TRUST_AUTH_TYPE_NONE,
TRUST_AUTH_TYPE_NT4OWF,
TRUST_AUTH_TYPE_CLEAR
}
enum {
TRUST_DIRECTION_DISABLED,
TRUST_DIRECTION_INBOUND,
TRUST_DIRECTION_OUTBOUND,
TRUST_DIRECTION_BIDIRECTIONAL
}
enum {
TRUST_TYPE_DOWNLEVEL = 1,
TRUST_TYPE_UPLEVEL,
TRUST_TYPE_MIT,
TRUST_TYPE_DCE
}
alias UNICODE_STRING LSA_UNICODE_STRING;
alias UNICODE_STRING* PLSA_UNICODE_STRING;
alias STRING LSA_STRING;
alias STRING* PLSA_STRING;
enum MSV1_0_LOGON_SUBMIT_TYPE {
MsV1_0InteractiveLogon = 2,
MsV1_0Lm20Logon,
MsV1_0NetworkLogon,
MsV1_0SubAuthLogon,
MsV1_0WorkstationUnlockLogon = 7
}
alias MSV1_0_LOGON_SUBMIT_TYPE* PMSV1_0_LOGON_SUBMIT_TYPE;
enum MSV1_0_PROFILE_BUFFER_TYPE {
MsV1_0InteractiveProfile = 2,
MsV1_0Lm20LogonProfile,
MsV1_0SmartCardProfile
}
alias MSV1_0_PROFILE_BUFFER_TYPE* PMSV1_0_PROFILE_BUFFER_TYPE;
enum MSV1_0_AVID {
MsvAvEOL,
MsvAvNbComputerName,
MsvAvNbDomainName,
MsvAvDnsComputerName,
MsvAvDnsDomainName
}
enum MSV1_0_PROTOCOL_MESSAGE_TYPE {
MsV1_0Lm20ChallengeRequest = 0,
MsV1_0Lm20GetChallengeResponse,
MsV1_0EnumerateUsers,
MsV1_0GetUserInfo,
MsV1_0ReLogonUsers,
MsV1_0ChangePassword,
MsV1_0ChangeCachedPassword,
MsV1_0GenericPassthrough,
MsV1_0CacheLogon,
MsV1_0SubAuth,
MsV1_0DeriveCredential,
MsV1_0CacheLookup
}
alias MSV1_0_PROTOCOL_MESSAGE_TYPE* PMSV1_0_PROTOCOL_MESSAGE_TYPE;
enum POLICY_LSA_SERVER_ROLE {
PolicyServerRoleBackup = 2,
PolicyServerRolePrimary
}
alias POLICY_LSA_SERVER_ROLE* PPOLICY_LSA_SERVER_ROLE;
enum POLICY_SERVER_ENABLE_STATE {
PolicyServerEnabled = 2,
PolicyServerDisabled
}
alias POLICY_SERVER_ENABLE_STATE* PPOLICY_SERVER_ENABLE_STATE;
enum POLICY_INFORMATION_CLASS {
PolicyAuditLogInformation = 1,
PolicyAuditEventsInformation,
PolicyPrimaryDomainInformation,
PolicyPdAccountInformation,
PolicyAccountDomainInformation,
PolicyLsaServerRoleInformation,
PolicyReplicaSourceInformation,
PolicyDefaultQuotaInformation,
PolicyModificationInformation,
PolicyAuditFullSetInformation,
PolicyAuditFullQueryInformation,
PolicyDnsDomainInformation,
PolicyEfsInformation
}
alias POLICY_INFORMATION_CLASS* PPOLICY_INFORMATION_CLASS;
enum POLICY_AUDIT_EVENT_TYPE {
AuditCategorySystem,
AuditCategoryLogon,
AuditCategoryObjectAccess,
AuditCategoryPrivilegeUse,
AuditCategoryDetailedTracking,
AuditCategoryPolicyChange,
AuditCategoryAccountManagement,
AuditCategoryDirectoryServiceAccess,
AuditCategoryAccountLogon
}
alias POLICY_AUDIT_EVENT_TYPE* PPOLICY_AUDIT_EVENT_TYPE;
enum POLICY_LOCAL_INFORMATION_CLASS {
PolicyLocalAuditEventsInformation = 1,
PolicyLocalPdAccountInformation,
PolicyLocalAccountDomainInformation,
PolicyLocalLsaServerRoleInformation,
PolicyLocalReplicaSourceInformation,
PolicyLocalModificationInformation,
PolicyLocalAuditFullSetInformation,
PolicyLocalAuditFullQueryInformation,
PolicyLocalDnsDomainInformation,
PolicyLocalIPSecReferenceInformation,
PolicyLocalMachinePasswordInformation,
PolicyLocalQualityOfServiceInformation,
PolicyLocalPolicyLocationInformation
}
alias POLICY_LOCAL_INFORMATION_CLASS* PPOLICY_LOCAL_INFORMATION_CLASS;
enum POLICY_DOMAIN_INFORMATION_CLASS {
PolicyDomainIPSecReferenceInformation = 1,
PolicyDomainQualityOfServiceInformation,
PolicyDomainEfsInformation,
PolicyDomainPublicKeyInformation,
PolicyDomainPasswordPolicyInformation,
PolicyDomainLockoutInformation,
PolicyDomainKerberosTicketInformation
}
alias POLICY_DOMAIN_INFORMATION_CLASS* PPOLICY_DOMAIN_INFORMATION_CLASS;
enum SECURITY_LOGON_TYPE {
Interactive = 2,
Network,
Batch,
Service,
Proxy,
Unlock
}
alias SECURITY_LOGON_TYPE* PSECURITY_LOGON_TYPE;
enum TRUSTED_INFORMATION_CLASS {
TrustedDomainNameInformation = 1,
TrustedControllersInformation,
TrustedPosixOffsetInformation,
TrustedPasswordInformation,
TrustedDomainInformationBasic,
TrustedDomainInformationEx,
TrustedDomainAuthInformation,
TrustedDomainFullInformation
}
alias TRUSTED_INFORMATION_CLASS* PTRUSTED_INFORMATION_CLASS;
struct DOMAIN_PASSWORD_INFORMATION {
USHORT MinPasswordLength;
USHORT PasswordHistoryLength;
ULONG PasswordProperties;
LARGE_INTEGER MaxPasswordAge;
LARGE_INTEGER MinPasswordAge;
}
alias DOMAIN_PASSWORD_INFORMATION* PDOMAIN_PASSWORD_INFORMATION;
struct LSA_ENUMERATION_INFORMATION {
PSID Sid;
}
alias LSA_ENUMERATION_INFORMATION* PLSA_ENUMERATION_INFORMATION;
alias OBJECT_ATTRIBUTES LSA_OBJECT_ATTRIBUTES;
alias OBJECT_ATTRIBUTES* PLSA_OBJECT_ATTRIBUTES;
struct LSA_TRUST_INFORMATION {
LSA_UNICODE_STRING Name;
PSID Sid;
}
alias LSA_TRUST_INFORMATION TRUSTED_DOMAIN_INFORMATION_BASIC;
alias LSA_TRUST_INFORMATION* PLSA_TRUST_INFORMATION;
/* in MinGW (further down the code):
* typedef PLSA_TRUST_INFORMATION *PTRUSTED_DOMAIN_INFORMATION_BASIC;
* but it doesn't look right....
*/
alias LSA_TRUST_INFORMATION** PTRUSTED_DOMAIN_INFORMATION_BASIC;
struct LSA_REFERENCED_DOMAIN_LIST {
ULONG Entries;
PLSA_TRUST_INFORMATION Domains;
}
alias LSA_REFERENCED_DOMAIN_LIST* PLSA_REFERENCED_DOMAIN_LIST;
struct LSA_TRANSLATED_SID {
SID_NAME_USE Use;
ULONG RelativeId;
LONG DomainIndex;
}
alias LSA_TRANSLATED_SID* PLSA_TRANSLATED_SID;
struct LSA_TRANSLATED_NAME {
SID_NAME_USE Use;
LSA_UNICODE_STRING Name;
LONG DomainIndex;
}
alias LSA_TRANSLATED_NAME* PLSA_TRANSLATED_NAME;
struct MSV1_0_INTERACTIVE_LOGON {
MSV1_0_LOGON_SUBMIT_TYPE MessageType;
UNICODE_STRING LogonDomainName;
UNICODE_STRING UserName;
UNICODE_STRING Password;
}
alias MSV1_0_INTERACTIVE_LOGON* PMSV1_0_INTERACTIVE_LOGON;
struct MSV1_0_INTERACTIVE_PROFILE {
MSV1_0_PROFILE_BUFFER_TYPE MessageType;
USHORT LogonCount;
USHORT BadPasswordCount;
LARGE_INTEGER LogonTime;
LARGE_INTEGER LogoffTime;
LARGE_INTEGER KickOffTime;
LARGE_INTEGER PasswordLastSet;
LARGE_INTEGER PasswordCanChange;
LARGE_INTEGER PasswordMustChange;
UNICODE_STRING LogonScript;
UNICODE_STRING HomeDirectory;
UNICODE_STRING FullName;
UNICODE_STRING ProfilePath;
UNICODE_STRING HomeDirectoryDrive;
UNICODE_STRING LogonServer;
ULONG UserFlags;
}
alias MSV1_0_INTERACTIVE_PROFILE* PMSV1_0_INTERACTIVE_PROFILE;
struct MSV1_0_LM20_LOGON {
MSV1_0_LOGON_SUBMIT_TYPE MessageType;
UNICODE_STRING LogonDomainName;
UNICODE_STRING UserName;
UNICODE_STRING Workstation;
UCHAR[MSV1_0_CHALLENGE_LENGTH] ChallengeToClient;
STRING CaseSensitiveChallengeResponse;
STRING CaseInsensitiveChallengeResponse;
ULONG ParameterControl;
}
alias MSV1_0_LM20_LOGON* PMSV1_0_LM20_LOGON;
//static if (_WIN32_WINNT >= 0x500) {
struct MSV1_0_SUBAUTH_LOGON {
MSV1_0_LOGON_SUBMIT_TYPE MessageType;
UNICODE_STRING LogonDomainName;
UNICODE_STRING UserName;
UNICODE_STRING Workstation;
UCHAR[MSV1_0_CHALLENGE_LENGTH] ChallengeToClient;
STRING AuthenticationInfo1;
STRING AuthenticationInfo2;
ULONG ParameterControl;
ULONG SubAuthPackageId;
}
alias MSV1_0_SUBAUTH_LOGON* PMSV1_0_SUBAUTH_LOGON;
//}
struct MSV1_0_LM20_LOGON_PROFILE {
MSV1_0_PROFILE_BUFFER_TYPE MessageType;
LARGE_INTEGER KickOffTime;
LARGE_INTEGER LogoffTime;
ULONG UserFlags;
UCHAR[MSV1_0_USER_SESSION_KEY_LENGTH] UserSessionKey;
UNICODE_STRING LogonDomainName;
UCHAR[MSV1_0_LANMAN_SESSION_KEY_LENGTH] LanmanSessionKey;
UNICODE_STRING LogonServer;
UNICODE_STRING UserParameters;
}
alias MSV1_0_LM20_LOGON_PROFILE* PMSV1_0_LM20_LOGON_PROFILE;
struct MSV1_0_SUPPLEMENTAL_CREDENTIAL {
ULONG Version;
ULONG Flags;
UCHAR[MSV1_0_OWF_PASSWORD_LENGTH] LmPassword;
UCHAR[MSV1_0_OWF_PASSWORD_LENGTH] NtPassword;
}
alias MSV1_0_SUPPLEMENTAL_CREDENTIAL* PMSV1_0_SUPPLEMENTAL_CREDENTIAL;
struct MSV1_0_NTLM3_RESPONSE {
UCHAR[MSV1_0_NTLM3_RESPONSE_LENGTH] Response;
UCHAR RespType;
UCHAR HiRespType;
USHORT Flags;
ULONG MsgWord;
ULONGLONG TimeStamp;
UCHAR[MSV1_0_CHALLENGE_LENGTH] ChallengeFromClient;
ULONG AvPairsOff;
UCHAR _Buffer;
UCHAR* Buffer() return { return &_Buffer; }
}
alias MSV1_0_NTLM3_RESPONSE* PMSV1_0_NTLM3_RESPONSE;
struct MSV1_0_AV_PAIR {
USHORT AvId;
USHORT AvLen;
}
alias MSV1_0_AV_PAIR* PMSV1_0_AV_PAIR;
struct MSV1_0_CHANGEPASSWORD_REQUEST {
MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
UNICODE_STRING DomainName;
UNICODE_STRING AccountName;
UNICODE_STRING OldPassword;
UNICODE_STRING NewPassword;
BOOLEAN Impersonating;
}
alias MSV1_0_CHANGEPASSWORD_REQUEST* PMSV1_0_CHANGEPASSWORD_REQUEST;
struct MSV1_0_CHANGEPASSWORD_RESPONSE {
MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
BOOLEAN PasswordInfoValid;
DOMAIN_PASSWORD_INFORMATION DomainPasswordInfo;
}
alias MSV1_0_CHANGEPASSWORD_RESPONSE* PMSV1_0_CHANGEPASSWORD_RESPONSE;
struct MSV1_0_SUBAUTH_REQUEST {
MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
ULONG SubAuthPackageId;
ULONG SubAuthInfoLength;
PUCHAR SubAuthSubmitBuffer;
}
alias MSV1_0_SUBAUTH_REQUEST* PMSV1_0_SUBAUTH_REQUEST;
struct MSV1_0_SUBAUTH_RESPONSE {
MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
ULONG SubAuthInfoLength;
PUCHAR SubAuthReturnBuffer;
}
alias MSV1_0_SUBAUTH_RESPONSE* PMSV1_0_SUBAUTH_RESPONSE;
enum MSV1_0_DERIVECRED_TYPE_SHA1 = 0;
struct MSV1_0_DERIVECRED_REQUEST {
MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
LUID LogonId;
ULONG DeriveCredType;
ULONG DeriveCredInfoLength;
UCHAR _DeriveCredSubmitBuffer;
UCHAR* DeriveCredSubmitBuffer() return { return &_DeriveCredSubmitBuffer; }
}
alias MSV1_0_DERIVECRED_REQUEST* PMSV1_0_DERIVECRED_REQUEST;
struct MSV1_0_DERIVECRED_RESPONSE {
MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
ULONG DeriveCredInfoLength;
UCHAR _DeriveCredReturnBuffer;
UCHAR* DeriveCredReturnBuffer() return { return &_DeriveCredReturnBuffer; }
}
alias MSV1_0_DERIVECRED_RESPONSE* PMSV1_0_DERIVECRED_RESPONSE;
alias uint LSA_ENUMERATION_HANDLE, LSA_OPERATIONAL_MODE,
POLICY_AUDIT_EVENT_OPTIONS;
alias uint* PLSA_ENUMERATION_HANDLE, PLSA_OPERATIONAL_MODE,
PPOLICY_AUDIT_EVENT_OPTIONS;
struct POLICY_PRIVILEGE_DEFINITION {
LSA_UNICODE_STRING Name;
LUID LocalValue;
}
alias POLICY_PRIVILEGE_DEFINITION* PPOLICY_PRIVILEGE_DEFINITION;
struct POLICY_AUDIT_LOG_INFO {
ULONG AuditLogPercentFull;
ULONG MaximumLogSize;
LARGE_INTEGER AuditRetentionPeriod;
BOOLEAN AuditLogFullShutdownInProgress;
LARGE_INTEGER TimeToShutdown;
ULONG NextAuditRecordId;
}
alias POLICY_AUDIT_LOG_INFO* PPOLICY_AUDIT_LOG_INFO;
struct POLICY_AUDIT_EVENTS_INFO {
BOOLEAN AuditingMode;
PPOLICY_AUDIT_EVENT_OPTIONS EventAuditingOptions;
ULONG MaximumAuditEventCount;
}
alias POLICY_AUDIT_EVENTS_INFO* PPOLICY_AUDIT_EVENTS_INFO;
struct POLICY_ACCOUNT_DOMAIN_INFO {
LSA_UNICODE_STRING DomainName;
PSID DomainSid;
}
alias POLICY_ACCOUNT_DOMAIN_INFO* PPOLICY_ACCOUNT_DOMAIN_INFO;
struct POLICY_PRIMARY_DOMAIN_INFO {
LSA_UNICODE_STRING Name;
PSID Sid;
}
alias POLICY_PRIMARY_DOMAIN_INFO* PPOLICY_PRIMARY_DOMAIN_INFO;
struct POLICY_DNS_DOMAIN_INFO {
LSA_UNICODE_STRING Name;
LSA_UNICODE_STRING DnsDomainName;
LSA_UNICODE_STRING DnsTreeName;
GUID DomainGuid;
PSID Sid;
}
alias POLICY_DNS_DOMAIN_INFO* PPOLICY_DNS_DOMAIN_INFO;
struct POLICY_PD_ACCOUNT_INFO {
LSA_UNICODE_STRING Name;
}
alias POLICY_PD_ACCOUNT_INFO* PPOLICY_PD_ACCOUNT_INFO;
struct POLICY_LSA_SERVER_ROLE_INFO {
POLICY_LSA_SERVER_ROLE LsaServerRole;
}
alias POLICY_LSA_SERVER_ROLE_INFO* PPOLICY_LSA_SERVER_ROLE_INFO;
struct POLICY_REPLICA_SOURCE_INFO {
LSA_UNICODE_STRING ReplicaSource;
LSA_UNICODE_STRING ReplicaAccountName;
}
alias POLICY_REPLICA_SOURCE_INFO* PPOLICY_REPLICA_SOURCE_INFO;
struct POLICY_DEFAULT_QUOTA_INFO {
QUOTA_LIMITS QuotaLimits;
}
alias POLICY_DEFAULT_QUOTA_INFO* PPOLICY_DEFAULT_QUOTA_INFO;
struct POLICY_MODIFICATION_INFO {
LARGE_INTEGER ModifiedId;
LARGE_INTEGER DatabaseCreationTime;
}
alias POLICY_MODIFICATION_INFO* PPOLICY_MODIFICATION_INFO;
struct POLICY_AUDIT_FULL_SET_INFO {
BOOLEAN ShutDownOnFull;
}
alias POLICY_AUDIT_FULL_SET_INFO* PPOLICY_AUDIT_FULL_SET_INFO;
struct POLICY_AUDIT_FULL_QUERY_INFO {
BOOLEAN ShutDownOnFull;
BOOLEAN LogIsFull;
}
alias POLICY_AUDIT_FULL_QUERY_INFO* PPOLICY_AUDIT_FULL_QUERY_INFO;
struct POLICY_EFS_INFO {
ULONG InfoLength;
PUCHAR EfsBlob;
}
alias POLICY_EFS_INFO* PPOLICY_EFS_INFO;
struct POLICY_LOCAL_IPSEC_REFERENCE_INFO {
LSA_UNICODE_STRING ObjectPath;
}
alias POLICY_LOCAL_IPSEC_REFERENCE_INFO* PPOLICY_LOCAL_IPSEC_REFERENCE_INFO;
struct POLICY_LOCAL_MACHINE_PASSWORD_INFO {
LARGE_INTEGER PasswordChangeInterval;
}
alias POLICY_LOCAL_MACHINE_PASSWORD_INFO* PPOLICY_LOCAL_MACHINE_PASSWORD_INFO;
struct POLICY_LOCAL_POLICY_LOCATION_INFO {
ULONG PolicyLocation;
}
alias POLICY_LOCAL_POLICY_LOCATION_INFO* PPOLICY_LOCAL_POLICY_LOCATION_INFO;
struct POLICY_LOCAL_QUALITY_OF_SERVICE_INFO{
ULONG QualityOfService;
}
alias POLICY_LOCAL_QUALITY_OF_SERVICE_INFO
POLICY_DOMAIN_QUALITY_OF_SERVICE_INFO;
alias POLICY_LOCAL_QUALITY_OF_SERVICE_INFO*
PPOLICY_LOCAL_QUALITY_OF_SERVICE_INFO,
PPOLICY_DOMAIN_QUALITY_OF_SERVICE_INFO;
struct POLICY_DOMAIN_PUBLIC_KEY_INFO {
ULONG InfoLength;
PUCHAR PublicKeyInfo;
}
alias POLICY_DOMAIN_PUBLIC_KEY_INFO* PPOLICY_DOMAIN_PUBLIC_KEY_INFO;
struct POLICY_DOMAIN_LOCKOUT_INFO {
LARGE_INTEGER LockoutDuration;
LARGE_INTEGER LockoutObservationWindow;
USHORT LockoutThreshold;
}
alias POLICY_DOMAIN_LOCKOUT_INFO* PPOLICY_DOMAIN_LOCKOUT_INFO;
struct POLICY_DOMAIN_PASSWORD_INFO {
USHORT MinPasswordLength;
USHORT PasswordHistoryLength;
ULONG PasswordProperties;
LARGE_INTEGER MaxPasswordAge;
LARGE_INTEGER MinPasswordAge;
}
alias POLICY_DOMAIN_PASSWORD_INFO* PPOLICY_DOMAIN_PASSWORD_INFO;
struct POLICY_DOMAIN_KERBEROS_TICKET_INFO {
ULONG AuthenticationOptions;
LARGE_INTEGER MinTicketAge;
LARGE_INTEGER MaxTicketAge;
LARGE_INTEGER MaxRenewAge;
LARGE_INTEGER ProxyLifetime;
LARGE_INTEGER ForceLogoff;
}
alias POLICY_DOMAIN_KERBEROS_TICKET_INFO* PPOLICY_DOMAIN_KERBEROS_TICKET_INFO;
mixin DECLARE_HANDLE!("LSA_HANDLE");
alias LSA_HANDLE* PLSA_HANDLE;
struct TRUSTED_DOMAIN_NAME_INFO {
LSA_UNICODE_STRING Name;
}
alias TRUSTED_DOMAIN_NAME_INFO* PTRUSTED_DOMAIN_NAME_INFO;
struct TRUSTED_CONTROLLERS_INFO {
ULONG Entries;
PLSA_UNICODE_STRING Names;
}
alias TRUSTED_CONTROLLERS_INFO* PTRUSTED_CONTROLLERS_INFO;
struct TRUSTED_POSIX_OFFSET_INFO {
ULONG Offset;
}
alias TRUSTED_POSIX_OFFSET_INFO* PTRUSTED_POSIX_OFFSET_INFO;
struct TRUSTED_PASSWORD_INFO {
LSA_UNICODE_STRING Password;
LSA_UNICODE_STRING OldPassword;
}
alias TRUSTED_PASSWORD_INFO* PTRUSTED_PASSWORD_INFO;
struct TRUSTED_DOMAIN_INFORMATION_EX {
LSA_UNICODE_STRING Name;
LSA_UNICODE_STRING FlatName;
PSID Sid;
ULONG TrustDirection;
ULONG TrustType;
ULONG TrustAttributes;
}
alias TRUSTED_DOMAIN_INFORMATION_EX* PTRUSTED_DOMAIN_INFORMATION_EX;
struct LSA_AUTH_INFORMATION {
LARGE_INTEGER LastUpdateTime;
ULONG AuthType;
ULONG AuthInfoLength;
PUCHAR AuthInfo;
}
alias LSA_AUTH_INFORMATION* PLSA_AUTH_INFORMATION;
struct TRUSTED_DOMAIN_AUTH_INFORMATION {
ULONG IncomingAuthInfos;
PLSA_AUTH_INFORMATION IncomingAuthenticationInformation;
PLSA_AUTH_INFORMATION IncomingPreviousAuthenticationInformation;
ULONG OutgoingAuthInfos;
PLSA_AUTH_INFORMATION OutgoingAuthenticationInformation;
PLSA_AUTH_INFORMATION OutgoingPreviousAuthenticationInformation;
}
alias TRUSTED_DOMAIN_AUTH_INFORMATION* PTRUSTED_DOMAIN_AUTH_INFORMATION;
struct TRUSTED_DOMAIN_FULL_INFORMATION {
TRUSTED_DOMAIN_INFORMATION_EX Information;
TRUSTED_POSIX_OFFSET_INFO PosixOffset;
TRUSTED_DOMAIN_AUTH_INFORMATION AuthInformation;
}
alias TRUSTED_DOMAIN_FULL_INFORMATION* PTRUSTED_DOMAIN_FULL_INFORMATION;
extern (Windows) {
NTSTATUS LsaAddAccountRights(LSA_HANDLE, PSID, PLSA_UNICODE_STRING,
ULONG);
NTSTATUS LsaCallAuthenticationPackage(HANDLE, ULONG, PVOID, ULONG,
PVOID*, PULONG, PNTSTATUS);
NTSTATUS LsaClose(LSA_HANDLE);
NTSTATUS LsaConnectUntrusted(PHANDLE);
NTSTATUS LsaCreateTrustedDomainEx(LSA_HANDLE,
PTRUSTED_DOMAIN_INFORMATION_EX, PTRUSTED_DOMAIN_AUTH_INFORMATION,
ACCESS_MASK, PLSA_HANDLE);
NTSTATUS LsaDeleteTrustedDomain(LSA_HANDLE, PSID);
NTSTATUS LsaDeregisterLogonProcess(HANDLE);
NTSTATUS LsaEnumerateAccountRights(LSA_HANDLE, PSID, PLSA_UNICODE_STRING*,
PULONG);
NTSTATUS LsaEnumerateAccountsWithUserRight(LSA_HANDLE,
PLSA_UNICODE_STRING, PVOID*, PULONG);
NTSTATUS LsaEnumerateTrustedDomains(LSA_HANDLE, PLSA_ENUMERATION_HANDLE,
PVOID*, ULONG, PULONG);
NTSTATUS LsaEnumerateTrustedDomainsEx(LSA_HANDLE, PLSA_ENUMERATION_HANDLE,
TRUSTED_INFORMATION_CLASS, PVOID*, ULONG, PULONG);
NTSTATUS LsaFreeMemory(PVOID);
NTSTATUS LsaFreeReturnBuffer(PVOID);
NTSTATUS LsaLogonUser(HANDLE, PLSA_STRING, SECURITY_LOGON_TYPE, ULONG,
PVOID, ULONG, PTOKEN_GROUPS, PTOKEN_SOURCE, PVOID*, PULONG, PLUID,
PHANDLE, PQUOTA_LIMITS, PNTSTATUS);
NTSTATUS LsaLookupAuthenticationPackage(HANDLE, PLSA_STRING, PULONG);
NTSTATUS LsaLookupNames(LSA_HANDLE, ULONG, PLSA_UNICODE_STRING,
PLSA_REFERENCED_DOMAIN_LIST*, PLSA_TRANSLATED_SID*);
NTSTATUS LsaLookupSids(LSA_HANDLE, ULONG, PSID*,
PLSA_REFERENCED_DOMAIN_LIST*, PLSA_TRANSLATED_NAME*);
ULONG LsaNtStatusToWinError(NTSTATUS);
NTSTATUS LsaOpenPolicy(PLSA_UNICODE_STRING, PLSA_OBJECT_ATTRIBUTES,
ACCESS_MASK, PLSA_HANDLE);
NTSTATUS LsaQueryDomainInformationPolicy(LSA_HANDLE,
POLICY_DOMAIN_INFORMATION_CLASS, PVOID*);
NTSTATUS LsaQueryInformationPolicy(LSA_HANDLE, POLICY_INFORMATION_CLASS,
PVOID*);
NTSTATUS LsaQueryLocalInformationPolicy(LSA_HANDLE,
POLICY_LOCAL_INFORMATION_CLASS, PVOID*);
NTSTATUS LsaQueryTrustedDomainInfo(LSA_HANDLE, PSID,
TRUSTED_INFORMATION_CLASS, PVOID*);
NTSTATUS LsaQueryTrustedDomainInfoByName(LSA_HANDLE, PLSA_UNICODE_STRING,
TRUSTED_INFORMATION_CLASS, PVOID*);
NTSTATUS LsaRegisterLogonProcess(PLSA_STRING, PHANDLE,
PLSA_OPERATIONAL_MODE);
NTSTATUS LsaRemoveAccountRights(LSA_HANDLE, PSID, BOOLEAN,
PLSA_UNICODE_STRING, ULONG);
NTSTATUS LsaRetrievePrivateData(LSA_HANDLE, PLSA_UNICODE_STRING,
PLSA_UNICODE_STRING*);
NTSTATUS LsaSetDomainInformationPolicy(LSA_HANDLE,
POLICY_DOMAIN_INFORMATION_CLASS, PVOID);
NTSTATUS LsaSetInformationPolicy(LSA_HANDLE, POLICY_INFORMATION_CLASS,
PVOID);
NTSTATUS LsaSetLocalInformationPolicy(LSA_HANDLE,
POLICY_LOCAL_INFORMATION_CLASS, PVOID);
NTSTATUS LsaSetTrustedDomainInformation(LSA_HANDLE, PSID,
TRUSTED_INFORMATION_CLASS, PVOID);
NTSTATUS LsaSetTrustedDomainInfoByName(LSA_HANDLE, PLSA_UNICODE_STRING,
TRUSTED_INFORMATION_CLASS, PVOID);
NTSTATUS LsaStorePrivateData(LSA_HANDLE, PLSA_UNICODE_STRING,
PLSA_UNICODE_STRING);
}
alias NTSTATUS function(PUNICODE_STRING, ULONG, PUNICODE_STRING)
PSAM_PASSWORD_NOTIFICATION_ROUTINE;
alias BOOLEAN function() PSAM_INIT_NOTIFICATION_ROUTINE;
alias BOOLEAN function(PUNICODE_STRING, PUNICODE_STRING,
PUNICODE_STRING, BOOLEAN) PSAM_PASSWORD_FILTER_ROUTINE;