[PSDK]
authorAmine Khaldi <amine.khaldi@reactos.org>
Wed, 8 Oct 2014 19:19:01 +0000 (19:19 +0000)
committerAmine Khaldi <amine.khaldi@reactos.org>
Wed, 8 Oct 2014 19:19:01 +0000 (19:19 +0000)
* Update iads.idl.
CORE-8540

svn path=/trunk/; revision=64613

reactos/include/psdk/iads.idl

index ce38bfe..de5730d 100644 (file)
@@ -43,6 +43,286 @@ typedef enum
     ADS_RIGHT_GENERIC_READ            = 0x80000000
 } ADS_RIGHTS_ENUM;
 
+typedef enum
+{
+    ADS_SECURE_AUTHENTICATION     = 0x1,
+    ADS_USE_ENCRYPTION            = 0x2,
+    ADS_USE_SSL                   = 0x2,
+    ADS_READONLY_SERVER           = 0x4,
+    ADS_PROMPT_CREDENTIALS        = 0x8,
+    ADS_NO_AUTHENTICATION         = 0x10,
+    ADS_FAST_BIND                 = 0x20,
+    ADS_USE_SIGNING               = 0x40,
+    ADS_USE_SEALING               = 0x80,
+    ADS_USE_DELEGATION            = 0x100,
+    ADS_SERVER_BIND               = 0x200,
+    ADS_NO_REFERRAL_CHASING       = 0x400,
+    ADS_AUTH_RESERVED             = 0x80000000
+} ADS_AUTHENTICATION_ENUM;
+
+typedef enum
+{
+    ADS_SEARCHPREF_ASYNCHRONOUS,
+    ADS_SEARCHPREF_DEREF_ALIASES,
+    ADS_SEARCHPREF_SIZE_LIMIT,
+    ADS_SEARCHPREF_TIME_LIMIT,
+    ADS_SEARCHPREF_ATTRIBTYPES_ONLY,
+    ADS_SEARCHPREF_SEARCH_SCOPE,
+    ADS_SEARCHPREF_TIMEOUT,
+    ADS_SEARCHPREF_PAGESIZE,
+    ADS_SEARCHPREF_PAGED_TIME_LIMIT,
+    ADS_SEARCHPREF_CHASE_REFERRALS,
+    ADS_SEARCHPREF_SORT_ON,
+    ADS_SEARCHPREF_CACHE_RESULTS,
+    ADS_SEARCHPREF_DIRSYNC,
+    ADS_SEARCHPREF_TOMBSTONE,
+    ADS_SEARCHPREF_VLV,
+    ADS_SEARCHPREF_ATTRIBUTE_QUERY,
+    ADS_SEARCHPREF_SECURITY_MASK,
+    ADS_SEARCHPREF_DIRSYNC_FLAG,
+    ADS_SEARCHPREF_EXTENDED_DN
+} ADS_SEARCHPREF_ENUM;
+
+typedef ADS_SEARCHPREF_ENUM *PADS_SEARCHPREF_INFO;
+
+typedef enum
+{
+    ADS_STATUS_S_OK,
+    ADS_STATUS_INVALID_SEARCHPREF,
+    ADS_STATUS_INVALID_SEARCHPREFVALUE
+} ADS_STATUSENUM;
+
+typedef enum
+{
+    ADSTYPE_INVALID,
+    ADSTYPE_DN_STRING,
+    ADSTYPE_CASE_EXACT_STRING,
+    ADSTYPE_CASE_IGNORE_STRING,
+    ADSTYPE_PRINTABLE_STRING,
+    ADSTYPE_NUMERIC_STRING,
+    ADSTYPE_BOOLEAN,
+    ADSTYPE_INTEGER,
+    ADSTYPE_OCTET_STRING,
+    ADSTYPE_UTC_TIME,
+    ADSTYPE_LARGE_INTEGER,
+    ADSTYPE_PROV_SPECIFIC,
+    ADSTYPE_OBJECT_CLASS,
+    ADSTYPE_CASEIGNORE_LIST,
+    ADSTYPE_OCTET_LIST,
+    ADSTYPE_PATH,
+    ADSTYPE_POSTALADDRESS,
+    ADSTYPE_TIMESTAMP,
+    ADSTYPE_BACKLINK,
+    ADSTYPE_TYPEDNAME,
+    ADSTYPE_HOLD,
+    ADSTYPE_NETADDRESS,
+    ADSTYPE_REPLICAPOINTER,
+    ADSTYPE_FAXNUMBER,
+    ADSTYPE_EMAIL,
+    ADSTYPE_NT_SECURITY_DESCRIPTOR,
+    ADSTYPE_UNKNOWN,
+    ADSTYPE_DN_WITH_BINARY,
+    ADSTYPE_DN_WITH_STRING
+} ADSTYPEENUM;
+
+typedef enum
+{
+    ADS_PASSWORD_ENCODE_REQUIRE_SSL,
+    ADS_PASSWORD_ENCODE_CLEAR
+} ADS_PASSWORD_ENCODING_ENUM;
+
+typedef struct _ADS_CASEIGNORE_LIST
+{
+    struct _ADS_CASEIGNORE_LIST *Next;
+    LPWSTR String;
+} ADS_CASEIGNORE_LIST;
+
+typedef struct _ADS_OCTET_LIST
+{
+    struct _ADS_OCTET_LIST *Next;
+    DWORD Length;
+    BYTE *Data;
+} ADS_OCTET_LIST;
+
+typedef struct
+{
+    DWORD Type;
+    LPWSTR VolumeName;
+    LPWSTR Path;
+} ADS_PATH, *PADS_PATH;
+
+typedef struct
+{
+    DWORD WholeSeconds;
+    DWORD EventID;
+} ADS_TIMESTAMP;
+
+
+typedef ADSTYPEENUM ADSTYPE;
+typedef LPWSTR ADS_DN_STRING;
+typedef LPWSTR *PADS_DN_STRING;
+typedef LPWSTR ADS_CASE_EXACT_STRING;
+typedef LPWSTR *PADS_CASE_EXACT_STRING;
+typedef LPWSTR ADS_CASE_IGNORE_STRING;
+typedef LPWSTR *PADS_CASE_IGNORE_STRING;
+typedef LPWSTR ADS_PRINTABLE_STRING;
+typedef LPWSTR *PADS_PRINTABLE_STRING;
+typedef LPWSTR ADS_NUMERIC_STRING;
+typedef LPWSTR *PADS_NUMERIC_STRING;
+typedef DWORD ADS_BOOLEAN;
+typedef DWORD *LPNDS_BOOLEAN;
+typedef DWORD ADS_INTEGER;
+typedef DWORD *PADS_INTEGER;
+typedef SYSTEMTIME ADS_UTC_TIME;
+typedef SYSTEMTIME *PADS_UTC_TIME;
+typedef LARGE_INTEGER ADS_LARGE_INTEGER;
+typedef LARGE_INTEGER *PADS_LARGE_INTEGER;
+typedef LPWSTR ADS_OBJECT_CLASS;
+typedef LPWSTR *PADS_OBJECT_CLASS;
+typedef struct _ADS_OCTET_LIST *PADS_OCTET_LIST;
+typedef struct _ADS_CASEIGNORE_LIST *PADS_CASEIGNORE_LIST;
+typedef ADS_STATUSENUM ADS_STATUS;
+typedef ADS_SEARCHPREF_ENUM ADS_SEARCHPREF;
+typedef HANDLE ADS_SEARCH_HANDLE;
+typedef HANDLE *PADS_SEARCH_HANDLE;
+
+
+typedef struct
+{
+    DWORD dwLength;
+    BYTE *lpValue;
+} ADS_OCTET_STRING;
+
+typedef struct
+{
+    DWORD dwLength;
+    BYTE *lpValue;
+} ADS_PROV_SPECIFIC;
+
+typedef struct
+{
+    LPWSTR PostalAddress[ 6 ];
+} ADS_POSTALADDRESS, *PADS_POSTALADDRESS;
+
+typedef struct
+{
+    LPWSTR ObjectName;
+    DWORD Level;
+    DWORD Interval;
+} ADS_TYPEDNAME, *PADS_TYPEDNAME;
+
+typedef struct
+{
+    DWORD RemoteID;
+    LPWSTR ObjectName;
+} ADS_BACKLINK;
+
+typedef struct
+{
+    LPWSTR ObjectName;
+    DWORD Amount;
+} ADS_HOLD;
+
+typedef struct
+{
+    DWORD AddressType;
+    DWORD AddressLength;
+    BYTE *Address;
+} ADS_NETADDRESS, *PADS_NETADDRESS;
+
+typedef struct
+{
+    LPWSTR ServerName;
+    DWORD ReplicaType;
+    DWORD ReplicaNumber;
+    DWORD Count;
+    PADS_NETADDRESS ReplicaAddressHints;
+} ADS_REPLICAPOINTER, *PADS_REPLICAPOINTER;
+
+typedef struct
+{
+    LPWSTR TelephoneNumber;
+    DWORD NumberOfBits;
+    BYTE *Parameters;
+} ADS_FAXNUMBER, *PADS_FAXNUMBER;
+
+
+typedef struct
+{
+    LPWSTR Address;
+    DWORD Type;
+} ADS_EMAIL, *PADS_EMAIL;
+
+typedef struct
+{
+    DWORD dwLength;
+    BYTE *lpValue;
+} ADS_NT_SECURITY_DESCRIPTOR;
+
+typedef struct
+{
+    DWORD dwLength;
+    BYTE *lpBinaryValue;
+    LPWSTR pszDNString;
+} ADS_DN_WITH_BINARY, *PADS_DN_WITH_BINARY;
+
+typedef struct
+{
+    LPWSTR pszStringValue;
+    LPWSTR pszDNString;
+} ADS_DN_WITH_STRING, *PADS_DN_WITH_STRING;
+
+typedef struct _adsvalue
+{
+    ADSTYPE dwType;
+    union
+    {
+        ADS_DN_STRING DNString;
+        ADS_CASE_EXACT_STRING CaseExactString;
+        ADS_CASE_IGNORE_STRING CaseIgnoreString;
+        ADS_PRINTABLE_STRING PrintableString;
+        ADS_NUMERIC_STRING NumericString;
+        ADS_BOOLEAN Boolean;
+        ADS_INTEGER Integer;
+        ADS_OCTET_STRING OctetString;
+        ADS_UTC_TIME UTCTime;
+        ADS_LARGE_INTEGER LargeInteger;
+        ADS_OBJECT_CLASS ClassName;
+        ADS_PROV_SPECIFIC ProviderSpecific;
+        PADS_CASEIGNORE_LIST pCaseIgnoreList;
+        PADS_OCTET_LIST pOctetList;
+        PADS_PATH pPath;
+        PADS_POSTALADDRESS pPostalAddress;
+        ADS_TIMESTAMP Timestamp;
+        ADS_BACKLINK BackLink;
+        PADS_TYPEDNAME pTypedName;
+        ADS_HOLD Hold;
+        PADS_NETADDRESS pNetAddress;
+        PADS_REPLICAPOINTER pReplicaPointer;
+        PADS_FAXNUMBER pFaxNumber;
+        ADS_EMAIL Email;
+        ADS_NT_SECURITY_DESCRIPTOR SecurityDescriptor;
+        PADS_DN_WITH_BINARY pDNWithBinary;
+        PADS_DN_WITH_STRING pDNWithString;
+    };
+} ADSVALUE, *PADSVALUE;
+
+typedef struct ads_searchpref_info
+{
+    ADS_SEARCHPREF dwSearchPref;
+    ADSVALUE vValue;
+    ADS_STATUS dwStatus;
+} ADS_SEARCHPREF_INFO;
+
+typedef struct ads_search_column
+{
+    LPWSTR pszAttrName;
+    ADSTYPE dwADsType;
+    PADSVALUE pADsValues;
+    DWORD dwNumValues;
+    HANDLE hReserved;
+} ADS_SEARCH_COLUMN, *PADS_SEARCH_COLUMN;
+
 /*****************************************************************************
  *    IADsContainer interface
  */
