//+---------------------------------------------------------------------------
//
//  Contents:   Internet Location Services (ILS) Object interfaces
//
//  Copyright 1996 - 2002 Microsoft Corporation. All Rights Reserved.
//
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF 
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO 
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A 
// PARTICULAR PURPOSE.
//----------------------------------------------------------------------------

cpp_quote("//+-------------------------------------------------------------------------")
cpp_quote("//")
cpp_quote("//  Microsoft Windows")
cpp_quote("//  Copyright 1996 - 2002 Microsoft Corporation. All Rights Reserved.")
cpp_quote("//")
cpp_quote("//  File: ils.h")
cpp_quote("//")
cpp_quote("//--------------------------------------------------------------------------")

import "objidl.idl";
import "oleidl.idl";
import "oaidl.idl";

interface IIlsServer;
interface IIlsMain;
interface IIlsUser;
interface IIlsProtocol;
interface IIlsAttributes;
interface IIlsFilter;
interface IEnumIlsProtocols;
interface IEnumIlsUsers;
interface IEnumIlsNames;

interface IIlsNotify;
interface IIlsUserNotify;
interface IIlsProtocolNotify;

cpp_quote("")
cpp_quote("////////////////////////////////////////////////////////////////////////////")
cpp_quote("//  Error Codes")
cpp_quote("")
cpp_quote("#define ILS_E(e)    (0x81000000UL | (ULONG) (e))")
cpp_quote("#define ILS_S(e)    (0x01000000UL | (ULONG) (e))")
cpp_quote("")
cpp_quote("enum {")

cpp_quote("")
cpp_quote("//  COM specific error codes")
cpp_quote("//")

cpp_quote("    ILS_S_SERVER_MAY_NOT_SUPPORT      = ILS_S (1),")

cpp_quote("    ILS_E_FAIL                 = E_FAIL,")
cpp_quote("    ILS_E_POINTER              = E_POINTER,")
cpp_quote("    ILS_E_HANDLE               = E_HANDLE,")
cpp_quote("    ILS_E_ABORT                = E_ABORT,")
cpp_quote("    ILS_E_ACCESS_DENIED        = E_ACCESSDENIED,")
cpp_quote("    ILS_E_NOT_IMPL             = E_NOTIMPL,")
cpp_quote("    ILS_E_NO_INTERFACE         = E_NOINTERFACE,")
cpp_quote("    ILS_E_MEMORY               = E_OUTOFMEMORY,")
cpp_quote("    ILS_E_PARAMETER            = E_INVALIDARG,")

cpp_quote("")
cpp_quote("//  General error codes")
cpp_quote("//")

cpp_quote("    ILS_E_SERVER_SERVICE       = ILS_E (1),")
cpp_quote("    ILS_E_SERVER_NAME          = ILS_E (2),")
cpp_quote("    ILS_E_TIMEOUT              = ILS_E (3),")
cpp_quote("    ILS_E_BIND                 = ILS_E (4),")
cpp_quote("    ILS_E_THREAD               = ILS_E (5),")
cpp_quote("    ILS_E_SERVER_EXEC          = ILS_E (6),")
cpp_quote("    ILS_E_WINSOCK              = ILS_E (7),")
cpp_quote("    ILS_E_NO_MORE              = ILS_E (8),")
cpp_quote("    ILS_E_NOT_INITIALIZED      = ILS_E (9),")
cpp_quote("    ILS_E_NOTIFY_ID            = ILS_E (10),")
cpp_quote("    ILS_E_NO_SUCH_OBJECT       = ILS_E (11),")
cpp_quote("    ILS_E_NEED_RELOGON         = ILS_E (12),")
cpp_quote("    ILS_E_NAME_CONFLICTS       = ILS_E (13),")
cpp_quote("    ILS_E_NETWORK_DOWN         = ILS_E (14),")
cpp_quote("    ILS_E_FILTER_STRING        = ILS_E (15),")
cpp_quote("    ILS_E_FILTER_OBJECT        = ILS_E (16),")
cpp_quote("    ILS_E_FILTER_TYPE          = ILS_E (17),")
cpp_quote("    ILS_E_ACCESS_CONTROL       = ILS_E (18),")
cpp_quote("    ILS_E_NOT_REGISTERED       = ILS_E (19),")
cpp_quote("    ILS_E_NO_SUCH_MEMBER       = ILS_E (20),")
cpp_quote("    ILS_E_NO_WRITE_ACCESS      = ILS_E (21),")
cpp_quote("    ILS_E_ALREADY_REGISTERED   = ILS_E (22),")

