//////////////////////////////////////////////////////////////////////////////
//
//  Copyright (c) 1999-2001 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
//////////////////////////////////////////////////////////////////////////////
interface IClusCfgWizard;

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

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

//////////////////////////////////////////////////////////////////////////////
//
//  interface IClusCfgWizard
//
//  Description:
//      The IClusCfgWizard interface provides the functions required to launch
//      the Cluster Configuration Wizard in either Create Cluster or Add
//      Cluster Nodes mode.
//
//////////////////////////////////////////////////////////////////////////////
[
    object,
    uuid(2EB57A3B-DA8D-4B56-97CF-A3191BF8FD5B),
    dual,
    helpstring("IClusCfgWizard Interface"),
    pointer_default(unique)
]
interface IClusCfgWizard : IDispatch
{
    //////////////////////////////////////////////////////////////////////////
    //
    //  STDMETHOD
    //      CreateCluster()
    //
    //  Description:
    //      Launch the Cluster Wizard in Create Cluster mode.
    //
    //  Parameters
    //      ParentHwndIn
    //          Handle to the parent window (default NULL). If not NULL,
    //          the wizard will be positionned in the center of this window.
    //
    //      pfDoneOut
    //          Returns TRUE if committed, FALSE if cancelled.
    //
    //  Return Values:
    //      S_OK
    //          The call succeeded.
    //
    //      other HRESULTs
    //          The call failed.
    //
    //////////////////////////////////////////////////////////////////////////
    [ id( 1 ), helpstring( "method CreateCluster" ) ]
    HRESULT
        CreateCluster(
              [ in, defaultvalue( 0 ) ]    HWND ParentHwndIn
            , [ out, retval ]              BOOL * pfDoneOut
            );

    //////////////////////////////////////////////////////////////////////////
    //
    //  STDMETHOD
    //      AddClusterNodes()
    //
    //  Description:
    //      Launch the Cluster Wizard in Add Cluster Nodes mode.
    //
    //  Parameters
    //      ParentHwndIn
    //          Handle to the parent window (default NULL). If not NULL, the
    //          wizard will be positionned in the center of this window.
    //
    //      pfDoneOut
    //          Returns TRUE if committed, FALSE if cancelled.
    //
    //  Return Values:
    //      S_OK
    //          The call succeeded.
    //
    //      other HRESULTs
    //          The call failed.
    //
    //////////////////////////////////////////////////////////////////////////
    [ id( 2 ), helpstring( "method AddClusterNodes" ) ]
    HRESULT
        AddClusterNodes(
              [ in, defaultvalue( 0 ) ]  HWND ParentHwndIn
            , [ out, retval ]            BOOL * pfDoneOut
            );

    //////////////////////////////////////////////////////////////////////////
    //
    //  PROPERTY
    //      ClusterName
    //
    //  Description:
    //      Set a default value for the cluster name if Create Cluster mode.
    //      Provide the mandatory name of the cluster before calling
    //      AddClusterNodes. Return the cluster name for a newly created
    //      cluster. This must be a Fully-Qualified Domain Name (DNS FQDN)
    //      for the cluster. The "domain" default will be determined from
    //      this string.
    //
    //  Return Values:
    //      S_OK
    //          The call succeeded.
    //
    //      other HRESULTs
    //          The call failed.
    //
    //////////////////////////////////////////////////////////////////////////
    [ propget, id( 5 ), helpstring( "property ClusterName" ) ]
    HRESULT
        ClusterName( [ out, retval ] BSTR *pbstrFQDNNameOut );

    [ propput, id( 5 ), helpstring( "property ClusterName" ) ]
    HRESULT
        ClusterName( [ in ] BSTR bstrFQDNNameIn );

    //////////////////////////////////////////////////////////////////////////
    //
    //  PROPERTY
    //      ServiceAccountUserName
    //
    //  Description:
    //      Set a default value for the user name in the cluster service account.
    //      Return the value set by the wizard.
    //      The default property value is NULL.
    //
    //  Return Values:
    //      S_OK
    //          The call succeeded.
    //
    //      other HRESULTs
    //          The call failed.
    //
    //////////////////////////////////////////////////////////////////////////
    [ propget, id( 6 ), helpstring( "property ServiceAccountUserName" ) ]
    HRESULT
        ServiceAccountUserName( [ out, retval ] BSTR * pbstrAccountNameOut );

