/*++

Copyright (c) 2001 Microsoft Corporation

Module Name:

    azroles.idl

Abstract:

    IDL definition for all AZ IDispatch interfaces

    This file will be processed by the MIDL tool to
    produce the type library (azroles.tlb) and marshalling code.

Author:

    Xiaoxi Tan (xtan) 11-May-2001

--*/

import "oaidl.idl";
import "ocidl.idl";


//IAzAdminManager
[
    object,
    uuid(edbd9ca9-9b82-4f6a-9e8b-98301e450f14),
    dual,
    helpstring("IAzAdminManager Interface"),
    pointer_default(unique)
]
interface IAzAdminManager : IDispatch
{
    HRESULT Initialize(
        [in]            ULONG       lReserved,     //ignored
        [in]            ULONG       lStoreType,
        [in]            BSTR        bstrPolicyURL
        );

    HRESULT CreateEnumApplication(
        [out, retval]   VARIANT     *pvarEnumApplication
        );

    HRESULT OpenApplication(
        [in]            BSTR        bstrApplicationName,
        [out, retval]   VARIANT*    pvarApplication
        );

    HRESULT CreateApplication(
        [in]            BSTR        bstrApplicationName,
        [out, retval]   VARIANT*    pvarApplication
        );

    HRESULT DeleteApplication(
        [in]            BSTR        bstrApplicationName
        );

    //group methods
    HRESULT CreateEnumApplicationGroup(
        [out, retval]   VARIANT*    pvarEnumApplicationGroup
        );

    HRESULT AddApplicationGroup(
        [in]            BSTR        bstrGroupName
        );

    HRESULT OpenApplicationGroup(
        [in]            BSTR        bstrGroupName,
        [out, retval]   VARIANT*    pvarApplicationGroup
        );

    HRESULT DeleteApplicationGroup(
        [in]            BSTR        bstrGroupName
        );

    HRESULT Submit(
        [in]            ULONG       lReserved       //ignored
        );
};


//IAzApplication
[
    object,
    uuid(987bc7c7-b813-4d27-bede-6ba5ae867e95),
    helpstring("IAzApplication Interface"),
    pointer_default(unique)
]
interface IAzApplication : IDispatch
{
    HRESULT GetProperty(
        [in]            ULONG       lPropId,
        [out, retval]   VARIANT*    pvarProp
        );

    HRESULT SetProperty(
        [in]            ULONG       lPropId,
        [in]            VARIANT     varProp
        );

    //scope methods
    HRESULT CreateEnumScope(
        [out, retval]   VARIANT*    pvarEnumAzScope
        );

    HRESULT OpenScope(
        [in]            BSTR        bstrScopeName,
        [out, retval]   VARIANT*    pvarScope
        );

    HRESULT CreateScope(
        [in]            BSTR        bstrScopeName,
        [out, retval]   VARIANT*    pScope
        );

    HRESULT DeleteScope(
        [in]   BSTR                 bstrScopeName
        );

    //operation methods
    HRESULT CreateEnumOperation(
        [out, retval]   VARIANT*    pvarEnumOperation
        );

    HRESULT OpenOperation(
        [in]            BSTR        bstrOperationName,
        [out, retval]   VARIANT*    pvarOperation
        );

    HRESULT CreateOperation(
        [in]            BSTR        bstrOperationName,
        [out, retval]   VARIANT*    pvarOperation
        );

    HRESULT DeleteOperation(
        [in]            BSTR        bstrOperationName
        );

    // task methods
    HRESULT CreateEnumTask(
        [out, retval]   VARIANT*    pvarEnumAzTask
        );

    HRESULT OpenTask(
        [in]            BSTR        bstrTaskName,
        [out, retval]   VARIANT*    pvarTask
        );

    HRESULT CreateTask(
        [in]            BSTR        bstrTaskName,
        [out, retval]   VARIANT*    pvarTask
        );


    HRESULT DeleteTask(
        [in]            BSTR        bstrTaskName
        );

    //group methods
    HRESULT CreateEnumApplicationGroup(
        [out, retval]   VARIANT*    pvarEnumGroup
        );

    HRESULT OpenApplicationGroup(
        [in]            BSTR        bstrGroupName,
        [out, retval]   VARIANT*    pvarGroup
        );

    HRESULT CreateApplicationGroup(
        [in]            BSTR        bstrGroupName,
        [out, retval]   VARIANT*    pvarGroup
        );

    HRESULT DeleteApplicationGroup(
        [in]            BSTR        bstrGroupName
        );

    //role methods
    HRESULT CreateEnumRole(
        [out, retval]   VARIANT*    pvarEnumRole
        );

