6 Appendix A: Full IDL
For ease of implementation, the full IDL is provided below, where "ms-dtyp.idl" is the IDL specified in [MS-DTYP] Appendix A.
-
import "ms-dtyp.idl"; [ uuid(12345778-1234-ABCD-EF00-0123456789AC), version(1.0), ms_union, pointer_default(unique) ] interface samr{ typedef struct _RPC_STRING { unsigned short Length; unsigned short MaximumLength; [size_is(MaximumLength), length_is(Length)] char * Buffer; } RPC_STRING, *PRPC_STRING; typedef struct _OLD_LARGE_INTEGER { unsigned long LowPart; long HighPart; } OLD_LARGE_INTEGER, *POLD_LARGE_INTEGER; typedef [handle] wchar_t * PSAMPR_SERVER_NAME; typedef [context_handle] void * SAMPR_HANDLE; typedef struct _ENCRYPTED_LM_OWF_PASSWORD { char data[16]; } ENCRYPTED_LM_OWF_PASSWORD, *PENCRYPTED_LM_OWF_PASSWORD, ENCRYPTED_NT_OWF_PASSWORD, *PENCRYPTED_NT_OWF_PASSWORD; typedef struct _SAMPR_ULONG_ARRAY { unsigned long Count; [size_is(Count)] unsigned long * Element; } SAMPR_ULONG_ARRAY, *PSAMPR_ULONG_ARRAY; typedef struct _SAMPR_SID_INFORMATION { PRPC_SID SidPointer; } SAMPR_SID_INFORMATION, *PSAMPR_SID_INFORMATION; typedef struct _SAMPR_PSID_ARRAY { [range(0, 1024)] unsigned long Count; [size_is(Count)] PSAMPR_SID_INFORMATION Sids; } SAMPR_PSID_ARRAY, *PSAMPR_PSID_ARRAY; typedef struct _SAMPR_PSID_ARRAY_OUT { unsigned long Count; [size_is(Count)] PSAMPR_SID_INFORMATION Sids; } SAMPR_PSID_ARRAY_OUT, *PSAMPR_PSID_ARRAY_OUT; typedef struct _SAMPR_RETURNED_USTRING_ARRAY { unsigned long Count; [size_is(Count)] PRPC_UNICODE_STRING Element; } SAMPR_RETURNED_USTRING_ARRAY, *PSAMPR_RETURNED_USTRING_ARRAY; typedef enum _SID_NAME_USE { SidTypeUser = 1, SidTypeGroup, SidTypeDomain, SidTypeAlias, SidTypeWellKnownGroup, SidTypeDeletedAccount, SidTypeInvalid, SidTypeUnknown, SidTypeComputer, // Not used. SidTypeLabel // Not used. } SID_NAME_USE, *PSID_NAME_USE; typedef struct _RPC_SHORT_BLOB { unsigned short Length; unsigned short MaximumLength; [size_is(MaximumLength/2), length_is(Length/2)] unsigned short* Buffer; } RPC_SHORT_BLOB, *PRPC_SHORT_BLOB; typedef struct _SAMPR_RID_ENUMERATION { unsigned long RelativeId; RPC_UNICODE_STRING Name; } SAMPR_RID_ENUMERATION, *PSAMPR_RID_ENUMERATION; typedef struct _SAMPR_ENUMERATION_BUFFER { unsigned long EntriesRead; [size_is(EntriesRead)] PSAMPR_RID_ENUMERATION Buffer; } SAMPR_ENUMERATION_BUFFER, *PSAMPR_ENUMERATION_BUFFER; typedef struct _SAMPR_SR_SECURITY_DESCRIPTOR { [range(0, 256 * 1024)] unsigned long Length; [size_is(Length)] unsigned char* SecurityDescriptor; } SAMPR_SR_SECURITY_DESCRIPTOR, *PSAMPR_SR_SECURITY_DESCRIPTOR; typedef struct _GROUP_MEMBERSHIP { unsigned long RelativeId; unsigned long Attributes; } GROUP_MEMBERSHIP, *PGROUP_MEMBERSHIP; typedef struct _SAMPR_GET_GROUPS_BUFFER { unsigned long MembershipCount; [size_is(MembershipCount)] PGROUP_MEMBERSHIP Groups; } SAMPR_GET_GROUPS_BUFFER, *PSAMPR_GET_GROUPS_BUFFER; typedef struct _SAMPR_GET_MEMBERS_BUFFER { unsigned long MemberCount; [size_is(MemberCount)] unsigned long* Members; [size_is(MemberCount)] unsigned long* Attributes; } SAMPR_GET_MEMBERS_BUFFER, *PSAMPR_GET_MEMBERS_BUFFER; typedef struct _SAMPR_REVISION_INFO_V1 { unsigned long Revision; unsigned long SupportedFeatures; } SAMPR_REVISION_INFO_V1, *PSAMPR_REVISION_INFO_V1; typedef [switch_type(unsigned long)] union { [case(1)] SAMPR_REVISION_INFO_V1 V1; }SAMPR_REVISION_INFO, *PSAMPR_REVISION_INFO; typedef struct _USER_DOMAIN_PASSWORD_INFORMATION { unsigned short MinPasswordLength; unsigned long PasswordProperties; } USER_DOMAIN_PASSWORD_INFORMATION, *PUSER_DOMAIN_PASSWORD_INFORMATION; typedef enum _DOMAIN_SERVER_ENABLE_STATE { DomainServerEnabled = 1, DomainServerDisabled } DOMAIN_SERVER_ENABLE_STATE, *PDOMAIN_SERVER_ENABLE_STATE; typedef struct _DOMAIN_STATE_INFORMATION { DOMAIN_SERVER_ENABLE_STATE DomainServerState; } DOMAIN_STATE_INFORMATION, *PDOMAIN_STATE_INFORMATION; typedef enum _DOMAIN_SERVER_ROLE { DomainServerRoleBackup = 2, DomainServerRolePrimary = 3 } DOMAIN_SERVER_ROLE, *PDOMAIN_SERVER_ROLE; typedef struct _DOMAIN_PASSWORD_INFORMATION { unsigned short MinPasswordLength; unsigned short PasswordHistoryLength; unsigned long PasswordProperties; OLD_LARGE_INTEGER MaxPasswordAge; OLD_LARGE_INTEGER MinPasswordAge; } DOMAIN_PASSWORD_INFORMATION, *PDOMAIN_PASSWORD_INFORMATION; typedef struct _DOMAIN_LOGOFF_INFORMATION { OLD_LARGE_INTEGER ForceLogoff; } DOMAIN_LOGOFF_INFORMATION, *PDOMAIN_LOGOFF_INFORMATION; typedef struct _DOMAIN_SERVER_ROLE_INFORMATION { DOMAIN_SERVER_ROLE DomainServerRole; } DOMAIN_SERVER_ROLE_INFORMATION, *PDOMAIN_SERVER_ROLE_INFORMATION; typedef struct _DOMAIN_MODIFIED_INFORMATION { OLD_LARGE_INTEGER DomainModifiedCount; OLD_LARGE_INTEGER CreationTime; } DOMAIN_MODIFIED_INFORMATION, *PDOMAIN_MODIFIED_INFORMATION; typedef struct _DOMAIN_MODIFIED_INFORMATION2 { OLD_LARGE_INTEGER DomainModifiedCount; OLD_LARGE_INTEGER CreationTime; OLD_LARGE_INTEGER ModifiedCountAtLastPromotion; } DOMAIN_MODIFIED_INFORMATION2, *PDOMAIN_MODIFIED_INFORMATION2; #pragma pack(4) typedef struct _SAMPR_DOMAIN_GENERAL_INFORMATION { OLD_LARGE_INTEGER ForceLogoff; RPC_UNICODE_STRING OemInformation; RPC_UNICODE_STRING DomainName; RPC_UNICODE_STRING ReplicaSourceNodeName; OLD_LARGE_INTEGER DomainModifiedCount; unsigned long DomainServerState; unsigned long DomainServerRole; unsigned char UasCompatibilityRequired; unsigned long UserCount; unsigned long GroupCount; unsigned long AliasCount; } SAMPR_DOMAIN_GENERAL_INFORMATION, *PSAMPR_DOMAIN_GENERAL_INFORMATION; #pragma pack() #pragma pack(4) typedef struct _SAMPR_DOMAIN_GENERAL_INFORMATION2 { SAMPR_DOMAIN_GENERAL_INFORMATION I1; LARGE_INTEGER LockoutDuration; LARGE_INTEGER LockoutObservationWindow; unsigned short LockoutThreshold; } SAMPR_DOMAIN_GENERAL_INFORMATION2, *PSAMPR_DOMAIN_GENERAL_INFORMATION2; #pragma pack() typedef struct _SAMPR_DOMAIN_OEM_INFORMATION { RPC_UNICODE_STRING OemInformation; } SAMPR_DOMAIN_OEM_INFORMATION, *PSAMPR_DOMAIN_OEM_INFORMATION; typedef struct _SAMPR_DOMAIN_NAME_INFORMATION { RPC_UNICODE_STRING DomainName; } SAMPR_DOMAIN_NAME_INFORMATION, *PSAMPR_DOMAIN_NAME_INFORMATION; typedef struct SAMPR_DOMAIN_REPLICATION_INFORMATION { RPC_UNICODE_STRING ReplicaSourceNodeName; } SAMPR_DOMAIN_REPLICATION_INFORMATION, *PSAMPR_DOMAIN_REPLICATION_INFORMATION; typedef struct _SAMPR_DOMAIN_LOCKOUT_INFORMATION { LARGE_INTEGER LockoutDuration; LARGE_INTEGER LockoutObservationWindow; unsigned short LockoutThreshold; } SAMPR_DOMAIN_LOCKOUT_INFORMATION, *PSAMPR_DOMAIN_LOCKOUT_INFORMATION; typedef enum _DOMAIN_INFORMATION_CLASS { DomainPasswordInformation = 1, DomainGeneralInformation = 2, DomainLogoffInformation = 3, DomainOemInformation = 4, DomainNameInformation = 5, DomainReplicationInformation = 6, DomainServerRoleInformation = 7, DomainModifiedInformation = 8, DomainStateInformation = 9, DomainGeneralInformation2 = 11, DomainLockoutInformation = 12, DomainModifiedInformation2 = 13 } DOMAIN_INFORMATION_CLASS; typedef [switch_type(DOMAIN_INFORMATION_CLASS)] union _SAMPR_DOMAIN_INFO_BUFFER { [case(DomainPasswordInformation)] DOMAIN_PASSWORD_INFORMATION Password; [case(DomainGeneralInformation)] SAMPR_DOMAIN_GENERAL_INFORMATION General; [case(DomainLogoffInformation)] DOMAIN_LOGOFF_INFORMATION Logoff; [case(DomainOemInformation)] SAMPR_DOMAIN_OEM_INFORMATION Oem; [case(DomainNameInformation)] SAMPR_DOMAIN_NAME_INFORMATION Name; [case(DomainServerRoleInformation)] DOMAIN_SERVER_ROLE_INFORMATION Role; [case(DomainReplicationInformation)] SAMPR_DOMAIN_REPLICATION_INFORMATION Replication; [case(DomainModifiedInformation)] DOMAIN_MODIFIED_INFORMATION Modified; [case(DomainStateInformation)] DOMAIN_STATE_INFORMATION State; [case(DomainGeneralInformation2)] SAMPR_DOMAIN_GENERAL_INFORMATION2 General2; [case(DomainLockoutInformation)] SAMPR_DOMAIN_LOCKOUT_INFORMATION Lockout; [case(DomainModifiedInformation2)] DOMAIN_MODIFIED_INFORMATION2 Modified2; } SAMPR_DOMAIN_INFO_BUFFER, *PSAMPR_DOMAIN_INFO_BUFFER; typedef enum _DOMAIN_DISPLAY_INFORMATION { DomainDisplayUser = 1, DomainDisplayMachine, DomainDisplayGroup, DomainDisplayOemUser, DomainDisplayOemGroup } DOMAIN_DISPLAY_INFORMATION, *PDOMAIN_DISPLAY_INFORMATION; typedef struct _SAMPR_DOMAIN_DISPLAY_USER { unsigned long Index; unsigned long Rid; unsigned long AccountControl; RPC_UNICODE_STRING AccountName; RPC_UNICODE_STRING AdminComment; RPC_UNICODE_STRING FullName; } SAMPR_DOMAIN_DISPLAY_USER, *PSAMPR_DOMAIN_DISPLAY_USER; typedef struct _SAMPR_DOMAIN_DISPLAY_MACHINE { unsigned long Index; unsigned long Rid; unsigned long AccountControl; RPC_UNICODE_STRING AccountName; RPC_UNICODE_STRING AdminComment; } SAMPR_DOMAIN_DISPLAY_MACHINE, *PSAMPR_DOMAIN_DISPLAY_MACHINE; typedef struct _SAMPR_DOMAIN_DISPLAY_GROUP { unsigned long Index; unsigned long Rid; unsigned long Attributes; RPC_UNICODE_STRING AccountName; RPC_UNICODE_STRING AdminComment; } SAMPR_DOMAIN_DISPLAY_GROUP, *PSAMPR_DOMAIN_DISPLAY_GROUP; typedef struct _SAMPR_DOMAIN_DISPLAY_OEM_USER { unsigned long Index; RPC_STRING OemAccountName; } SAMPR_DOMAIN_DISPLAY_OEM_USER, *PSAMPR_DOMAIN_DISPLAY_OEM_USER; typedef struct _SAMPR_DOMAIN_DISPLAY_OEM_GROUP { unsigned long Index; RPC_STRING OemAccountName; } SAMPR_DOMAIN_DISPLAY_OEM_GROUP, *PSAMPR_DOMAIN_DISPLAY_OEM_GROUP; typedef struct _SAMPR_DOMAIN_DISPLAY_USER_BUFFER { unsigned long EntriesRead; [size_is(EntriesRead)] PSAMPR_DOMAIN_DISPLAY_USER Buffer; } SAMPR_DOMAIN_DISPLAY_USER_BUFFER, *PSAMPR_DOMAIN_DISPLAY_USER_BUFFER; typedef struct _SAMPR_DOMAIN_DISPLAY_MACHINE_BUFFER { unsigned long EntriesRead; [size_is(EntriesRead)] PSAMPR_DOMAIN_DISPLAY_MACHINE Buffer; } SAMPR_DOMAIN_DISPLAY_MACHINE_BUFFER, *PSAMPR_DOMAIN_DISPLAY_MACHINE_BUFFER; typedef struct _SAMPR_DOMAIN_DISPLAY_GROUP_BUFFER { unsigned long EntriesRead; [size_is(EntriesRead)] PSAMPR_DOMAIN_DISPLAY_GROUP Buffer; } SAMPR_DOMAIN_DISPLAY_GROUP_BUFFER, *PSAMPR_DOMAIN_DISPLAY_GROUP_BUFFER; typedef struct _SAMPR_DOMAIN_DISPLAY_OEM_USER_BUFFER { unsigned long EntriesRead; [size_is(EntriesRead)] PSAMPR_DOMAIN_DISPLAY_OEM_USER Buffer; } SAMPR_DOMAIN_DISPLAY_OEM_USER_BUFFER, *PSAMPR_DOMAIN_DISPLAY_OEM_USER_BUFFER; typedef struct _SAMPR_DOMAIN_DISPLAY_OEM_GROUP_BUFFER { unsigned long EntriesRead; [size_is(EntriesRead)] PSAMPR_DOMAIN_DISPLAY_OEM_GROUP Buffer; } SAMPR_DOMAIN_DISPLAY_OEM_GROUP_BUFFER, *PSAMPR_DOMAIN_DISPLAY_OEM_GROUP_BUFFER; typedef [switch_type(DOMAIN_DISPLAY_INFORMATION)] union _SAMPR_DISPLAY_INFO_BUFFER { [case(DomainDisplayUser)] SAMPR_DOMAIN_DISPLAY_USER_BUFFER UserInformation; [case(DomainDisplayMachine)] SAMPR_DOMAIN_DISPLAY_MACHINE_BUFFER MachineInformation; [case(DomainDisplayGroup)] SAMPR_DOMAIN_DISPLAY_GROUP_BUFFER GroupInformation; [case(DomainDisplayOemUser)] SAMPR_DOMAIN_DISPLAY_OEM_USER_BUFFER OemUserInformation; [case(DomainDisplayOemGroup)] SAMPR_DOMAIN_DISPLAY_OEM_GROUP_BUFFER OemGroupInformation; } SAMPR_DISPLAY_INFO_BUFFER, *PSAMPR_DISPLAY_INFO_BUFFER; typedef struct _GROUP_ATTRIBUTE_INFORMATION { unsigned long Attributes; } GROUP_ATTRIBUTE_INFORMATION, *PGROUP_ATTRIBUTE_INFORMATION; typedef struct _SAMPR_GROUP_GENERAL_INFORMATION { RPC_UNICODE_STRING Name; unsigned long Attributes; unsigned long MemberCount; RPC_UNICODE_STRING AdminComment; } SAMPR_GROUP_GENERAL_INFORMATION, *PSAMPR_GROUP_GENERAL_INFORMATION; typedef struct _SAMPR_GROUP_NAME_INFORMATION { RPC_UNICODE_STRING Name; } SAMPR_GROUP_NAME_INFORMATION, *PSAMPR_GROUP_NAME_INFORMATION; typedef struct _SAMPR_GROUP_ADM_COMMENT_INFORMATION { RPC_UNICODE_STRING AdminComment; } SAMPR_GROUP_ADM_COMMENT_INFORMATION, *PSAMPR_GROUP_ADM_COMMENT_INFORMATION; typedef enum _GROUP_INFORMATION_CLASS { GroupGeneralInformation = 1, GroupNameInformation, GroupAttributeInformation, GroupAdminCommentInformation, GroupReplicationInformation } GROUP_INFORMATION_CLASS; typedef [switch_type(GROUP_INFORMATION_CLASS)] union _SAMPR_GROUP_INFO_BUFFER { [case(GroupGeneralInformation)] SAMPR_GROUP_GENERAL_INFORMATION General; [case(GroupNameInformation)] SAMPR_GROUP_NAME_INFORMATION Name; [case(GroupAttributeInformation)] GROUP_ATTRIBUTE_INFORMATION Attribute; [case(GroupAdminCommentInformation)] SAMPR_GROUP_ADM_COMMENT_INFORMATION AdminComment; [case(GroupReplicationInformation)] SAMPR_GROUP_GENERAL_INFORMATION DoNotUse; } SAMPR_GROUP_INFO_BUFFER, *PSAMPR_GROUP_INFO_BUFFER; typedef struct _SAMPR_ALIAS_GENERAL_INFORMATION { RPC_UNICODE_STRING Name; unsigned long MemberCount; RPC_UNICODE_STRING AdminComment; } SAMPR_ALIAS_GENERAL_INFORMATION, *PSAMPR_ALIAS_GENERAL_INFORMATION; typedef struct _SAMPR_ALIAS_NAME_INFORMATION { RPC_UNICODE_STRING Name; } SAMPR_ALIAS_NAME_INFORMATION, *PSAMPR_ALIAS_NAME_INFORMATION; typedef struct _SAMPR_ALIAS_ADM_COMMENT_INFORMATION { RPC_UNICODE_STRING AdminComment; } SAMPR_ALIAS_ADM_COMMENT_INFORMATION, *PSAMPR_ALIAS_ADM_COMMENT_INFORMATION; typedef enum _ALIAS_INFORMATION_CLASS { AliasGeneralInformation = 1, AliasNameInformation, AliasAdminCommentInformation } ALIAS_INFORMATION_CLASS; typedef [switch_type(ALIAS_INFORMATION_CLASS)] union _SAMPR_ALIAS_INFO_BUFFER { [case(AliasGeneralInformation)] SAMPR_ALIAS_GENERAL_INFORMATION General; [case(AliasNameInformation)] SAMPR_ALIAS_NAME_INFORMATION Name; [case(AliasAdminCommentInformation)] SAMPR_ALIAS_ADM_COMMENT_INFORMATION AdminComment; } SAMPR_ALIAS_INFO_BUFFER, *PSAMPR_ALIAS_INFO_BUFFER; typedef struct _SAMPR_ENCRYPTED_USER_PASSWORD { unsigned char Buffer[(256 * 2) + 4]; } SAMPR_ENCRYPTED_USER_PASSWORD, *PSAMPR_ENCRYPTED_USER_PASSWORD; typedef struct _SAMPR_USER_PASSWORD { wchar_t Buffer[256]; unsigned long Length; } SAMPR_USER_PASSWORD, *PSAMPR_USER_PASSWORD; typedef struct _SAMPR_ENCRYPTED_USER_PASSWORD_NEW { unsigned char Buffer[(256 * 2) + 4 + 16]; } SAMPR_ENCRYPTED_USER_PASSWORD_NEW, *PSAMPR_ENCRYPTED_USER_PASSWORD_NEW; typedef struct _SAMPR_USER_PASSWORD_NEW { WCHAR Buffer[256]; ULONG Length; UCHAR ClearSalt[16]; } SAMPR_USER_PASSWORD_NEW, *PSAMPR_USER_PASSWORD_NEW; typedef struct _USER_PRIMARY_GROUP_INFORMATION { unsigned long PrimaryGroupId; } USER_PRIMARY_GROUP_INFORMATION, *PUSER_PRIMARY_GROUP_INFORMATION; typedef struct _USER_CONTROL_INFORMATION { unsigned long UserAccountControl; } USER_CONTROL_INFORMATION, *PUSER_CONTROL_INFORMATION; typedef struct _USER_EXPIRES_INFORMATION { OLD_LARGE_INTEGER AccountExpires; } USER_EXPIRES_INFORMATION, *PUSER_EXPIRES_INFORMATION; typedef struct _SAMPR_LOGON_HOURS { unsigned short UnitsPerWeek; [size_is(1260), length_is((UnitsPerWeek+7)/8)] unsigned char* LogonHours; } SAMPR_LOGON_HOURS, *PSAMPR_LOGON_HOURS; typedef struct _SAMPR_USER_ALL_INFORMATION { OLD_LARGE_INTEGER LastLogon; OLD_LARGE_INTEGER LastLogoff; OLD_LARGE_INTEGER PasswordLastSet; OLD_LARGE_INTEGER AccountExpires; OLD_LARGE_INTEGER PasswordCanChange; OLD_LARGE_INTEGER PasswordMustChange; RPC_UNICODE_STRING UserName; RPC_UNICODE_STRING FullName; RPC_UNICODE_STRING HomeDirectory; RPC_UNICODE_STRING HomeDirectoryDrive; RPC_UNICODE_STRING ScriptPath; RPC_UNICODE_STRING ProfilePath; RPC_UNICODE_STRING AdminComment; RPC_UNICODE_STRING WorkStations; RPC_UNICODE_STRING UserComment; RPC_UNICODE_STRING Parameters; RPC_SHORT_BLOB LmOwfPassword; RPC_SHORT_BLOB NtOwfPassword; RPC_UNICODE_STRING PrivateData; SAMPR_SR_SECURITY_DESCRIPTOR SecurityDescriptor; unsigned long UserId; unsigned long PrimaryGroupId; unsigned long UserAccountControl; unsigned long WhichFields; SAMPR_LOGON_HOURS LogonHours; unsigned short BadPasswordCount; unsigned short LogonCount; unsigned short CountryCode; unsigned short CodePage; unsigned char LmPasswordPresent; unsigned char NtPasswordPresent; unsigned char PasswordExpired; unsigned char PrivateDataSensitive; } SAMPR_USER_ALL_INFORMATION, *PSAMPR_USER_ALL_INFORMATION; typedef struct _SAMPR_USER_GENERAL_INFORMATION { RPC_UNICODE_STRING UserName; RPC_UNICODE_STRING FullName; unsigned long PrimaryGroupId; RPC_UNICODE_STRING AdminComment; RPC_UNICODE_STRING UserComment; } SAMPR_USER_GENERAL_INFORMATION, *PSAMPR_USER_GENERAL_INFORMATION; typedef struct _SAMPR_USER_PREFERENCES_INFORMATION { RPC_UNICODE_STRING UserComment; RPC_UNICODE_STRING Reserved1; unsigned short CountryCode; unsigned short CodePage; } SAMPR_USER_PREFERENCES_INFORMATION, *PSAMPR_USER_PREFERENCES_INFORMATION; typedef struct _SAMPR_USER_PARAMETERS_INFORMATION { RPC_UNICODE_STRING Parameters; } SAMPR_USER_PARAMETERS_INFORMATION, *PSAMPR_USER_PARAMETERS_INFORMATION; typedef struct _SAMPR_USER_LOGON_INFORMATION { RPC_UNICODE_STRING UserName; RPC_UNICODE_STRING FullName; unsigned long UserId; unsigned long PrimaryGroupId; RPC_UNICODE_STRING HomeDirectory; RPC_UNICODE_STRING HomeDirectoryDrive; RPC_UNICODE_STRING ScriptPath; RPC_UNICODE_STRING ProfilePath; RPC_UNICODE_STRING WorkStations; OLD_LARGE_INTEGER LastLogon; OLD_LARGE_INTEGER LastLogoff; OLD_LARGE_INTEGER PasswordLastSet; OLD_LARGE_INTEGER PasswordCanChange; OLD_LARGE_INTEGER PasswordMustChange; SAMPR_LOGON_HOURS LogonHours; unsigned short BadPasswordCount; unsigned short LogonCount; unsigned long UserAccountControl; } SAMPR_USER_LOGON_INFORMATION, *PSAMPR_USER_LOGON_INFORMATION; typedef struct _SAMPR_USER_ACCOUNT_INFORMATION { RPC_UNICODE_STRING UserName; RPC_UNICODE_STRING FullName; unsigned long UserId; unsigned long PrimaryGroupId; RPC_UNICODE_STRING HomeDirectory; RPC_UNICODE_STRING HomeDirectoryDrive; RPC_UNICODE_STRING ScriptPath; RPC_UNICODE_STRING ProfilePath; RPC_UNICODE_STRING AdminComment; RPC_UNICODE_STRING WorkStations; OLD_LARGE_INTEGER LastLogon; OLD_LARGE_INTEGER LastLogoff; SAMPR_LOGON_HOURS LogonHours; unsigned short BadPasswordCount; unsigned short LogonCount; OLD_LARGE_INTEGER PasswordLastSet; OLD_LARGE_INTEGER AccountExpires; unsigned long UserAccountControl; } SAMPR_USER_ACCOUNT_INFORMATION, *PSAMPR_USER_ACCOUNT_INFORMATION; typedef struct _SAMPR_USER_A_NAME_INFORMATION { RPC_UNICODE_STRING UserName; } SAMPR_USER_A_NAME_INFORMATION, *PSAMPR_USER_A_NAME_INFORMATION; typedef struct _SAMPR_USER_F_NAME_INFORMATION { RPC_UNICODE_STRING FullName; } SAMPR_USER_F_NAME_INFORMATION, *PSAMPR_USER_F_NAME_INFORMATION; typedef struct _SAMPR_USER_NAME_INFORMATION { RPC_UNICODE_STRING UserName; RPC_UNICODE_STRING FullName; } SAMPR_USER_NAME_INFORMATION, *PSAMPR_USER_NAME_INFORMATION; typedef struct _SAMPR_USER_HOME_INFORMATION { RPC_UNICODE_STRING HomeDirectory; RPC_UNICODE_STRING HomeDirectoryDrive; } SAMPR_USER_HOME_INFORMATION, *PSAMPR_USER_HOME_INFORMATION; typedef struct _SAMPR_USER_SCRIPT_INFORMATION { RPC_UNICODE_STRING ScriptPath; } SAMPR_USER_SCRIPT_INFORMATION, *PSAMPR_USER_SCRIPT_INFORMATION; typedef struct _SAMPR_USER_PROFILE_INFORMATION { RPC_UNICODE_STRING ProfilePath; } SAMPR_USER_PROFILE_INFORMATION, *PSAMPR_USER_PROFILE_INFORMATION; typedef struct _SAMPR_USER_ADMIN_COMMENT_INFORMATION { RPC_UNICODE_STRING AdminComment; } SAMPR_USER_ADMIN_COMMENT_INFORMATION, *PSAMPR_USER_ADMIN_COMMENT_INFORMATION; typedef struct _SAMPR_USER_WORKSTATIONS_INFORMATION { RPC_UNICODE_STRING WorkStations; } SAMPR_USER_WORKSTATIONS_INFORMATION, *PSAMPR_USER_WORKSTATIONS_INFORMATION; typedef struct _SAMPR_USER_LOGON_HOURS_INFORMATION { SAMPR_LOGON_HOURS LogonHours; } SAMPR_USER_LOGON_HOURS_INFORMATION, *PSAMPR_USER_LOGON_HOURS_INFORMATION; typedef struct _SAMPR_USER_INTERNAL1_INFORMATION { ENCRYPTED_NT_OWF_PASSWORD EncryptedNtOwfPassword; ENCRYPTED_LM_OWF_PASSWORD EncryptedLmOwfPassword; unsigned char NtPasswordPresent; unsigned char LmPasswordPresent; unsigned char PasswordExpired; } SAMPR_USER_INTERNAL1_INFORMATION, *PSAMPR_USER_INTERNAL1_INFORMATION; typedef struct _SAMPR_USER_INTERNAL4_INFORMATION { SAMPR_USER_ALL_INFORMATION I1; SAMPR_ENCRYPTED_USER_PASSWORD UserPassword; } SAMPR_USER_INTERNAL4_INFORMATION, *PSAMPR_USER_INTERNAL4_INFORMATION; typedef struct _SAMPR_USER_INTERNAL4_INFORMATION_NEW { SAMPR_USER_ALL_INFORMATION I1; SAMPR_ENCRYPTED_USER_PASSWORD_NEW UserPassword; } SAMPR_USER_INTERNAL4_INFORMATION_NEW, *PSAMPR_USER_INTERNAL4_INFORMATION_NEW; typedef struct _SAMPR_USER_INTERNAL5_INFORMATION { SAMPR_ENCRYPTED_USER_PASSWORD UserPassword; unsigned char PasswordExpired; } SAMPR_USER_INTERNAL5_INFORMATION, *PSAMPR_USER_INTERNAL5_INFORMATION; typedef struct _SAMPR_USER_INTERNAL5_INFORMATION_NEW { SAMPR_ENCRYPTED_USER_PASSWORD_NEW UserPassword; unsigned char PasswordExpired; } SAMPR_USER_INTERNAL5_INFORMATION_NEW, *PSAMPR_USER_INTERNAL5_INFORMATION_NEW; typedef struct _SAMPR_ENCRYPTED_PASSWORD_AES { UCHAR AuthData[64]; UCHAR Salt[16]; ULONG cbCipher; [size_is(cbCipher)] PUCHAR Cipher; ULONGLONG PBKDF2Iterations; } SAMPR_ENCRYPTED_PASSWORD_AES, *PSAMPR_ENCRYPTED_PASSWORD_AES; typedef struct _SAMPR_USER_INTERNAL7_INFORMATION { SAMPR_ENCRYPTED_PASSWORD_AES UserPassword; BOOLEAN PasswordExpired; } SAMPR_USER_INTERNAL7_INFORMATION, *PSAMPR_USER_INTERNAL7_INFORMATION; typedef struct _SAMPR_USER_INTERNAL8_INFORMATION { SAMPR_USER_ALL_INFORMATION I1; SAMPR_ENCRYPTED_PASSWORD_AES UserPassword; } SAMPR_USER_INTERNAL8_INFORMATION, *PSAMPR_USER_INTERNAL8_INFORMATION; typedef enum _USER_INFORMATION_CLASS { UserGeneralInformation = 1, UserPreferencesInformation = 2, UserLogonInformation = 3, UserLogonHoursInformation = 4, UserAccountInformation = 5, UserNameInformation = 6, UserAccountNameInformation = 7, UserFullNameInformation = 8, UserPrimaryGroupInformation = 9, UserHomeInformation = 10, UserScriptInformation = 11, UserProfileInformation = 12, UserAdminCommentInformation = 13, UserWorkStationsInformation = 14, UserControlInformation = 16, UserExpiresInformation = 17, UserInternal1Information = 18, UserParametersInformation = 20, UserAllInformation = 21, UserInternal4Information = 23, UserInternal5Information = 24, UserInternal4InformationNew = 25, UserInternal5InformationNew = 26, UserInternal7Information = 31, UserInternal8Information = 32 } USER_INFORMATION_CLASS, *PUSER_INFORMATION_CLASS; typedef [switch_type(USER_INFORMATION_CLASS)] union _SAMPR_USER_INFO_BUFFER { [case(UserGeneralInformation)] SAMPR_USER_GENERAL_INFORMATION General; [case(UserPreferencesInformation)] SAMPR_USER_PREFERENCES_INFORMATION Preferences; [case(UserLogonInformation)] SAMPR_USER_LOGON_INFORMATION Logon; [case(UserLogonHoursInformation)] SAMPR_USER_LOGON_HOURS_INFORMATION LogonHours; [case(UserAccountInformation)] SAMPR_USER_ACCOUNT_INFORMATION Account; [case(UserNameInformation)] SAMPR_USER_NAME_INFORMATION Name; [case(UserAccountNameInformation)] SAMPR_USER_A_NAME_INFORMATION AccountName; [case(UserFullNameInformation)] SAMPR_USER_F_NAME_INFORMATION FullName; [case(UserPrimaryGroupInformation)] USER_PRIMARY_GROUP_INFORMATION PrimaryGroup; [case(UserHomeInformation)] SAMPR_USER_HOME_INFORMATION Home; [case(UserScriptInformation)] SAMPR_USER_SCRIPT_INFORMATION Script; [case(UserProfileInformation)] SAMPR_USER_PROFILE_INFORMATION Profile; [case(UserAdminCommentInformation)] SAMPR_USER_ADMIN_COMMENT_INFORMATION AdminComment; [case(UserWorkStationsInformation)] SAMPR_USER_WORKSTATIONS_INFORMATION WorkStations; [case(UserControlInformation)] USER_CONTROL_INFORMATION Control; [case(UserExpiresInformation)] USER_EXPIRES_INFORMATION Expires; [case(UserInternal1Information)] SAMPR_USER_INTERNAL1_INFORMATION Internal1; [case(UserParametersInformation)] SAMPR_USER_PARAMETERS_INFORMATION Parameters; [case(UserAllInformation)] SAMPR_USER_ALL_INFORMATION All; [case(UserInternal4Information)] SAMPR_USER_INTERNAL4_INFORMATION Internal4; [case(UserInternal5Information)] SAMPR_USER_INTERNAL5_INFORMATION Internal5; [case(UserInternal4InformationNew)] SAMPR_USER_INTERNAL4_INFORMATION_NEW Internal4New; [case(UserInternal5InformationNew)] SAMPR_USER_INTERNAL5_INFORMATION_NEW Internal5New; [case(UserInternal7Information)] SAMPR_USER_INTERNAL7_INFORMATION Internal7; [case(UserInternal8Information)] SAMPR_USER_INTERNAL8_INFORMATION Internal8; } SAMPR_USER_INFO_BUFFER, *PSAMPR_USER_INFO_BUFFER; typedef enum _PASSWORD_POLICY_VALIDATION_TYPE{ SamValidateAuthentication = 1, SamValidatePasswordChange, SamValidatePasswordReset } PASSWORD_POLICY_VALIDATION_TYPE; typedef struct _SAM_VALIDATE_PASSWORD_HASH{ unsigned long Length; [unique,size_is(Length)] unsigned char* Hash; } SAM_VALIDATE_PASSWORD_HASH, *PSAM_VALIDATE_PASSWORD_HASH; typedef struct _SAM_VALIDATE_PERSISTED_FIELDS{ unsigned long PresentFields; LARGE_INTEGER PasswordLastSet; LARGE_INTEGER BadPasswordTime; LARGE_INTEGER LockoutTime; unsigned long BadPasswordCount; unsigned long PasswordHistoryLength; [unique,size_is(PasswordHistoryLength)] PSAM_VALIDATE_PASSWORD_HASH PasswordHistory; } SAM_VALIDATE_PERSISTED_FIELDS, *PSAM_VALIDATE_PERSISTED_FIELDS; typedef enum _SAM_VALIDATE_VALIDATION_STATUS{ SamValidateSuccess = 0, SamValidatePasswordMustChange, SamValidateAccountLockedOut, SamValidatePasswordExpired, SamValidatePasswordIncorrect, SamValidatePasswordIsInHistory, SamValidatePasswordTooShort, SamValidatePasswordTooLong, SamValidatePasswordNotComplexEnough, SamValidatePasswordTooRecent, SamValidatePasswordFilterError } SAM_VALIDATE_VALIDATION_STATUS, *PSAM_VALIDATE_VALIDATION_STATUS; typedef struct _SAM_VALIDATE_STANDARD_OUTPUT_ARG{ SAM_VALIDATE_PERSISTED_FIELDS ChangedPersistedFields; SAM_VALIDATE_VALIDATION_STATUS ValidationStatus; } SAM_VALIDATE_STANDARD_OUTPUT_ARG, *PSAM_VALIDATE_STANDARD_OUTPUT_ARG; typedef struct _SAM_VALIDATE_AUTHENTICATION_INPUT_ARG{ SAM_VALIDATE_PERSISTED_FIELDS InputPersistedFields; unsigned char PasswordMatched; } SAM_VALIDATE_AUTHENTICATION_INPUT_ARG, *PSAM_VALIDATE_AUTHENTICATION_INPUT_ARG; typedef struct _SAM_VALIDATE_PASSWORD_CHANGE_INPUT_ARG{ SAM_VALIDATE_PERSISTED_FIELDS InputPersistedFields; RPC_UNICODE_STRING ClearPassword; RPC_UNICODE_STRING UserAccountName; SAM_VALIDATE_PASSWORD_HASH HashedPassword; unsigned char PasswordMatch; } SAM_VALIDATE_PASSWORD_CHANGE_INPUT_ARG, *PSAM_VALIDATE_PASSWORD_CHANGE_INPUT_ARG; typedef struct _SAM_VALIDATE_PASSWORD_RESET_INPUT_ARG{ SAM_VALIDATE_PERSISTED_FIELDS InputPersistedFields; RPC_UNICODE_STRING ClearPassword; RPC_UNICODE_STRING UserAccountName; SAM_VALIDATE_PASSWORD_HASH HashedPassword; unsigned char PasswordMustChangeAtNextLogon; unsigned char ClearLockout; } SAM_VALIDATE_PASSWORD_RESET_INPUT_ARG, *PSAM_VALIDATE_PASSWORD_RESET_INPUT_ARG; typedef [switch_type(PASSWORD_POLICY_VALIDATION_TYPE)] union _SAM_VALIDATE_INPUT_ARG{ [case(SamValidateAuthentication)] SAM_VALIDATE_AUTHENTICATION_INPUT_ARG ValidateAuthenticationInput; [case(SamValidatePasswordChange)] SAM_VALIDATE_PASSWORD_CHANGE_INPUT_ARG ValidatePasswordChangeInput; [case(SamValidatePasswordReset)] SAM_VALIDATE_PASSWORD_RESET_INPUT_ARG ValidatePasswordResetInput; } SAM_VALIDATE_INPUT_ARG, *PSAM_VALIDATE_INPUT_ARG; typedef [switch_type(PASSWORD_POLICY_VALIDATION_TYPE)] union _SAM_VALIDATE_OUTPUT_ARG{ [case(SamValidateAuthentication)] SAM_VALIDATE_STANDARD_OUTPUT_ARG ValidateAuthenticationOutput; [case(SamValidatePasswordChange)] SAM_VALIDATE_STANDARD_OUTPUT_ARG ValidatePasswordChangeOutput; [case(SamValidatePasswordReset)] SAM_VALIDATE_STANDARD_OUTPUT_ARG ValidatePasswordResetOutput; } SAM_VALIDATE_OUTPUT_ARG, *PSAM_VALIDATE_OUTPUT_ARG; // opnum 0 long SamrConnect( [in, unique] PSAMPR_SERVER_NAME ServerName, [out] SAMPR_HANDLE * ServerHandle, [in] unsigned long DesiredAccess ); // opnum 1 long SamrCloseHandle( [in,out] SAMPR_HANDLE * SamHandle ); // opnum 2 long SamrSetSecurityObject( [in] SAMPR_HANDLE ObjectHandle, [in] SECURITY_INFORMATION SecurityInformation, [in] PSAMPR_SR_SECURITY_DESCRIPTOR SecurityDescriptor ); // opnum 3 long SamrQuerySecurityObject( [in] SAMPR_HANDLE ObjectHandle, [in] SECURITY_INFORMATION SecurityInformation, [out] PSAMPR_SR_SECURITY_DESCRIPTOR * SecurityDescriptor ); // opnum 4 void Opnum4NotUsedOnWire(void); // opnum 5 long SamrLookupDomainInSamServer( [in] SAMPR_HANDLE ServerHandle, [in] PRPC_UNICODE_STRING Name, [out] PRPC_SID * DomainId ); // opnum 6 long SamrEnumerateDomainsInSamServer( [in] SAMPR_HANDLE ServerHandle, [in,out] unsigned long * EnumerationContext, [out] PSAMPR_ENUMERATION_BUFFER * Buffer, [in] unsigned long PreferedMaximumLength, [out] unsigned long * CountReturned ); // opnum 7 long SamrOpenDomain( [in] SAMPR_HANDLE ServerHandle, [in] unsigned long DesiredAccess, [in] PRPC_SID DomainId, [out] SAMPR_HANDLE * DomainHandle ); // opnum 8 long SamrQueryInformationDomain( [in] SAMPR_HANDLE DomainHandle, [in] DOMAIN_INFORMATION_CLASS DomainInformationClass, [out, switch_is(DomainInformationClass)] PSAMPR_DOMAIN_INFO_BUFFER * Buffer ); // opnum 9 long SamrSetInformationDomain( [in] SAMPR_HANDLE DomainHandle, [in] DOMAIN_INFORMATION_CLASS DomainInformationClass, [in, switch_is(DomainInformationClass)] PSAMPR_DOMAIN_INFO_BUFFER DomainInformation ); // opnum 10 long SamrCreateGroupInDomain( [in] SAMPR_HANDLE DomainHandle, [in] PRPC_UNICODE_STRING Name, [in] unsigned long DesiredAccess, [out] SAMPR_HANDLE * GroupHandle, [out] unsigned long * RelativeId ); // opnum 11 long SamrEnumerateGroupsInDomain( [in] SAMPR_HANDLE DomainHandle, [in,out] unsigned long * EnumerationContext, [out] PSAMPR_ENUMERATION_BUFFER * Buffer, [in] unsigned long PreferedMaximumLength, [out] unsigned long * CountReturned ); // opnum 12 long SamrCreateUserInDomain( [in] SAMPR_HANDLE DomainHandle, [in] PRPC_UNICODE_STRING Name, [in] unsigned long DesiredAccess, [out] SAMPR_HANDLE * UserHandle, [out] unsigned long * RelativeId ); // opnum 13 long SamrEnumerateUsersInDomain( [in] SAMPR_HANDLE DomainHandle, [in,out] unsigned long * EnumerationContext, [in] unsigned long UserAccountControl, [out] PSAMPR_ENUMERATION_BUFFER * Buffer, [in] unsigned long PreferedMaximumLength, [out] unsigned long * CountReturned ); // opnum 14 long SamrCreateAliasInDomain( [in] SAMPR_HANDLE DomainHandle, [in] PRPC_UNICODE_STRING AccountName, [in] unsigned long DesiredAccess, [out] SAMPR_HANDLE * AliasHandle, [out] unsigned long * RelativeId ); // opnum 15 long SamrEnumerateAliasesInDomain( [in] SAMPR_HANDLE DomainHandle, [in,out] unsigned long * EnumerationContext, [out] PSAMPR_ENUMERATION_BUFFER * Buffer, [in] unsigned long PreferedMaximumLength, [out] unsigned long * CountReturned ); // opnum 16 long SamrGetAliasMembership( [in] SAMPR_HANDLE DomainHandle, [in] PSAMPR_PSID_ARRAY SidArray, [out] PSAMPR_ULONG_ARRAY Membership ); // opnum 17 long SamrLookupNamesInDomain( [in] SAMPR_HANDLE DomainHandle, [in, range(0, 1000)] unsigned long Count, [in, size_is(1000), length_is(Count)] RPC_UNICODE_STRING Names[*], [out] PSAMPR_ULONG_ARRAY RelativeIds, [out] PSAMPR_ULONG_ARRAY Use ); // opnum 18 long SamrLookupIdsInDomain( [in] SAMPR_HANDLE DomainHandle, [in, range(0, 1000)] unsigned long Count, [in, size_is(1000), length_is(Count)] unsigned long *RelativeIds, [out] PSAMPR_RETURNED_USTRING_ARRAY Names, [out] PSAMPR_ULONG_ARRAY Use ); // opnum 19 long SamrOpenGroup( [in] SAMPR_HANDLE DomainHandle, [in] unsigned long DesiredAccess, [in] unsigned long GroupId, [out] SAMPR_HANDLE * GroupHandle ); // opnum 20 long SamrQueryInformationGroup( [in] SAMPR_HANDLE GroupHandle, [in] GROUP_INFORMATION_CLASS GroupInformationClass, [out, switch_is(GroupInformationClass)] PSAMPR_GROUP_INFO_BUFFER * Buffer ); // opnum 21 long SamrSetInformationGroup( [in] SAMPR_HANDLE GroupHandle, [in] GROUP_INFORMATION_CLASS GroupInformationClass, [in, switch_is(GroupInformationClass)] PSAMPR_GROUP_INFO_BUFFER Buffer ); // opnum 22 long SamrAddMemberToGroup( [in] SAMPR_HANDLE GroupHandle, [in] unsigned long MemberId, [in] unsigned long Attributes ); // opnum 23 long SamrDeleteGroup( [in,out] SAMPR_HANDLE * GroupHandle ); // opnum 24 long SamrRemoveMemberFromGroup( [in] SAMPR_HANDLE GroupHandle, [in] unsigned long MemberId ); // opnum 25 long SamrGetMembersInGroup( [in] SAMPR_HANDLE GroupHandle, [out] PSAMPR_GET_MEMBERS_BUFFER * Members ); // opnum 26 long SamrSetMemberAttributesOfGroup( [in] SAMPR_HANDLE GroupHandle, [in] unsigned long MemberId, [in] unsigned long Attributes ); // opnum 27 long SamrOpenAlias( [in] SAMPR_HANDLE DomainHandle, [in] unsigned long DesiredAccess, [in] unsigned long AliasId, [out] SAMPR_HANDLE * AliasHandle ); // opnum 28 long SamrQueryInformationAlias( [in] SAMPR_HANDLE AliasHandle, [in] ALIAS_INFORMATION_CLASS AliasInformationClass, [out, switch_is(AliasInformationClass)] PSAMPR_ALIAS_INFO_BUFFER * Buffer ); // opnum 29 long SamrSetInformationAlias( [in] SAMPR_HANDLE AliasHandle, [in] ALIAS_INFORMATION_CLASS AliasInformationClass, [in, switch_is(AliasInformationClass)] PSAMPR_ALIAS_INFO_BUFFER Buffer ); // opnum 30 long SamrDeleteAlias( [in, out] SAMPR_HANDLE * AliasHandle ); // opnum 31 long SamrAddMemberToAlias( [in] SAMPR_HANDLE AliasHandle, [in] PRPC_SID MemberId ); // opnum 32 long SamrRemoveMemberFromAlias( [in] SAMPR_HANDLE AliasHandle, [in] PRPC_SID MemberId ); // opnum 33 long SamrGetMembersInAlias( [in] SAMPR_HANDLE AliasHandle, [out] PSAMPR_PSID_ARRAY_OUT Members ); // opnum 34 long SamrOpenUser( [in] SAMPR_HANDLE DomainHandle, [in] unsigned long DesiredAccess, [in] unsigned long UserId, [out] SAMPR_HANDLE * UserHandle ); // opnum 35 long SamrDeleteUser( [in,out] SAMPR_HANDLE * UserHandle ); // opnum 36 long SamrQueryInformationUser( [in] SAMPR_HANDLE UserHandle, [in] USER_INFORMATION_CLASS UserInformationClass, [out, switch_is(UserInformationClass)] PSAMPR_USER_INFO_BUFFER * Buffer ); // opnum 37 long SamrSetInformationUser( [in] SAMPR_HANDLE UserHandle, [in] USER_INFORMATION_CLASS UserInformationClass, [in, switch_is(UserInformationClass)] PSAMPR_USER_INFO_BUFFER Buffer ); // opnum 38 long SamrChangePasswordUser( [in] SAMPR_HANDLE UserHandle, [in] unsigned char LmPresent, [in, unique] PENCRYPTED_LM_OWF_PASSWORD OldLmEncryptedWithNewLm, [in, unique] PENCRYPTED_LM_OWF_PASSWORD NewLmEncryptedWithOldLm, [in] unsigned char NtPresent, [in, unique] PENCRYPTED_NT_OWF_PASSWORD OldNtEncryptedWithNewNt, [in, unique] PENCRYPTED_NT_OWF_PASSWORD NewNtEncryptedWithOldNt, [in] unsigned char NtCrossEncryptionPresent, [in, unique] PENCRYPTED_NT_OWF_PASSWORD NewNtEncryptedWithNewLm, [in] unsigned char LmCrossEncryptionPresent, [in, unique] PENCRYPTED_LM_OWF_PASSWORD NewLmEncryptedWithNewNt ); // opnum 39 long SamrGetGroupsForUser( [in] SAMPR_HANDLE UserHandle, [out] PSAMPR_GET_GROUPS_BUFFER * Groups ); // opnum 40 long SamrQueryDisplayInformation ( [in] SAMPR_HANDLE DomainHandle, [in] DOMAIN_DISPLAY_INFORMATION DisplayInformationClass, [in] unsigned long Index, [in] unsigned long EntryCount, [in] unsigned long PreferredMaximumLength, [out] unsigned long * TotalAvailable, [out] unsigned long * TotalReturned, [out, switch_is(DisplayInformationClass)] PSAMPR_DISPLAY_INFO_BUFFER Buffer ); // opnum 41 long SamrGetDisplayEnumerationIndex ( [in] SAMPR_HANDLE DomainHandle, [in] DOMAIN_DISPLAY_INFORMATION DisplayInformationClass, [in] PRPC_UNICODE_STRING Prefix, [out] unsigned long * Index ); // opnum 42 void Opnum42NotUsedOnWire(void); // opnum 43 void Opnum43NotUsedOnWire(void); // opnum 44 long SamrGetUserDomainPasswordInformation ( [in] SAMPR_HANDLE UserHandle, [out] PUSER_DOMAIN_PASSWORD_INFORMATION PasswordInformation ); // opnum 45 long SamrRemoveMemberFromForeignDomain ( [in] SAMPR_HANDLE DomainHandle, [in] PRPC_SID MemberSid ); // opnum 46 long SamrQueryInformationDomain2( [in] SAMPR_HANDLE DomainHandle, [in] DOMAIN_INFORMATION_CLASS DomainInformationClass, [out, switch_is(DomainInformationClass)] PSAMPR_DOMAIN_INFO_BUFFER * Buffer ); // opnum 47 long SamrQueryInformationUser2( [in] SAMPR_HANDLE UserHandle, [in] USER_INFORMATION_CLASS UserInformationClass, [out, switch_is(UserInformationClass)] PSAMPR_USER_INFO_BUFFER * Buffer ); // opnum 48 long SamrQueryDisplayInformation2 ( [in] SAMPR_HANDLE DomainHandle, [in] DOMAIN_DISPLAY_INFORMATION DisplayInformationClass, [in] unsigned long Index, [in] unsigned long EntryCount, [in] unsigned long PreferredMaximumLength, [out] unsigned long *TotalAvailable, [out] unsigned long *TotalReturned, [out, switch_is(DisplayInformationClass)] PSAMPR_DISPLAY_INFO_BUFFER Buffer ); // opnum 49 long SamrGetDisplayEnumerationIndex2 ( [in] SAMPR_HANDLE DomainHandle, [in] DOMAIN_DISPLAY_INFORMATION DisplayInformationClass, [in] PRPC_UNICODE_STRING Prefix, [out] unsigned long * Index ); // opnum 50 long SamrCreateUser2InDomain( [in] SAMPR_HANDLE DomainHandle, [in] PRPC_UNICODE_STRING Name, [in] unsigned long AccountType, [in] unsigned long DesiredAccess, [out] SAMPR_HANDLE * UserHandle, [out] unsigned long * GrantedAccess, [out] unsigned long * RelativeId ); // opnum 51 long SamrQueryDisplayInformation3 ( [in] SAMPR_HANDLE DomainHandle, [in] DOMAIN_DISPLAY_INFORMATION DisplayInformationClass, [in] unsigned long Index, [in] unsigned long EntryCount, [in] unsigned long PreferredMaximumLength, [out] unsigned long * TotalAvailable, [out] unsigned long * TotalReturned, [out, switch_is(DisplayInformationClass)] PSAMPR_DISPLAY_INFO_BUFFER Buffer ); // opnum 52 long SamrAddMultipleMembersToAlias( [in] SAMPR_HANDLE AliasHandle, [in] PSAMPR_PSID_ARRAY MembersBuffer ); // opnum 53 long SamrRemoveMultipleMembersFromAlias( [in] SAMPR_HANDLE AliasHandle, [in] PSAMPR_PSID_ARRAY MembersBuffer ); // opnum 54 long SamrOemChangePasswordUser2( [in] handle_t BindingHandle, [in,unique] PRPC_STRING ServerName, [in] PRPC_STRING UserName, [in,unique] PSAMPR_ENCRYPTED_USER_PASSWORD NewPasswordEncryptedWithOldLm, [in,unique] PENCRYPTED_LM_OWF_PASSWORD OldLmOwfPasswordEncryptedWithNewLm ); // opnum 55 long SamrUnicodeChangePasswordUser2( [in] handle_t BindingHandle, [in,unique] PRPC_UNICODE_STRING ServerName, [in] PRPC_UNICODE_STRING UserName, [in,unique] PSAMPR_ENCRYPTED_USER_PASSWORD NewPasswordEncryptedWithOldNt, [in,unique] PENCRYPTED_NT_OWF_PASSWORD OldNtOwfPasswordEncryptedWithNewNt, [in] unsigned char LmPresent, [in,unique] PSAMPR_ENCRYPTED_USER_PASSWORD NewPasswordEncryptedWithOldLm, [in,unique] PENCRYPTED_LM_OWF_PASSWORD OldLmOwfPasswordEncryptedWithNewNt ); // opnum 56 long SamrGetDomainPasswordInformation ( [in] handle_t BindingHandle, [in,unique] PRPC_UNICODE_STRING Unused, [out] PUSER_DOMAIN_PASSWORD_INFORMATION PasswordInformation ); // opnum 57 long SamrConnect2( [in,unique,string] PSAMPR_SERVER_NAME ServerName, [out] SAMPR_HANDLE *ServerHandle, [in] unsigned long DesiredAccess ); // opnum 58 long SamrSetInformationUser2( [in] SAMPR_HANDLE UserHandle, [in] USER_INFORMATION_CLASS UserInformationClass, [in, switch_is(UserInformationClass)] PSAMPR_USER_INFO_BUFFER Buffer ); // opnum 59 void Opnum59NotUsedOnWire(void); // opnum 60 void Opnum60NotUsedOnWire(void); // opnum 61 void Opnum61NotUsedOnWire(void); // opnum 62 long SamrConnect4( [in,unique,string] PSAMPR_SERVER_NAME ServerName, [out] SAMPR_HANDLE *ServerHandle, [in] unsigned long ClientRevision, [in] unsigned long DesiredAccess ); // opnum 63 void Opnum63NotUsedOnWire(void); // opnum 64 long SamrConnect5( [in,unique,string] PSAMPR_SERVER_NAME ServerName, [in] unsigned long DesiredAccess, [in] unsigned long InVersion, [in] [switch_is(InVersion)] SAMPR_REVISION_INFO *InRevisionInfo, [out] unsigned long *OutVersion, [out] [switch_is(*OutVersion)] SAMPR_REVISION_INFO *OutRevisionInfo, [out] SAMPR_HANDLE *ServerHandle ); // opnum 65 long SamrRidToSid( [in] SAMPR_HANDLE ObjectHandle, [in] unsigned long Rid, [out] PRPC_SID * Sid ); // opnum 66 long SamrSetDSRMPassword( [in] handle_t BindingHandle, [in,unique] PRPC_UNICODE_STRING Unused, [in] unsigned long UserId, [in,unique] PENCRYPTED_NT_OWF_PASSWORD EncryptedNtOwfPassword ); // opnum 67 long SamrValidatePassword( [in] handle_t Handle, [in] PASSWORD_POLICY_VALIDATION_TYPE ValidationType, [in, switch_is(ValidationType)] PSAM_VALIDATE_INPUT_ARG InputArg, [out, switch_is(ValidationType)] PSAM_VALIDATE_OUTPUT_ARG * OutputArg ); // Opnum 68 void Opnum68NotUsedOnWire(void); // Opnum 69 void Opnum69NotUsedOnWire(void);
-
// Opnum 70 void Opnum70NotUsedOnWire(void); // Opnum 71 void Opnum71NotUsedOnWire(void); // Opnum 72 void Opnum72NotUsedOnWire(void); // Opnum 73 NTSTATUS SamrUnicodeChangePasswordUser4( [in] handle_t BindingHandle, [in,unique] PRPC_UNICODE_STRING ServerName, [in] PRPC_UNICODE_STRING UserName, [in] PSAMPR_ENCRYPTED_PASSWORD_AES EncryptedPassword ); // opnum 74 NTSTATUS SamrValidateComputerAccountReuseAttempt( [in] SAMPR_HANDLE ServerHandle, [in] PRPC_SID ComputerSid, [out] BOOL* Result ); // opnum 75 void Opnum75NotUsedOnWire(void); // opnum 76 void Opnum76NotUsedOnWire(void); // opnum 77 NTSTATUS SamrAccountIsDelegatedManagedServiceAccount( [in] SAMPR_HANDLE ServerHandle, [in] PRPC_UNICODE_STRING AccountName, [out] BOOLEAN* Result, [out] BOOLEAN* Authorized ); }
-