    [ propput, id( 6 ), helpstring( "property ServiceAccountUserName" ) ]
    HRESULT
        ServiceAccountUserName( [ in ] BSTR bstrAccountNameIn );

    //////////////////////////////////////////////////////////////////////////
    //
    //  PROPERTY
    //      ServiceAccountPassword
    //
    //  Description:
    //      Set a default value for the password in the cluster service account.
    //      Return the value set by the wizard.
    //      The default property value is NULL.
    //
    //  Return Values:
    //      S_OK
    //          The call succeeded.
    //
    //      other HRESULTs
    //          The call failed.
    //
    //////////////////////////////////////////////////////////////////////////
    [ propget, id( 7 ), helpstring( "property ServiceAccountPassword" ) ]
    HRESULT
        ServiceAccountPassword( [ out, retval ] BSTR * pbstrPasswordOut );

    [ propput, id( 7 ), helpstring( "property ServiceAccountPassword" ) ]
    HRESULT
        ServiceAccountPassword( [ in ] BSTR bstrPasswordIn );

    //////////////////////////////////////////////////////////////////////////
    //
    //  PROPERTY
    //      ServiceAccountDomainName
    //
    //  Description:
    //      Set a default value for the domain name in the cluster service account.
    //      Return the value set by the wizard.
    //      If not initialized, the default property value will be the local domain.
    //
    //  Return Values:
    //      S_OK                - The call succeeded.
    //      other HRESULTs      - The call failed.
    //
    //////////////////////////////////////////////////////////////////////////
    [ propget, id( 8 ), helpstring( "property ServiceAccountDomainName" ) ]
    HRESULT
        ServiceAccountDomainName( [ out, retval ] BSTR * pbstrDomainOut );

    [ propput, id( 8 ), helpstring( "property ServiceAccountDomainName" ) ]
    HRESULT
        ServiceAccountDomainName( [ in ] BSTR bstrDomainIn );

    //////////////////////////////////////////////////////////////////////////
    //
    //  PROPERTY
    //      ClusterIPAddress
    //
    //  Description:
    //      Set a default value for the cluster IP address.
    //      Return the value set by the wizard.
    //      There is no default value.
    //
    //  Return Values:
    //      S_OK                - The call succeeded.
    //      other HRESULTs      - The call failed.
    //
    //////////////////////////////////////////////////////////////////////////
    [ propget, id( 9 ), helpstring( "property ClusterIPAddress" ) ]
    HRESULT
        ClusterIPAddress( [ out, retval ] BSTR * pbstrIPAddressOut );

    [ propput, id( 9 ), helpstring( "property ClusterIPAddress" ) ]
    HRESULT
        ClusterIPAddress( [ in ] BSTR bstrIPAddressIn );

    //////////////////////////////////////////////////////////////////////////
    //
    //  PROPERTY
    //      ClusterIPSubnet
    //
    //  Description:
    //      Set a default value for the cluster IP subnet mask.
    //      Return the value set by the wizard.
    //      There is no default value.
    //
    //  Return Values:
    //      S_OK                - The call succeeded.
    //      other HRESULTs      - The call failed.
    //
    //////////////////////////////////////////////////////////////////////////
    [ propget, id( 10 ), helpstring( "property ClusterIPSubnet" ) ]
    HRESULT
        ClusterIPSubnet( [ out, retval ] BSTR * pbstrIPSubnetOut );

    [ propput, id( 10 ), helpstring( "property ClusterIPSubnet" ) ]
    HRESULT
        ClusterIPSubnet( [ in ] BSTR bstrSubnetIn );