@@ -84,3 +364,416 @@ interface IADsContainer: IDispatch
         [in] BSTR bstrNewName,
         [out, retval] IDispatch **ppObject);
 }
+
+/*****************************************************************************
+ *    IADs interface
+ */
+[
+    odl,
+    uuid(FD8256D0-FD15-11CE-ABC4-02608C9E7553),
+    dual,
+    oleautomation
+]
+interface IADs : IDispatch
+{
+    [id(0x00000002), propget]
+    HRESULT Name([out, retval] BSTR* retval);
+
+    [id(0x00000003), propget]
+    HRESULT Class([out, retval] BSTR* retval);
+
+    [id(0x00000004), propget]
+    HRESULT GUID([out, retval] BSTR* retval);
+
+    [id(0x00000005), propget]
+    HRESULT ADsPath([out, retval] BSTR* retval);
+
+    [id(0x00000006), propget]
+    HRESULT Parent([out, retval] BSTR* retval);
+
+    [id(0x00000007), propget]
+    HRESULT Schema([out, retval] BSTR* retval);
+
+    [id(0x00000008)]
+    HRESULT GetInfo();
+
+    [id(0x00000009)]
+    HRESULT SetInfo();
+
+    [id(0x0000000a)]
+    HRESULT Get([in] BSTR bstrName, [out, retval] VARIANT* pvProp);
+
+    [id(0x0000000b)]
+    HRESULT Put([in] BSTR bstrName, [in] VARIANT vProp);
+
+    [id(0x0000000c)]
+    HRESULT GetEx([in] BSTR bstrName, [out, retval] VARIANT* pvProp);
+
+    [id(0x0000000d)]
+    HRESULT PutEx([in] long lnControlCode, [in] BSTR bstrName, [in] VARIANT vProp);
+
+    [id(0x0000000e)]
+    HRESULT GetInfoEx( [in] VARIANT vProperties, [in] long lnReserved);
+};
+
+/*****************************************************************************
+ *    IADsMembers interface
+ */
+[
+    odl,
+    uuid(451A0030-72EC-11CF-B03B-00AA006E0975),
+    dual,
+    oleautomation
+]
+interface IADsMembers : IDispatch
+{
+    [id(0x00000002), propget]
+    HRESULT Count([out, retval] long* plCount);
+
+    [id(0xfffffffc), propget]
+    HRESULT _NewEnum([out, retval] IUnknown** ppEnumerator);
+
+    [id(0x00000003), propget]
+    HRESULT Filter([out, retval] VARIANT* pvFilter);
+
+    [id(0x00000003), propput]
+    HRESULT Filter([in] VARIANT pvFilter);
+};
+
+/*****************************************************************************
+ *    IADsGroup interface
+ */
+[
+    odl,
+    uuid(27636B00-410F-11CF-B1FF-02608C9E7553),
+    dual,
+    oleautomation
+]
+interface IADsGroup : IADs {
+    [id(0x0000000f), propget]
+    HRESULT Description([out, retval] BSTR* retval);
+
+    [id(0x0000000f), propput]
+    HRESULT Description([in] BSTR retval);
+
+    [id(0x00000010)]
+    HRESULT Members([out, retval] IADsMembers** ppMembers);
+
+    [id(0x00000011)]
+    HRESULT IsMember([in] BSTR bstrMember, [out, retval] VARIANT_BOOL* bMember);
+
+    [id(0x00000012)]
+    HRESULT Add([in] BSTR bstrNewItem);
+
+    [id(0x00000013)]
+    HRESULT Remove([in] BSTR bstrItemToBeRemoved);
+};
+
+/*****************************************************************************
+ *    IADsUser interface
+ */
+[
+    odl,
+    uuid(3E37E320-17E2-11CF-ABC4-02608C9E7553),
+    dual,
+    oleautomation
+]
+interface IADsUser : IADs
+{
+    [id(0x00000035), propget]
+    HRESULT BadLoginAddress([out, retval] BSTR* retval);
+
+    [id(0x00000036), propget]
+    HRESULT BadLoginCount([out, retval] long* retval);
+
+    [id(0x00000038), propget]
+    HRESULT LastLogin([out, retval] DATE* retval);
+
+    [id(0x00000039), propget]
+    HRESULT LastLogoff([out, retval] DATE* retval);
+
+    [id(0x0000003a), propget]
+    HRESULT LastFailedLogin([out, retval] DATE* retval);
+
+    [id(0x0000003b), propget]
+    HRESULT PasswordLastChanged([out, retval] DATE* retval);
+
+    [id(0x0000000f), propget]
+    HRESULT Description([out, retval] BSTR* retval);
+
+    [id(0x0000000f), propput]
+    HRESULT Description([in] BSTR retval);
+
+    [id(0x00000013), propget]
+    HRESULT Division([out, retval] BSTR* retval);
+
+    [id(0x00000013), propput]
+    HRESULT Division([in] BSTR retval);
+
+    [id(0x0000007a), propget]
+    HRESULT Department([out, retval] BSTR* retval);
+
+    [id(0x0000007a), propput]
+    HRESULT Department([in] BSTR retval);
+
+    [id(0x00000014), propget]
+    HRESULT EmployeeID([out, retval] BSTR* retval);
+
+    [id(0x00000014), propput]
+    HRESULT EmployeeID([in] BSTR retval);
+
+    [id(0x00000017), propget]
+    HRESULT FullName([out, retval] BSTR* retval);
+
+    [id(0x00000017), propput]
+    HRESULT FullName([in] BSTR retval);
+
+    [id(0x00000016), propget]
+    HRESULT FirstName([out, retval] BSTR* retval);
+
+    [id(0x00000016), propput]
+    HRESULT FirstName([in] BSTR retval);
+
+    [id(0x00000019), propget]
+    HRESULT LastName([out, retval] BSTR* retval);
+
+    [id(0x00000019), propput]
+    HRESULT LastName([in] BSTR retval);
+
+    [id(0x0000001b), propget]
+    HRESULT OtherName([out, retval] BSTR* retval);
+
+    [id(0x0000001b), propput]
+    HRESULT OtherName([in] BSTR retval);
+
+    [id(0x00000072), propget]
+    HRESULT NamePrefix([out, retval] BSTR* retval);
+
+    [id(0x00000072), propput]
+    HRESULT NamePrefix([in] BSTR retval);
+
+    [id(0x00000073), propget]
+    HRESULT NameSuffix([out, retval] BSTR* retval);
+
+    [id(0x00000073), propput]
+    HRESULT NameSuffix([in] BSTR retval);
+
+    [id(0x00000024), propget]
+    HRESULT Title([out, retval] BSTR* retval);
+
+    [id(0x00000024), propput]
+    HRESULT Title([in] BSTR retval);
+
+    [id(0x0000001a), propget]
+    HRESULT Manager([out, retval] BSTR* retval);
+
+    [id(0x0000001a), propput]
+    HRESULT Manager([in] BSTR retval);
+
+    [id(0x00000020), propget]
+    HRESULT TelephoneHome([out, retval] VARIANT* retval);
+
+    [id(0x00000020), propput]
+    HRESULT TelephoneHome([in] VARIANT retval);
+
+    [id(0x00000021), propget]
+    HRESULT TelephoneMobile([out, retval] VARIANT* retval);
+
+    [id(0x00000021), propput]
+    HRESULT TelephoneMobile([in] VARIANT retval);
+
+    [id(0x00000022), propget]
+    HRESULT TelephoneNumber([out, retval] VARIANT* retval);
+
+    [id(0x00000022), propput]
+    HRESULT TelephoneNumber([in] VARIANT retval);
+
+    [id(0x00000011), propget]
+    HRESULT TelephonePager([out, retval] VARIANT* retval);
+
+    [id(0x00000011), propput]
+    HRESULT TelephonePager([in] VARIANT retval);
+
+    [id(0x00000010), propget]
+    HRESULT FaxNumber([out, retval] VARIANT* retval);
+
+    [id(0x00000010), propput]
+    HRESULT FaxNumber([in] VARIANT retval);
+
+    [id(0x0000001c), propget]
+    HRESULT OfficeLocations([out, retval] VARIANT* retval);
+
+    [id(0x0000001c), propput]
+    HRESULT OfficeLocations([in] VARIANT retval);
+
+    [id(0x0000001e), propget]
+    HRESULT PostalAddresses([out, retval] VARIANT* retval);
+
+    [id(0x0000001e), propput]
+    HRESULT PostalAddresses([in] VARIANT retval);
+
+    [id(0x0000001f), propget]
+    HRESULT PostalCodes([out, retval] VARIANT* retval);
+
+    [id(0x0000001f), propput]
+    HRESULT PostalCodes([in] VARIANT retval);
+
+    [id(0x00000075), propget]
+    HRESULT SeeAlso([out, retval] VARIANT* retval);
+
+    [id(0x00000075), propput]
+    HRESULT SeeAlso([in] VARIANT retval);
+
+    [id(0x00000025), propget]
+    HRESULT AccountDisabled([out, retval] VARIANT_BOOL* retval);
+
+    [id(0x00000025), propput]
+    HRESULT AccountDisabled([in] VARIANT_BOOL retval);
+
+    [id(0x00000026), propget]
+    HRESULT AccountExpirationDate([out, retval] DATE* retval);
+
+    [id(0x00000026), propput]
+    HRESULT AccountExpirationDate([in] DATE retval);
+
+    [id(0x00000029), propget]
+    HRESULT GraceLoginsAllowed([out, retval] long* retval);
+
+    [id(0x00000029), propput]
+    HRESULT GraceLoginsAllowed([in] long retval);
+
+    [id(0x0000002a), propget]
+    HRESULT GraceLoginsRemaining([out, retval] long* retval);
+
+    [id(0x0000002a), propput]
+    HRESULT GraceLoginsRemaining([in] long retval);
+
+    [id(0x0000002b), propget]
+    HRESULT IsAccountLocked([out, retval] VARIANT_BOOL* retval);
+
+    [id(0x0000002b), propput]
+    HRESULT IsAccountLocked([in] VARIANT_BOOL retval);
+
+    [id(0x0000002d), propget]
+    HRESULT LoginHours([out, retval] VARIANT* retval);
+
+    [id(0x0000002d), propput]
+    HRESULT LoginHours([in] VARIANT retval);
+
+    [id(0x0000002e), propget]
+    HRESULT LoginWorkstations([out, retval] VARIANT* retval);
+
+    [id(0x0000002e), propput]
+    HRESULT LoginWorkstations([in] VARIANT retval);
+
+    [id(0x0000002f), propget]
+    HRESULT MaxLogins([out, retval] long* retval);
+
+    [id(0x0000002f), propput]
+    HRESULT MaxLogins([in] long retval);
+
+    [id(0x00000030), propget]
+    HRESULT MaxStorage([out, retval] long* retval);
+
+    [id(0x00000030), propput]
+    HRESULT MaxStorage([in] long retval);
+
+    [id(0x00000031), propget]
+    HRESULT PasswordExpirationDate([out, retval] DATE* retval);
+
+    [id(0x00000031), propput]
+    HRESULT PasswordExpirationDate([in] DATE retval);
+
+    [id(0x00000032), propget]
+    HRESULT PasswordMinimumLength([out, retval] long* retval);
+
+    [id(0x00000032), propput]
+    HRESULT PasswordMinimumLength([in] long retval);
+
+    [id(0x00000033), propget]
+    HRESULT PasswordRequired([out, retval] VARIANT_BOOL* retval);
+
+    [id(0x00000033), propput]
+    HRESULT PasswordRequired([in] VARIANT_BOOL retval);
+
+    [id(0x00000034), propget]
+    HRESULT RequireUniquePassword([out, retval] VARIANT_BOOL* retval);
+
+    [id(0x00000034), propput]
+    HRESULT RequireUniquePassword([in] VARIANT_BOOL retval);
+
+    [id(0x0000003c), propget]
+    HRESULT EmailAddress([out, retval] BSTR* retval);
+
+    [id(0x0000003c), propput]
+    HRESULT EmailAddress([in] BSTR retval);
+
+    [id(0x0000003d), propget]
+    HRESULT HomeDirectory([out, retval] BSTR* retval);
+
+    [id(0x0000003d), propput]
+    HRESULT HomeDirectory([in] BSTR retval);
+
+    [id(0x0000003e), propget]
+    HRESULT Languages([out, retval] VARIANT* retval);
+
+    [id(0x0000003e), propput]
+    HRESULT Languages([in] VARIANT retval);
+
+    [id(0x0000003f), propget]
+    HRESULT Profile([out, retval] BSTR* retval);
+
+    [id(0x0000003f), propput]
+    HRESULT Profile([in] BSTR retval);
+
+    [id(0x00000040), propget]
+    HRESULT LoginScript([out, retval] BSTR* retval);
+
+    [id(0x00000040), propput]
+    HRESULT LoginScript([in] BSTR retval);
+
+    [id(0x00000041), propget]
+    HRESULT Picture([out, retval] VARIANT* retval);
+
+    [id(0x00000041), propput]
+    HRESULT Picture([in] VARIANT retval);
+
+    [id(0x00000078), propget]
+    HRESULT HomePage([out, retval] BSTR* retval);
+
+    [id(0x00000078), propput]
+    HRESULT HomePage([in] BSTR retval);
+
+    [id(0x00000042)]
+    HRESULT Groups([out, retval] IADsMembers** ppGroups);
+
+    [id(0x00000043)]
+    HRESULT SetPassword([in] BSTR NewPassword);
+
+    [id(0x00000044)]
+    HRESULT ChangePassword([in] BSTR bstrOldPassword, [in] BSTR bstrNewPassword);
+};
+
+/*****************************************************************************
+ *    IDirectorySearch interface
+ */
+[
+    odl,
+    local,
+    uuid(109BA8EC-92F0-11D0-A790-00C04FD8D5A8)
+]
+interface IDirectorySearch : IUnknown
+{
+    HRESULT SetSearchPreference([in] PADS_SEARCHPREF_INFO pSearchPrefs, [in] DWORD dwNumPrefs);
+    HRESULT ExecuteSearch([in] LPWSTR pszSearchFilter, [in] LPWSTR* pAttributeNames,
+                    [in] DWORD dwNumberAttributes, [out] PADS_SEARCH_HANDLE phSearchResult);
+    HRESULT AbandonSearch([in] ADS_SEARCH_HANDLE phSearchResult);
+    HRESULT GetFirstRow([in] ADS_SEARCH_HANDLE hSearchResult);
+    HRESULT GetNextRow([in] ADS_SEARCH_HANDLE hSearchResult);
+    HRESULT GetPreviousRow([in] ADS_SEARCH_HANDLE hSearchResult);
+    HRESULT GetNextColumnName([in] ADS_SEARCH_HANDLE hSearchHandle, [out] LPWSTR* ppszColumnName);
+    HRESULT GetColumn( [in] ADS_SEARCH_HANDLE hSearchResult, [in] LPWSTR szColumnName,
+                    [out] PADS_SEARCH_COLUMN pSearchColumn);
+    HRESULT FreeColumn([in] PADS_SEARCH_COLUMN pSearchColumn);
+    HRESULT CloseSearchHandle([in] ADS_SEARCH_HANDLE hSearchResult);
+};