/*
 * Copyright 2005 Francois Gouget
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

import "oaidl.idl";

typedef enum
{
    ADS_RIGHT_DS_CREATE_CHILD         = 0x00000001,
    ADS_RIGHT_DS_DELETE_CHILD         = 0x00000002,
    ADS_RIGHT_ACTRL_DS_LIST           = 0x00000004,
    ADS_RIGHT_DS_SELF                 = 0x00000008,
    ADS_RIGHT_DS_READ_PROP            = 0x00000010,
    ADS_RIGHT_DS_WRITE_PROP           = 0x00000020,
    ADS_RIGHT_DS_DELETE_TREE          = 0x00000040,
    ADS_RIGHT_DS_LIST_OBJECT          = 0x00000080,
    ADS_RIGHT_DS_CONTROL_ACCESS       = 0x00000100,

    ADS_RIGHT_DELETE                  = 0x00010000,
    ADS_RIGHT_READ_CONTROL            = 0x00020000,
    ADS_RIGHT_WRITE_DAC               = 0x00040000,
    ADS_RIGHT_WRITE_OWNER             = 0x00080000,
    ADS_RIGHT_SYNCHRONIZE             = 0x00100000,
    ADS_RIGHT_ACCESS_SYSTEM_SECURITY  = 0x00200000,

    ADS_RIGHT_GENERIC_ALL             = 0x10000000,
    ADS_RIGHT_GENERIC_EXECUTE         = 0x20000000,
    ADS_RIGHT_GENERIC_WRITE           = 0x40000000,
    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;

/*****************************************************************************
 *    IADsContainer interface
 */
[
    object,
    uuid(001677d0-fd16-11ce-abc4-02608c9e7553)
]
interface IADsContainer: IDispatch
{
    [propget] HRESULT Count(
        [out, retval] long *retval);
    [propget, restricted] HRESULT _NewEnum(
        [out, retval] IUnknown **retval);
    [propget] HRESULT Filter(
        [out, retval] VARIANT *pvFilter);
    [propput] HRESULT Filter(
        [in] VARIANT vFilter);
    [propget] HRESULT Hints(
        [out, retval] VARIANT *pvHints);
    [propput] HRESULT Hints(
        [in] VARIANT vHints);
    HRESULT GetObject(
        [in] BSTR bstrClassName,
        [in] BSTR bstrRelativeName,
        [out, retval] IDispatch **ppObject);
    HRESULT Create(
        [in] BSTR bstrClassName,
        [in] BSTR bstrRelativeName,
        [out, retval] IDispatch **ppObject);
    HRESULT Delete(
        [in] BSTR bstrClassName,
        [in] BSTR bstrRelativeName);
    HRESULT CopyHere(
        [in] BSTR bstrSourceName,
        [in] BSTR bstrNewName,
        [out, retval] IDispatch **ppObject);
    HRESULT MoveHere(
        [in] BSTR bstrSourceName,
        [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);
};