    HRESULT OpenRole(
        [in]            BSTR        bstrRoleName,
        [out, retval]   VARIANT    *pvarRole
        );

    HRESULT CreateRole(
        [in]            BSTR        bstrRoleName,
        [out, retval]   VARIANT*    pvarRole
        );

    HRESULT DeleteRole(
        [in]            BSTR        bstrRoleName
        );


    //JunctionPoint methods
    HRESULT CreateEnumJunctionPoint(
        [out, retval]   VARIANT*    pvarEnumJunctionPoint
        );

    HRESULT OpenJunctionPoint(
        [in]            BSTR        bstrJunctionPointName,
        [out, retval]   VARIANT*    pvarJunctionPoint
        );

    HRESULT CreateJunctionPoint(
        [in]            BSTR        bstrJunctionPointName,
        [out, retval]   VARIANT*    pvarJunctionPoint
        );


    HRESULT DeleteJunctionPoint(
        [in]            BSTR        bstrJunctionPointName
        );

    HRESULT InitializeClientContextFromToken(
        [in]            ULONG       lTokenHandle,
        [out, retval]   VARIANT*    pvarClientContext
        );
};


//IAzEnumApplication
[
    object,
    uuid(929b11a9-95c5-4a84-a29a-20ad42c2f16c),
    helpstring("IAzEnumApplication Interface"),
    pointer_default(unique)
]
interface IAzEnumApplication : IDispatch
{
    HRESULT Count(
        [out, retval]   ULONG*      plCount
        );

    HRESULT Reset(
        );

    HRESULT Next(
        [out, retval]   VARIANT*    pvarAzApplication
        );
};


//IAzOperation
[
    object,
    uuid(5e56b24f-ea01-4d61-be44-c49b5e4eaf74),
    helpstring("IAzOperation Interface"),
    pointer_default(unique)
]
interface IAzOperation : IDispatch
{
    HRESULT GetProperty(
        [in]            ULONG       lPropId,
        [out, retval]   VARIANT*    pvarProp
        );

    HRESULT SetProperty(
        [in]            ULONG       lPropId,
        [in]            VARIANT     varProp
        );
};


//IAzEnumOperation
[
    object,
    uuid(90ef9c07-9706-49d9-af80-0438a5f3ec35),
    helpstring("IAzEnumOperation Interface"),
    pointer_default(unique)
]
interface IAzEnumOperation : IDispatch
{
    HRESULT Count(
        [out, retval]   ULONG*      plCount
        );

    HRESULT Reset(
        );

    HRESULT Next(
        [out, retval]   VARIANT*    pvarOperation
        );
};


//IAzTask
[
    object,
    uuid(cb94e592-2e0e-4a6c-a336-b89a6dc1e388),
    helpstring("IAzTask Interface"),
    pointer_default(unique)
]
interface IAzTask : IDispatch
{
    HRESULT GetProperty(
        [in]            ULONG       lPropId,
        [out, retval]   VARIANT*    pvarProp
        );

    HRESULT SetProperty(
        [in]            ULONG       lPropId,
        [in]            VARIANT     varProp
        );

    HRESULT AddPropertyItem(
        [in]            ULONG       lPropId,
        [in]            VARIANT     varProp
        );

    HRESULT DeletePropertyItem(
        [in]            ULONG       lPropId,
        [in]            VARIANT     varProp
        );
};


//IAzEnumTask
[
    object,
    uuid(b338ccab-4c85-4388-8c0a-c58592bad398),
    helpstring("IAzEnumTask Interface"),
    pointer_default(unique)
]
interface IAzEnumTask : IDispatch
{
    HRESULT Count(
        [out, retval]   ULONG*      plCount
        );

    HRESULT Reset(
        );

    HRESULT Next(
        [out, retval]   VARIANT*    pvarTask
        );
};


//IAzScope
[
    object,
    uuid(00e52487-e08d-4514-b62e-877d5645f5ab),
    helpstring("IAzScope Interface"),
    pointer_default(unique)
]
interface IAzScope : IDispatch
{
    HRESULT GetProperty(
        [in]            ULONG       lPropId,
        [out, retval]   VARIANT*    pvarProp
        );

    HRESULT SetProperty(
        [in]            ULONG       lPropId,
        [in]            VARIANT     varProp
        );

    //group methods
    HRESULT CreateEnumApplicationGroup(
        [out, retval]   VARIANT*    pvarEnumGroup
        );

    HRESULT OpenApplicationGroup(
        [in]            BSTR        bstrGroupName,
        [out, retval]   VARIANT*    pvarGroup
        );

