X-Git-Url: http://git.samba.org/samba.git/?a=blobdiff_plain;f=source%2Flibrpc%2Fidl%2Flsa.idl;h=465c75778432ebeb5b65ce8a1e5099c70b9dfb91;hb=bb1ed44f45020f1e11d928f5130a889c11ee59c4;hp=6766775c9cca82c216cb4dc13a281d04bad23d2d;hpb=f8bbce69bf43984ddf35c22cb6a9e6ef22f8f6f4;p=jelmer%2Fsamba4-debian.git diff --git a/source/librpc/idl/lsa.idl b/source/librpc/idl/lsa.idl index 6766775c9..465c75778 100644 --- a/source/librpc/idl/lsa.idl +++ b/source/librpc/idl/lsa.idl @@ -1,39 +1,66 @@ +#include "idl_types.h" + /* lsa interface definition */ -[ uuid(12345778-1234-abcd-ef00-0123456789ab), +[ uuid("12345778-1234-abcd-ef00-0123456789ab"), version(0.0), - pointer_default(unique) + endpoint("ncacn_np:[\\pipe\\lsarpc]","ncacn_np:[\\pipe\\lsass]", "ncacn_ip_tcp:", "ncalrpc:"), + pointer_default(unique), + helpstring("Local Security Authority"), + depends(security) ] interface lsarpc { + declare bitmap security_secinfo; + + typedef [public,noejs] struct { + [value(2*strlen_m(string))] uint16 length; + [value(2*strlen_m(string))] uint16 size; + [charset(UTF16),size_is(size),length_is(length)] uint8 *string; + } lsa_String; + + typedef [public] struct { + [value(2*strlen_m(string))] uint16 length; + [value(2*(strlen_m(string)+1))] uint16 size; + [flag(STR_SIZE4|STR_LEN4|STR_NOTERM|STR_LARGE_SIZE)] string *string; + } lsa_StringLarge; + + typedef [public] struct { + uint32 count; + [size_is(count)] lsa_String *names; + } lsa_Strings; + + typedef [public] struct { + [value(strlen_m(string))] uint16 length; + [value(strlen_m(string))] uint16 size; + ascstr_noterm *string; + } lsa_AsciiString; + /******************/ /* Function: 0x00 */ NTSTATUS lsa_Close ( - [in,out,ref] policy_handle *handle + [in,out] policy_handle *handle ); /******************/ /* Function: 0x01 */ NTSTATUS lsa_Delete ( - [in,ref] policy_handle *handle + [in] policy_handle *handle ); /******************/ /* Function: 0x02 */ - typedef struct { - uint16 name_len; - uint16 name_size; - unistr_noterm *name; - } lsa_Name; - + uint32 low; + uint32 high; + } lsa_LUID; + typedef struct { - lsa_Name name; - uint32 luid_low; - uint32 luid_high; + lsa_String name; + lsa_LUID luid; } lsa_PrivEntry; typedef struct { @@ -42,16 +69,20 @@ } lsa_PrivArray; NTSTATUS lsa_EnumPrivs ( - [in,ref] policy_handle *handle, - [in,out,ref] uint32 *resume_handle, + [in] policy_handle *handle, + [in,out] uint32 *resume_handle, [in] uint32 max_count, - [out,ref] lsa_PrivArray *privs + [out] lsa_PrivArray *privs ); - /******************/ /* Function: 0x03 */ - NTSTATUS lsa_QuerySecObj (); + + NTSTATUS lsa_QuerySecurity ( + [in] policy_handle *handle, + [in] security_secinfo sec_info, + [out,unique] sec_desc_buf *sdbuf + ); /******************/ @@ -67,16 +98,16 @@ /******************/ /* Function: 0x06 */ typedef struct { - [struct_len] uint32 _len; + uint32 len; /* ignored */ uint16 impersonation_level; uint8 context_mode; uint8 effective_only; } lsa_QosInfo; typedef struct { - [struct_len] uint32 _len; + uint32 len; /* ignored */ uint8 *root_dir; - unistr *object_name; + [string,charset(UTF16)] uint16 *object_name; uint32 attributes; security_descriptor *sec_desc; lsa_QosInfo *sec_qos; @@ -85,17 +116,125 @@ /* notice the screwup with the system_name - thats why MS created OpenPolicy2 */ NTSTATUS lsa_OpenPolicy ( - [in] uint16 *system_name, - [in,ref] lsa_ObjectAttribute *attr, - [in] uint32 desired_access, - [out,ref] policy_handle *handle + [in,unique] uint16 *system_name, + [in] lsa_ObjectAttribute *attr, + [in] uint32 access_mask, + [out] policy_handle *handle ); /******************/ /* Function: 0x07 */ - NTSTATUS lsa_QueryInfoPolicy (); + + typedef struct { + uint32 percent_full; + uint32 log_size; + NTTIME retention_time; + uint8 shutdown_in_progress; + NTTIME time_to_shutdown; + uint32 next_audit_record; + uint32 unknown; + } lsa_AuditLogInfo; + + typedef struct { + uint32 auditing_mode; + [size_is(count)] uint32 *settings; + uint32 count; + } lsa_AuditEventsInfo; + + typedef struct { + lsa_String name; + dom_sid2 *sid; + } lsa_DomainInfo; + + typedef struct { + lsa_String name; + } lsa_PDAccountInfo; + + typedef struct { + uint16 unknown; /* an midl padding bug? */ + uint16 role; + } lsa_ServerRole; + + typedef struct { + lsa_String source; + lsa_String account; + } lsa_ReplicaSourceInfo; + + typedef struct { + uint32 paged_pool; + uint32 non_paged_pool; + uint32 min_wss; + uint32 max_wss; + uint32 pagefile; + hyper unknown; + } lsa_DefaultQuotaInfo; + + typedef struct { + hyper modified_id; + NTTIME db_create_time; + } lsa_ModificationInfo; + + typedef struct { + uint8 shutdown_on_full; + } lsa_AuditFullSetInfo; + + typedef struct { + uint16 unknown; /* an midl padding bug? */ + uint8 shutdown_on_full; + uint8 log_is_full; + } lsa_AuditFullQueryInfo; + + typedef struct { + /* it's important that we use the lsa_StringLarge here, + * because otherwise windows clients result with such dns hostnames + * e.g. w2k3-client.samba4.samba.orgsamba4.samba.org + * where it should be + * w2k3-client.samba4.samba.org + */ + lsa_StringLarge name; + lsa_StringLarge dns_domain; + lsa_StringLarge dns_forest; + GUID domain_guid; + dom_sid2 *sid; + } lsa_DnsDomainInfo; + + typedef enum { + LSA_POLICY_INFO_AUDIT_LOG=1, + LSA_POLICY_INFO_AUDIT_EVENTS=2, + LSA_POLICY_INFO_DOMAIN=3, + LSA_POLICY_INFO_PD=4, + LSA_POLICY_INFO_ACCOUNT_DOMAIN=5, + LSA_POLICY_INFO_ROLE=6, + LSA_POLICY_INFO_REPLICA=7, + LSA_POLICY_INFO_QUOTA=8, + LSA_POLICY_INFO_DB=9, + LSA_POLICY_INFO_AUDIT_FULL_SET=10, + LSA_POLICY_INFO_AUDIT_FULL_QUERY=11, + LSA_POLICY_INFO_DNS=12 + } lsaPolicyInfo; + + typedef [switch_type(uint16)] union { + [case(LSA_POLICY_INFO_AUDIT_LOG)] lsa_AuditLogInfo audit_log; + [case(LSA_POLICY_INFO_AUDIT_EVENTS)] lsa_AuditEventsInfo audit_events; + [case(LSA_POLICY_INFO_DOMAIN)] lsa_DomainInfo domain; + [case(LSA_POLICY_INFO_PD)] lsa_PDAccountInfo pd; + [case(LSA_POLICY_INFO_ACCOUNT_DOMAIN)] lsa_DomainInfo account_domain; + [case(LSA_POLICY_INFO_ROLE)] lsa_ServerRole role; + [case(LSA_POLICY_INFO_REPLICA)] lsa_ReplicaSourceInfo replica; + [case(LSA_POLICY_INFO_QUOTA)] lsa_DefaultQuotaInfo quota; + [case(LSA_POLICY_INFO_DB)] lsa_ModificationInfo db; + [case(LSA_POLICY_INFO_AUDIT_FULL_SET)] lsa_AuditFullSetInfo auditfullset; + [case(LSA_POLICY_INFO_AUDIT_FULL_QUERY)] lsa_AuditFullQueryInfo auditfullquery; + [case(LSA_POLICY_INFO_DNS)] lsa_DnsDomainInfo dns; + } lsa_PolicyInformation; + + NTSTATUS lsa_QueryInfoPolicy ( + [in] policy_handle *handle, + [in] uint16 level, + [out,unique,switch_is(level)] lsa_PolicyInformation *info + ); /******************/ /* Function: 0x08 */ @@ -107,38 +246,59 @@ /******************/ /* Function: 0x0a */ - NTSTATUS lsa_CreateAccount (); - + NTSTATUS lsa_CreateAccount ( + [in] policy_handle *handle, + [in] dom_sid2 *sid, + [in] uint32 access_mask, + [out] policy_handle *acct_handle + ); /******************/ + /* NOTE: This only returns accounts that have at least + one privilege set + */ /* Function: 0x0b */ typedef struct { dom_sid2 *sid; } lsa_SidPtr; - typedef struct { - uint32 num_sids; + typedef [public] struct { + [range(0,1000)] uint32 num_sids; [size_is(num_sids)] lsa_SidPtr *sids; } lsa_SidArray; NTSTATUS lsa_EnumAccounts ( - [in,ref] policy_handle *handle, - [in,out,ref] uint32 *resume_handle, - [in] uint32 num_entries, - [out,ref] lsa_SidArray *sids + [in] policy_handle *handle, + [in,out] uint32 *resume_handle, + [in,range(0,8192)] uint32 num_entries, + [out] lsa_SidArray *sids ); /*************************************************/ /* Function: 0x0c */ - NTSTATUS lsa_CreateTrustDom (); + + typedef struct { + lsa_String name; + dom_sid2 *sid; + } lsa_TrustInformation; + + NTSTATUS lsa_CreateTrustedDomain( + [in] policy_handle *handle, + [in] lsa_TrustInformation *info, + [in] uint32 access_mask, + [out] policy_handle *trustdom_handle + ); /******************/ /* Function: 0x0d */ + /* w2k3 treats max_size as max_domains*60 */ + const int LSA_ENUM_TRUST_DOMAIN_MULTIPLIER = 60; + typedef struct { - lsa_Name name; + lsa_String name; dom_sid2 *sid; } lsa_DomainInformation; @@ -148,46 +308,52 @@ } lsa_DomainList; NTSTATUS lsa_EnumTrustDom ( - [in,ref] policy_handle *handle, - [in,out,ref] uint32 *resume_handle, - [in] uint32 num_entries, - [out,ref] lsa_DomainList *domains + [in] policy_handle *handle, + [in,out] uint32 *resume_handle, + [in,range(0,1000)] uint32 max_size, + [out] lsa_DomainList *domains ); /******************/ /* Function: 0x0e */ + typedef enum { + SID_NAME_USE_NONE = 0,/* NOTUSED */ + SID_NAME_USER = 1, /* user */ + SID_NAME_DOM_GRP = 2, /* domain group */ + SID_NAME_DOMAIN = 3, /* domain: don't know what this is */ + SID_NAME_ALIAS = 4, /* local group */ + SID_NAME_WKN_GRP = 5, /* well-known group */ + SID_NAME_DELETED = 6, /* deleted account: needed for c2 rating */ + SID_NAME_INVALID = 7, /* invalid account */ + SID_NAME_UNKNOWN = 8 /* oops. */ + } lsa_SidType; typedef struct { - uint16 sid_type; + lsa_SidType sid_type; uint32 rid; uint32 sid_index; } lsa_TranslatedSid; typedef struct { - uint32 count; + [range(0,1000)] uint32 count; [size_is(count)] lsa_TranslatedSid *sids; } lsa_TransSidArray; typedef struct { - lsa_Name name; - dom_sid2 *sid; - } lsa_TrustInformation; - - typedef struct { - uint32 count; + [range(0,1000)] uint32 count; [size_is(count)] lsa_TrustInformation *domains; uint32 max_count; } lsa_RefDomainList; NTSTATUS lsa_LookupNames ( - [in,ref] policy_handle *handle, - [in] uint32 num_names, - [in,ref,size_is(num_names)] lsa_Name *names, - [out] lsa_RefDomainList *domains, - [in,out,ref] lsa_TransSidArray *sids, + [in] policy_handle *handle, + [in,range(0,1000)] uint32 num_names, + [in,size_is(num_names)] lsa_String names[], + [out,unique] lsa_RefDomainList *domains, + [in,out] lsa_TransSidArray *sids, [in] uint16 level, - [in,out,ref] uint32 *count + [in,out] uint32 *count ); @@ -195,132 +361,587 @@ /* Function: 0x0f */ typedef struct { - uint16 sid_type; - lsa_Name name; + lsa_SidType sid_type; + lsa_String name; uint32 sid_index; } lsa_TranslatedName; typedef struct { - uint32 count; + [range(0,1000)] uint32 count; [size_is(count)] lsa_TranslatedName *names; } lsa_TransNameArray; NTSTATUS lsa_LookupSids ( - [in,ref] policy_handle *handle, - [in,ref] lsa_SidArray *sids, - [out] lsa_RefDomainList *domains, - [in,out,ref] lsa_TransNameArray *names, + [in] policy_handle *handle, + [in] lsa_SidArray *sids, + [out,unique] lsa_RefDomainList *domains, + [in,out] lsa_TransNameArray *names, [in] uint16 level, - [in,out,ref] uint32 *count + [in,out] uint32 *count ); /* Function: 0x10 */ - NTSTATUS CREATESECRET (); + NTSTATUS lsa_CreateSecret( + [in] policy_handle *handle, + [in] lsa_String name, + [in] uint32 access_mask, + [out] policy_handle *sec_handle + ); /*****************************************/ /* Function: 0x11 */ NTSTATUS lsa_OpenAccount ( - [in,ref] policy_handle *handle, - [in,ref] dom_sid2 *sid, - [in] uint32 desired_access, - [out,ref] policy_handle *acct_handle + [in] policy_handle *handle, + [in] dom_sid2 *sid, + [in] uint32 access_mask, + [out] policy_handle *acct_handle ); /****************************************/ /* Function: 0x12 */ - typedef struct { - uint32 low; - uint32 high; - } lsa_LUID; - typedef struct { lsa_LUID luid; uint32 attribute; } lsa_LUIDAttribute; typedef struct { - uint32 count; + [range(0,1000)] uint32 count; + uint32 unknown; [size_is(count)] lsa_LUIDAttribute set[*]; } lsa_PrivilegeSet; NTSTATUS lsa_EnumPrivsAccount ( - [in,ref] policy_handle *handle, - [out] lsa_PrivilegeSet *privs, - [out] uint32 unknown + [in] policy_handle *handle, + [out,unique] lsa_PrivilegeSet *privs ); + /****************************************/ /* Function: 0x13 */ - NTSTATUS ADDPRIVS (); + NTSTATUS lsa_AddPrivilegesToAccount( + [in] policy_handle *handle, + [in] lsa_PrivilegeSet *privs + ); + + + /****************************************/ /* Function: 0x14 */ - NTSTATUS REMOVEPRIVS (); + NTSTATUS lsa_RemovePrivilegesFromAccount( + [in] policy_handle *handle, + [in] uint8 remove_all, + [in,unique] lsa_PrivilegeSet *privs + ); + /* Function: 0x15 */ - NTSTATUS GETQUOTAS (); + NTSTATUS lsa_GetQuotasForAccount(); + /* Function: 0x16 */ - NTSTATUS SETQUOTAS (); + NTSTATUS lsa_SetQuotasForAccount(); + /* Function: 0x17 */ - NTSTATUS GETSYSTEMACCOUNT (); + NTSTATUS lsa_GetSystemAccessAccount(); /* Function: 0x18 */ - NTSTATUS SETSYSTEMACCOUNT (); + NTSTATUS lsa_SetSystemAccessAccount(); + /* Function: 0x19 */ - NTSTATUS OPENTRUSTDOM (); + NTSTATUS lsa_OpenTrustedDomain( + [in] policy_handle *handle, + [in] dom_sid2 *sid, + [in] uint32 access_mask, + [out] policy_handle *trustdom_handle + ); + + typedef [flag(NDR_PAHEX)] struct { + uint32 length; + uint32 size; + [size_is(size),length_is(length)] uint8 *data; + } lsa_DATA_BUF; + + typedef [flag(NDR_PAHEX)] struct { + [range(0,65536)] uint32 size; + [size_is(size)] uint8 *data; + } lsa_DATA_BUF2; + + typedef enum { + LSA_TRUSTED_DOMAIN_INFO_NAME = 1, + LSA_TRUSTED_DOMAIN_INFO_CONTROLLERS_INFO = 2, + LSA_TRUSTED_DOMAIN_INFO_POSIX_OFFSET = 3, + LSA_TRUSTED_DOMAIN_INFO_PASSWORD = 4, + LSA_TRUSTED_DOMAIN_INFO_BASIC = 5, + LSA_TRUSTED_DOMAIN_INFO_INFO_EX = 6, + LSA_TRUSTED_DOMAIN_INFO_AUTH_INFO = 7, + LSA_TRUSTED_DOMAIN_INFO_FULL_INFO = 8, + LSA_TRUSTED_DOMAIN_INFO_11 = 11, + LSA_TRUSTED_DOMAIN_INFO_INFO_ALL = 12 + } lsa_TrustDomInfoEnum; + + typedef struct { + lsa_String netbios_name; + } lsa_TrustDomainInfoName; + + typedef struct { + uint32 posix_offset; + } lsa_TrustDomainInfoPosixOffset; + + typedef struct { + lsa_DATA_BUF *password; + lsa_DATA_BUF *old_password; + } lsa_TrustDomainInfoPassword; + + typedef struct { + lsa_String netbios_name; + dom_sid2 *sid; + } lsa_TrustDomainInfoBasic; + + typedef struct { + lsa_String domain_name; + lsa_String netbios_name; + dom_sid2 *sid; + uint32 trust_direction; + uint32 trust_type; + uint32 trust_attributes; + } lsa_TrustDomainInfoInfoEx; + + typedef struct { + NTTIME_hyper last_update_time; + uint32 secret_type; + lsa_DATA_BUF2 data; + } lsa_TrustDomainInfoBuffer; + + typedef struct { + uint32 incoming_count; + lsa_TrustDomainInfoBuffer *incoming_current_auth_info; + lsa_TrustDomainInfoBuffer *incoming_previous_auth_info; + uint32 outgoing_count; + lsa_TrustDomainInfoBuffer *outgoing_current_auth_info; + lsa_TrustDomainInfoBuffer *outgoing_previous_auth_info; + } lsa_TrustDomainInfoAuthInfo; + + typedef struct { + lsa_TrustDomainInfoInfoEx info_ex; + lsa_TrustDomainInfoPosixOffset posix_offset; + lsa_TrustDomainInfoAuthInfo auth_info; + } lsa_TrustDomainInfoFullInfo; + + typedef struct { + lsa_TrustDomainInfoInfoEx info_ex; + lsa_DATA_BUF2 data1; + } lsa_TrustDomainInfo11; + + typedef struct { + lsa_TrustDomainInfoInfoEx info_ex; + lsa_DATA_BUF2 data1; + lsa_TrustDomainInfoPosixOffset posix_offset; + lsa_TrustDomainInfoAuthInfo auth_info; + } lsa_TrustDomainInfoInfoAll; + + typedef [switch_type(lsa_TrustDomInfoEnum)] union { + [case(LSA_TRUSTED_DOMAIN_INFO_NAME)] lsa_TrustDomainInfoName name; + [case(LSA_TRUSTED_DOMAIN_INFO_POSIX_OFFSET)] lsa_TrustDomainInfoPosixOffset posix_offset; + [case(LSA_TRUSTED_DOMAIN_INFO_PASSWORD)] lsa_TrustDomainInfoPassword password; + [case(LSA_TRUSTED_DOMAIN_INFO_BASIC)] lsa_TrustDomainInfoBasic info_basic; + [case(LSA_TRUSTED_DOMAIN_INFO_INFO_EX)] lsa_TrustDomainInfoInfoEx info_ex; + [case(LSA_TRUSTED_DOMAIN_INFO_AUTH_INFO)] lsa_TrustDomainInfoAuthInfo auth_info; + [case(LSA_TRUSTED_DOMAIN_INFO_FULL_INFO)] lsa_TrustDomainInfoFullInfo full_info; + [case(LSA_TRUSTED_DOMAIN_INFO_11)] lsa_TrustDomainInfo11 info11; + [case(LSA_TRUSTED_DOMAIN_INFO_INFO_ALL)] lsa_TrustDomainInfoInfoAll info_all; + } lsa_TrustedDomainInfo; + /* Function: 0x1a */ - NTSTATUS QUERYTRUSTDOM (); + NTSTATUS lsa_QueryTrustedDomainInfo( + [in] policy_handle *trustdom_handle, + [in] lsa_TrustDomInfoEnum level, + [out,switch_is(level),unique] lsa_TrustedDomainInfo *info + ); + /* Function: 0x1b */ - NTSTATUS SETINFOTRUSTDOM (); + NTSTATUS lsa_SetInformationTrustedDomain(); + /* Function: 0x1c */ - NTSTATUS OPENSECRET (); + NTSTATUS lsa_OpenSecret( + [in] policy_handle *handle, + [in] lsa_String name, + [in] uint32 access_mask, + [out] policy_handle *sec_handle + ); + /* Function: 0x1d */ - NTSTATUS SETSECRET (); + + NTSTATUS lsa_SetSecret( + [in] policy_handle *sec_handle, + [in,unique] lsa_DATA_BUF *new_val, + [in,unique] lsa_DATA_BUF *old_val + ); + + typedef struct { + lsa_DATA_BUF *buf; + } lsa_DATA_BUF_PTR; + /* Function: 0x1e */ - NTSTATUS QUERYSECRET (); + NTSTATUS lsa_QuerySecret ( + [in] policy_handle *sec_handle, + [in,out,unique] lsa_DATA_BUF_PTR *new_val, + [in,out,unique] NTTIME_hyper *new_mtime, + [in,out,unique] lsa_DATA_BUF_PTR *old_val, + [in,out,unique] NTTIME_hyper *old_mtime + ); + /* Function: 0x1f */ - NTSTATUS LOOKUPPRIVVALUE (); + NTSTATUS lsa_LookupPrivValue( + [in] policy_handle *handle, + [in] lsa_String *name, + [out] lsa_LUID *luid + ); + + /* Function: 0x20 */ - NTSTATUS LOOKUPPRIVNAME (); + NTSTATUS lsa_LookupPrivName ( + [in] policy_handle *handle, + [in] lsa_LUID *luid, + [out,unique] lsa_String *name + ); + + + /*******************/ /* Function: 0x21 */ - NTSTATUS PRIV_GET_DISPNAME (); + NTSTATUS lsa_LookupPrivDisplayName ( + [in] policy_handle *handle, + [in] lsa_String *name, + [out,unique] lsa_String *disp_name, + /* see http://www.microsoft.com/globaldev/nlsweb/ for + language definitions */ + [in,out] uint16 *language_id, + [in] uint16 unknown + ); + /* Function: 0x22 */ - NTSTATUS DELETEOBJECT (); - /* Function: 0x23 */ - NTSTATUS ENUMACCTWITHRIGHT (); + NTSTATUS lsa_DeleteObject(); + + + /*******************/ + /* Function: 0x23 */ + NTSTATUS lsa_EnumAccountsWithUserRight ( + [in] policy_handle *handle, + [in,unique] lsa_String *name, + [out] lsa_SidArray *sids + ); + /* Function: 0x24 */ - NTSTATUS ENUMACCTRIGHTS (); + typedef struct { + [string,charset(UTF16)] uint16 *name; + } lsa_RightAttribute; + + typedef struct { + uint32 count; + [size_is(count)] lsa_String *names; + } lsa_RightSet; + + NTSTATUS lsa_EnumAccountRights ( + [in] policy_handle *handle, + [in] dom_sid2 *sid, + [out] lsa_RightSet *rights + ); + + + /**********************/ /* Function: 0x25 */ - NTSTATUS ADDACCTRIGHTS (); - /* Function: 0x26 */ - NTSTATUS REMOVEACCTRIGHTS (); + NTSTATUS lsa_AddAccountRights ( + [in] policy_handle *handle, + [in] dom_sid2 *sid, + [in] lsa_RightSet *rights + ); + + /**********************/ + /* Function: 0x26 */ + NTSTATUS lsa_RemoveAccountRights ( + [in] policy_handle *handle, + [in] dom_sid2 *sid, + [in] uint32 unknown, + [in] lsa_RightSet *rights + ); + /* Function: 0x27 */ - NTSTATUS QUERYTRUSTDOMINFO (); + NTSTATUS lsa_QueryTrustedDomainInfoBySid( + [in] policy_handle *handle, + [in] dom_sid2 *dom_sid, + [in] lsa_TrustDomInfoEnum level, + [out,switch_is(level),unique] lsa_TrustedDomainInfo *info + ); + /* Function: 0x28 */ - NTSTATUS SETTRUSTDOMINFO (); + NTSTATUS lsa_SetTrustDomainInfo(); /* Function: 0x29 */ - NTSTATUS DELETETRUSTDOM (); + NTSTATUS lsa_DeleteTrustDomain(); /* Function: 0x2a */ - NTSTATUS STOREPRIVDATA (); + NTSTATUS lsa_StorePrivateData(); /* Function: 0x2b */ - NTSTATUS RETRPRIVDATA (); + NTSTATUS lsa_RetrievePrivateData(); /**********************/ /* Function: 0x2c */ NTSTATUS lsa_OpenPolicy2 ( - [in] unistr *system_name, - [in,ref] lsa_ObjectAttribute *attr, - [in] uint32 desired_access, - [out,ref] policy_handle *handle + [in,unique] [string,charset(UTF16)] uint16 *system_name, + [in] lsa_ObjectAttribute *attr, + [in] uint32 access_mask, + [out] policy_handle *handle ); + /**********************/ + /* Function: 0x2d */ + typedef struct { + lsa_String *string; + } lsa_StringPointer; + + NTSTATUS lsa_GetUserName( + [in,unique] [string,charset(UTF16)] uint16 *system_name, + [in,out,unique] lsa_String *account_name, + [in,out,unique] lsa_StringPointer *authority_name + ); - /* Function: 0x2d */ - NTSTATUS UNK_GET_CONNUSER (); + /**********************/ /* Function: 0x2e */ - NTSTATUS QUERYINFO2 (); + NTSTATUS lsa_QueryInfoPolicy2( + [in] policy_handle *handle, + [in] uint16 level, + [out,unique,switch_is(level)] lsa_PolicyInformation *info + ); + + /* Function 0x2f */ + NTSTATUS lsa_SetInfoPolicy2(); + + /**********************/ + /* Function 0x30 */ + NTSTATUS lsa_QueryTrustedDomainInfoByName( + [in] policy_handle *handle, + [in] lsa_String trusted_domain, + [in] lsa_TrustDomInfoEnum level, + [out,unique,switch_is(level)] lsa_TrustedDomainInfo *info + ); + + /* Function 0x31 */ + NTSTATUS lsa_SetTrustedDomainInfoByName(); + + /* Function 0x32 */ + NTSTATUS lsa_EnumTrustedDomainsEx(); + + /* Function 0x33 */ + NTSTATUS lsa_CreateTrustedDomainEx(); + + /* Function 0x34 */ + NTSTATUS lsa_CloseTrustedDomainEx(); + + /* Function 0x35 */ + + /* w2k3 returns either 0x000bbbd000000000 or 0x000a48e800000000 + for unknown6 - gd */ + typedef struct { + uint32 enforce_restrictions; + hyper service_tkt_lifetime; + hyper user_tkt_lifetime; + hyper user_tkt_renewaltime; + hyper clock_skew; + hyper unknown6; + } lsa_DomainInfoKerberos; + + typedef struct { + uint32 blob_size; + [size_is(blob_size)] uint8 *efs_blob; + } lsa_DomainInfoEfs; + + typedef enum { + LSA_DOMAIN_INFO_POLICY_EFS=2, + LSA_DOMAIN_INFO_POLICY_KERBEROS=3 + } lsa_DomainInfoEnum; + + typedef [switch_type(uint16)] union { + [case(LSA_DOMAIN_INFO_POLICY_EFS)] lsa_DomainInfoEfs efs_info; + [case(LSA_DOMAIN_INFO_POLICY_KERBEROS)] lsa_DomainInfoKerberos kerberos_info; + } lsa_DomainInformationPolicy; + + NTSTATUS lsa_QueryDomainInformationPolicy( + [in] policy_handle *handle, + [in] uint16 level, + [out,unique,switch_is(level)] lsa_DomainInformationPolicy *info + ); + + /* Function 0x36 */ + NTSTATUS lsa_SetDomainInformationPolicy( + [in] policy_handle *handle, + [in] uint16 level, + [in,unique,switch_is(level)] lsa_DomainInformationPolicy *info + ); + + /**********************/ + /* Function 0x37 */ + NTSTATUS lsa_OpenTrustedDomainByName( + [in] policy_handle *handle, + [in] lsa_String name, + [in] uint32 access_mask, + [out] policy_handle *trustdom_handle + ); + + /* Function 0x38 */ + NTSTATUS lsa_TestCall(); + + /**********************/ + /* Function 0x39 */ + + typedef struct { + lsa_SidType sid_type; + lsa_String name; + uint32 sid_index; + uint32 unknown; + } lsa_TranslatedName2; + + typedef struct { + [range(0,1000)] uint32 count; + [size_is(count)] lsa_TranslatedName2 *names; + } lsa_TransNameArray2; + + NTSTATUS lsa_LookupSids2( + [in] policy_handle *handle, + [in] lsa_SidArray *sids, + [out,unique] lsa_RefDomainList *domains, + [in,out] lsa_TransNameArray2 *names, + [in] uint16 level, + [in,out] uint32 *count, + [in] uint32 unknown1, + [in] uint32 unknown2 + ); + + /**********************/ + /* Function 0x3a */ + + typedef struct { + lsa_SidType sid_type; + uint32 rid; + uint32 sid_index; + uint32 unknown; + } lsa_TranslatedSid2; + + typedef struct { + [range(0,1000)] uint32 count; + [size_is(count)] lsa_TranslatedSid2 *sids; + } lsa_TransSidArray2; + + NTSTATUS lsa_LookupNames2 ( + [in] policy_handle *handle, + [in,range(0,1000)] uint32 num_names, + [in,size_is(num_names)] lsa_String names[], + [out,unique] lsa_RefDomainList *domains, + [in,out] lsa_TransSidArray2 *sids, + [in] uint16 level, + [in,out] uint32 *count, + [in] uint32 unknown1, + [in] uint32 unknown2 + ); + + /* Function 0x3b */ + NTSTATUS lsa_CreateTrustedDomainEx2(); + + /* Function 0x3c */ + NTSTATUS lsa_CREDRWRITE(); + + /* Function 0x3d */ + NTSTATUS lsa_CREDRREAD(); + + /* Function 0x3e */ + NTSTATUS lsa_CREDRENUMERATE(); + + /* Function 0x3f */ + NTSTATUS lsa_CREDRWRITEDOMAINCREDENTIALS(); + + /* Function 0x40 */ + NTSTATUS lsa_CREDRREADDOMAINCREDENTIALS(); + + /* Function 0x41 */ + NTSTATUS lsa_CREDRDELETE(); + + /* Function 0x42 */ + NTSTATUS lsa_CREDRGETTARGETINFO(); + + /* Function 0x43 */ + NTSTATUS lsa_CREDRPROFILELOADED(); + + /**********************/ + /* Function 0x44 */ + typedef struct { + lsa_SidType sid_type; + dom_sid2 *sid; + uint32 sid_index; + uint32 unknown; + } lsa_TranslatedSid3; + + typedef struct { + [range(0,1000)] uint32 count; + [size_is(count)] lsa_TranslatedSid3 *sids; + } lsa_TransSidArray3; + + NTSTATUS lsa_LookupNames3 ( + [in] policy_handle *handle, + [in,range(0,1000)] uint32 num_names, + [in,size_is(num_names)] lsa_String names[], + [out,unique] lsa_RefDomainList *domains, + [in,out] lsa_TransSidArray3 *sids, + [in] uint16 level, + [in,out] uint32 *count, + [in] uint32 unknown1, + [in] uint32 unknown2 + ); + + /* Function 0x45 */ + NTSTATUS lsa_CREDRGETSESSIONTYPES(); + + /* Function 0x46 */ + NTSTATUS lsa_LSARREGISTERAUDITEVENT(); + + /* Function 0x47 */ + NTSTATUS lsa_LSARGENAUDITEVENT(); + + /* Function 0x48 */ + NTSTATUS lsa_LSARUNREGISTERAUDITEVENT(); + + /* Function 0x49 */ + NTSTATUS lsa_LSARQUERYFORESTTRUSTINFORMATION(); + + /* Function 0x4a */ + NTSTATUS lsa_LSARSETFORESTTRUSTINFORMATION(); + + /* Function 0x4b */ + NTSTATUS lsa_CREDRRENAME(); + + /*****************/ + /* Function 0x4c */ + + NTSTATUS lsa_LookupSids3( + [in] lsa_SidArray *sids, + [out,unique] lsa_RefDomainList *domains, + [in,out] lsa_TransNameArray2 *names, + [in] uint16 level, + [in,out] uint32 *count, + [in] uint32 unknown1, + [in] uint32 unknown2 + ); + + /* Function 0x4d */ + NTSTATUS lsa_LSARLOOKUPNAMES4(); + + /* Function 0x4e */ + NTSTATUS lsa_LSAROPENPOLICYSCE(); + + /* Function 0x4f */ + NTSTATUS lsa_LSARADTREGISTERSECURITYEVENTSOURCE(); + + /* Function 0x50 */ + NTSTATUS lsa_LSARADTUNREGISTERSECURITYEVENTSOURCE(); + /* Function 0x51 */ + NTSTATUS lsa_LSARADTREPORTSECURITYEVENT(); }