cpp_quote("")
cpp_quote("//  LDAP specific error codes")
cpp_quote("//")

cpp_quote("    ILS_E_LDAP_OPERATIONS_ERROR             = ILS_E (0x101),")
cpp_quote("    ILS_E_LDAP_PROTOCOL_ERROR               = ILS_E (0x102),")
cpp_quote("    ILS_E_LDAP_TIMELIMIT_EXCEEDED           = ILS_E (0x103),")
cpp_quote("    ILS_E_LDAP_SIZELIMIT_EXCEEDED           = ILS_E (0x104),")
cpp_quote("    ILS_E_LDAP_COMPARE_FALSE                = ILS_E (0x105),")
cpp_quote("    ILS_E_LDAP_COMPARE_TRUE                 = ILS_E (0x106),")
cpp_quote("    ILS_E_LDAP_AUTH_METHOD_NOT_SUPPORTED    = ILS_E (0x107),")
cpp_quote("    ILS_E_LDAP_STRONG_AUTH_REQUIRED         = ILS_E (0x108),")
cpp_quote("    ILS_E_LDAP_REFERRAL_V2                  = ILS_E (0x109),")
cpp_quote("    ILS_E_LDAP_PARTIAL_RESULTS              = ILS_E (0x10A),")
cpp_quote("    ILS_E_LDAP_REFERRAL                     = ILS_E (0x10B),")
cpp_quote("    ILS_E_LDAP_ADMIN_LIMIT_EXCEEDED         = ILS_E (0x10C),")
cpp_quote("    ILS_E_LDAP_UNAVAILABLE_CRIT_EXTENSION   = ILS_E (0x10D),")

cpp_quote("    ILS_E_LDAP_NO_SUCH_ATTRIBUTE            = ILS_E (0x10E),")
cpp_quote("    ILS_E_LDAP_UNDEFINED_TYPE               = ILS_E (0x10F),")
cpp_quote("    ILS_E_LDAP_INAPPROPRIATE_MATCHING       = ILS_E (0x110),")
cpp_quote("    ILS_E_LDAP_CONSTRAINT_VIOLATION         = ILS_E (0x111),")
cpp_quote("    ILS_E_LDAP_ATTRIBUTE_OR_VALUE_EXISTS    = ILS_E (0x112),")
cpp_quote("    ILS_E_LDAP_INVALID_SYNTAX               = ILS_E (0x113),")

cpp_quote("    ILS_E_LDAP_ALIAS_PROBLEM                = ILS_E (0x114),")
cpp_quote("    ILS_E_LDAP_INVALID_DN_SYNTAX            = ILS_E (0x115),")
cpp_quote("    ILS_E_LDAP_IS_LEAF                      = ILS_E (0x116),")
cpp_quote("    ILS_E_LDAP_ALIAS_DEREF_PROBLEM          = ILS_E (0x117),")

cpp_quote("    ILS_E_LDAP_INAPPROPRIATE_AUTH           = ILS_E (0x118),")
cpp_quote("    ILS_E_LDAP_INVALID_CREDENTIALS          = ILS_E (0x119),")
cpp_quote("    ILS_E_LDAP_INSUFFICIENT_RIGHTS          = ILS_E (0x11A),")
cpp_quote("    ILS_E_LDAP_BUSY                         = ILS_E (0x11B),")
cpp_quote("    ILS_E_LDAP_UNAVAILABLE                  = ILS_E (0x11C),")
cpp_quote("    ILS_E_LDAP_UNWILLING_TO_PERFORM         = ILS_E (0x11D),")
cpp_quote("    ILS_E_LDAP_LOOP_DETECT                  = ILS_E (0x11E),")

