Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

1061 lines
33 KiB

//////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2000-2002 Microsoft Corporation
//
// Module Name:
// ClusCfgPrivate.idl
//
// Description:
// This file is the IDL file for private interfaces between components
// of the Cluster Configuration Wizard.
//
//
// Maintained By:
// Galen Barbee (GalenB) 29-JUN-2000
//
//////////////////////////////////////////////////////////////////////////////
// Comments for generated files
cpp_quote( "//////////////////////////////////////////////////////////////////////////////" )
cpp_quote( "//" )
cpp_quote( "// Copyright (c) 2000-2002 Microsoft Corporation" )
cpp_quote( "//" )
cpp_quote( "// Remarks:" )
cpp_quote( "// These are private interfaces and should not be published outside of Microsoft!" )
cpp_quote( "//////////////////////////////////////////////////////////////////////////////" )
//////////////////////////////////////////////////////////////////////////////
// Imported Files
//////////////////////////////////////////////////////////////////////////////
import "unknwn.idl";
import "objidl.idl";
import "ClusCfgServer.idl";
import "ClusCfgClient.idl";
//////////////////////////////////////////////////////////////////////////////
// Forward Declarations
//////////////////////////////////////////////////////////////////////////////
interface IClusCfgServer;
interface IClusCfgPollingCallback;
interface IClusCfgPollingCallbackInfo;
interface IExtendObjectManager;
interface IClusCfgResTypeServicesInitialize;
interface IClusCfgClusterConnection;
interface IClusCfgSetCredentials;
interface IClusCfgVerify;
interface IClusCfgClusterConnection;
interface IClusCfgBaseCluster;
//****************************************************************************
//++
//
// interface IClusCfgServer
//
// Description:
// The IClusCfgServer interface provides the functions
// required to gather information about storage devices, networks
// and the operating system on a computer. It also exposes functions
// to form a cluster on this computer, to add this node to a cluster,
// to remove this node from a cluster, etc.
//
//--
//****************************************************************************
[
object,
uuid( 4C06EAE6-990E-4051-8AA1-AD4B4EAE9CAF ),
async_uuid( 2A1640AA-4561-4a08-B5D9-0AA38C6BE628 ),
pointer_default( unique )
]
interface IClusCfgServer : IUnknown
{
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// GetClusterNodeInfo(
// [ out ] IClusCfgNodeInfo ** ppClusterNodeInfoOut
// )
//
// Description:
// Get information about the computer on which this object is present.
//
// Parameter:
// ppClusterNodeInfoOut
// Pointer to the IClusterNodeInfo interface.
//
// Return Values:
// S_OK
// The call succeeded.
//
// other HRESULTs
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
GetClusterNodeInfo( [ out ] IClusCfgNodeInfo ** ppClusterNodeInfoOut );
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// GetManagedResourcesEnum(
// [ out ] IEnumClusCfgManagedResources ** ppEnumManagedResourcesOut
// )
//
// Description:
// Get an enumeration of the resources on this computer that can be managed
// by the cluster service. This is an enumeration of enumerators of the
// resources.
//
// Parameter:
// ppEnumManagedResourcesEnumOut
// Pointer to the IEnumClusCfgManagedResources interface.
//
// Return Values:
// S_OK
// The call succeeded.
//
// other HRESULTs
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
GetManagedResourcesEnum(
[ out ] IEnumClusCfgManagedResources ** ppEnumManagedResourcesOut
);
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// GetNetworksEnum(
// [ out ] IEnumClusCfgNetworks ** ppEnumNetworksOut
// )
//
// Description:
// Get an enumeration of all the networks on this computer.
//
// Parameter:
// ppEnumNetworksOut
// Pointer to the IEnumClusCfgNetworks inteface.
//
// Return Values:
// S_OK
// The call succeeded.
//
// other HRESULTs
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
GetNetworksEnum( [ out ] IEnumClusCfgNetworks ** ppEnumNetworksOut );
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// CommitChanges( void )
//
// Description:
// Commit the changes to the node and join/form the cluster.
//
// Return Values:
// S_OK
// The commit succeeded.
//
// other HRESULTs
// The commit failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
CommitChanges( void );
//
// Binding String
//
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// GetBindingString(
// [ out ] BSTR * pbstrBindingStringOut
// )
//
// Description:
// Retrieves the binding string (IP address) used to connect
// to this server.
//
// Notes:
// Retrieves the binding string used to connect to the remote server.
// If it returns NULL/S_FALSE, no binding was needed as it was a local
// connection.
//
// Parameter:
// pbstrBindingStringOut
// Pointer to a BSTR. This should be freed by the caller by calling
// SysFreeString( ).
//
// Return Values:
// S_OK
// Successly returned binding connection.
//
// S_FALSE
// Local connection was established - no binding string available.
//
// E_OUTOFMEMORY
// Out of memory.
//
// other HRESULTs.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
GetBindingString( [ out ] BSTR * pbstrBindingStringOut );
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// SetBindingString(
// [ in ] LPCWSTR pcszBindingStringIn
// )
//
// Description:
// Stores the binding string for this server.
//
// Notes:
//
// Parameter:
// pcszBindingStringIn
// The binding string to use when connecting to this server.
//
// Return Value:
// S_OK
// Success.
//
// E_OUTOFMEMORY
// Out of memory.
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
SetBindingString(
[ in, pointer_default( unique ) ] LPCWSTR pcszBindingStringIn
);
}; //*** interface IClusCfgServer
//****************************************************************************
//++
//
// interface IClusCfgPollingCallback
//
// Description:
// This interface is used to callback to the client to indicate
// status or progess (or both) about a task being completed on the
// server.
//
//--
//****************************************************************************
[
object,
uuid( C72DB1FD-51A2-43e6-B708-D9DB7DA79630 ),
async_uuid( FBE17C4B-3B3D-48c1-A8E8-C29098C9919B ),
pointer_default( unique )
]
interface IClusCfgPollingCallback : IUnknown
{
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// GetStatusReport(
// [ out ] BSTR * pbstrNodeNameOut,
// [ out ] CLSID * pclsidTaskMajorOut,
// [ out ] CLSID * pclsidTaskMinorOut,
// [ out ] ULONG * pulMinOut,
// [ out ] ULONG * pulMaxOut,
// [ out ] ULONG * pulCurrentOut,
// [ out ] HRESULT * phrStatusOut,
// [ out ] BSTR * pbstrDescriptionOut,
// [ out ] FILETIME * pftTimeOut,
// [ out ] BSTR * pbstrReferenceOut
// )
//
// Description:
// This method retreies a queued status report from the client.
//
// Parameters:
// pbstrNodeNameOut
// The name of the node (server) that sent the report.
//
// pclsidTaskMajorOut
// CLSID of the major task item to give status about. For the
// wizard, this indicates which node in the tree view control
// to publish this status message under. If clsidTaskMajorIn
// equals TASKID_Major_Client_Log, TASKID_Major_Server_Log, or
// TASKID_Major_Client_And_Server_Log, only a log entry will be
// made.
//
// pclsidTaskMinorOut
// CLSID of the minor task to give status about. These should be
// unique to each sub-task and message.
//
// pulMinOut
// The min value of progress.
//
// pulMaxOut
// The max value of progress.
//
// pulCurrentOut
// The current value of progress.
//
// phrStatusOut
// The current status.
//
// pbstrDescriptionOut
// The description of the status. Can be NULL to indicate that nothing
// needs to be passed.
//
// pftTimeOut
// Time that this report was created.
//
// pbstrReferenceOut
// Optional reference data, additional context, URL, etc. that
// might better help explain the problem is this is an error
// report.
//
// Return Values:
// S_OK
// The call succeeded.
//
// other HRESULTs
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
GetStatusReport(
[ out ] BSTR * pbstrNodeNameOut,
[ out ] CLSID * pclsidTaskMajorOut,
[ out ] CLSID * pclsidTaskMinorOut,
[ out ] ULONG * pulMinOut,
[ out ] ULONG * pulMaxOut,
[ out ] ULONG * pulCurrentOut,
[ out ] HRESULT * phrStatusOut,
[ out ] BSTR * pbstrDescriptionOut,
[ out ] FILETIME * pftTimeOut,
[ out ] BSTR * pbstrReferenceOut
);
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// SetHResult(
// [ in ] HRESULT hrIn
// )
//
// Description:
// Set the status of the SendStatusReport() back into the sender.
//
// Parameters:
//
// hrIn
// The status of this call from the SendStatusReport() in
// the middle tier.
//
// Return Values:
// S_OK
// The call succeeded.
//
// other HRESULTs
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
SetHResult(
[ in ] HRESULT hrIn
);
}; //*** interface IClusCfgPollingCallback
//****************************************************************************
//++
//
// interface IClusCfgPollingCallbackInfo
//
// Description:
// This interface is used to callback to the client to indicate
// status or progess (or both) about a task being completed on the
// server.
//
//--
//****************************************************************************
[
object,
uuid( 2AF55DA7-CB6F-40de-BB11-6673464B2C54 ),
pointer_default( unique )
]
interface IClusCfgPollingCallbackInfo : IUnknown
{
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// GetCallback(
// [ out ] IClusCfgPollingCallback ** ppiccpcOut
// )
//
// Description:
// Get a pointer to the polling callback object.
//
// Parameters:
// piccpcOut
// Pointer to the polling callback object.
//
// Return Values:
// S_OK
// The call succeeded.
//
// other HRESULTs
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
GetCallback(
[ out ] IClusCfgPollingCallback ** ppiccpcOut
);
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// SetPollingMode(
// [ in ] BOOL fPollingModeIn
// )
//
// Description:
// Set the polling mode of the callback.
//
// Parameters:
// fPollingModeIn
// If true do polling, if false do not do polling.
//
// Return Values:
// S_OK
// The call succeeded.
//
// other HRESULTs
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
SetPollingMode(
[ in ] BOOL fPollingModeIn
);
}; //*** interface IClusCfgPollingCallbackInfo
//****************************************************************************
//++
//
// interface IExtendObjectManager
//
// Description:
// TODO: gpease 21-JUL-2000
// Write a description.
//
//--
//****************************************************************************
[
object,
uuid( ca7bb0b9-700c-4dc5-991e-75f9e65ee975 ),
local,
pointer_default( unique )
]
interface
IExtendObjectManager : IUnknown
{
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// IExtendObjectManager::FindObject(
// [ in ] OBJECTCOOKIE cookieIn
// , [ in ] REFCLSID rclsidTypeIn
// , [ in ] LPCWSTR pcszNameIn
// , [ out ] LPUNKNOWN * ppunkOut
// )
//
// Description:
// Lookups and retrieves information about an object that has the
// type "dmtIn" and has the name "pcszName". It will return an
// interface for the format specified by "dmfIn".
//
// Arguments:
// cookieIn
// Cookie that represents this object in the Object Manager.
//
// dmtIn
// The type of the object to find.
//
// pcszName
// The name of the object to find.
//
// ppunkOut
// The requested data. NULL in indicates no data returned.
//
// Return Values:
// S_OK
// Success. Data format initialized and ready.
//
// S_FALSE
// Success. But the data format does not want to be persistent.
// This will cause the Object Manager to generate a new object
// everytime.
//
// E_PENDING
// The interface returned is valid, but the data is not available
// yet. To indicate that the data is ready, send a notification
// updating the status of the cookie (cookieIn).
//
// other HRESULTs.
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
FindObject (
[ in ] OBJECTCOOKIE cookieIn
, [ in ] REFCLSID rclsidTypeIn
, [ in, pointer_default( unique ) ] LPCWSTR pcszNameIn
, [ out ] LPUNKNOWN * ppunkOut
);
}; // interface IExtendObjectManager
//****************************************************************************
//++
//
// interface IClusCfgResTypeServicesInitialize
//
// Description:
// This interface is used to initialize the resource type services component.
//
//--
//****************************************************************************
[
object,
uuid( 6E109698-DFC4-4471-ACE1-0414931B3BB3 ),
pointer_default( unique )
]
interface IClusCfgResTypeServicesInitialize : IUnknown
{
//////////////////////////////////////////////////////////////////////////////
//++
//
// IClusCfgResTypeServicesInitialize::SetParameters(
// [ in ] IClusCfgClusterInfo * pccciIn
// )
//
// Description:
// Set the parameters required by this component.
//
// Arguments:
// pccciIn
// Pointer to an interface that provides information about the cluster
// being configured.
//
// Return Value:
// S_OK
// If the call succeeded
//
// Other HRESULTs
// If the call failed.
//
//--
//////////////////////////////////////////////////////////////////////////////
HRESULT
SetParameters(
[ in ] IClusCfgClusterInfo * pccciIn
);
}; //*** interface IClusCfgResTypeServicesInitialize
//****************************************************************************
//++
//
// interface IClusCfgSetCredentials
//
//
//--
//****************************************************************************
[
object,
uuid( 58E6E5B9-4788-4d9a-8255-1E274E5DCCB0 ),
pointer_default( unique )
]
interface IClusCfgSetCredentials : IUnknown
{
HRESULT
SetDomainCredentials(
[ in, pointer_default( unique ) ] LPCWSTR pszCredentials
);
} //*** IClusCfgSetCredentials
//****************************************************************************
//++
//
// interface IClusCfgVerify
//
// Description:
// This interface is used to verify the connection to the server.
//
//--
//****************************************************************************
[
object,
uuid( D47BBEEC-2286-4514-AA90-7E88BD0FE543 ),
pointer_default( unique )
]
interface IClusCfgVerify : IUnknown
{
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// VerifyCredentials(
// [ in ] LPCWSTR pcszUserIn,
// [ in ] LPCWSTR pcszDomainIn,
// [ in ] LPCWSTR pcszPasswordIn
// )
//
// Description:
// Validate the credentials.
//
// Parameters:
// pcszUserIn
// The user name.
//
// pcszDomainIn
// The domain name.
//
// pcszPasswordIn
// The user's password.
//
// Return Values:
// S_OK
// The credentials are valid.
//
// other HRESULTs
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
VerifyCredentials(
[ in, pointer_default( unique ) ] LPCWSTR pcszUserIn,
[ in, pointer_default( unique ) ] LPCWSTR pcszDomainIn,
[ in, pointer_default( unique ) ] LPCWSTR pcszPasswordIn
);
///////////////////////////////////////////////////////////////////////////
//
// HRESULT
// VerifyConnectionToCluster(
// LPCWSTR pcszClusterNameIn
// )
//
// Description:
// The client passes the connection name to the created server object.
// The server object will then verify that the client connected to
// the CLUSTER is was supposed to. We have to do this because the
// currently network situation can lead to unpredictable connections.
//
// Arguments:
// pcszClusterNameIn
// This is the FDQN for the cluster we are looking for.
//
// Return Values:
// S_OK
// The call succeeded and the client did connect to the correct
// node.
//
// S_FALSE
// The call succeeded but the client connected to a different node.
//
// other failure HRESULTs
// The call failed.
//
///////////////////////////////////////////////////////////////////////////
HRESULT
VerifyConnectionToCluster(
[ in, pointer_default( unique ) ] LPCWSTR pcszClusterNameIn
);
///////////////////////////////////////////////////////////////////////////
//
// HRESULT
// VerifyConnectionToNode(
// LPCWSTR pcszNodeNameIn
// )
//
// Description:
// The client passes the connection name to the created server object.
// The server object will then verify that the client connected to
// the NODE is was supposed to. We have to do this because the
// currently network situation can lead to unpredictable connections.
//
// Arguments:
// pcszNodeNameIn
// This is the FDQN for the node we are looking for.
//
// Return Values:
// S_OK
// The call succeeded and the client did connect to the correct
// node.
//
// S_FALSE
// The call succeeded but the client connected to a different node.
//
// other failure HRESULTs
// The call failed.
//
///////////////////////////////////////////////////////////////////////////
HRESULT
VerifyConnectionToNode(
[ in, pointer_default( unique ) ] LPCWSTR pcszNodeNameIn
);
} //*** IClusCfgVerify
//****************************************************************************
//++
//
// interface IClusCfgClusterConnection
//
// Description:
// This interface is used for managing cluster connections.
//
//--
//****************************************************************************
[
object,
uuid( CE6EF90C-3602-41e7-95BD-AAFD37A676DF ),
pointer_default( unique )
]
interface IClusCfgClusterConnection : IUnknown
{
///////////////////////////////////////////////////////////////////////////
//
// HRESULT
// OpenConnection(
// LPCWSTR pcszClusterNameIn
// )
//
// Description:
//
// Arguments:
// pcszClusterNameIn
// This is the FDQN for the server we are looking for. This can
// be a node or cluster name.
//
// Return Values:
// S_OK
// The call succeeded.
//
// other failure HRESULTs
// The call failed.
//
///////////////////////////////////////////////////////////////////////////
HRESULT
OpenConnection(
[ in, pointer_default( unique ) ] LPCWSTR pcszClusterNameIn
);
} //*** IClusCfgClusterConnection
//****************************************************************************
//++
//
// interface IClusCfgBaseCluster
//
// Description:
// The IClusCfgBaseCluster interface provides the functions
// required to form a minimal cluster on a computer, join an existing
// cluster, upgrade a node or cleanup a node.
//
//--
//****************************************************************************
[
object,
uuid( A8A5C613-2518-47f5-96CA-CAFA7FFBAF68 ),
async_uuid( A8A5C614-2518-47f5-96CA-CAFA7FFBAF68 ),
pointer_default( unique )
]
interface IClusCfgBaseCluster : IUnknown
{
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// SetCreate(
// [ in, string ] const WCHAR * pcszClusterNameIn
// , [ in, string ] const WCHAR * pcszClusterBindingStringIn
// , [ in ] IClusCfgCredentials * pcccServiceAccountIn
// , [ in, string ] const WCHAR * pcszClusterAccountPwdIn
// , [ in, string ] const WCHAR * pcszClusterAccountDomainIn
// , [ in ] const DWORD dwClusterIPAddressIn
// , [ in ] const DWORD dwClusterIPSubnetMaskIn
// , [ in, string ] const WCHAR * pcszClusterIPNetworkIn
// )
//
// Description:
// Indicate that a cluster is to be created on this computer. This
// cluster has only three core resources, the network name resource,
// the IP address resource and the Local Quorum resource.
//
// Parameters:
// pcszClusterNameIn
// Name of the cluster to be formed.
//
// pcszClusterBindingStringIn
// pcccServiceAccountIn
// Information about the account to be used as the cluster service
// account.
//
// dwClusterIPAddressIn
// dwClusterIPSubnetMaskIn
// pcszClusterIPNetworkIn
// Information about the cluster IP address.
//
// Return Values:
// S_OK
// The call succeeded.
//
// other HRESULTs
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
SetCreate(
[ in, string ] const WCHAR * pcszClusterNameIn
, [ in, string ] const WCHAR * pcszClusterBindingStringIn
, [ in ] IClusCfgCredentials * pcccServiceAccountIn
, [ in ] const DWORD dwClusterIPAddressIn
, [ in ] const DWORD dwClusterIPSubnetMaskIn
, [ in, string ] const WCHAR * pcszClusterIPNetworkIn
);
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// SetAdd(
// [ in, string ] const WCHAR * pcszClusterNameIn
// , [ in, string ] const WCHAR * pcszClusterBindingStringIn
// , [ in ] IClusCfgCredentials * pcccServiceAccountIn
// )
//
// Description:
// Indicate that this computer is to be added to a cluster.
//
// Parameters:
// pcszClusterNameIn
// Name of the cluster to join.
//
// pcszClusterBindingStringIn
// pcccServiceAccountIn
// Information about the account to be used as the cluster service
// account.
//
// Return Values:
// S_OK
// The call succeeded.
//
// other HRESULTs
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
SetAdd(
[ in, string ] const WCHAR * pcszClusterNameIn
, [ in, string ] const WCHAR * pcszClusterBindingStringIn
, [ in ] IClusCfgCredentials * pcccServiceAccountIn
);
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// SetCleanup( void )
//
// Description:
// Indicate that this node needs to be cleaned up. This method is
// called after the node has been evicted from a cluster to clean up
// the state left over from its erstwhile cluster membership. This
// method has to be called before the node can be a part of a cluster
// again. Note, the ClusSvc service should not be running when this
// action is committed.
//
// Parameters:
// None.
//
// Return Values:
// S_OK
// The call succeeded.
//
// other HRESULTs
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
SetCleanup( void );
//
// MUSTDO: 04-APR-2000 VVasu
//
// Declare the SetUpgrade method here.
//
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// Commit( void )
//
// Description:
// This function actually performs the action indicated by a previous
// Setxxx call.
//
// Parameters:
// None.
//
// Return Values:
// S_OK
// The call succeeded.
//
// E_FAIL
// If this commit has already been performed.
//
// E_INVALIDARG
// If no action has been set using a SetXXX call.
//
// other HRESULTs
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
Commit( void );
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// Rollback( void )
//
// Description:
// This function rolls back the action performed by a commit call.
//
// Parameters:
// None.
//
// Return Values:
// S_OK
// The call succeeded.
//
// other HRESULTs
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
Rollback( void );
}; //*** interface IClusCfgBaseCluster
//****************************************************************************
//++
//
// interface IClusCfgClusterInfoEx
//
// Description:
// Additional information about a cluster not provided by IClusCfgClusterInfo.
//
//--
//****************************************************************************
[
object,
uuid( 30C3CFDC-CE08-4011-B2B4-861387EB5111 ),
async_uuid( B6FFFF9D-4C21-4397-A71D-C42AED2C7C39 ),
pointer_default( unique )
]
interface IClusCfgClusterInfoEx: IUnknown
{
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// CheckJoiningNodeVersion(
// [ in ] DWORD dwNodeHighestVersionIn
// , [ in ] DWORD dwNodeLowestVersionIn
// )
//
// Description:
// Check a joining node's version information against that of nodes
// already in the cluster, and provide the version required by the cluster.
//
// Parameters:
// dwNodeHighestVersionIn
// dwNodeLowestVersionIn
// The node's version information, obtained from
// IClusCfgNodeInfo::GetClusterVersion.
//
// Return Values:
// S_OK -- The node is compatible with the cluster.
//
// HRESULT_FROM_WIN32( ERROR_CLUSTER_INCOMPATIBLE_VERSIONS )
// The node is not compatible with the cluster.
//
// Other failures are possible.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
CheckJoiningNodeVersion(
[ in ] DWORD dwNodeHighestVersionIn
, [ in ] DWORD dwNodeLowestVersionIn
);
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// GetNodeNames(
// [ out, ref ] long * pnCountOut
// , [ out, size_is( , *pnCountOut ) ] BSTR ** prgbstrNodeNamesOut
// )
//
// Description:
// Get the names of the nodes already in a cluster.
//
// Parameters:
// pnCountOut
// On success, *pnCountOut returns the number of nodes in the cluster.
//
// prgbstrNodeNamesOut
// On success, an array of BSTRs containing the node names.
// The caller must free each BSTR with SysFreeString, and free
// the array with CoTaskMemFree.
//
// Return Values:
// S_OK
// The out parameters contain valid information and the caller
// must free the array and the BSTRs it contains.
//
// E_OUTOFMEMORY, and other failures are possible.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
GetNodeNames(
[ out, ref ] long * pnCountOut
, [ out, size_is( , *pnCountOut ) ] BSTR ** prgbstrNodeNamesOut
);
}; //*** interface IClusCfgClusterInfoEx