- Correct the ulAssemblyRosterIndex member of ACTCTX_SECTION_KEYED_DATA -- it is...
[reactos.git] / reactos / include / reactos / idl / lsa.idl
index 1f02f1b..08b214a 100644 (file)
@@ -2,9 +2,586 @@
  * Local Security Authority interface definition
  */
 
-#include "include/reactos/idl/wtypes.idl"
+#include <ms-dtyp.idl>
 
-#define LSA_HANDLE unsigned long
+typedef [handle] LPWSTR PLSAPR_SERVER_NAME;
+
+typedef [context_handle] PVOID LSAPR_HANDLE;
+typedef LSAPR_HANDLE *PLSAPR_HANDLE;
+
+cpp_quote("#ifndef _WINNT_H")
+typedef struct _LUID {
+    ULONG LowPart;
+    LONG HighPart;
+} LUID, *PLUID;
+cpp_quote("#endif")
+
+cpp_quote("#ifndef _NTDEF_")
+typedef long NTSTATUS;
+typedef struct _STRING {
+    WORD Length;
+    WORD MaximumLength;
+    [size_is(MaximumLength), length_is(Length)] LPSTR Buffer;
+} STRING, *PSTRING;
+
+cpp_quote("#endif")
+
+typedef struct _LSAPR_ACL {
+    BYTE AclRevision;
+    BYTE Sbz1;
+    WORD AclSize;
+    [size_is(AclSize - 4)] BYTE Dummy1[*];
+} LSAPR_ACL, *PLSAPR_ACL;
+
+cpp_quote("#ifndef _WINNT_H")
+typedef WORD SECURITY_DESCRIPTOR_CONTROL, *PSECURITY_DESCRIPTOR_CONTROL;
+cpp_quote("#endif")
+
+typedef struct _LSAPR_SECURITY_DESCRIPTOR {
+    BYTE Revision;
+    BYTE Sbz1;
+    SECURITY_DESCRIPTOR_CONTROL Control;
+    PRPC_SID Owner;
+    PRPC_SID Group;
+    LSAPR_ACL *Sacl;
+    /* FIXME: should be PLSAPR_ACL Sacl; */
+    LSAPR_ACL *Dacl;
+    /* FIXME: should be PLSAPR_ACL Dacl; */
+} LSAPR_SECURITY_DESCRIPTOR, *PLSAPR_SECURITY_DESCRIPTOR;
+
+cpp_quote("#if 0")
+
+typedef enum _SECURITY_IMPERSONATION_LEVEL {
+    SecurityAnonymous = 0,
+    SecurityIdentification,
+    SecurityImpersonation,
+    SecurityDelegation,
+} SECURITY_IMPERSONATION_LEVEL, *PSECURITY_IMPERSONATION_LEVEL;
+
+typedef BYTE SECURITY_CONTEXT_TRACKING_MODE, *PSECURITY_CONTEXT_TRACKING_MODE;
+
+typedef struct _SECURITY_QUALITY_OF_SERVICE {
+    DWORD Length;
+    SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
+    SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode;
+    BYTE EffectiveOnly;
+} SECURITY_QUALITY_OF_SERVICE, *PSECURITY_QUALITY_OF_SERVICE;
+
+cpp_quote("#endif")
+
+typedef struct _LSAPR_OBJECT_ATTRIBUTES {
+    DWORD Length;
+    BYTE *RootDirectory;
+    PSTRING ObjectName;
+    DWORD Attributes;
+    PLSAPR_SECURITY_DESCRIPTOR SecurityDescriptor;
+    PSECURITY_QUALITY_OF_SERVICE SecurityQualityOfService;
+} LSAPR_OBJECT_ATTRIBUTES, *PLSAPR_OBJECT_ATTRIBUTES;
+
+typedef struct _LSAPR_POLICY_PRIVILEGE_DEF {
+    RPC_UNICODE_STRING Name;
+    LUID LocalValue;
+} LSAPR_POLICY_PRIVILEGE_DEF, *PLSAPR_POLICY_PRIVILEGE_DEF;
+
+typedef struct _LSAPR_PRIVILEGE_ENUM_BUFFER {
+    DWORD Entries;
+    [size_is(Entries)] PLSAPR_POLICY_PRIVILEGE_DEF Privileges;
+} LSAPR_PRIVILEGE_ENUM_BUFFER, *PLSAPR_PRIVILEGE_ENUM_BUFFER;
+
+typedef struct _LSAPR_ACCOUNT_INFORMATION {
+    PRPC_SID Sid;
+} LSAPR_ACCOUNT_INFORMATION, *PLSAPR_ACCOUNT_INFORMATION;
+
+typedef struct _LSAPR_ACCOUNT_ENUM_BUFFER {
+    DWORD EntriesRead;
+    [size_is(EntriesRead)] PLSAPR_ACCOUNT_INFORMATION Information;
+} LSAPR_ACCOUNT_ENUM_BUFFER, *PLSAPR_ACCOUNT_ENUM_BUFFER;
+
+cpp_quote("#ifndef _NTSECAPI_H")
+typedef RPC_UNICODE_STRING LSA_UNICODE_STRING, *PLSA_UNICODE_STRING;
+cpp_quote("#endif")
+
+typedef struct _LSAPR_TRUST_INFORMATION {
+    RPC_UNICODE_STRING Name;
+    PRPC_SID Sid;
+} LSAPR_TRUST_INFORMATION, *PLSAPR_TRUST_INFORMATION;
+
+typedef struct _LSAPR_REFERENCED_DOMAIN_LIST {
+    DWORD Entries;
+    [size_is(Entries)] PLSAPR_TRUST_INFORMATION Domains;
+    DWORD MaxEntries;
+} LSAPR_REFERENCED_DOMAIN_LIST, *PLSAPR_REFERENCED_DOMAIN_LIST;
+
+cpp_quote("#if 0")
+
+typedef enum _SID_NAME_USE {
+    SidTypeUser = 1,
+    SidTypeGroup,
+    SidTypeDomain,
+    SidTypeAlias,
+    SidTypeWellKnownGroup,
+    SidTypeDeletedAccount,
+    SidTypeInvalid,
+    SidTypeUnknown,
+    SidTypeComputer,
+    SidTypeLabel,
+} SID_NAME_USE, *PSID_NAME_USE;
+
+cpp_quote("#endif")
+
+cpp_quote("#ifndef _NTDEF_")
+
+typedef struct _LSA_TRANSLATED_SID {
+    SID_NAME_USE Use;
+    DWORD RelativeId;
+    LONG DomainIndex;
+} LSA_TRANSLATED_SID, *PLSA_TRANSLATED_SID;
+
+cpp_quote("#endif")
+
+typedef struct _LSAPR_TRANSLATED_SIDS {
+    DWORD Entries;
+    [size_is(Entries)] PLSA_TRANSLATED_SID Sids;
+} LSAPR_TRANSLATED_SIDS, *PLSAPR_TRANSLATED_SIDS;
+
+typedef enum _LSAP_LOOKUP_LEVEL {
+    LsapLookupWksta = 1,
+    LsapLookupPDC,
+    LsapLookupTDL,
+    LsapLookupGC,
+    LsapLookupXForestReferral,
+    LsapLookupXForestResolve,
+    LsapLookupRODCReferralToFullDC,
+} LSAP_LOOKUP_LEVEL, *PLSAP_LOOKUP_LEVEL;
+
+typedef struct _LSAPR_SID_INFORMATION {
+    PRPC_SID Sid;
+} LSAPR_SID_INFORMATION, *PLSAPR_SID_INFORMATION;
+
+typedef struct _LSAPR_SID_ENUM_BUFFER {
+    DWORD Entries;
+    [size_is(Entries)] PLSAPR_SID_INFORMATION SidInfo;
+} LSAPR_SID_ENUM_BUFFER, *PLSAPR_SID_ENUM_BUFFER;
+
+typedef struct _LSAPR_TRANSLATED_NAME {
+    SID_NAME_USE Use;
+    RPC_UNICODE_STRING Name;
+    LONG DomainIndex;
+} LSAPR_TRANSLATED_NAME, *PLSAPR_TRANSLATED_NAME;
+
+typedef struct _LSAPR_TRANSLATED_NAMES {
+    DWORD Entries;
+    [size_is(Entries)] PLSAPR_TRANSLATED_NAME Names;
+} LSAPR_TRANSLATED_NAMES, *PLSAPR_TRANSLATED_NAMES;
+
+typedef struct _LSAPR_TRANSLATED_NAME_EX {
+    SID_NAME_USE Use;
+    RPC_UNICODE_STRING Name;
+    LONG DomainIndex;
+    DWORD Flags;
+} LSAPR_TRANSLATED_NAME_EX, *PLSAPR_TRANSLATED_NAME_EX;
+
+typedef struct _LSAPR_TRANSLATED_NAMES_EX {
+    DWORD Entries;
+    [size_is(Entries)] PLSAPR_TRANSLATED_NAME_EX Names;
+} LSAPR_TRANSLATED_NAMES_EX, *PLSAPR_TRANSLATED_NAMES_EX;
+
+typedef struct _LSAPR_TRANSLATED_SID_EX {
+    SID_NAME_USE Use;
+    DWORD RelativeId;
+    LONG DomainIndex;
+    DWORD Flags;
+} LSAPR_TRANSLATED_SID_EX, *PLSAPR_TRANSLATED_SID_EX;
+
+typedef struct _LSAPR_TRANSLATED_SIDS_EX {
+    DWORD Entries;
+    [size_is(Entries)] PLSAPR_TRANSLATED_SID_EX Sids;
+} LSAPR_TRANSLATED_SIDS_EX, *PLSAPR_TRANSLATED_SIDS_EX;
+
+typedef struct _LSAPR_TRANSLATED_SID_EX2 {
+    SID_NAME_USE Use;
+    PRPC_SID Sid;
+    LONG DomainIndex;
+    DWORD Flags;
+} LSAPR_TRANSLATED_SID_EX2, *PLSAPR_TRANSLATED_SID_EX2;
+
+typedef struct _LSAPR_TRANSLATED_SIDS_EX2 {
+    DWORD Entries;
+    [size_is(Entries)] PLSAPR_TRANSLATED_SID_EX2 Sids;
+} LSAPR_TRANSLATED_SIDS_EX2, *PLSAPR_TRANSLATED_SIDS_EX2;
+
+typedef LSAPR_TRUST_INFORMATION LSAPR_TRUSTED_DOMAIN_INFORMATION_BASIC;
+
+typedef struct _LSAPR_SR_SECURITY_DESCRIPTOR {
+    DWORD Length;
+    [size_is(Length)] BYTE *SecurityDescriptor;
+} LSAPR_SR_SECURITY_DESCRIPTOR, *PLSAPR_SR_SECURITY_DESCRIPTOR;
+
+cpp_quote("#ifndef _NTSECAPI_H")
+typedef enum _POLICY_INFORMATION_CLASS {
+    PolicyAuditLogInformation = 1,
+    PolicyAuditEventsInformation,
+    PolicyPrimaryDomainInformation,
+    PolicyPdAccountInformation,
+    PolicyAccountDomainInformation,
+    PolicyLsaServerRoleInformation,
+    PolicyReplicaSourceInformation,
+    PolicyDefaultQuotaInformation,
+    PolicyModificationInformation,
+    PolicyAuditFullSetInformation,
+    PolicyAuditFullQueryInformation,
+    PolicyDnsDomainInformation,
+    PolicyDnsDomainInformationInt,
+    PolicyLocalAccountDomainInformation,
+    PolicyLastEntry,
+} POLICY_INFORMATION_CLASS, *PPOLICY_INFORMATION_CLASS;
+
+typedef struct _POLICY_AUDIT_LOG_INFO {
+    DWORD AuditLogPercentFull;
+    DWORD MaximumLogSize;
+    LARGE_INTEGER AuditRetentionPeriod;
+    BYTE AuditLogFullShutdownInProgress;
+    LARGE_INTEGER TimeToShutdown;
+    DWORD NextAuditRecordId;
+} POLICY_AUDIT_LOG_INFO, *PPOLICY_AUDIT_LOG_INFO;
+cpp_quote("#endif")
+
+typedef struct _LSAPR_POLICY_AUDIT_EVENTS_INFO {
+    BYTE AuditingMode;
+    [size_is(MaximumAuditEventCount)] DWORD *EventAuditingOptions;
+    DWORD MaximumAuditEventCount;
+} LSAPR_POLICY_AUDIT_EVENTS_INFO, *PLSAPR_POLICY_AUDIT_EVENTS_INFO;
+
+typedef struct _LSAPR_POLICY_PRIMARY_DOM_INFO {
+    RPC_UNICODE_STRING Name;
+    PRPC_SID Sid;
+} LSAPR_POLICY_PRIMARY_DOM_INFO, *PLSAPR_POLICY_PRIMARY_DOM_INFO;
+
+typedef struct _LSAPR_POLICY_ACCOUNT_DOM_INFO {
+    RPC_UNICODE_STRING DomainName;
+    PRPC_SID Sid;
+} LSAPR_POLICY_ACCOUNT_DOM_INFO, *PLSAPR_POLICY_ACCOUNT_DOM_INFO;
+
+typedef struct _LSAPR_POLICY_PD_ACCOUNT_INFO {
+    RPC_UNICODE_STRING Name;
+} LSAPR_POLICY_PD_ACCOUNT_INFO, *PLSAPR_POLICY_PD_ACCOUNT_INFO;
+
+cpp_quote("#ifndef _NTSECAPI_H")
+typedef enum _POLICY_LSA_SERVER_ROLE {
+    PolicyServerRoleBackup = 2,
+    PolicyServerRolePrimary,
+} POLICY_LSA_SERVER_ROLE, *PPOLICY_LSA_SERVER_ROLE;
+
+typedef struct _POLICY_LSA_SERVER_ROLE_INFO {
+    POLICY_LSA_SERVER_ROLE LsaServerRole;
+} POLICY_LSA_SERVER_ROLE_INFO, *PPOLICY_LSA_SERVER_ROLE_INFO;
+cpp_quote("#endif")
+
+typedef struct _POLICY_LSA_REPLICA_SRCE_INFO {
+    RPC_UNICODE_STRING ReplicaSource;
+    RPC_UNICODE_STRING ReplicaAccountName;
+} POLICY_LSA_REPLICA_SRCE_INFO, *PPOLICY_LSA_REPLICA_SRCE_INFO;
+
+cpp_quote("#ifndef _WINNT_H")
+typedef struct _QUOTA_LIMITS {
+    INT64 PagedPoolLimit;
+    INT64 NonPagedPoolLimit;
+    INT64 MinimumWorkingSetSize;
+    INT64 MaximumWorkingSetSize;
+    INT64 PagefileLimit;
+    LARGE_INTEGER TimeLimit;
+} QUOTA_LIMITS, *PQUOTA_LIMITS;
+cpp_quote("#endif")
+
+cpp_quote("#ifndef _NTSECAPI_H")
+typedef struct _POLICY_DEFAULT_QUOTA_INFO {
+    QUOTA_LIMITS QuotaLimits;
+} POLICY_DEFAULT_QUOTA_INFO, *PPOLICY_DEFAULT_QUOTA_INFO;
+
+typedef struct _POLICY_MODIFICATION_INFO {
+    LARGE_INTEGER ModifiedId;
+    LARGE_INTEGER DatabaseCreationTime;
+} POLICY_MODIFICATION_INFO, *PPOLICY_MODIFICATION_INFO;
+cpp_quote("#endif")
+
+typedef struct _POLICY_FULL_SET_INFO {
+    BOOL ShutDownOnFull;
+} POLICY_FULL_SET_INFO, *PPOLICY_FULL_SET_INFO;
+
+cpp_quote("#ifndef _NTSECAPI_H")
+typedef struct _POLICY_AUDIT_FULL_QUERY_INFO {
+    BOOL ShutDownOnFull;
+    BOOL LogIsFull;
+} POLICY_AUDIT_FULL_QUERY_INFO, *PPOLICY_AUDIT_FULL_QUERY_INFO;
+cpp_quote("#endif")
+
+typedef struct _LSAPR_POLICY_DNS_DOMAIN_INFO {
+    RPC_UNICODE_STRING Name;
+    RPC_UNICODE_STRING DnsDomainName;
+    RPC_UNICODE_STRING DnsForestName;
+    GUID DomainGuid;
+    PRPC_SID Sid;
+} LSAPR_POLICY_DNS_DOMAIN_INFO, *PLSAPR_POLICY_DNS_DOMAIN_INFO;
+
+/*typedef
+[switch_type(POLICY_INFORMATION_CLASS)] union _LSAPR_POLICY_INFORMATION {
+    [case(PolicyAuditLogInformation)] POLICY_AUDIT_LOG_INFO PolicyAuditLogInfo;
+    [case(PolicyAuditEventsInformation)] POLICY_AUDIT_EVENTS_INFO PolicyAuditEventsInfo;
+    [case(PolicyPrimaryDomainInformation)] POLICY_PRIMARY_DOM_INFO PolicyPrimaryDomInfo;
+    [case(PolicyPdAccountInformation)] POLICY_PD_ACCOUNT_INFO PolicyPdAccountInfo;
+    [case(PolicyAccountDomainInformation)] POLICY_ACCOUNT_DOM_INFO PolicyAccountDomainInfo;
+    [case(PolicyLsaServerRoleInformation)] POLICY_LSA_SERVER_ROLE_INFO PolicyServerRoleInfo;
+    [case(PolicyReplicaSourceInformation)] POLICY_REPLICA_SRCE_INFO PolicyReplicaSourceInfo;
+    [case(PolicyDefaultQuotaInformation)] POLICY_DEFAULT_QUOTA_INFO PolicyDefaultQuotaInfo;
+    [case(PolicyModificationInformation)] POLICY_MODIFICATION_INFO PolicyModificationInfo;
+    [case(PolicyAuditFullSetInformation)] POLICY_AUDIT_FULL_SET_INFO PolicyAuditFullSetInfo;
+    [case(PolicyAuditFullQueryInformation)] POLICY_AUDIT_FULL_QUERY_INFO PolicyAuditFullQueryInfo;
+    [case(PolicyDnsDomainInformation)] LSAPR_DNS_DOMAIN_INFO PolicyDnsDomainInfo;
+    [case(PolicyDnsDomainInformationInt)] LSAPR_DNS_DOMAIN_INFO PolicyDnsDomainInfoInt;
+    [case(PolicyLocalAccountDomainInformation)] LSAPR_POLICY_ACCOUNT_DOM_INFO PolicyLocalAccountDomainInfo;
+} LSAPR_POLICY_INFORMATION, *PLSAPR_POLICY_INFORMATION;*/
+
+typedef struct _LSAPR_TRUSTED_ENUM_BUFFER {
+    DWORD EntriesRead;
+    [size_is(EntriesRead)] PLSAPR_TRUST_INFORMATION Information;
+} LSAPR_TRUSTED_ENUM_BUFFER, *PLSAPR_TRUSTED_ENUM_BUFFER;
+
+cpp_quote("#ifndef _NTSECAPI_H")
+typedef enum _TRUSTED_INFORMATION_CLASS {
+    TrustedDomainNameInformation = 1,
+    TrustedControllersInformation,
+    TrustedPosixOffsetInformation,
+    TrustedPasswordInformation,
+    TrustedDomainInformationBasic,
+    TrustedDomainInformationEx,
+    TrustedDomainAuthInformation,
+    TrustedDomainFullInformation,
+    TrustedDomainAuthInformationInternal,
+    TrustedDomainFullInformationInternal,
+    TrustedDomainInformationEx2Internal,
+    TrustedDomainFullInformation2Internal,
+    TrustedDomainSupportedEncryptionTypes,
+} TRUSTED_INFORMATION_CLASS, *PTRUSTED_INFORMATION_CLASS;
+cpp_quote("#endif")
+
+typedef struct _LSAPR_TRUSTED_DOMAIN_NAME_INFO {
+    RPC_UNICODE_STRING Name;
+} LSAPR_TRUSTED_DOMAIN_NAME_INFO, *PLSAPR_TRUSTED_DOMAIN_NAME_INFO;
+
+typedef struct _LSAPR_TRUSTED_CONTROLLERS_INFO {
+    DWORD Entries;
+    [size_is(Entries)] PRPC_UNICODE_STRING Names;
+} LSAPR_TRUSTED_CONTROLLERS_INFO, *PLSAPR_TRUSTED_CONTROLLERS_INFO;
+
+cpp_quote("#ifndef _NTSECAPI_H")
+typedef struct _TRUSTED_POSIX_OFFSET_INFO {
+    DWORD Offset;
+} TRUSTED_POSIX_OFFSET_INFO, *PTRUSTED_POSIX_OFFSET_INFO;
+cpp_quote("#endif")
+
+typedef struct _LSAPR_CR_CIPHER_VALUE {
+    DWORD Length;
+    DWORD MaximumLength;
+    [size_is(MaximumLength), length_is(Length)] BYTE *Buffer;
+} LSAPR_CR_CIPHER_VALUE, *PLSAPR_CR_CIPHER_VALUE;
+
+typedef struct _LSAPR_TRUSTED_PASSWORD_INFO {
+    PLSAPR_CR_CIPHER_VALUE Password;
+    PLSAPR_CR_CIPHER_VALUE OldPassword;
+} LSAPR_TRUSTED_PASSWORD_INFO, *PLSAPR_TRUSTED_PASSWORD_INFO;
+
+typedef struct _LSAPR_USER_RIGHT_SET {
+    DWORD Entries;
+    [size_is(Entries)] PRPC_UNICODE_STRING UserRights;
+} LSAPR_USER_RIGHT_SET, *PLSAPR_USER_RIGHT_SET;
+
+cpp_quote("#ifndef _NTSECAPI_H")
+typedef enum _POLICY_DOMAIN_INFORMATION_CLASS {
+    PolicyDomainQualityOfServiceInformation = 1,
+    PolicyDomainEfsInformation = 2,
+    PolicyDomainKerberosTicketInformation = 3,
+} POLICY_DOMAIN_INFORMATION_CLASS, *PPOLICY_DOMAIN_INFORMATION_CLASS;
+
+typedef struct _POLICY_DOMAIN_QUALITY_OF_SERVICE_INFO {
+    DWORD QualityOfService;
+} POLICY_DOMAIN_QUALITY_OF_SERVICE_INFO, *PPOLICY_DOMAIN_QUALITY_OF_SERVICE_INFO;
+cpp_quote("#endif")
+
+typedef struct _LSAPR_POLICY_DOMAIN_EFS_INFO {
+    DWORD InfoLength;
+    [size_is(InfoLength)] BYTE *EfsBlob;
+} LSAPR_POLICY_DOMAIN_EFS_INFO, *PLSAPR_POLICY_DOMAIN_EFS_INFO;
+
+cpp_quote("#ifndef _NTSECAPI_H")
+typedef struct _POLICY_DOMAIN_KERBEROS_TICKET_INFO {
+    DWORD AuthenticationOptions;
+    LARGE_INTEGER MaxServiceTicketAge;
+    LARGE_INTEGER MaxTicketAge;
+    LARGE_INTEGER MaxRenewAge;
+    LARGE_INTEGER MaxClockSkew;
+    LARGE_INTEGER Reserved;
+} POLICY_DOMAIN_KERBEROS_TICKET_INFO, *PPOLICY_DOMAIN_KERBEROS_TICKET_INFO;
+cpp_quote("#endif")
+
+typedef
+[switch_type(POLICY_DOMAIN_INFORMATION_CLASS)] union _LSAPR_POLICY_DOMAIN_INFORMATION {
+    [case(PolicyDomainQualityOfServiceInformation)] POLICY_DOMAIN_QUALITY_OF_SERVICE_INFO PolicyDomainQualityOfServiceInfo;
+    [case(PolicyDomainEfsInformation)] LSAPR_POLICY_DOMAIN_EFS_INFO PolicyDomainEfsInfo;
+    [case(PolicyDomainKerberosTicketInformation)] POLICY_DOMAIN_KERBEROS_TICKET_INFO PolicyDomainKerbTicketInfo;
+} LSAPR_POLICY_DOMAIN_INFORMATION, *PLSAPR_POLICY_DOMAIN_INFORMATION;
+
+typedef struct _LSAPR_TRUSTED_DOMAIN_INFORMATION_EX {
+    RPC_UNICODE_STRING Name;
+    RPC_UNICODE_STRING FlatName;
+    PRPC_SID Sid;
+    DWORD TrustDirection;
+    DWORD TrustType;
+    DWORD TrustAttributes;
+} LSAPR_TRUSTED_DOMAIN_INFORMATION_EX, *PLSAPR_TRUSTED_DOMAIN_INFORMATION_EX;
+
+typedef struct _LSAPR_TRUSTED_ENUM_BUFFER_EX {
+    DWORD EntriesRead;
+    [size_is(EntriesRead)] PLSAPR_TRUSTED_DOMAIN_INFORMATION_EX EnumerationBuffer;
+} LSAPR_TRUSTED_ENUM_BUFFER_EX, *PLSAPR_TRUSTED_ENUM_BUFFER_EX;
+
+typedef struct _LSAPR_TRUSTED_DOMAIN_INFORMATION_EX2 {
+    RPC_UNICODE_STRING Name;
+    RPC_UNICODE_STRING FlatName;
+    PRPC_SID Sid;
+    DWORD TrustDirection;
+    DWORD TrustType;
+    DWORD TrustAttributes;
+    DWORD ForestTrustLength;
+    [size_is(ForestTrustLength)] BYTE *ForestTrustInfo;
+} LSAPR_TRUSTED_DOMAIN_INFORMATION_EX2, *PLSAPR_TRUSTED_DOMAIN_INFORMATION_EX2;
+
+typedef struct _LSAPR_AUTH_INFORMATION {
+    LARGE_INTEGER LastUpdateTime;
+    DWORD AuthType;
+    DWORD AuthInfoLength;
+    [size_is(AuthInfoLength)] BYTE *AuthInfo;
+} LSAPR_AUTH_INFORMATION, *PLSAPR_AUTH_INFORMATION;
+
+typedef struct _LSAPR_TRUSTED_DOMAIN_AUTH_INFORMATION {
+    DWORD IncomingAuthInfos;
+    PLSAPR_AUTH_INFORMATION IncomingAuthenticationInformation;
+    PLSAPR_AUTH_INFORMATION IncomingPreviousAuthenticationInformation;
+    DWORD OutgoingAuthInfos;
+    PLSAPR_AUTH_INFORMATION OutgoingAuthenticationInformation;
+    PLSAPR_AUTH_INFORMATION OutgoingPreviousAuthenticationInformation;
+} LSAPR_TRUSTED_DOMAIN_AUTH_INFORMATION, *PLSAPR_TRUSTED_DOMAIN_AUTH_INFORMATION;
+
+typedef struct _LSAPR_TRUSTED_DOMAIN_AUTH_BLOB {
+    DWORD AuthSize;
+    [size_is(AuthSize)] BYTE *AuthBlob;
+} LSAPR_TRUSTED_DOMAIN_AUTH_BLOB, *PLSAPR_TRUSTED_DOMAIN_AUTH_BLOB;
+
+typedef struct _LSAPR_TRUSTED_DOMAIN_AUTH_INFORMATION_INTERNAL {
+    LSAPR_TRUSTED_DOMAIN_AUTH_BLOB AuthBlob;
+} LSAPR_TRUSTED_DOMAIN_AUTH_INFORMATION_INTERNAL, *PLSAPR_TRUSTED_DOMAIN_AUTH_INFORMATION_INTERNAL;
+
+typedef struct _LSAPR_TRUSTED_DOMAIN_FULL_INFORMATION {
+    LSAPR_TRUSTED_DOMAIN_INFORMATION_EX Information;
+    TRUSTED_POSIX_OFFSET_INFO PosixOffset;
+    LSAPR_TRUSTED_DOMAIN_AUTH_INFORMATION AuthInformation;
+} LSAPR_TRUSTED_DOMAIN_FULL_INFORMATION, *PLSAPR_TRUSTED_DOMAIN_FULL_INFORMATION;
+
+typedef struct _LSAPR_TRUSTED_DOMAIN_FULL_INFORMATION_INTERNAL {
+    LSAPR_TRUSTED_DOMAIN_INFORMATION_EX Information;
+    TRUSTED_POSIX_OFFSET_INFO PosixOffset;
+    LSAPR_TRUSTED_DOMAIN_AUTH_INFORMATION_INTERNAL AuthInformation;
+} LSAPR_TRUSTED_DOMAIN_FULL_INFORMATION_INTERNAL, *PLSAPR_TRUSTED_DOMAIN_FULL_INFORMATION_INTERNAL;
+
+typedef struct _LSAPR_TRUSTED_DOMAIN_FULL_INFORMATION2 {
+    LSAPR_TRUSTED_DOMAIN_INFORMATION_EX2 Information;
+    TRUSTED_POSIX_OFFSET_INFO PosixOffset;
+    LSAPR_TRUSTED_DOMAIN_AUTH_INFORMATION AuthInformation;
+} LSAPR_TRUSTED_DOMAIN_FULL_INFORMATION2, *PLSAPR_TRUSTED_DOMAIN_FULL_INFORMATION2;
+
+typedef struct _TRUSTED_DOMAIN_SUPPORTED_ENCRYPTION_TYPES {
+    DWORD SupportedEncryptionTypes;
+} TRUSTED_DOMAIN_SUPPORTED_ENCRYPTION_TYPES, *PTRUSTED_DOMAIN_SUPPORTED_ENCRYPTION_TYPES;
+
+typedef
+[switch_type(TRUSTED_INFORMATION_CLASS)] union _LSAPR_TRUSTED_DOMAIN_INFO {
+    [case(TrustedDomainNameInformation)] LSAPR_TRUSTED_DOMAIN_NAME_INFO TrustedDomainNameInfo;
+    [case(TrustedControllersInformation)] LSAPR_TRUSTED_CONTROLLERS_INFO TrustedControllersInfo;
+    [case(TrustedPosixOffsetInformation)] TRUSTED_POSIX_OFFSET_INFO TrustedPosixOffsetInfo;
+    [case(TrustedPasswordInformation)] LSAPR_TRUSTED_PASSWORD_INFO TrustedPasswordInfo;
+    [case(TrustedDomainInformationBasic)] LSAPR_TRUSTED_DOMAIN_INFORMATION_BASIC TrustedDomainInfoBasic;
+    [case(TrustedDomainInformationEx)] LSAPR_TRUSTED_DOMAIN_INFORMATION_EX TrustedDomainInfoEx;
+    [case(TrustedDomainAuthInformation)] LSAPR_TRUSTED_DOMAIN_AUTH_INFORMATION TrustedAuthInfo;
+    [case(TrustedDomainFullInformation)] LSAPR_TRUSTED_DOMAIN_FULL_INFORMATION TrustedFullInfo;
+    [case(TrustedDomainAuthInformationInternal)] LSAPR_TRUSTED_DOMAIN_AUTH_INFORMATION_INTERNAL TrustedAuthInfoInternal;
+    [case(TrustedDomainFullInformationInternal)] LSAPR_TRUSTED_DOMAIN_FULL_INFORMATION_INTERNAL TrustedFullInfoInternal;
+    [case(TrustedDomainInformationEx2Internal)] LSAPR_TRUSTED_DOMAIN_INFORMATION_EX2 TrustedDomainInfoEx2;
+    [case(TrustedDomainFullInformation2Internal)] LSAPR_TRUSTED_DOMAIN_FULL_INFORMATION2 TrustedFullInfo2;
+    [case(TrustedDomainSupportedEncryptionTypes)] TRUSTED_DOMAIN_SUPPORTED_ENCRYPTION_TYPES TrustedDomainSETs;
+} LSAPR_TRUSTED_DOMAIN_INFO, *PLSAPR_TRUSTED_DOMAIN_INFO;
+
+typedef struct _LSAPR_LUID_AND_ATTRIBUTES {
+    LUID Luid;
+    DWORD Attributes;
+} LSAPR_LUID_AND_ATTRIBUTES, *PLSAPR_LUID_AND_ATTRIBUTES;
+
+typedef struct _LSAPR_PRIVILEGE_SET {
+    DWORD PrivilegeCount;
+    DWORD Control;
+    [size_is(PrivilegeCount)] LSAPR_LUID_AND_ATTRIBUTES Privilege[*];
+} LSAPR_PRIVILEGE_SET, *PLSAPR_PRIVILEGE_SET;
+
+cpp_quote("#ifndef _NTSECAPI_H")
+typedef enum _LSA_FOREST_TRUST_RECORD_TYPE {
+    ForestTrustTopLevelName = 0,
+    ForestTrustTopLevelNameEx = 1,
+    ForestTrustDomainInfo = 2,
+} LSA_FOREST_TRUST_RECORD_TYPE;
+
+typedef struct _LSA_FOREST_TRUST_BINARY_DATA {
+    DWORD Length;
+    [size_is(Length)] BYTE *Buffer;
+} LSA_FOREST_TRUST_BINARY_DATA, *PLSA_FOREST_TRUST_BINARY_DATA;
+
+typedef struct _LSA_FOREST_TRUST_DOMAIN_INFO {
+    PRPC_SID Sid;
+    LSA_UNICODE_STRING DnsName;
+    LSA_UNICODE_STRING NetbiosName;
+} LSA_FOREST_TRUST_DOMAIN_INFO, *PLSA_FOREST_TRUST_DOMAIN_INFO;
+
+typedef struct _LSA_FOREST_TRUST_RECORD {
+    DWORD Flags;
+    LSA_FOREST_TRUST_RECORD_TYPE ForestTrustType;
+    LARGE_INTEGER Time;
+    [switch_type(LSA_FOREST_TRUST_RECORD_TYPE), switch_is(ForestTrustType)] union {
+        [case(ForestTrustTopLevelName, ForestTrustTopLevelNameEx)] LSA_UNICODE_STRING TopLevelName;
+        [case(ForestTrustDomainInfo)] LSA_FOREST_TRUST_DOMAIN_INFO DomainInfo;
+        [default] LSA_FOREST_TRUST_BINARY_DATA Data;
+    } ForestTrustData;
+} LSA_FOREST_TRUST_RECORD, *PLSA_FOREST_TRUST_RECORD;
+
+typedef struct _LSA_FOREST_TRUST_INFORMATION {
+    DWORD RecordCount;
+    [size_is(RecordCount)] PLSA_FOREST_TRUST_RECORD *Entries;
+} LSA_FOREST_TRUST_INFORMATION, *PLSA_FOREST_TRUST_INFORMATION;
+
+typedef enum _LSA_FOREST_TRUST_COLLISION_RECORD_TYPE {
+    CollisionTdo = 0,
+    CollisionXref,
+    CollisionOther,
+} LSA_FOREST_TRUST_COLLISION_RECORD_TYPE;
+
+typedef struct _LSA_FOREST_TRUST_COLLISION_RECORD {
+    DWORD Index;
+    LSA_FOREST_TRUST_COLLISION_RECORD_TYPE Type;
+    DWORD Flags;
+    LSA_UNICODE_STRING Name;
+} LSA_FOREST_TRUST_COLLISION_RECORD, *PLSA_FOREST_TRUST_COLLISION_RECORD;
+
+typedef struct _LSA_FOREST_TRUST_COLLISION_INFORMATION {
+    DWORD RecordCount;
+    [size_is(RecordCount)] PLSA_FOREST_TRUST_COLLISION_RECORD *Entries;
+} LSA_FOREST_TRUST_COLLISION_INFORMATION, *PLSA_FOREST_TRUST_COLLISION_INFORMATION;
+cpp_quote("#endif")
 
 [
   uuid(12345778-1234-abcd-ef00-0123456789ab),
 ]
 interface lsarpc
 {
-/*
-    cpp_quote("#if 0")
-    typedef [handle, unique] wchar_t *LPWSTR;
-    typedef [handle, unique] char *LPSTR;
-    cpp_quote("#endif")
-    typedef [context_handle] void *LSA_HANDLE;
-    typedef LSA_HANDLE *PLSA_HANDLE;
-    typedef unsigned int NTSTATUS;
-*/
-
-    cpp_quote("#if 0")
-    typedef struct _LSA_UNICODE_STRING {
-           unsigned short Length;
-           unsigned short MaximumLength;
-           [size_is(MaximumLength)] wchar_t *Buffer;
-    } LSA_UNICODE_STRING, *PLSA_UNICODE_STRING;
-    cpp_quote("#endif")
-
     /* Function 0 */
-    NTSTATUS LsarClose(handle_t BindingHandle,
-                       [in] LSA_HANDLE ObjectHandle);
+    NTSTATUS LsarClose(
+        [in, out] LSAPR_HANDLE *ObjectHandle);
 
     /* Function 1 */
-    NTSTATUS LsarDelete(handle_t BindingHandle,
-                        [in] LSA_HANDLE ObjectHandle);
+    NTSTATUS LsarDelete(
+        [in] LSAPR_HANDLE ObjectHandle);
+
+    /* Function 2 */
+    NTSTATUS LsarEnumeratePrivileges(
+        [in] LSAPR_HANDLE PolicyHandle,
+        [in, out] DWORD *EnumerationContext,
+        [out] PLSAPR_PRIVILEGE_ENUM_BUFFER EnumerationBuffer,
+        [in] DWORD PreferedMaximumLength);
+
+    /* Function 3 */
+    NTSTATUS LsarQuerySecurityObject(
+        [in] LSAPR_HANDLE ObjectHandle,
+        [in] SECURITY_INFORMATION SecurityInformation,
+        [out] PLSAPR_SR_SECURITY_DESCRIPTOR *SecurityDescriptor);
+
+    /* Function 4 */
+    NTSTATUS LsarSetSecurityObject(
+        [in] LSAPR_HANDLE ObjectHandle,
+        [in] SECURITY_INFORMATION SecurityInformation,
+        [in] PLSAPR_SR_SECURITY_DESCRIPTOR SecurityDescriptor);
+
+    /* Function 5 */
+    NTSTATUS LsarChangePassword(
+        [in] handle_t hBinding,  /* FIXME */
+        [in] PRPC_UNICODE_STRING String1,
+        [in] PRPC_UNICODE_STRING String2,
+        [in] PRPC_UNICODE_STRING String3,
+        [in] PRPC_UNICODE_STRING String4,
+        [in] PRPC_UNICODE_STRING String5);
+
+    /* Function 6 */
+    NTSTATUS LsarOpenPolicy(
+        [in, unique] PLSAPR_SERVER_NAME SystemName,
+        [in] PLSAPR_OBJECT_ATTRIBUTES ObjectAttributes,
+        [in] ACCESS_MASK DesiredAccess,
+        [out] LSAPR_HANDLE *PolicyHandle);
+
+    /* Function 7 */
+    NTSTATUS LsarQueryInformationPolicy(
+        [in] LSAPR_HANDLE PolicyHandle,
+        [in] POLICY_INFORMATION_CLASS InformationClass,
+        [in] unsigned long PolicyInformation);
+        /* FIXME: should be [in, switch_is(InformationClass)] PLSAPR_POLICY_INFORMATION PolicyInformation); */
+
+    /* Function 8 */
+    NTSTATUS LsarSetInformationPolicy(
+        [in] LSAPR_HANDLE PolicyHandle,
+        [in] POLICY_INFORMATION_CLASS InformationClass,
+        [out] unsigned long *PolicyInformation);
+        /* FIXME: should be [out, switch_is(InformationClass)] PLSAPR_POLICY_INFORMATION *PolicyInformation); */
+
+    /* Function 9 */
+    NTSTATUS LsarClearAuditLog(
+        [in] LSAPR_HANDLE ObjectHandle);
+
+    /* Function 10 */
+    NTSTATUS LsarCreateAccount(
+        [in] LSAPR_HANDLE PolicyHandle,
+        [in] PRPC_SID AccountSid,
+        [in] ACCESS_MASK DesiredAccess,
+        [out] LSAPR_HANDLE *AccountHandle);
+
+    /* Function 11 */
+    NTSTATUS LsarEnumerateAccounts(
+        [in] LSAPR_HANDLE PolicyHandle,
+        [in, out] DWORD *EnumerationContext,
+        [out] PLSAPR_ACCOUNT_ENUM_BUFFER EnumerationBuffer,
+        [in] DWORD PreferedMaximumLength);
+
+    /* Function 12 */
+    NTSTATUS LsarCreateTrustedDomain(
+        [in] LSAPR_HANDLE PolicyHandle,
+        [in] PLSAPR_TRUST_INFORMATION TrustedDomainInformation,
+        [in] ACCESS_MASK DesiredAccess,
+        [out] LSAPR_HANDLE *TrustedDomainHandle);
+
+    /* Function 13 */
+    NTSTATUS LsarEnumerateTrustedDomains(
+        [in] LSAPR_HANDLE PolicyHandle,
+        [in, out] DWORD *EnumerationContext,
+        [out] PLSAPR_TRUSTED_ENUM_BUFFER EnumerationBuffer,
+        [in] DWORD PreferedMaximumLength);
+
+    /* Function 14 */
+    NTSTATUS LsarLookupNames(
+        [in] LSAPR_HANDLE PolicyHandle,
+        [in] DWORD Count,
+        [in, size_is(Count)] PRPC_UNICODE_STRING Names,
+        [out] PLSAPR_REFERENCED_DOMAIN_LIST *ReferencedDomains,
+        [in, out] PLSAPR_TRANSLATED_SIDS TranslatedSids,
+        [in] LSAP_LOOKUP_LEVEL LookupLevel,
+        [in, out] DWORD *MappedCount);
+
+    /* Function 15 */
+    NTSTATUS LsarLookupSids(
+        [in] LSAPR_HANDLE PolicyHandle,
+        [in] PLSAPR_SID_ENUM_BUFFER SidEnumBuffer,
+        [out] PLSAPR_REFERENCED_DOMAIN_LIST *ReferencedDomains,
+        [in, out] PLSAPR_TRANSLATED_NAMES TranslatedNames,
+        [in] LSAP_LOOKUP_LEVEL LookupLevel,
+        [in, out] DWORD *MappedCount);
+
+    /* Function 16 */
+    NTSTATUS LsarCreateSecret(
+        [in] LSAPR_HANDLE PolicyHandle,
+        [in] PRPC_UNICODE_STRING SecretName,
+        [in] ACCESS_MASK DesiredAccess,
+        [out] LSAPR_HANDLE *SecretHandle);
+
+    /* Function 17 */
+    NTSTATUS LsarOpenAccount(
+        [in] LSAPR_HANDLE PolicyHandle,
+        [in] PRPC_SID AccountSid,
+        [in] ACCESS_MASK DesiredAccess,
+        [out] LSAPR_HANDLE *AccountHandle);
+
+    /* Function 18 */
+    NTSTATUS LsarEnumeratePrivilegesAccount(
+        [in] LSAPR_HANDLE AccountHandle,
+        [out] PLSAPR_PRIVILEGE_SET *Privileges);
+
+    /* Function 19 */
+    NTSTATUS LsarAddPrivilegesToAccount(
+        [in] LSAPR_HANDLE AccountHandle,
+        [in] PLSAPR_PRIVILEGE_SET Privileges);
+
+    /* Function 20 */
+    NTSTATUS LsarRemovePrivilegesFromAccount(
+        [in] LSAPR_HANDLE AccountHandle,
+        [in] BOOL AllPrivileges,
+        [in, unique] PLSAPR_PRIVILEGE_SET Privileges);
+
+    /* Function 21 */
+    NTSTATUS LsarGetQuotasForAccount(
+        [in] LSAPR_HANDLE AccountHandle,
+        [out] PQUOTA_LIMITS QuotaLimits);
+
+    /* Function 22 */
+    NTSTATUS LsarSetQuotasForAccount(
+        [in] LSAPR_HANDLE AccountHandle,
+        [in] PQUOTA_LIMITS QuotaLimits);
+
+    /* Function 23 */
+    NTSTATUS LsarGetSystemAccessAccount(
+        [in] LSAPR_HANDLE AccountHandle,
+        [out] ACCESS_MASK *SystemAccess);
+
+    /* Function 24 */
+    NTSTATUS LsarSetSystemAccessAccount(
+        [in] LSAPR_HANDLE AccountHandle,
+        [in] ACCESS_MASK SystemAccess);
+
+    /* Function 25 */
+    NTSTATUS LsarOpenTrustedDomain(
+        [in] LSAPR_HANDLE PolicyHandle,
+        [in] PRPC_SID TrustedDomainSid,
+        [in] ACCESS_MASK DesiredAccess,
+        [out] LSAPR_HANDLE *TrustedDomainHandle);
+
+    /* Function 26 */
+    NTSTATUS LsarQueryInfoTrustedDomain(
+        [in] LSAPR_HANDLE TrustedDomainHandle,
+        [in] TRUSTED_INFORMATION_CLASS InformationClass,
+        [out, switch_is(InformationClass)] PLSAPR_TRUSTED_DOMAIN_INFO *TrustedDomainInformation);
+
+    /* Function 27 */
+    NTSTATUS LsarSetInformationTrustedDomain(
+        [in] LSAPR_HANDLE TrustedDomainHandle,
+        [in] TRUSTED_INFORMATION_CLASS InformationClass,
+        [in, switch_is(InformationClass)] PLSAPR_TRUSTED_DOMAIN_INFO TrustedDomainInformation);
+
+    /* Function 28 */
+    NTSTATUS LsarOpenSecret(
+        [in] LSAPR_HANDLE PolicyHandle,
+        [in] PRPC_UNICODE_STRING SecretName,
+        [in] ACCESS_MASK DesiredAccess,
+        [out] LSAPR_HANDLE *SecretHandle);
+
+    /* Function 29 */
+    NTSTATUS LsarSetSecret(
+        [in] LSAPR_HANDLE *SecretHandle,
+        [in, unique] PLSAPR_CR_CIPHER_VALUE EncryptedCurrentValue,
+        [in, unique] PLSAPR_CR_CIPHER_VALUE EncryptedOldValue);
+
+    /* Function 30 */
+    NTSTATUS LsarQuerySecret(
+        [in] LSAPR_HANDLE SecretHandle,
+        [in, out, unique] PLSAPR_CR_CIPHER_VALUE *EncryptedCurrentValue,
+        [in, out, unique] PLARGE_INTEGER CurrentValueSetTime,
+        [in, out, unique] PLSAPR_CR_CIPHER_VALUE *EncryptedOldValue,
+        [in, out, unique] PLARGE_INTEGER OldValueSetTime);
+
+    /* Function 31 */
+    NTSTATUS LsarLookupPrivilegeValue(
+        [in] LSAPR_HANDLE PolicyHandle,
+        [in] PRPC_UNICODE_STRING Name,
+        [out] PLUID Value);
+
+    /* Function 32 */
+    NTSTATUS LsarLookupPrivilegeName(
+        [in] LSAPR_HANDLE PolicyHandle,
+        [in] PLUID Value,
+        [out] PRPC_UNICODE_STRING *Name);
+
+    /* Function 33 */
+    NTSTATUS LsarLookupPrivilegeDisplayName(
+        [in] LSAPR_HANDLE PolicyHandle,  /* FIXME */
+        /*[in] PRPC_UNICODE_STRING Name,
+        [in] USHORT ClientLanguage,
+        [in] USHORT ClientSystemDefaultLanguage,
+        [out] PRPC_UNICODE_STRING *DisplayName,*/
+        [out] USHORT *LanguageReturned);
+
+    /* Function 34 */
+    NTSTATUS LsarDeleteObject(
+        [in, out] LSAPR_HANDLE *ObjectHandle);
+
+cpp_quote("#if _WIN32_WINNT >= 0x0351")
+
+    /* Function 35 */
+    NTSTATUS LsarEnumerateAccountsWithUserRight(
+        [in] LSAPR_HANDLE PolicyHandle,
+        [in, unique] PRPC_UNICODE_STRING UserRight,
+        [out] PLSAPR_ACCOUNT_ENUM_BUFFER EnumerationBuffer);
+
+    /* Function 36 */
+    NTSTATUS LsarEnmuerateAccountRights(
+        [in] LSAPR_HANDLE PolicyHandle,
+        [in] PRPC_SID AccountSid,
+        [out] PLSAPR_USER_RIGHT_SET UserRights);
+
+    /* Function 37 */
+    NTSTATUS LsarAddAccountRights(
+        [in] LSAPR_HANDLE PolicyHandle,
+        [in] PRPC_SID AccountSid,
+        [in] PLSAPR_USER_RIGHT_SET UserRights);
+
+    /* Function 38 */
+    NTSTATUS LsarRemoveAccountRights(
+        [in] LSAPR_HANDLE PolicyHandle,
+        [in] PRPC_SID AccountSid,
+        [in] BOOL AllRights,
+        [in] PLSAPR_USER_RIGHT_SET UserRights);
+
+    /* Function 39 */
+    NTSTATUS LsarQueryTrustedDomainInfo(
+        [in] LSAPR_HANDLE PolicyHandle,
+        [in] PRPC_SID TrustedDomainSid,
+        [in] TRUSTED_INFORMATION_CLASS InformationClass,
+        [out, switch_is(InformationClass)] PLSAPR_TRUSTED_DOMAIN_INFO *TrustedDomainInformation);
+
+    /* Function 40 */
+    NTSTATUS LsarSetTrustedDomainInfo(
+        [in] LSAPR_HANDLE PolicyHandle,
+        [in] PRPC_SID TrustedDomainSid,
+        [in] TRUSTED_INFORMATION_CLASS InformationClass,
+        [in, switch_is(InformationClass)] PLSAPR_TRUSTED_DOMAIN_INFO TrustedDomainInformation);
+
+    /* Function 41 */
+    NTSTATUS LsarDeleteTrustedDomain(
+        [in] LSAPR_HANDLE PolicyHandle,
+        [in] PRPC_SID TrustedDomainSid);
+
+    /* Function 42 */
+    NTSTATUS LsarStorePrivateData(
+        [in] LSAPR_HANDLE PolicyHandle,
+        [in] PRPC_UNICODE_STRING KeyName,
+        [in, unique] PLSAPR_CR_CIPHER_VALUE EncryptedData);
+
+    /* Function 43 */
+    NTSTATUS LsarRetrievePrivateData(
+        [in] LSAPR_HANDLE PolicyHandle,
+        [in] PRPC_UNICODE_STRING KeyName,
+        [in, out] PLSAPR_CR_CIPHER_VALUE *EncryptedData);
+
+    /* Function 44 */
+    NTSTATUS LsarOpenPolicy2(
+        [in, unique, string] PLSAPR_SERVER_NAME SystemName,
+        [in] PLSAPR_OBJECT_ATTRIBUTES ObjectAttributes,
+        [in] ACCESS_MASK DesiredAccess,
+        [out] LSAPR_HANDLE *PolicyHandle);
+
+    /* Function 45 */
+    NTSTATUS LsarGetUserName(
+        [in, unique, string] PLSAPR_SERVER_NAME SystemName,
+        [in, out] PRPC_UNICODE_STRING *UserName,
+        [in, out, unique] PRPC_UNICODE_STRING *DomainName);
+
+cpp_quote("#if _WIN32_WINNT >= 0x0500")
+
+    /* Function 46 */
+    NTSTATUS LsarQueryInformationPolicy2(
+        [in] LSAPR_HANDLE PolicyHandle,
+        [in] POLICY_INFORMATION_CLASS InformationClass,
+        [out] unsigned long *PolicyInformation);
+        /* FIXME: should be [out, switch_is(InformationClass)] PLSAPR_POLICY_INFORMATION *PolicyInformation); */
+
+    /* Function 47 */
+    NTSTATUS LsarSetInformationPolicy2(
+        [in] LSAPR_HANDLE PolicyHandle,
+        [in] POLICY_INFORMATION_CLASS InformationClass,
+        [in] unsigned long PolicyInformation);
+        /* FIXME: should be [in, switch_is(InformationClass)] PLSAPR_POLICY_INFORMATION PolicyInformation); */
+
+    /* Function 48 */
+    NTSTATUS LsarQueryTrustedDomainInfoByName(
+        [in] LSAPR_HANDLE PolicyHandle,
+        [in] PRPC_UNICODE_STRING TrustedDomainName,
+        [in] POLICY_INFORMATION_CLASS InformationClass,
+        [out] unsigned long *PolicyInformation);
+        /* FIXME: should be [out, switch_is(InformationClass)] PLSAPR_POLICY_INFORMATION *PolicyInformation); */
+
+    /* Function 49 */
+    NTSTATUS LsarSetTrustedDomainInfoByName(
+        [in] LSAPR_HANDLE PolicyHandle,
+        [in] PRPC_UNICODE_STRING TrustedDomainName,
+        [in] POLICY_INFORMATION_CLASS InformationClass,
+        [in] unsigned long PolicyInformation);
+        /* FIXME: should be [in, switch_is(InformationClass)] PLSAPR_POLICY_INFORMATION PolicyInformation); */
+
+    /* Function 50 */
+    NTSTATUS LsarEnumerateTrustedDomainsEx(
+        [in] LSAPR_HANDLE PolicyHandle,
+        [in, out] DWORD *EnumerationContext,
+        [out] PLSAPR_TRUSTED_ENUM_BUFFER_EX EnumerationBuffer,
+        [in] DWORD PreferedMaximumLength);
+
+    /* Function 51 */
+    NTSTATUS LsarCreateTrustedDomainEx(
+        [in] LSAPR_HANDLE PolicyHandle,
+        [in] PLSAPR_TRUSTED_DOMAIN_INFORMATION_EX TrustedDomainInformation,
+        [in] PLSAPR_TRUSTED_DOMAIN_AUTH_INFORMATION AuthentificationInformation,
+        [in] ACCESS_MASK DesiredAccess,
+        [out] LSAPR_HANDLE *TrustedDomainHandle);
+
+    /* Function 52 */
+    NTSTATUS LsarSetPolicyReplicationHandle(
+        [in, out] PLSAPR_HANDLE PolicyHandle);
+
+    /* Function 53 */
+    NTSTATUS LsarQueryDomainInformationPolicy(
+        [in] LSAPR_HANDLE PolicyHandle,
+        [in] POLICY_INFORMATION_CLASS InformationClass,
+        [out] unsigned long *PolicyInformation);
+        /* FIXME: should be [out, switch_is(InformationClass)] PLSAPR_POLICY_INFORMATION *PolicyInformation); */
+
+    /* Function 54 */
+    NTSTATUS LsarSetDomainInformationPolicy(
+        [in] LSAPR_HANDLE PolicyHandle,
+        [in] POLICY_INFORMATION_CLASS InformationClass,
+        [in] unsigned long PolicyInformation);
+        /* FIXME: should be [in, switch_is(InformationClass)] PLSAPR_POLICY_INFORMATION PolicyInformation); */
+
+    /* Function 55 */
+    NTSTATUS LsarOpenTrustedDomainByName(
+        [in] LSAPR_HANDLE PolicyHandle,
+        [in] PRPC_UNICODE_STRING TrustedDomainName,
+        [in] ACCESS_MASK DesiredAccess,
+        [out] LSAPR_HANDLE *TrustedDomainHandle);
+
+    /* Function 56 */
+    NTSTATUS LsarTestCall(
+        [in] handle_t hBinding); /* FIXME */
+
+    /* Function 57 */
+    NTSTATUS LsarLookupSids2(
+        [in] LSAPR_HANDLE PolicyHandle,
+        [in] PLSAPR_SID_ENUM_BUFFER SidEnumBuffer,
+        [out] PLSAPR_REFERENCED_DOMAIN_LIST *ReferencedDomains,
+        [in, out] PLSAPR_TRANSLATED_NAMES_EX TranslatedNames,
+        [in] LSAP_LOOKUP_LEVEL LookupLevel,
+        [in, out] DWORD *MappedCount,
+        [in] DWORD LookupOptions,
+        [in] DWORD ClientRevision);
+
+    /* Function 58 */
+    NTSTATUS LsarLookupNames2(
+        [in] LSAPR_HANDLE PolicyHandle,
+        [in] DWORD Count,
+        [in, size_is(Count)] PRPC_UNICODE_STRING Names,
+        [out] PLSAPR_REFERENCED_DOMAIN_LIST *ReferencedDomains,
+        [in, out] PLSAPR_TRANSLATED_SID_EX TranslatedSids,
+        [in] LSAP_LOOKUP_LEVEL LookupLevel,
+        [in, out] DWORD *MappedCount,
+        [in] DWORD LookupOptions,
+        [in] DWORD ClientRevision);
+
+    /* Function 59 */
+    NTSTATUS LsarCreateTrustedDomainEx2(
+        [in] LSAPR_HANDLE PolicyHandle,
+        [in] PLSAPR_TRUSTED_DOMAIN_INFORMATION_EX TrustedDomainInformation,
+        [in] PLSAPR_TRUSTED_DOMAIN_AUTH_INFORMATION_INTERNAL AuthentificationInformation,
+        [in] ACCESS_MASK DesiredAccess,
+        [out] LSAPR_HANDLE *TrustedDomainHandle);
+
+cpp_quote("#if _WIN32_WINNT >= 0x0501")
+
+    /* Function 60 */
+    NTSTATUS CredrWrite(
+        [in] handle_t hBinding); /* FIXME */
+
+    /* Function 61 */
+    NTSTATUS CredrRead(
+        [in] handle_t hBinding); /* FIXME */
+
+    /* Function 62 */
+    NTSTATUS CredrEnumerate(
+        [in] handle_t hBinding); /* FIXME */
+
+    /* Function 63 */
+    NTSTATUS CredrWriteDomainCredentials(
+        [in] handle_t hBinding); /* FIXME */
+
+    /* Function 64 */
+    NTSTATUS CredrReadDomainCredentials(
+        [in] handle_t hBinding); /* FIXME */
+
+    /* Function 65 */
+    NTSTATUS CredrDelete(
+        [in] handle_t hBinding); /* FIXME */
+
+    /* Function 66 */
+    NTSTATUS CredrGetTargetInfo(
+        [in] handle_t hBinding); /* FIXME */
+
+    /* Function 67 */
+    NTSTATUS CredrProfileLoaded(
+        [in] handle_t hBinding); /* FIXME */
+
+    /* Function 68 */
+    NTSTATUS LsarLookupNames3(
+        [in] LSAPR_HANDLE PolicyHandle,
+        [in] DWORD Count,
+        [in, size_is(Count)] PRPC_UNICODE_STRING Names,
+        [out] PLSAPR_REFERENCED_DOMAIN_LIST *ReferencedDomains,
+        [in, out] PLSAPR_TRANSLATED_SID_EX2 TranslatedSids,
+        [in] LSAP_LOOKUP_LEVEL LookupLevel,
+        [in, out] DWORD *MappedCount,
+        [in] DWORD LookupOptions,
+        [in] DWORD ClientRevision);
+
+    /* Function 69 */
+    NTSTATUS CredrGetSessionTypes(
+        [in] handle_t hBinding); /* FIXME */
+
+    /* Function 70 */
+    NTSTATUS LsarRegisterAuditEvent(
+        [in] handle_t hBinding); /* FIXME */
+
+    /* Function 71 */
+    NTSTATUS LsarGenAuditEvent(
+        [in] handle_t hBinding); /* FIXME */
+
+    /* Function 72 */
+    NTSTATUS LsarUnregisterAuditEvent(
+        [in] handle_t hBinding); /* FIXME */
+
+    /* Function 73 */
+    NTSTATUS LsarQueryForestTrustInformation(
+        [in] LSAPR_HANDLE PolicyHandle,
+        [in] PLSA_UNICODE_STRING TrustedDomainName,
+        [in] LSA_FOREST_TRUST_RECORD_TYPE HighestRecordType,
+        [out] PLSA_FOREST_TRUST_INFORMATION *ForestTrustInfo);
+
+    /* Function 74 */
+    NTSTATUS LsarSetForestTrustInformation(
+        [in] LSAPR_HANDLE PolicyHandle,
+        [in] PLSA_UNICODE_STRING TrustedDomainName,
+        [in] LSA_FOREST_TRUST_RECORD_TYPE HighestRecordType,
+        [in] PLSA_FOREST_TRUST_INFORMATION ForestTrustInfo,
+        [in] BOOL CheckOnly,
+        [out] PLSA_FOREST_TRUST_COLLISION_INFORMATION *CollisionInfo);
+
+    /* Function 75 */
+    NTSTATUS CredrRename(
+        [in] handle_t hBinding); /* FIXME */
+
+    /* Function 76 */
+    NTSTATUS LsarLookupSids3(
+        [in] handle_t hBinding, /* FIXME */
+        [in] PLSAPR_SID_ENUM_BUFFER SidEnumBuffer,
+        [out] PLSAPR_REFERENCED_DOMAIN_LIST *ReferencedDomains,
+        [in, out] PLSAPR_TRANSLATED_NAMES_EX TranslatedNames,
+        [in] LSAP_LOOKUP_LEVEL LookupLevel,
+        [in, out] DWORD *MappedCount,
+        [in] DWORD LookupOptions,
+        [in] DWORD ClientRevision);
+
+    /* Function 77 */
+    NTSTATUS LsarLookupNames4(
+        [in] handle_t hBinding, /* FIXME */
+        [in] handle_t RpcHandle,
+        [in] DWORD Count,
+        [in, size_is(Count)] PRPC_UNICODE_STRING Names,
+        [out] PLSAPR_REFERENCED_DOMAIN_LIST *ReferencedDomains,
+        [in, out] PLSAPR_TRANSLATED_SID_EX2 TranslatedSids,
+        [in] LSAP_LOOKUP_LEVEL LookupLevel,
+        [in, out] DWORD *MappedCount,
+        [in] DWORD LookupOptions,
+        [in] DWORD ClientRevision);
+
+    /* Function 78 */
+    NTSTATUS LsarOpenPolicySce(
+        [in] handle_t hBinding); /* FIXME */
+
+    /* Function 79 */
+    NTSTATUS LsarAdtRegisterSecurityEventSource(
+        [in] handle_t hBinding); /* FIXME */
+
+    /* Function 80 */
+    NTSTATUS LsarAdtUnregisterSecurityEventSource(
+        [in] handle_t hBinding); /* FIXME */
+
+    /* Function 81 */
+    NTSTATUS LsarAdtReportSecurityEvent(
+        [in] handle_t hBinding); /* FIXME */
+
+cpp_quote("#endif /* _WIN32_WINNT >= 0x0501 */")
+cpp_quote("#endif /* _WIN32_WINNT >= 0x0500 */")
+cpp_quote("#endif /* _WIN32_WINNT >= 0x0351 */")
+
 }