cpp_quote("    ILS_E_LDAP_NAMING_VIOLATION             = ILS_E (0x11F),")
cpp_quote("    ILS_E_LDAP_OBJECT_CLASS_VIOLATION       = ILS_E (0x120),")
cpp_quote("    ILS_E_LDAP_NOT_ALLOWED_ON_NONLEAF       = ILS_E (0x121),")
cpp_quote("    ILS_E_LDAP_NOT_ALLOWED_ON_RDN           = ILS_E (0x122),")
cpp_quote("    ILS_E_LDAP_NO_OBJECT_CLASS_MODS         = ILS_E (0x123),")
cpp_quote("    ILS_E_LDAP_RESULTS_TOO_LARGE            = ILS_E (0x124),")
cpp_quote("    ILS_E_LDAP_AFFECTS_MULTIPLE_DSAS        = ILS_E (0x125),")

cpp_quote("    ILS_E_LDAP_OTHER                        = ILS_E (0x126),")
cpp_quote("    ILS_E_LDAP_SERVER_DOWN                  = ILS_E (0x127),")
cpp_quote("    ILS_E_LDAP_LOCAL_ERROR                  = ILS_E (0x128),")
cpp_quote("    ILS_E_LDAP_ENCODING_ERROR               = ILS_E (0x129),")
cpp_quote("    ILS_E_LDAP_DECODING_ERROR               = ILS_E (0x12A),")
cpp_quote("    ILS_E_LDAP_TIMEOUT                      = ILS_E (0x12B),")
cpp_quote("    ILS_E_LDAP_AUTH_UNKNOWN                 = ILS_E (0x12C),")
cpp_quote("    ILS_E_LDAP_FILTER_ERROR                 = ILS_E (0x12D),")
cpp_quote("    ILS_E_LDAP_USER_CANCELLED               = ILS_E (0x12E),")
cpp_quote("    ILS_E_LDAP_NO_MEMORY                    = ILS_E (0x12F),")
cpp_quote("}; // end of enum")

cpp_quote("")
cpp_quote("////////////////////////////////////////////////////////////////////////////")
cpp_quote("//  Constants Definitions")

enum
{
    ILS_INVALID_REQ_ID             = 0
};

typedef enum 
{
    ILS_UNREGISTERED               = 0,
    ILS_REGISTERING                = 1,
    ILS_REGISTERED                 = 2,
    ILS_UNREGISTERING              = 3,
    ILS_REGISTERED_BUT_INVALID     = 4,
    ILS_NETWORK_DOWN               = 5,
    ILS_IN_SYNC                    = 6,
}
    ILS_STATE;

typedef enum
{
    ILS_ATTRTYPE_NONE          = 0,
    ILS_ATTRTYPE_NAME_ONLY     = 1,
    ILS_ATTRTYPE_NAME_VALUE    = 2,
}
    ILS_ATTR_TYPE;

cpp_quote("")
cpp_quote("////////////////////////////////////////////////////////////////////////////")
cpp_quote("//  Filters Definitions")

typedef enum
{
    ILS_FILTERTYPE_UNKNOWN              = 0,
    ILS_FILTERTYPE_SIMPLE               = 1,
    ILS_FILTERTYPE_COMPOSITE            = 2,
}
    ILS_FILTER_TYPE;

typedef enum
{
    ILS_FILTEROP_NONE                   = 0,
    ILS_FILTEROP_EQUAL                  = 1,
    ILS_FILTEROP_APPROX                 = 2,
    ILS_FILTEROP_LESS_THAN              = 3,
    ILS_FILTEROP_GREATER_THAN           = 4,
    ILS_FILTEROP_EXIST                  = 5,
    ILS_FILTEROP_AND                    = 21,
    ILS_FILTEROP_OR                     = 22,
    ILS_FILTEROP_NOT                    = 23,
}
    ILS_FILTER_OP;