    HRESULT AddApplicationGroup(
        [in]            BSTR        bstrGroupName
        );

    HRESULT DeleteApplicationGroup(
        [in]            BSTR        bstrGroupName
        );

    //role methods
    HRESULT CreateEnumRole(
        [out, retval]   VARIANT*    pvarEnumRole
        );

    HRESULT OpenRole(
        [in]            BSTR        bstrRoleName,
        [out, retval]   VARIANT*    pvarRole
        );

    HRESULT AddRole(
        [in]            BSTR        bstrRoleName
        );

    HRESULT DeleteRole(
        [in]            BSTR        bstrRoleName
        );
};


//IAzEnumScope
[
    object,
    uuid(78e14853-9f5e-406d-9b91-6bdba6973510),
    helpstring("IAzEnumScope Interface"),
    pointer_default(unique)
]
interface IAzEnumScope : IDispatch
{
    HRESULT Count(
        [out, retval]   ULONG*      plCount
        );

    HRESULT Reset(
        );

    HRESULT Next(
        [out, retval]   VARIANT*    pvarScope
        );
};


//IAzApplicationGroup
[
    object,
    uuid(f1b744cd-58a6-4e06-9fbf-36f6d779e21e),
    helpstring("IAzApplicationGroup Interface"),
    pointer_default(unique)
]
interface IAzApplicationGroup : IDispatch
{
    HRESULT GetProperty(
        [in]            ULONG       lPropId,
        [out, retval]   VARIANT*    pvarProp
          );

    HRESULT SetProperty(
        [in]            ULONG       lPropId,
        [in]            VARIANT     varProp
        );

    HRESULT AddPropertyItem(
        [in]            ULONG       lPropId,
        [in]            VARIANT     varProp
        );

    HRESULT DeletePropertyItem(
        [in]            ULONG       lPropId,
        [in]            VARIANT     varProp
        );

};


//IAzEnumApplicationGroup
[
    object,
    uuid(4ce66ad5-9f3c-469d-a911-b99887a7e685),
    helpstring("IAzEnumApplicationGroup Interface"),
    pointer_default(unique)
]
interface IAzEnumApplicationGroup : IDispatch
{
    HRESULT Count(
        [out, retval]   ULONG*      plCount
        );

    HRESULT Reset(
        );

    HRESULT Next(
        [out, retval]   VARIANT*    pvarApplicationGroup
        );
};


//IAzRole
[
    object,
    uuid(859e0d8d-62d7-41d8-a034-c0cd5d43fdfa),
    helpstring("IAzRole Interface"),
    pointer_default(unique)
]
interface IAzRole : IDispatch
{
    HRESULT GetProperty(
        [in]            ULONG       lPropId,
        [out, retval]   VARIANT    *pvarProp
        );

    HRESULT SetProperty(
        [in]            ULONG       lPropId,
        [in]            VARIANT     varProp
        );

    HRESULT AddPropertyItem(
        [in]            ULONG       lPropId,
        [in]            VARIANT     varProp
        );

    HRESULT DeletePropertyItem(
        [in]            ULONG       lPropId,
        [in]            VARIANT     varProp
        );
};


//IAzEnumRole
[
    object,
    uuid(95e0f119-13b4-4dae-b65f-2f7d60d822e4),
    helpstring("IAzEnumRole Interface"),
    pointer_default(unique)
]
interface IAzEnumRole : IDispatch
{
    HRESULT Count(
        [out, retval]   ULONG*      plCount
        );

    HRESULT Reset(
        );

    HRESULT Next(
        [out, retval]   VARIANT*    pvarRole
        );
};


//IAzJunctionPoint
[
    object,
    uuid(14a269d1-5da3-4f00-a432-98c5fb2de025),
    helpstring("IAzJunctionPoint Interface"),
    pointer_default(unique)
]
interface IAzJunctionPoint : IDispatch
{
    HRESULT GetProperty(
        [in]            ULONG       lPropId,
        [out, retval]   VARIANT*    pvarProp
        );

    HRESULT SetProperty(
        [in]            ULONG       lPropId,
        [in]            VARIANT     varProp
        );
};


//IAzEnumJunctionPoint
[
    object,
    uuid(ddbd8687-44a4-49fa-bcf6-71103b14b8c4),
    helpstring("IAzEnumJunctionPoint Interface"),
    pointer_default(unique)
]
interface IAzEnumJunctionPoint : IDispatch
{
    HRESULT Count(
        [out, retval]   ULONG*      plCount
        );

    HRESULT Reset(
        );

