//////////////////////////////////////////////////////////////////////////////
//
//  Copyright (c) 1999-2002 Microsoft Corporation
//
//  Module Name:
//      ClusCfgWizard.idl
//
//  Description:
//      IDL source for Cluster Configuration Wizard.
//      This file will be processed by the MIDL tool to produce the
//      type library (ClusCfgWizard.tlb) and marshalling code.
//
//////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////
// Imported Files
//////////////////////////////////////////////////////////////////////////////

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

//////////////////////////////////////////////////////////////////////////////
// Forward Declarations
//////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////
// Type Definitions
//////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////
// Interface Definitions
//////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////
// Library Definitions
//////////////////////////////////////////////////////////////////////////////

[
    uuid( 6D01FEDC-8D34-4728-AD0B-B3A21A103B42 ),
    version( 1.0 ),
    helpstring( "Microsoft Cluster Configuration Wizard 1.0" ),
    lcid( 0 )
]
library ClusCfgWizard
{
    //////////////////////////////////////////////////////////////////////////
    // Imported Files
    //////////////////////////////////////////////////////////////////////////

    importlib( "stdole2.tlb" );

    //////////////////////////////////////////////////////////////////////////
    // Interface Definitions
    //////////////////////////////////////////////////////////////////////////

    //////////////////////////////////////////////////////////////////////////
    //
    //  interface IClusCfgCreateClusterWizard
    //
    //  Description:
    //      The IClusCfgCreateClusterWizard interface provides the functions
    //      required to launch the Create Server Cluster Wizard.
    //
    //////////////////////////////////////////////////////////////////////////
    [
        object,
        uuid( f65c6990-a144-4127-ab6e-3712b75f1843 ),
        dual,
        helpstring( "IClusCfgCreateClusterWizard interface" ),
        pointer_default( unique )
    ]
    interface IClusCfgCreateClusterWizard : IDispatch
    {
        //////////////////////////////////////////////////////////////////////
        //
        //  PROPERTY
        //      ClusterName
        //
        //  Description:
        //      Set a default value for the cluster name.  There is no default
        //      value.
        //
        //      Return the cluster name for a newly created cluster.
        //
        //  PUT Parameters:
        //      bstrClusterNameIn
        //          The name of the cluster.  If this is not a Fully-Qualified
        //          Domain Name (DNS FQDN), the local machine account domain
        //          will be used.
        //
        //  GET Parameters:
        //      pbstrClusterNameOut
        //          Pointer to a BSTR in which to return the cluster name
        //          for the newly created cluster.
        //          
        //  Return Values:
        //      S_OK            - The call succeeded.
        //      Other HRESULTs  - The call failed.
        //
        //////////////////////////////////////////////////////////////////////
        [ propput, helpstring( "property ClusterName" ) ]
        HRESULT ClusterName( [ in ] BSTR bstrClusterNameIn );
        [ propget, helpstring( "property ClusterName" ) ]
        HRESULT ClusterName( [ out, retval ] BSTR * pbstrClusterNameOut );

        //////////////////////////////////////////////////////////////////////
        //
        //  PROPERTY
        //      ServiceAccountName
        //
        //  Description:
        //      Set a default value for the user name in the cluster service
        //      account.  There is no default value.
        //
        //      Return the value set by the wizard.
        //
        //  PUT Parameters:
        //      bstrServiceAccountNameIn
        //          The user name of the cluster service account.
        //
        //  GET Parameters:
        //      pbstrServiceAccountNameOut
        //          Pointer to a BSTR in which to return the cluster service
        //          account name for the newly created cluster.
        //
        //  Return Values:
        //      S_OK            - The call succeeded.
        //      Other HRESULTs  - The call failed.
        //
        //////////////////////////////////////////////////////////////////////
        [ propput, helpstring( "property ServiceAccountName" ) ]
        HRESULT ServiceAccountName( [ in ] BSTR bstrServiceAccountNameIn );
        [ propget, helpstring( "property ServiceAccountName" ) ]
        HRESULT ServiceAccountName( [ out, retval ] BSTR * pbstrServiceAccountNameOut );

        //////////////////////////////////////////////////////////////////////
        //
        //  PROPERTY
        //      ServiceAccountDomain
        //
        //  Description:
        //      Set a default value for the domain name in the cluster service
        //      account.  The default value is the local machine account
        //      domain.
        //
        //      Return the value set by the wizard.
        //
        //  PUT Parameters:
        //      bstrServiceAccountDomainIn
        //          The name of the service account domain.
        //
        //  GET Parameters:
        //      pbstrServiceAccountDomainOut
        //          Pointer to a BSTR in which to return the cluster service
        //          account domain name for the newly created cluster.
        //
        //  Return Values:
        //      S_OK            - The call succeeded.
        //      Other HRESULTs  - The call failed.
        //
        //////////////////////////////////////////////////////////////////////
        [ propput, helpstring( "property ServiceAccountDomain" ) ]
        HRESULT ServiceAccountDomain( [ in ] BSTR bstrServiceAccountDomainIn );
        [ propget, helpstring( "property ServiceAccountDomain" ) ]
        HRESULT ServiceAccountDomain( [ out, retval ] BSTR * pbstrServiceAccountDomainOut );

        //////////////////////////////////////////////////////////////////////
        //
        //  PROPERTY
        //      ServiceAccountPassword
        //
        //  Description:
        //      Set a default value for the password of the cluster service
        //      account.  There is no default value.
        //
        //  PUT Parameters:
        //      bstrPasswordIn
        //          The password for the cluster service account.
        //
        //  Return Values:
        //      S_OK            - The call succeeded.
        //      Other HRESULTs  - The call failed.
        //
        //////////////////////////////////////////////////////////////////////
        [ propput, helpstring( "property ServiceAccountPassword" ) ]
        HRESULT ServiceAccountPassword( [ in ] BSTR bstrPasswordIn );

        //////////////////////////////////////////////////////////////////////
        //
        //  PROPERTY
        //      ClusterIPAddress
        //
        //  Description:
        //      Set a default value for the cluster IP address.  There is no
        //      default value.
        //
        //      Return the value set by the wizard.
        //
        //  PUT Parameters:
        //      bstrClusterIPAddressIn
        //          The cluster IP address in dotted-quad string format
        //          (e.g. 1.2.3.4).
        //
        //  GET Parameters:
        //      pbstrClusterIPAddressOut
        //          Pointer to a BSTR in which to return the cluster IP
        //          address used by the newly created cluster.
        //
        //  Return Values:
        //      S_OK            - The call succeeded.
        //      Other HRESULTs  - The call failed.
        //
        //////////////////////////////////////////////////////////////////////
        [ propput, helpstring( "property ClusterIPAddress" ) ]
        HRESULT ClusterIPAddress( [ in ] BSTR bstrClusterIPAddressIn );
        [ propget, helpstring( "property ClusterIPAddress" ) ]
        HRESULT ClusterIPAddress( [ out, retval ] BSTR * pbstrClusterIPAddressOut );

        //////////////////////////////////////////////////////////////////////
        //
        //  PROPERTY
        //      ClusterIPSubnet
        //
        //  Description:
        //      Returns the cluster IP subnet mask set by the wizard.
        //
        //  GET Parameters:
        //      pbstrClusterIPSubnetOut
        //          Pointer to a BSTR in which to return the IP subnet mask
        //          for the cluster IP address used by the newly created
        //          cluster.
        //
        //  Return Values:
        //      S_OK            - The call succeeded.
        //      Other HRESULTs  - The call failed.
        //
        //////////////////////////////////////////////////////////////////////
        [ propget, helpstring( "ClusterIPSubnet" ) ]
        HRESULT ClusterIPSubnet( [ out, retval ] BSTR * pbstrClusterIPSubnetOut );

        //////////////////////////////////////////////////////////////////////
        //
        //  PROPERTY
        //      ClusterIPAddressNetwork
        //
        //  Description:
        //      Returns the network on which the cluster IP address is
        //      offered on as set by the wizard.
        //
        //  GET Parameters:
        //      pbstrClusterNetworkNameOut
        //          Pointer to a BSTR in which to return the network used by
        //          the cluster IP address used by the newly created cluster.
        //
        //  Return Values:
        //      S_OK            - The call succeeded.
        //      Other HRESULTs  - The call failed.
        //
        //////////////////////////////////////////////////////////////////////
        [ propget, helpstring( "property ClusterIPAddressNetwork" ) ]
        HRESULT ClusterIPAddressNetwork( [ out, retval ] BSTR * pbstrClusterNetworkNameOut );

        //////////////////////////////////////////////////////////////////////
        //
        //  PROPERTY
        //      FirstNodeInCluster
        //
        //  Description:
        //      Set a default value for the first node in the cluster.  There
        //      is no default value.
        //
        //      Return the value set by the wizard.
        //
        //  PUT Parameters:
        //      bstrFirstNodeInClusterIn
        //          The name of the first node in the cluster.  This name
        //          can be specified as a hostname, a Fully-Qualified Domain
        //          Name (DNS FQDN), or an IP address.
        //
        //          If this is not an FQDN, the local machine account domain
        //          will be used. An example of a FQDN is hostname.domain.com.
        //
        //  GET Parameters:
        //      pbstrFirstNodeInClusterOut
        //          Pointer to a BSTR in which to return the first node in
        //          the cluster.
        //
        //  Return Values:
        //      S_OK            - The call succeeded.
        //      Other HRESULTs  - The call failed.
        //
        //////////////////////////////////////////////////////////////////////
        [ propput, helpstring( "property SponsoringNode" )  ]
        HRESULT FirstNodeInCluster( [ in ] BSTR bstrFirstNodeInClusterIn );
        [ propget, helpstring( "property SponsoringNode" ) ]
        HRESULT FirstNodeInCluster( [ out, retval ] BSTR * pbstrFirstNodeInClusterOut );

        //////////////////////////////////////////////////////////////////////
        //
        //  PROPERTY
        //      MinimumConfiguration
        //
        //  Description:
        //      Set the minimum configuraiton mode of the wizard.  This
        //      property should only be set to VARIANT_TRUE for complex
        //      configurations where you do not want the wizard to
        //      automatically locate and include all the storage to be managed
        //      by the cluster.  Setting this property to VARIANT_FALSE is
        //      appropriate for most installations and will result in a
        //      completely configured server cluster.  The default value is
        //      VARIANT_FALSE.
        //
        //      Return the value used by the wizard.
        //
        //  PUT Parameters:
        //      fMinConfigIn
        //          VARIANT_TRUE    - Perform a minimum configuration.
        //          VARIANT_FALSE   - Perform a full configuration.
        //
        //  GET Parameters:
        //      pfMinConfigOut
        //          Returns the value used by the user.
        //
        //  Return Values:
        //      S_OK            - The call succeeded.
        //      Other HRESULTs  - The call failed.
        //
        //////////////////////////////////////////////////////////////////////
        [ propput, helpstring( "property MinimumConfiguration" ) ]
        HRESULT MinimumConfiguration( [ in ] VARIANT_BOOL fMinConfigIn );
        [ propget, helpstring( "property MinimumConfiguration" ) ]
        HRESULT MinimumConfiguration( [ out, retval ] VARIANT_BOOL * pfMinConfigOut );

        //////////////////////////////////////////////////////////////////////
        //
        //  STDMETHOD
        //      ShowWizard
        //
        //  Description:
        //      Show the wizard starting at the first page.
        //
        //  Parameters:
        //      lParentWindowHandleIn
        //          Handle to the parent window (default NULL).  If not NULL,
        //          the wizard will be positioned in the center of this
        //          window.  If NULL, it will be positioned in the center of
        //          screen.
        //
        //      pfCompletedOut
        //          VARIANT_TRUE    - Changes were committed.
        //          VARIANT_FALSE   - Wizard was cancelled.
        //
        //  Return Values:
        //      S_OK            - The call succeeded.
        //      Other HRESULTs  - The call failed.
        //
        //////////////////////////////////////////////////////////////////////
        [ helpstring( "method ShowWizard" ) ]
        HRESULT ShowWizard(
              [ in, defaultvalue( 0 ) ] long            lParentWindowHandleIn
            , [ out, retval ]           VARIANT_BOOL *  pfCompletedOut
            );

    }; //*** interface IClusCfgCreateClusterWizard
    
    //////////////////////////////////////////////////////////////////////////
    //
    //  interface IClusCfgAddNodesWizard
    //
    //  Description:
    //      The IClusCfgAddNodesWizard interface provides the functions
    //      required to launch the Add Nodes To Cluster Wizard.
    //
    //////////////////////////////////////////////////////////////////////////
    [
        object,
        uuid( 9da133cb-3b08-4c30-967e-56d96047f10c ),
        dual,
        helpstring( "IClusCfgAddNodesWizard interface" ),
        pointer_default( unique )
    ]
    interface IClusCfgAddNodesWizard : IDispatch
    {
        //////////////////////////////////////////////////////////////////////
        //
        //  PROPERTY
        //      ClusterName
        //
        //  Description:
        //      Set the name of the cluster to add nodes to.  If this property
        //      is set, the user will not be asked for the cluster name in
        //      the wizard.
        //
        //      Return the cluster name for the cluster to which nodes were
        //      added.
        //
        //  PUT Parameters:
        //      bstrClusterNameIn
        //          The name of the cluster.  This name can be a cluster
        //          hostname label, a Fully-Qualified Domain Name (DNS FQDN)
        //          for a cluster, or an IP address.
        //
        //          If this is not an FQDN, the local machine account domain
        //          will be used. An example of a FQDN is hostname.domain.com.
        //
        //  GET Parameters:
        //      pbstrClusterNameOut
        //          Pointer to a BSTR in which to return the cluster name
        //          for the cluster to which nodes were added.
        //          
        //  Return Values:
        //      S_OK            - The call succeeded.
        //      Other HRESULTs  - The call failed.
        //
        //////////////////////////////////////////////////////////////////////
        [ propput, helpstring( "property ClusterName" ) ]
        HRESULT ClusterName( [ in ] BSTR bstrClusterNameIn );
        [ propget, helpstring( "property ClusterName" ) ]
        HRESULT ClusterName( [ out, retval ] BSTR * pbstrClusterNameOut );

        //////////////////////////////////////////////////////////////////////
        //
        //  PROPERTY
        //      ServiceAccountPassword
        //
        //  Description:
        //      Set a default value for the password of the cluster service
        //      account.  There is no default value.
        //
        //  PUT Parameters:
        //      bstrPasswordIn
        //          The password for the cluster service account.
        //
        //  Return Values:
        //      S_OK            - The call succeeded.
        //      Other HRESULTs  - The call failed.
        //
        //////////////////////////////////////////////////////////////////////
        [ propput, helpstring( "property ServiceAccountPassword" ) ]
        HRESULT ServiceAccountPassword( [ in ] BSTR bstrPasswordIn );

        //////////////////////////////////////////////////////////////////////
        //
        //  PROPERTY
        //      MinimumConfiguration
        //
        //  Description:
        //      Set the minimum configuraiton mode of the wizard.  This
        //      property should only be set to VARIANT_TRUE for complex
        //      configurations where you do not want the wizard to
        //      automatically locate and include all the storage to be managed
        //      by the cluster.  Setting this property to VARIANT_FALSE is
        //      appropriate for most installations and will result in a
        //      completely configured server cluster.  The default value is
        //      VARIANT_FALSE.
        //
        //      Return the value used by the wizard.
        //
        //  PUT Parameters:
        //      fMinConfigIn
        //          VARIANT_TRUE    - Perform a minimum configuration.
        //          VARIANT_FALSE   - Perform a full configuration.
        //
        //  GET Parameters:
        //      pfMinConfigOut
        //          Returns the value used by the user.
        //
        //  Return Values:
        //      S_OK            - The call succeeded.
        //      Other HRESULTs  - The call failed.
        //
        //////////////////////////////////////////////////////////////////////
        [ propput, helpstring( "property MinimumConfiguration" ) ]
        HRESULT MinimumConfiguration( [ in ] VARIANT_BOOL fMinConfigIn );
        [ propget, helpstring( "property MinimumConfiguration" ) ]
        HRESULT MinimumConfiguration( [ out, retval ] VARIANT_BOOL * pfMinConfigOut );

        //////////////////////////////////////////////////////////////////////
        //
        //  STDMETHOD
        //      AddNodeToList
        //
        //  Description:
        //      Adds a computer to the list of nodes to add to a cluster.
        //
        //  Parameters:
        //      bstrNodeNameIn
        //          The hostname label, Fully-Qualified Domain Name (DNS
        //          FQDN), or IP address of a computer to add to the cluster.
        //
        //          If this is not an FQDN, the local machine account domain
        //          will be used. An example of a FQDN is hostname.domain.com.
        //
        //  Return Values:
        //      S_OK            - The call succeeded.
        //      Other HRESULTs  - The call failed.
        //
        //////////////////////////////////////////////////////////////////////
        [ helpstring( "method AddNodeToList" ) ]
        HRESULT AddNodeToList( [ in ] BSTR bstrNodeNameIn );

        //////////////////////////////////////////////////////////////////////
        //
        //  STDMETHOD
        //      RemoveNodeFromList
        //
        //  Description:
        //      Removes a computer from the list of nodes to add to a cluster.
        //
        //  Parameters:
        //      bstrNodeNameIn
        //          The FQDN hostname of the computer to be removed from the
        //          node list. An example of a FQDN is hostname.domain.com.
        //
        //  Return Values:
        //      S_OK            - The call succeeded.
        //      Other HRESULTs  - The call failed.
        //
        //////////////////////////////////////////////////////////////////////
        [ helpstring( "method RemoveNodeFromList" ) ]
        HRESULT RemoveNodeFromList( [ in ] BSTR bstrNodeNameIn );

        //////////////////////////////////////////////////////////////////////
        //
        //  STDMETHOD
        //      ClearNodeList
        //
        //  Description:
        //      Removes all computers from the list of nodes to add to a
        //      cluster.
        //
        //  Parameters:
        //      None.
        //
        //  Return Values:
        //      S_OK            - The call succeeded.
        //      Other HRESULTs  - The call failed.
        //
        //////////////////////////////////////////////////////////////////////
        [ helpstring( "method ClearNodeList" ) ]
        HRESULT ClearNodeList( void );

        //////////////////////////////////////////////////////////////////////
        //
        //  STDMETHOD
        //      ShowWizard
        //
        //  Description:
        //      Show the wizard starting at the first page.
        //
        //  Parameters:
        //      lParentWindowHandleIn
        //          Handle to the parent window (default NULL).  If not NULL,
        //          the wizard will be positioned in the center of this
        //          window.  If NULL, it will be positioned in the center of
        //          screen.
        //
        //      pfCompletedOut
        //          VARIANT_TRUE    - Changes were committed.
        //          VARIANT_FALSE   - Wizard was cancelled.
        //
        //  Return Values:
        //      S_OK            - The call succeeded.
        //      Other HRESULTs  - The call failed.
        //
        //////////////////////////////////////////////////////////////////////
        HRESULT ShowWizard(
              [ in, defaultvalue( 0 ) ] long            lParentWindowHandleIn
            , [ out, retval ]           VARIANT_BOOL *  pfCompletedOut
            );

    }; //*** interface IClusCfgAddNodesWizard
    
    //////////////////////////////////////////////////////////////////////////
    // Component Definitions
    //////////////////////////////////////////////////////////////////////////

    //////////////////////////////////////////////////////////////////////////
    //++
    //
    //  coclass ClusCfgCreateClusterWizard
    //
    //  Description:
    //      The ClusCfgCreateClusterWizard coclass implements the interface
    //      required to launch the Create Server Cluster Wizard.
    //--
    //////////////////////////////////////////////////////////////////////////
    [
        uuid( b929818e-f5b0-44dc-8a00-1b5f5f5aa1f0 ),
        helpstring( "ClusCfgCreateClusterWizard Class" )
    ]
    coclass ClusCfgCreateClusterWizard
    {
        [ default ] interface IClusCfgCreateClusterWizard;
    };

    //////////////////////////////////////////////////////////////////////////
    //++
    //
    //  coclass ClusCfgAddNodesWizard
    //
    //  Description:
    //      The ClusCfgAddNodesWizardcoclass implements the interface required
    //      to launch the Add Nodes To Cluster Wizard.
    //--
    //////////////////////////////////////////////////////////////////////////
    [
        uuid( bb8d141e-c00a-469f-bc5c-ecd814f0bd74 ),
        helpstring( "ClusCfgAddNodesWizard Class" )
    ]
    coclass ClusCfgAddNodesWizard
    {
        [ default ] interface IClusCfgAddNodesWizard;
    };

}; //*** library ClusCfgWizard