typedef enum
{
    ILS_STDATTR_NULL                    = 0,

    ILS_STDATTR_USER_ID                 = 1,
    ILS_STDATTR_IP_ADDRESS              = 2,
    ILS_STDATTR_EMAIL_NAME              = 3,
    ILS_STDATTR_FIRST_NAME              = 4,
    ILS_STDATTR_LAST_NAME               = 5,
    ILS_STDATTR_CITY_NAME               = 6,
    ILS_STDATTR_COUNTRY_NAME            = 7,
    ILS_STDATTR_COMMENT                 = 8,
    ILS_STDATTR_FLAGS                   = 9,
    ILS_STDATTR_APP_NAME                = 10,
    ILS_STDATTR_APP_MIME_TYPE           = 11,
    ILS_STDATTR_APP_GUID                = 12,
                                                          
    ILS_STDATTR_PROTOCOL_NAME           = 13,
    ILS_STDATTR_PROTOCOL_MIME_TYPE      = 14,
    ILS_STDATTR_PROTOCOL_PORT           = 15,

    ILS_NUM_OF_STDATTRS					= 16
}
    ILS_STD_ATTR_NAME;

typedef enum
{
    ILS_AUTH_ANONYMOUS       = 0,
    ILS_AUTH_CLEAR_TEXT      = 1,
    ILS_AUTH_NTLM            = 3,
    ILS_AUTH_DPA             = 4,
    ILS_AUTH_MSN             = 5,
    ILS_AUTH_SICILY          = 6,
    ILS_AUTH_SSPI            = 7,

    ILS_NUM_OF_AUTH_METHODS  = 8
}
    ILS_ENUM_AUTH_METHOD;

cpp_quote("")
cpp_quote("////////////////////////////////////////////////////////////////////////////")
cpp_quote("//  Interface Definitions")

//+---------------------------------------------------------------------------
//
//  Copyright (C) Microsoft Corporation, 1996 - 2002.
//
//  Contents:    IIlsServer interface definition
//              
//----------------------------------------------------------------------------
[
    object,
    uuid(8BCE6B64-85CE-11d0-9CA7-00A0C913B21E),
    pointer_default(unique)
]
interface IIlsServer : IUnknown
{
    typedef [unique] IIlsServer *LPILS_SERVER;

    HRESULT SetAuthenticationMethod (
        [in]  ILS_ENUM_AUTH_METHOD enumAuthMethod );

    HRESULT SetLogonName (
        [in]  BSTR bstrLogonName );

    HRESULT SetLogonPassword (
        [in]  BSTR bstrLogonPassword );

    HRESULT SetDomain (
        [in]  BSTR bstrDomain );

    HRESULT SetCredential (
        [in]  BSTR bstrCredential );

    HRESULT SetTimeout (
        [in]  ULONG uTimeoutInSecond );

    HRESULT SetBaseDN (
        [in]  BSTR bstrBaseDN );
}


//+---------------------------------------------------------------------------
//
//  Copyright (C) Microsoft Corporation, 1996 - 2002.
//
//  Contents:    IIlsMain interface definition
//              
//----------------------------------------------------------------------------
[
    object,
    uuid(34526E14-4D7D-11d0-8F4B-00C04FC29FEE),
    pointer_default(unique)
]
interface IIlsMain : IUnknown
{
    typedef [unique] IIlsMain *LPILS_MAIN;

    HRESULT Initialize();

    HRESULT CreateServer (
        [in]  BSTR bstrServerName,
        [out] IIlsServer **ppServer );

    HRESULT CreateUser(
        [in]  BSTR bstrUserID,
        [in]  BSTR bstrAppName,
        [out] IIlsUser **ppUser);

    HRESULT GetUser(
        [in]  IIlsServer *pServer,
        [in]  BSTR bstrUserID,
        [in]  BSTR bstrAppName,
        [in]  BSTR bstrProtocolName,
        [in]  IIlsAttributes *pAttrib,
        [out] IIlsUser **ppUser,
        [out] ULONG *puReqID);

    HRESULT EnumUserNames(
        [in]  IIlsServer *pServer,
        [in]  IIlsFilter *pFilter,
        [out] IEnumIlsNames **ppEnumUserNames,
        [out] ULONG *puReqID);