    HRESULT Next(
        [out, retval]   VARIANT*    pvarJunctionPoint
        );
};


//IAzClientContext
[
    object,
    uuid(eff1f00b-488a-466d-afd9-a401c5f9eef5),
    helpstring("IAzClientContext Interface"),
    pointer_default(unique)
]
interface IAzClientContext : IDispatch
{
    HRESULT AccessCheck(
        [in]            BSTR        bstrObjectName,
        [in]            ULONG       lScopeCount,
        [in]            VARIANT     varScopeNames,          //OPTIONAL
        [in]            ULONG       lOperationCount,
        [in]            VARIANT     varOperations,
        [in]            ULONG       lParameterCount,
        [in]            VARIANT     varParameterNames,      //OPTIONAL
        [in]            VARIANT     varParameterVariants,   //OPTIONAL
        [in]            ULONG       lInterfaceCount,
        [in]            VARIANT     varInterfaceNames,      //OPTIONAL
        [in]            ULONG       lInterfaceFlags,        //OPTIONAL
        [in]            VARIANT     varInterfaces,          //OPTIONAL
        [out, retval]   VARIANT*    pvarResults
        );

    HRESULT GetBusinessRuleString(
        [out, retval]   BSTR*       pbstrBusinessRuleString
        );

    HRESULT GetProperty(
        [in]            ULONG       lPropId,
        [out, retval]   VARIANT*    pvarProp
        );

};


//IAzAccessCheck
[
    object,
    uuid(e192f17d-d59f-455e-a152-940316cd77b2),
    helpstring("IAzAccessCheck Interface"),
    pointer_default(unique)
]
interface IAzAccessCheck : IDispatch
{
    [propput]
    HRESULT BusinessRuleResult(
        [in]            BOOL        bResult
        );

    [propput]
    HRESULT BusinessRuleString(
        [in]            BSTR        bstrBusinessRuleString
        );

    [propget]
    HRESULT BusinessRuleString(
        [out, retval]   BSTR*       pbstrBusinessRuleString
        );

    [propput]
    HRESULT BusinessRuleExpiration(
        [in]            ULONG       lExpirationPeriod
        );

    HRESULT GetParameter(
        [in]            BSTR        bstrParameterName,
        [out, retval]   VARIANT*    pvarParameterName
        );

};


