Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
For ease of implementation, the full IDL is provided below, where "ms-dtyp.idl" is the IDL specified in [MS-DTYP] Appendix A.
Note The lsarpc interface is shared between this protocol and the Local Security Authority (Domain Policy) Remote Protocol [MS-LSAD]. For convenience, the IDL definitions that appear below and the IDL definitions in [MS-LSAD] section 6 have been merged and are available for download. For more information, see [MSFT-LSA-IDL].
-
import "ms-dtyp.idl"; [ uuid(12345778-1234-ABCD-EF00-0123456789AB), version(0.0), ms_union, pointer_default(unique) ] interface lsarpc { // // Type definitions. // // // Start of common types. // typedef [context_handle] void * LSAPR_HANDLE; typedef unsigned char SECURITY_CONTEXT_TRACKING_MODE, *PSECURITY_CONTEXT_TRACKING_MODE; typedef unsigned short SECURITY_DESCRIPTOR_CONTROL, *PSECURITY_DESCRIPTOR_CONTROL; typedef struct _STRING { unsigned short Length; unsigned short MaximumLength; [size_is(MaximumLength), length_is(Length)] char * Buffer; } STRING, *PSTRING; typedef struct _LSAPR_ACL { unsigned char AclRevision; unsigned char Sbz1; unsigned short AclSize; [size_is(AclSize - 4)] unsigned char Dummy1[*]; } LSAPR_ACL, *PLSAPR_ACL; typedef struct _LSAPR_SECURITY_DESCRIPTOR { unsigned char Revision; unsigned char Sbz1; SECURITY_DESCRIPTOR_CONTROL Control; PRPC_SID Owner; PRPC_SID Group; PLSAPR_ACL Sacl; PLSAPR_ACL Dacl; } LSAPR_SECURITY_DESCRIPTOR, *PLSAPR_SECURITY_DESCRIPTOR; typedef enum _SECURITY_IMPERSONATION_LEVEL { SecurityAnonymous = 0, SecurityIdentification = 1, SecurityImpersonation = 2, SecurityDelegation = 3 } SECURITY_IMPERSONATION_LEVEL, * PSECURITY_IMPERSONATION_LEVEL; typedef struct _SECURITY_QUALITY_OF_SERVICE { unsigned long Length; SECURITY_IMPERSONATION_LEVEL ImpersonationLevel; SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode; unsigned char EffectiveOnly; } SECURITY_QUALITY_OF_SERVICE, * PSECURITY_QUALITY_OF_SERVICE; typedef struct _LSAPR_OBJECT_ATTRIBUTES { unsigned long Length; unsigned char * RootDirectory; PSTRING ObjectName; unsigned long Attributes; PLSAPR_SECURITY_DESCRIPTOR SecurityDescriptor; PSECURITY_QUALITY_OF_SERVICE SecurityQualityOfService; } LSAPR_OBJECT_ATTRIBUTES, *PLSAPR_OBJECT_ATTRIBUTES; typedef struct _LSAPR_TRUST_INFORMATION { RPC_UNICODE_STRING Name; PRPC_SID Sid; } LSAPR_TRUST_INFORMATION, *PLSAPR_TRUST_INFORMATION; // // End of common types. // typedef struct _LSAPR_REFERENCED_DOMAIN_LIST { unsigned long Entries; [size_is(Entries)] PLSAPR_TRUST_INFORMATION Domains; unsigned long MaxEntries; } LSAPR_REFERENCED_DOMAIN_LIST, *PLSAPR_REFERENCED_DOMAIN_LIST; typedef enum _SID_NAME_USE { SidTypeUser = 1, SidTypeGroup, SidTypeDomain, SidTypeAlias, SidTypeWellKnownGroup, SidTypeDeletedAccount, SidTypeInvalid, SidTypeUnknown, SidTypeComputer, SidTypeLabel } SID_NAME_USE, *PSID_NAME_USE; typedef struct _LSA_TRANSLATED_SID { SID_NAME_USE Use; unsigned long RelativeId; long DomainIndex; } LSA_TRANSLATED_SID, *PLSA_TRANSLATED_SID; typedef struct _LSAPR_TRANSLATED_SIDS { [range(0,1000)] unsigned long 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 { [range(0, 20480)] unsigned long 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 { [range(0, 20480)] unsigned long 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; unsigned long Flags; } LSAPR_TRANSLATED_NAME_EX, *PLSAPR_TRANSLATED_NAME_EX; typedef struct _LSAPR_TRANSLATED_NAMES_EX { [range(0, 20480)] unsigned long 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; unsigned long RelativeId; long DomainIndex; unsigned long Flags; } LSAPR_TRANSLATED_SID_EX, *PLSAPR_TRANSLATED_SID_EX; typedef struct _LSAPR_TRANSLATED_SIDS_EX { [range (0,1000)] unsigned long 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; unsigned long Flags; } LSAPR_TRANSLATED_SID_EX2, *PLSAPR_TRANSLATED_SID_EX2; typedef struct _LSAPR_TRANSLATED_SIDS_EX2 { [range (0,1000)] unsigned long Entries; [size_is(Entries)] PLSAPR_TRANSLATED_SID_EX2 Sids; } LSAPR_TRANSLATED_SIDS_EX2, *PLSAPR_TRANSLATED_SIDS_EX2; // // Methods // // // The following notation conventions are used for some IDL methods: // // void // Lsar_LSA_DP_XX( void ); // // (where XX represents the opnum.) // // This notation indicates that the method is defined in this // interface but is described in the // Local Security Authority (Domain Policy) protocol // specification. // // void OpnumXXNotUsedOnWire(void); // // (where XX represents the opnum.) // // This notation indicates that the method is defined in this // interface but is not seen on the wire. // // Opnum 0 NTSTATUS LsarClose( [in,out] LSAPR_HANDLE *ObjectHandle ); // Opnum 1 void Opnum1NotUsedOnWire(void); // Opnum 2 void Lsar_LSA_DP_2( void ); // Opnum 3 void Lsar_LSA_DP_3( void ); // Opnum 4 void Lsar_LSA_DP_4( void ); // Opnum 5 void Opnum5NotUsedOnWire(void); // Opnum 6 NTSTATUS LsarOpenPolicy( [in,unique] wchar_t *SystemName, [in] PLSAPR_OBJECT_ATTRIBUTES ObjectAttributes, [in] ACCESS_MASK DesiredAccess, [out] LSAPR_HANDLE *PolicyHandle ); // Opnum 7 void Lsar_LSA_DP_7( void ); // Opnum 8 void Lsar_LSA_DP_8( void ); // Opnum 9 void Opnum9NotUsedOnWire(void); // Opnum 10 void Lsar_LSA_DP_10( void ); // Opnum 11 void Lsar_LSA_DP_11( void ); // Opnum 12 void Lsar_LSA_DP_12( void ); // Opnum 13 void Lsar_LSA_DP_13( void ); // Opnum 14 NTSTATUS LsarLookupNames( [in] LSAPR_HANDLE PolicyHandle, [in, range(0,1000)] unsigned long 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] unsigned long *MappedCount ); // Opnum 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] unsigned long *MappedCount ); // Opnum 16 void Lsar_LSA_DP_16( void ); // Opnum 17 void Lsar_LSA_DP_17( void ); // Opnum 18 void Lsar_LSA_DP_18( void ); // Opnum 19 void Lsar_LSA_DP_19( void ); // Opnum 20 void Lsar_LSA_DP_20( void ); // Opnum 21 void Opnum21NotUsedOnWire(void); // Opnum 22 void Opnum22NotUsedOnWire(void); // Opnum 23 void Lsar_LSA_DP_23( void ); // Opnum 24 void Lsar_LSA_DP_24( void ); // Opnum 25 void Lsar_LSA_DP_25( void ); // Opnum 26 void Lsar_LSA_DP_26( void ); // Opnum 27 void Lsar_LSA_DP_27( void ); // Opnum 28 void Lsar_LSA_DP_28( void ); // Opnum 29 void Lsar_LSA_DP_29( void ); // Opnum 30 void Lsar_LSA_DP_30( void ); // Opnum 31 void Lsar_LSA_DP_31( void ); // Opnum 32 void Lsar_LSA_DP_32( void ); // Opnum 33 void Lsar_LSA_DP_33( void ); // Opnum 34 void Lsar_LSA_DP_34( void ); // Opnum 35 void Lsar_LSA_DP_35( void ); // Opnum 36 void Lsar_LSA_DP_36( void ); // Opnum 37 void Lsar_LSA_DP_37( void ); // Opnum 38 void Lsar_LSA_DP_38( void ); // Opnum 39 void Lsar_LSA_DP_39( void ); // Opnum 40 void Lsar_LSA_DP_40( void ); // Opnum 41 void Lsar_LSA_DP_41( void ); // Opnum 42 void Lsar_LSA_DP_42( void ); // Opnum 43 void Lsar_LSA_DP_43( void ); // Opnum 44 NTSTATUS LsarOpenPolicy2( [in,unique,string] wchar_t *SystemName, [in] PLSAPR_OBJECT_ATTRIBUTES ObjectAttributes, [in] ACCESS_MASK DesiredAccess, [out] LSAPR_HANDLE *PolicyHandle ); // Opnum 45 NTSTATUS LsarGetUserName( [in,unique,string] wchar_t *SystemName, [in,out] PRPC_UNICODE_STRING *UserName, [in,out,unique] PRPC_UNICODE_STRING *DomainName ); // Opnum 46 void Lsar_LSA_DP_46( void ); // Opnum 47 void Lsar_LSA_DP_47( void ); // Opnum 48 void Lsar_LSA_DP_48( void ); // Opnum 49 void Lsar_LSA_DP_49( void ); // Opnum 50 void Lsar_LSA_DP_50( void ); // Opnum 51 void Lsar_LSA_DP_51( void ); // Opnum 52 void Opnum52NotUsedOnWire(void); // Opnum 53 void Lsar_LSA_DP_53( void ); // Opnum 54 void Lsar_LSA_DP_54( void ); // Opnum 55 void Lsar_LSA_DP_55( void ); // Opnum 56 void Opnum56NotUsedOnWire(void); // Opnum 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] unsigned long *MappedCount, [in] unsigned long LookupOptions, [in] unsigned long ClientRevision ); // Opnum 58 NTSTATUS LsarLookupNames2( [in] LSAPR_HANDLE PolicyHandle, [in, range(0,1000)] unsigned long Count, [in, size_is(Count)] PRPC_UNICODE_STRING Names, [out] PLSAPR_REFERENCED_DOMAIN_LIST *ReferencedDomains, [in, out] PLSAPR_TRANSLATED_SIDS_EX TranslatedSids, [in] LSAP_LOOKUP_LEVEL LookupLevel, [in, out] unsigned long *MappedCount, [in] unsigned long LookupOptions, [in] unsigned long ClientRevision ); // Opnum 59 void Lsar_LSA_DP_59( void ); // Opnum 60 void Opnum60NotUsedOnWire(void); // Opnum 61 void Opnum61NotUsedOnWire(void); // Opnum 62 void Opnum62NotUsedOnWire(void); // Opnum 63 void Opnum63NotUsedOnWire(void); // Opnum 64 void Opnum64NotUsedOnWire(void); // Opnum 65 void Opnum65NotUsedOnWire(void); // Opnum 66 void Opnum66NotUsedOnWire(void); // Opnum 67 void Opnum67NotUsedOnWire(void); // Opnum 68 NTSTATUS LsarLookupNames3( [in] LSAPR_HANDLE PolicyHandle, [in, range(0,1000)] unsigned long Count, [in, size_is(Count)] PRPC_UNICODE_STRING Names, [out] PLSAPR_REFERENCED_DOMAIN_LIST *ReferencedDomains, [in, out] PLSAPR_TRANSLATED_SIDS_EX2 TranslatedSids, [in] LSAP_LOOKUP_LEVEL LookupLevel, [in, out] unsigned long *MappedCount, [in] unsigned long LookupOptions, [in] unsigned long ClientRevision ); // Opnum 69 void Opnum69NotUsedOnWire(void); // Opnum 70 void Opnum70NotUsedOnWire(void); // Opnum 71 void Opnum71NotUsedOnWire(void); // Opnum 72 void Opnum72NotUsedOnWire(void); // Opnum 73 void Lsar_LSA_DP_73( void ); // Opnum 74 void Lsar_LSA_DP_74( void ); // Opnum 75 void Opnum75NotUsedOnWire(void); // Opnum 76 NTSTATUS LsarLookupSids3( [in] handle_t RpcHandle, [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] unsigned long *MappedCount, [in] unsigned long LookupOptions, [in] unsigned long ClientRevision ); // Opnum 77 NTSTATUS LsarLookupNames4( [in] handle_t RpcHandle, [in, range(0,1000)] unsigned long Count, [in, size_is(Count)] PRPC_UNICODE_STRING Names, [out] PLSAPR_REFERENCED_DOMAIN_LIST *ReferencedDomains, [in, out] PLSAPR_TRANSLATED_SIDS_EX2 TranslatedSids, [in] LSAP_LOOKUP_LEVEL LookupLevel, [in, out] unsigned long *MappedCount, [in] unsigned long LookupOptions, [in] unsigned long ClientRevision ); }