    HRESULT EnumUsers(
        [in] IIlsServer *pServer,
        [in] IIlsFilter *pFilter,
        [in]  IIlsAttributes *pAttrib,
        [out] IEnumIlsUsers **ppEnumUsers,
        [out] ULONG *puReqID);

    HRESULT Abort(
        [in] ULONG uReqID);

    HRESULT CreateAttributes(
        [in] ILS_ATTR_TYPE AttrType,
        [out] IIlsAttributes **ppAttributes);

    HRESULT CreateFilter (
        [in] ILS_FILTER_TYPE FilterType,
        [in] ILS_FILTER_OP FilterOp,
        [out] IIlsFilter **ppFilter);

    HRESULT StringToFilter (
        [in] BSTR bstrFilterString,
        [out] IIlsFilter **ppFilter);

    HRESULT Uninitialize();
}


//+---------------------------------------------------------------------------
//
//  Copyright (C) Microsoft Corporation, 1996 - 2002.
//
//  Contents:    IIlsNotify interface definition
//              
//----------------------------------------------------------------------------
[
    object,
    uuid(551D25EE-4D7D-11d0-8F4B-00C04FC29FEE),
    pointer_default(unique)
]
interface IIlsNotify : IUnknown
{
    typedef [unique] IIlsNotify *LPILS_NOTIFY;

    HRESULT GetUserResult(
        [in] ULONG uReqID,
        [in] IIlsUser *pUser,
        [in] HRESULT hResult);

    HRESULT EnumUserNamesResult(
        [in] ULONG uReqID,
        [in] IEnumIlsNames *pEnumUserName,
        [in] HRESULT hResult);

    HRESULT EnumUsersResult(
        [in] ULONG uReqID,
        [in] IEnumIlsUsers *pEnumUser,
        [in] HRESULT hResult);
}


//+---------------------------------------------------------------------------
//
//  Copyright (C) Microsoft Corporation, 1996 - 2002.
//
//  Contents:    IIlsUser interface definition
//              
//----------------------------------------------------------------------------
[
    object,
    uuid(440CC982-20E6-11d0-8796-444553540000),
    pointer_default(unique)
]
interface IIlsUser : IUnknown
{
    typedef [unique] IIlsUser *LPILS_USER;

    HRESULT GetState(
        [out] ILS_STATE *pState);

    HRESULT GetStandardAttribute(
        [in]  ILS_STD_ATTR_NAME StdAttr,
        [out] BSTR *pbstrValue);

    HRESULT SetStandardAttribute(
        [in] ILS_STD_ATTR_NAME StdAttr,
        [in] BSTR bstrValue);

    HRESULT GetExtendedAttribute (
        [in] BSTR bstrName,
        [out] BSTR *pbstrValue );

    HRESULT SetExtendedAttribute (
        [in] BSTR bstrName,
        [in] BSTR bstrValue );

    HRESULT RemoveExtendedAttribute (
        [in] BSTR bstrName );

    HRESULT GetAllExtendedAttributes(
        [out] IIlsAttributes **ppAttributes);

    HRESULT IsWritable(
        [in] BOOL *pValue);

    HRESULT Register(
        [in] IIlsServer *pServer,
        [out] ULONG *puReqID);

    HRESULT Unregister(
        [out] ULONG *puReqID);

    HRESULT Update(
        [out] ULONG *puReqID);

    HRESULT GetVisible(
        [out] DWORD *pfVisible);

    HRESULT SetVisible(
        [in] DWORD fVisible);

    HRESULT GetGuid(
        [out] GUID *pGuid);

    HRESULT SetGuid(
        [in] GUID *pGuid);

    HRESULT CreateProtocol(
        [in] BSTR bstrProtocolName,
        [in] ULONG uPortNumber,
        [in] BSTR bstrMimeType,
        [out] IIlsProtocol **ppProtocol);

    HRESULT AddProtocol(
        [in] IIlsProtocol *pProtocol,
        [out] ULONG *puReqID);

    HRESULT RemoveProtocol(
        [in] IIlsProtocol *pProtocol,
        [out] ULONG *puReqID);

