Click to Rate and Give Feedback
MSDN
MSDN Library
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_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,
} SID_NAME_USE, *PSID_NAME_USE;

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;

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;
    DOMAIN_SERVER_ENABLE_STATE DomainServerState;
    DOMAIN_SERVER_ROLE         DomainServerRole;
    unsigned char              UasCompatibilityRequired;
    unsigned long              UserCount;
    unsigned long              GroupCount;
    unsigned long              AliasCount;
} SAMPR_DOMAIN_GENERAL_INFORMATION,
  *PSAMPR_DOMAIN_GENERAL_INFORMATION;

typedef struct _SAMPR_DOMAIN_GENERAL_INFORMATION2 {
    SAMPR_DOMAIN_GENERAL_INFORMATION  I1;
    OLD_LARGE_INTEGER                 LockoutDuration;
    OLD_LARGE_INTEGER                 LockoutObservationWindow;
    unsigned short                    LockoutThreshold;
} SAMPR_DOMAIN_GENERAL_INFORMATION2,
  *PSAMPR_DOMAIN_GENERAL_INFORMATION2;

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 {
    OLD_LARGE_INTEGER  LockoutDuration;
    OLD_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,
    DomainUasInformation = 10,
    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_ENCRYPTED_USER_PASSWORD_NEW {
    unsigned char Buffer[ (256 * 2) + 4 + 16];
} SAMPR_ENCRYPTED_USER_PASSWORD_NEW,
  *PSAMPR_ENCRYPTED_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_UNICODE_STRING LmOwfPassword;
    RPC_UNICODE_STRING 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 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,
} 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;
} 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, string] 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 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 LmOldEncryptedWithLmNew,
    [in, unique] PENCRYPTED_LM_OWF_PASSWORD LmNewEncryptedWithLmOld,
    [in] unsigned char    NtPresent,
    [in, unique] PENCRYPTED_NT_OWF_PASSWORD NtOldEncryptedWithNtNew,
    [in, unique] PENCRYPTED_NT_OWF_PASSWORD NtNewEncryptedWithNtOld,
    [in] unsigned char    NtCrossEncryptionPresent,
    [in, unique] PENCRYPTED_NT_OWF_PASSWORD NtNewEncryptedWithLmNew,
    [in] unsigned char    LmCrossEncryptionPresent,
    [in, unique] PENCRYPTED_LM_OWF_PASSWORD LmNewEncryptedWithNtNew
    );

// 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);

}
© 2009 Microsoft Corporation. All rights reserved. Terms of Use | Trademarks | Privacy Statement
Page view tracker