//AZROLESLib
[
        uuid(11A8B8EE-BF30-409A-8EF7-3A143EF70332),
        version(1.0),
        helpstring("azroles 1.0 Type Library")
]
library AZROLESLib
{
        importlib("stdole32.tlb");
        importlib("stdole2.tlb");


    //AzAdminManager
    [
        uuid(b2bcff59-a757-4b0b-a1bc-ea69981da69e),
        helpstring("AzAdminManager Class")
    ]
    coclass AzAdminManager
    {
        [default] interface IAzAdminManager;
    };

    //AzApplication
    [
        uuid(3dac5e2d-fd2f-4cc1-aa03-9a7d06f08328),
        helpstring("AzApplication Class")
    ]
    coclass AzApplication
    {
        [default] interface IAzApplication;
    };

    //AzEnumApplication
    [
        uuid(fa47b737-ea3c-473c-b6e5-48c09e75a51b),
        helpstring("AzEnumApplication Class")
    ]
    coclass AzEnumApplication
    {
        [default] interface IAzEnumApplication;
    };

    //AzOperation
    [
        uuid(e5877a05-5bca-4c54-834e-532435a64b5a),
        helpstring("AzOperation Class")
    ]
    coclass AzOperation
    {
        [default] interface IAzOperation;
    };

    //AzEnumOperation
    [
        uuid(5fd49bed-5c11-4a2b-a883-b7936f6916c1),
        helpstring("AzEnumOperation Class")
    ]
    coclass AzEnumOperation
    {
        [default] interface IAzEnumOperation;
    };

    //AzTask
    [
        uuid(119c6c49-e40f-4356-a573-38727af7762f),
        helpstring("AzTask Class")
    ]
    coclass AzTask
    {
        [default] interface IAzTask;
    };

    //AzEnumTask
    [
        uuid(facea3a6-b158-4659-8574-61763cbc0b3b),
        helpstring("AzEnumTask Class")
    ]
    coclass AzEnumTask
    {
        [default] interface IAzEnumTask;
    };

    //AzScope
    [
        uuid(5c9e483f-56c8-4e8b-9f69-17fea5870ddc),
        helpstring("AzScope Class")
    ]
    coclass AzScope
    {
        [default] interface IAzScope;
    };

    //AzEnumScope
    [
        uuid(3fcb9195-33ff-4529-88b0-09cc07c78126),
        helpstring("AzEnumScope Class")
    ]
    coclass AzEnumScope
    {
        [default] interface IAzEnumScope;
    };

    //AzApplicationGroup
    [
        uuid(160475f0-b449-45cc-a666-1cfdb4051914),
        helpstring("AzApplicationGroup Class")
    ]
    coclass AzApplicationGroup
    {
        [default] interface IAzApplicationGroup;
    };

    //AzEnumApplicationGroup
    [
        uuid(b374c382-a46e-4abd-8a23-7d781f2e9f30),
        helpstring("AzEnumApplicationGroup Class")
    ]
    coclass AzEnumApplicationGroup
    {
        [default] interface IAzEnumApplicationGroup;
    };

    //AzRole
    [
        uuid(72ccf3e5-0694-4102-813c-120097db34ca),
        helpstring("AzRole Class")
    ]
    coclass AzRole
    {
        [default] interface IAzRole;
    };

    //AzEnumRole
    [
        uuid(7c6d895b-36ad-4549-8f5e-978d396b00ae),
        helpstring("AzEnumRole Class")
    ]
    coclass AzEnumRole
    {
        [default] interface IAzEnumRole;
    };

    //AzJunctionPoint
    [
        uuid(14c084fd-b2d8-4862-99e5-65e8855f11fb),
        helpstring("AzJunctionPoint Class")
    ]
    coclass AzJunctionPoint
    {
        [default] interface IAzJunctionPoint;
    };

    //AzEnumJunctionPoint
    [
        uuid(238d4d06-d045-4fb3-affc-d219e0c2e5ff),
        helpstring("AzEnumJunctionPoint Class")
    ]
    coclass AzEnumJunctionPoint
    {
        [default] interface IAzEnumJunctionPoint;
    };

    //AzClientContext
    [
        uuid(b0848403-9ece-4652-8cc5-52118ba419df),
        helpstring("AzClientContext Class")
    ]
    coclass AzClientContext
    {
        [default] interface IAzClientContext;
    };

    //AzAccessCheck
    [
        uuid(5c2dc96f-8d51-434b-b33c-379bccae77c3),
        helpstring("AzAccessCheck Class")
    ]
    coclass AzAccessCheck
    {
        [default] interface IAzAccessCheck;
    };

};



//IAzAdminManager::Initialize lStoreType defines
cpp_quote("#define AZ_ADMIN_STORE_UNKNOWN   0x00")
cpp_quote("#define AZ_ADMIN_STORE_AD 0x01")
cpp_quote("#define AZ_ADMIN_STORE_XML 0x02")

//IAzApplication::GetProperty/SetProperty lPropId defines
cpp_quote("#define AZ_PROP_NAME                1")
cpp_quote("#define AZ_PROP_DESCRIPTION         2")

//IAzOperation::GetProperty/SetProperty lPropId defines
cpp_quote("#define AZ_PROP_OPERATION_ID                200")

//IAzTask::GetProperty/SetProperty lPropId defines
cpp_quote("#define AZ_PROP_TASK_OPERATIONS        300")
cpp_quote("#define AZ_PROP_TASK_BIZRULE           301")
cpp_quote("#define AZ_PROP_TASK_BIZRULE_LANGUAGE  302")

//IAzApplicationGroup::Get/Set lPropId defines
cpp_quote("#define AZ_PROP_GROUP_TYPE   400")
cpp_quote("#define AZ_PROP_GROUP_APP_MEMBERS     401")
cpp_quote("#define AZ_PROP_GROUP_APP_NON_MEMBERS 402")
cpp_quote("#define AZ_PROP_GROUP_LDAP_QUERY  403")
cpp_quote("#define AZ_PROP_GROUP_MEMBERS         404")
cpp_quote("#define AZ_PROP_GROUP_NON_MEMBERS     405")

cpp_quote("#define AZ_GROUPTYPE_LDAP_QUERY  1")
cpp_quote("#define AZ_GROUPTYPE_MEMBERSHIP  2")

//IAzRole::Get/Set lPropId defines
cpp_quote("#define AZ_PROP_ROLE_APP_MEMBERS  500")
cpp_quote("#define AZ_PROP_ROLE_MEMBERS      501")
cpp_quote("#define AZ_PROP_ROLE_OPERATIONS   502")
cpp_quote("#define AZ_PROP_ROLE_SCOPES       503")

//IAzJunctionPoint::GetProperty/SetProperty lPropId defines
cpp_quote("#define AZ_PROP_JUNCTION_POINT_APPLICATION   600")