    HRESULT GetProtocol(
        [in]  BSTR bstrProtocolName,
        [in]  IIlsAttributes *pAttributes,
        [out] IIlsProtocol **ppProtocol,
        [out] ULONG *puReqID);

    HRESULT EnumProtocols(
        [in]  IIlsFilter     *pFilter,
        [in]  IIlsAttributes *pAttributes,
        [out] IEnumIlsProtocols **ppEnumProtocol,
        [out] ULONG *puReqID);

    HRESULT Clone (
        [out] IIlsUser **ppUser );
}




//+---------------------------------------------------------------------------
//
//  Copyright (C) Microsoft Corporation, 1996 - 2002.
//
//  Contents:    IIlsProtocol interface definition
//              
//----------------------------------------------------------------------------
[
    object,
    uuid(440CC985-20E6-11d0-8796-444553540000),
    pointer_default(unique)
]
interface IIlsProtocol : IUnknown
{
    typedef [unique] IIlsProtocol *LPILS_PROTOCOL;

    HRESULT IsWritable(
        [in] BOOL *pValue);

    HRESULT GetPortNumber(
        [out] ULONG *pulPortNumber);

    HRESULT GetStandardAttribute(
        [in]  ILS_STD_ATTR_NAME StdAttr,
        [out] BSTR *pbstrValue);

    HRESULT SetStandardAttribute(
        [in] ILS_STD_ATTR_NAME StdAttr,
        [in] BSTR bstrValue);

    HRESULT GetExtendedAttribute (
        [in] BSTR bstrName,
        [out] BSTR *pbstrValue );

    HRESULT SetExtendedAttribute (
        [in] BSTR bstrName,
        [in] BSTR bstrValue );

    HRESULT RemoveExtendedAttribute (
        [in] BSTR bstrName );

    HRESULT GetAllExtendedAttributes(
        [out] IIlsAttributes **ppAttributes);

    HRESULT Update(
        [out] ULONG *puReqID );
}


//+---------------------------------------------------------------------------
//
//  Copyright (C) Microsoft Corporation, 1996 - 2002.
//
//  Contents:    IIlsProtocolNotify interface definition
//              
//----------------------------------------------------------------------------
[
    object,
    uuid(440CC986-20E6-11d0-8796-444553540000),
    pointer_default(unique)
]
interface IIlsProtocolNotify : IUnknown
{
    typedef [unique] IIlsProtocolNotify *LPILS_PROTOCOLNOTIFY;

    HRESULT UpdateResult(
        [in] ULONG uReqID,
        [in] HRESULT hResult);
}



//+---------------------------------------------------------------------------
//
//  Copyright (C) Microsoft Corporation, 1996 - 2002.
//
//  Contents:    IIlsUserNotify interface definition
//              
//----------------------------------------------------------------------------
[
    object,
    uuid(440CC988-20E6-11d0-8796-444553540000),
    pointer_default(unique)
]
interface IIlsUserNotify : IUnknown
{
    typedef [unique] IIlsUserNotify *LPILS_USERNOTIFY;

    HRESULT RegisterResult(
        [in] ULONG uReqID,
        [in] HRESULT hResult);

    HRESULT UpdateResult(
        [in] ULONG uReqID,
        [in] HRESULT hResult);

    HRESULT ProtocolChangeResult(
        [in] ULONG uReqID,
        [in] HRESULT hResult);

    HRESULT GetProtocolResult(
        [in] ULONG uReqID,
        [in] IIlsProtocol *pProtocol,
        [in] HRESULT hResult);

    HRESULT EnumProtocolsResult(
        [in] ULONG uReqID,
        [in] IEnumIlsNames *pEnumProtocol,
        [in] HRESULT hResult);

    HRESULT StateChanged(
        [in] ULONG fPrimary,
        [in] BSTR bstrServerName );

}


//+---------------------------------------------------------------------------
//
//  Copyright (C) Microsoft Corporation, 1996 - 2002.
//
//  Contents:    IIlsAttributes interface definition
//              
//----------------------------------------------------------------------------
[
    object,
    uuid(440CC98C-20E6-11d0-8796-444553540000),
    pointer_default(unique)
]
interface IIlsAttributes : IUnknown
{
    typedef [unique] IIlsAttributes *LPILS_ATTRIBUTES;