    //////////////////////////////////////////////////////////////////////////
    //
    //  PROPERTY
    //      ClusterIPAddressNetwork
    //
    //  Description:
    //      Set a default value for the network on which the cluster IP address
    //      is to be offered on.
    //      Return the value set by the wizard.
    //      There is no default value.
    //
    //  Return Values:
    //      S_OK                - The call succeeded.
    //      other HRESULTs      - The call failed.
    //
    //////////////////////////////////////////////////////////////////////////
    [ propget, id( 11 ), helpstring( "property ClusterIPAddressNetwork" ) ]
    HRESULT
        ClusterIPAddressNetwork( [ out, retval ] BSTR * pbstrNetworkNameOut );

    [ propput, id( 11 ), helpstring( "property ClusterIPAddressNetwork" ) ]
    HRESULT
        ClusterIPAddressNetwork( [ in ] BSTR bstrNetworkNameIn );

    //////////////////////////////////////////////////////////////////////////
    //
    //  STDMETHOD
    //      AddComputer( )
    //
    //  Description:
    //      Adds a computer to the list of nodes to form/join a cluster. This
    //      string must be the Fully-Qualified Domain Name (DNS FQDN) of the
    //      computer to be added.
    //
    //  Parameters:
    //      pcszFQDNNameIn
    //          The FQDN hostname of the computer to be added as a node. An
    //          example of a FQDN is hostname.domain.com.
    //
    //  Return Values:
    //      S_OK
    //          The call succeeded.
    //
    //      other HRESULTs
    //          The call failed.
    //
    //////////////////////////////////////////////////////////////////////////
    [ id( 12 ), helpstring( "method AddComputer" ) ]
    HRESULT
        AddComputer(
            [ in, pointer_default( unique ) ] LPCWSTR pcszFQDNNameIn
            );

    //////////////////////////////////////////////////////////////////////////
    //
    //  STDMETHOD
    //      RemoveComputer( )
    //
    //  Description:
    //      Removes a computer from the list of nodes to form/join a cluster.
    //      This string must be the Fully-Qualified Domain Name (DNS FQDN) of
    //      the computer to be removed.
    //
    //  Parameters:
    //      pcszFQDNNameIn
    //          The FQDN hostname of the computer to be removed as a node. An
    //          example of a FQDN is hostname.domain.com.
    //
    //  Return Values:
    //      S_OK
    //          The call succeeded.
    //
    //      other HRESULTs
    //          The call failed.
    //
    //////////////////////////////////////////////////////////////////////////
    [ id( 13 ), helpstring( "method RemoveComputer" ) ]
    HRESULT
        RemoveComputer(
            [ in, pointer_default( unique ) ] LPCWSTR pcszFQDNNameIn
            );

    //////////////////////////////////////////////////////////////////////////
    //
    //  STDMETHOD
    //      ClearComputerList( )
    //
    //  Description:
    //      Removes all computers from the list of nodes to form/join a
    //      cluster.
    //
    //  Parameters:
    //      None.
    //
    //  Return Values:
    //      S_OK
    //          The call succeeded.
    //
    //      other HRESULTs
    //          The call failed.
    //
    //////////////////////////////////////////////////////////////////////////
    [ id( 14 ), helpstring( "method ClearComputerList" ) ]
    HRESULT
        ClearComputerList( void );

}; //*** interface IClusCfgWizard

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

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

    importlib("stdole2.tlb");

    //////////////////////////////////////////////////////////////////////////////
    // Component Definitions
    //////////////////////////////////////////////////////////////////////////////

    //////////////////////////////////////////////////////////////////////////////
    //++
    //
    //  coclass ClusCfgWizard
    //
    //  Description:
    //      The ClusCfgWizard coclass implements the interface required to launch
    //      the Cluster Wizard in either Create Cluster or Add Cluster Nodes mode.
    //--
    //////////////////////////////////////////////////////////////////////////////
    [
        uuid(1919C4FE-6F46-4027-977D-0EF1C8F26372),
        helpstring("ClusCfgWizard Class")
    ]
    coclass ClusCfgWizard
    {
        [default] interface IClusCfgWizard;
    };

}; //*** library ClusCfgWizard