    HRESULT SetAttribute(
        [in] BSTR bstrName,
        [in] BSTR bstrValue);

    HRESULT GetAttribute(
        [in] BSTR bstrName,
        [out] BSTR *pbstrValue);

    HRESULT EnumAttributes(
        [out] IEnumIlsNames **ppEnumAttribute);

	HRESULT SetAttributeName (
	    [in] BSTR bstrName );
}


//+---------------------------------------------------------------------------
//
//  Copyright (C) Microsoft Corporation, 1996 - 2002.
//
//  Contents:    IIlsUserFilter interface definition
//              
//----------------------------------------------------------------------------
[
    object,
    uuid(440CC98D-20E6-11d0-8796-444553540000),
    pointer_default(unique)
]
interface IIlsFilter : IUnknown
{
    typedef [unique] IIlsFilter *LPILS_FILTER;

cpp_quote("// Composite filter operations")

    HRESULT AddSubFilter (
        [in] IIlsFilter *pFilter );

    HRESULT RemoveSubFilter (
        [in] IIlsFilter *pFilter );

    HRESULT GetCount (
        [out] ULONG *pcElements );

cpp_quote("// Simple filter operations")

    HRESULT SetStandardAttributeName (
        [in] ILS_STD_ATTR_NAME  usrStdAttr);

    HRESULT SetExtendedAttributeName (
        [in] BSTR bstrAnyAttrName );

    HRESULT SetAttributeValue (
        [in] BSTR bstrAttrValue );
}


//+---------------------------------------------------------------------------
//
//  Copyright (C) Microsoft Corporation, 1996 - 2002.
//
//  Contents:    IEnumIlsProtocols interface definition
//              
//----------------------------------------------------------------------------
[
    object,
    uuid(440CC98E-20E6-11d0-8796-444553540000),
    pointer_default(unique)
]
interface IEnumIlsProtocols : IUnknown
{ 
    typedef [unique] IEnumIlsProtocols *LPENUM_ILS_PROTOCOLS;

    HRESULT Next(
        [in] ULONG cProtocols,
        [out] IIlsProtocol **rgpProtocol,
        [out] ULONG *pcFetched);

    HRESULT Skip(
        [in] ULONG cProtocols);
        
    HRESULT Reset();

    HRESULT Clone(
        [out] IEnumIlsProtocols **ppEnumProtocol);
}


//+---------------------------------------------------------------------------
//
//  Copyright (C) Microsoft Corporation, 1996 - 2002.
//
//  Contents:    IEnumIlsUsers interface definition
//              
//----------------------------------------------------------------------------
[
    object,
    uuid(440CC98F-20E6-11d0-8796-444553540000),
    pointer_default(unique)
]
interface IEnumIlsUsers : IUnknown
{ 
    typedef [unique] IEnumIlsUsers *LPENUM_ILS_USERS;

    HRESULT Next(
        [in] ULONG cUsers,
        [out] IIlsUser **rgpUsers,
        [out] ULONG *pcFetched);

    HRESULT Skip(
        [in] ULONG cUsers);
        
    HRESULT Reset();

    HRESULT Clone(
        [out] IEnumIlsUsers **ppEnumUser);
}


//+---------------------------------------------------------------------------
//
//  Copyright (C) Microsoft Corporation, 1996 - 2002.
//
//  Contents:    IEnumIlsNames interface definition
//              
//----------------------------------------------------------------------------
[
    object,
    uuid(440CC990-20E6-11d0-8796-444553540000),
    pointer_default(unique)
]
interface IEnumIlsNames : IUnknown
{ 
    typedef [unique] IEnumIlsNames *LPENUM_ILS_NAMES;

    HRESULT Next(
        [in] ULONG cNames,
        [out] BSTR *rgpbstrName,
        [out] ULONG *pcFetched);

    HRESULT Skip(
        [in] ULONG cNames);
        
    HRESULT Reset();

    HRESULT Clone(
        [out] IEnumIlsNames **ppEnumName);
}


