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.
 
 
 
 
 
 

4672 lines
144 KiB

//////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2000-2002 Microsoft Corporation
//
// Module Name:
// ClusCfgServer.idl
//
// Description:
// This file is the IDL file for the IClusCfgServer interface of the
// Cluster Setup application.
//
// The IClusCfgServer interface provides the functions required to gather
// information about storage devices, networks, the operating
// system, etc. on a computer. It also has functions to form a cluster
// on this computer, to add this node to a cluster, to remove this node
// from a cluster, etc.
//
//////////////////////////////////////////////////////////////////////////////
// Comments for generated files
cpp_quote( "//////////////////////////////////////////////////////////////////////////////" )
cpp_quote( "//" )
cpp_quote( "// Copyright (c) 2000-2001 Microsoft Corporation" )
cpp_quote( "//" )
cpp_quote( "// Remarks:" )
cpp_quote( "// Generated file. See file ClusCfgServer.idl for more details." )
cpp_quote( "//" )
cpp_quote( "//////////////////////////////////////////////////////////////////////////////" )
//////////////////////////////////////////////////////////////////////////////
// Imported Files
//////////////////////////////////////////////////////////////////////////////
// For IUnknown
import "unknwn.idl";
////////////////////////////////////////////////////////////////////////////
// Forward Declarations
//////////////////////////////////////////////////////////////////////////////
interface IClusCfgNodeInfo;
interface IEnumClusCfgManagedResources;
interface IClusCfgManagedResourceInfo;
interface IEnumClusCfgNetworks;
interface IEnumClusCfgPartitions;
interface IClusCfgPartitionInfo;
interface IEnumClusCfgIPAddresses;
interface IClusCfgIPAddressInfo;
interface IClusCfgNetworkInfo;
interface IClusCfgClusterInfo;
interface IClusCfgInitialize;
interface IClusCfgCallback;
interface IClusCfgCredentials;
interface IClusCfgCapabilities;
interface IClusCfgManagedResourceCfg;
interface IClusCfgResourcePreCreate;
interface IClusCfgResourceCreate;
interface IClusCfgResourcePostCreate;
interface IClusCfgGroupCfg;
interface IClusCfgResourceTypeInfo;
interface IClusCfgResourceTypeCreate;
interface IClusCfgMemberSetChangeListener;
interface IClusCfgEvictCleanup;
interface IClusCfgManagedResourceData;
interface IClusCfgVerifyQuorum;
//////////////////////////////////////////////////////////////////////////////
// Type Definitions
//////////////////////////////////////////////////////////////////////////////
//
// This enumeration is used to indicate the differetnt usage
// states of a drive letter.
//
typedef enum
{
dluUNKNOWN = 0,
dluNO_ROOT_DIRECTORY,
dluREMOVABLE_DISK,
dluFIXED_DISK,
dluNETWORK_DRIVE,
dluCOMPACT_DISC,
dluRAM_DISK,
dluSYSTEM,
dluUNUSED,
//
// Disks that are on a system bus will have a usage enum that starts from here.
//
dluSTART_OF_SYSTEM_BUS = 50,
dluNO_ROOT_DIRECTORY_SYSTEM_BUS,
dluREMOVABLE_DISK_SYSTEM_BUS,
dluFIXED_DISK_SYSTEM_BUS,
dluNETWORK_DRIVE_SYSTEM_BUS,
dluCOMPACT_DISC_SYSTEM_BUS,
dluRAM_DISK_SYSTEM_BUS,
dluSYSTEM_SYSTEM_BUS,
dluUNUSED_SYSTEM_BUS,
dluMAX
} EDriveLetterUsage;
typedef struct _DRIVELETTERMAPPING
{
EDriveLetterUsage dluDrives[ 26 ];
} SDriveLetterMapping;
//
// This enumeration is used to indicate the mode of the ClusCfgServer commit operation.
//
typedef enum
{
cmUNKNOWN = 0,
cmCREATE_CLUSTER,
cmADD_NODE_TO_CLUSTER,
cmCLEANUP_NODE_AFTER_EVICT,
cmMAX
} ECommitMode;
typedef
[
uuid( FFCF84AD-5892-4f4c-8C22-ACE041D6ACC2 ),
helpstring( "The reason that Cleanup was called." )
]
enum EClusCfgCleanupReason {
[ helpstring( "The operation completed successfully" ) ] crSUCCESS = 0,
[ helpstring( "The operation was cancelled" ) ] crCANCELLED = 1,
[ helpstring( "The operation encountered an error and was terminated" ) ] crERROR = 2
} EClusCfgCleanupReason;
typedef
[
uuid( 1DAF9692-6662-43b1-AD45-D50F7849B0CD ),
helpstring( "Resource dependency flags" )
]
enum EDependencyFlags
{
[ helpstring( "Unknown access" ) ] dfUNKNOWN = 0,
[ helpstring( "Shared access resource" ) ] dfSHARED = 1,
[ helpstring( "Exclusive access resource" ) ] dfEXCLUSIVE = 2
} EDependencyFlags;
//////////////////////////////////////////////////////////////////////////////
// Constant Definitions
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
// Interface Definitions
//////////////////////////////////////////////////////////////////////////////
//****************************************************************************
//++
//
// interface IClusCfgNodeInfo
//
// Description:
// This interface contains information about the node configuration.
//
//--
//****************************************************************************
[
object,
uuid( E4B5FA15-DD07-439e-A623-8823524E3D19 ),
async_uuid( 4F3BB40B-DF27-40a0-B31A-BA18324CEB9D ),
pointer_default( unique )
]
interface IClusCfgNodeInfo : IUnknown
{
//
// Name
//
//////////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// GetName(
// [ out ] BSTR * pbstrNameOut
// )
//
// Description:
// Retrieves the node's fully qualified domain name. e.g.
// cluster1.ntdev.microsoft.com.
//
// Parameter:
// pbstrNameOut
// Pointer to the name of the node. This should be freed by the caller
// by calling SysFreeString( ).
//
// Return Values:
// S_OK
// The call succeeded.
//
// E_OUTOFMEMORY
// Out of memory.
//
// other HRESULTs
// The call failed.
//
//////////////////////////////////////////////////////////////////////////////
HRESULT
GetName( [ out ] BSTR * pbstrNameOut );
//////////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// SetName(
// [ in ] LPCWSTR pcszNameIn
// )
//
// Description:
// Stores the new name for the node. This does not take effect until after
// the changes have been commited. This is stubbed out for future
// functionality.
//
// Parameter:
// pcszNameIn
// The new name for the node.
//
// Return Values:
// E_NOTIMPL
// The call is not implemented.
//
//////////////////////////////////////////////////////////////////////////////
HRESULT
SetName( [ in, pointer_default( unique ) ] LPCWSTR pcszNameIn );
//
// Membership?
//
//////////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// IsMemberOfCluster( void )
//
// Description:
// Call this to determine if the node is part of a cluster.
//
// Return Values:
// S_OK
// Call succeeded and the result is "TRUE."
//
// S_FALSE
// Call succeeded and the result is "FALSE."
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////////
HRESULT
IsMemberOfCluster( void );
//////////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// GetClusterConfigInfo(
// [ out ] IClusCfgClusterInfo ** ppClusCfgClusterInfoOut
// )
//
// Description:
// If it is a member, use this method to obtain an interface to
// IClusCfgClusterInfo.
//
// Parameter:
// ppClusCfgClusterInfoOut
// Pointer to the IClusCfgClusterInfo interface.
//
// Return Values:
// S_OK
// The call succeeded.
//
// other HRESULTs
// The call failed.
//
//////////////////////////////////////////////////////////////////////////////
HRESULT
GetClusterConfigInfo( [ out ] IClusCfgClusterInfo ** ppClusCfgClusterInfoOut );
//////////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// GetOSVersion(
// [ out ] DWORD * pdwMajorVersionOut,
// [ out ] DWORD * pdwMinorVersionOut,
// [ out ] WORD * pwSuiteMaskOut,
// [ out ] BYTE * pbProductTypeOut,
// [ out ] BSTR * pbstrCSDVersionOut
// )
//
//////////////////////////////////////////////////////////////////////////////
HRESULT
GetOSVersion(
[ out ] DWORD * pdwMajorVersionOut,
[ out ] DWORD * pdwMinorVersionOut,
[ out ] WORD * pwSuiteMaskOut,
[ out ] BYTE * pbProductTypeOut,
[ out ] BSTR * pbstrCSDVersionOut
);
//////////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// GetClusterVersion(
// [ out ] DWORD * pdwNodeHighestVersion,
// [ out ] DWORD * pdwNodeLowestVersion
// )
//
// Description:
// Retrieves the version of the cluster.
//
// Parameters:
// pdwNodeHighestVersion
// The highest version in the cluster.
//
// pdwNodeLowestVersion
// The lowest version in the cluster.
//
// Return Values:
// S_OK
// The call succeeded.
//
// other HRESULTs
// The call failed.
//
//////////////////////////////////////////////////////////////////////////////
HRESULT
GetClusterVersion(
[ out ] DWORD * pdwNodeHighestVersion,
[ out ] DWORD * pdwNodeLowestVersion
);
//////////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// GetDriveLetterMappings(
// [ out ] SDriveLetterMapping dlmDriveLetterUsageOut
// )
//
// Description:
// Retrieves the drive letter mappings on the node.
//
// Parameter:
// rgDriveLetterUsage
// An array of flags representing A: thru Z: (26) drive mappings to
// the drives. See SDriveLetterMapping for flag values.
//
// Return Values:
// S_OK
// Success.
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
GetDriveLetterMappings( [ out ] SDriveLetterMapping * pdlmDriveLetterUsageOut );
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// GetMaxNodeCount(
// [ out ] DWORD * pcMaxNodesOut
// )
//
// Description:
// Returns the maximun number of nodes for this node's product
// suite type.
//
// Notes:
//
// Parameter:
// pcMaxNodesOut
// The maximum number of nodes allowed by this node's product
// suite type.
//
// Return Value:
// S_OK
// Success.
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
GetMaxNodeCount(
[ out ] DWORD * pcMaxNodesOut
);
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// GetProcessorInfo(
// [ out ] WORD * pwProcessorArchitectureOut
// , [ out ] WORD * pwProcessorLevelOut
// )
//
// Description:
// Returns the processor information for this node.
//
// Notes:
//
// Parameter:
// pwProcessorArchitectureOut
// The processor architecture.
//
// pwProcessorLevelOut
// The processor level.
//
// Return Value:
// S_OK
// Success.
//
// other HRESULT
// The call failed.
//
// Remarks:
// See SYSTEM_INFO in MSDN and/or the Platform SDK for more
// information.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
GetProcessorInfo(
[ out ] WORD * pwProcessorArchitectureOut
, [ out ] WORD * pwProcessorLevelOut
);
}; //*** interface IClusCfgNodeInfo
//****************************************************************************
//++
//
// interface IEnumClusCfgManagedResources
//
// Description:
// This interface enumerates all resources on this computer that the
// cluster service can manage.
//
//--
//****************************************************************************
[
object,
uuid( 7DBE11EB-A5DF-4534-ABF6-8BAC7B53FC95 ),
async_uuid( B138483F-9695-4fa6-A98F-0DE2FB355449 ),
pointer_default( unique )
]
interface IEnumClusCfgManagedResources : IUnknown
{
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// Next(
// [ in ] ULONG cNumberRequestedIn,
// [ out, size_is( cNumberRequestedIn ), length_is(*pcNumberFetchedOut) ] IClusCfgManagedResourceInfo ** rgpManagedResourceInfoOut,
// [ out ] ULONG * pcNumberFetchedOut
// );
//
// Description:
// Retrieves the next cNumberRequestedIn items in the enumeration sequence.
// If there are fewer than the requested number of elements left in the
// sequence, it retrieves the remaining elements. The number of elements
// actually retrieved is returned through pcNumberFetchedOut (unless the
// caller passed in NULL for that parameter).
//
// Parameters:
// cNumberRequestedIn
// number of elements being requested.
//
// rgpManagedResourceInfoOut
// Array of size cNumberRequestedIn (or larger) of the elements of interest.
// The type of this parameter depends on the item being enumerated.
//
// pcNumberFetchedOut
// Pointer to the number of elements actually supplied in
// rgpManagedResourceInfoOut. Caller can pass in NULL if cNumberRequestedIn
// is one.
//
// Return Values:
// S_OK
// The number of elements supplied is cNumberRequestedIn
//
// S_FALSE
// The number of elements supplied is not cNumberRequestedIn
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
Next(
[ in ] ULONG cNumberRequestedIn,
[ out, size_is( cNumberRequestedIn ), length_is(*pcNumberFetchedOut) ] IClusCfgManagedResourceInfo ** rgpManagedResourceInfoOut,
[ out ] ULONG * pcNumberFetchedOut
);
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// Reset( void );
//
// Description:
// Reset the enumeration sequence to the beginning.
//
// Return Value:
// S_OK
// Success.
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
Reset( void );
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// Skip(
// [ in ] ULONG cNumberToSkip
// );
//
// Description:
// Skips over the next specified number of elements in the enumeration sequence.
//
// Parameter:
// cNumberToSkip
// The number of elements to be skipped.
//
// Return Value:
// S_OK
// The number of elements skipped is cNumberToSkip.
//
// S_FALSE
// Success, but you're past the last element.
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
Skip( [ in ] ULONG cNumberToSkip );
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// Clone(
// [ out ] IEnumClusCfgManagedResources ** ppEnumManagedResources
// );
//
// Description:
// Creates another enumerator that contains the same enumeration state
// as the current one. Using this function, a client can record a
// particular point in the enumeration sequence, and then return to
// that point at a later time. The new enumerator supports the same
// interface as the original one.
//
// Return Values:
// E_INVALIDARG
// ppEnumManagedResources is invalid.
//
// E_OUTOFMEMORY
// Out of memory.
//
// E_UNEXPECTED
// Unknown error (it's in the EnumXXXX docs).
//
//////////////////////////////////////////////////////////////////////////
HRESULT
Clone( [ out ] IEnumClusCfgManagedResources ** ppEnumManagedResourcesOut );
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// Count(
// [ out, ref ] DWORD * pnCountOut
// );
//
// Description:
// Returns the size (possibly zero) of the enumerator's collection.
//
// Return Values:
// E_POINTER
// pnCountOut was null.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
Count( [ out, ref ] DWORD * pnCountOut );
}; //*** interface IEnumClusCfgManagedResources
//****************************************************************************
//++
//
// interface IEnumClusCfgNetworks
//
// Description:
// This interface enumerates the networks on this computer.
//
//--
//****************************************************************************
[
object,
uuid( CF3FAED8-1322-4bcb-9923-B5B745A69E36 ),
async_uuid( F56B9B0D-E7B8-49ec-A843-5475076B947D ),
pointer_default( unique )
]
interface IEnumClusCfgNetworks : IUnknown
{
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// Next(
// [ in ] ULONG cNumberRequestedIn,
// [ out, size_is( cNumberRequestedIn ), length_is(*pcNumberFetchedOut) ] IClusCfgNetworkInfo ** rgpNetworkInfoOut,
// [ out ] ULONG * pcNumberFetchedOut
// );
//
// Description:
// Retrieves the next cNumberRequestedIn items in the enumeration sequence.
// If there are fewer than the requested number of elements left in the
// sequence, it retrieves the remaining elements. The number of elements
// actually retrieved is returned through pcNumberFetchedOut (unless the
// caller passed in NULL for that parameter).
//
// Parameters:
// cNumberRequestedIn
// number of elements being requested.
//
// rgpNetworkInfoOut
// Array of size cNumberRequestedIn (or larger) of the elements of interest.
// The type of this parameter depends on the item being enumerated.
//
// pcNumberFetchedOut
// Pointer to the number of elements actually supplied in
// rgpNetworkInfoOut. Caller can pass in NULL if cNumberRequestedIn
// is one.
//
// Return Values:
// S_OK
// The number of elements supplied is cNumberRequestedIn
//
// S_FALSE
// The number of elements supplied is not cNumberRequestedIn.
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
Next(
[ in ] ULONG cNumberRequestedIn,
[ out, size_is( cNumberRequestedIn ), length_is(*pcNumberFetchedOut) ] IClusCfgNetworkInfo ** rgpNetworkInfoOut,
[ out ] ULONG * pcNumberFetchedOut
);
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// Skip(
// [ in ] ULONG cNumberToSkip
// );
//
// Description:
// Skips over the next specified number of elements in the enumeration sequence.
//
// Parameter:
// cNumberToSkip
// The number of elements to be skipped.
//
// Return Value:
// S_OK
// The number of elements skipped is cNumberToSkip.
//
// S_FALSE
// Success, but you've past the last element.
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
Skip( [ in ] ULONG cNumberToSkipIn );
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// Reset( void );
//
// Description:
// Reset the enumeration sequence to the beginning.
//
// Return Value:
// S_OK
// Success.
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
Reset( void );
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// Clone(
// [ out ] IEnumClusCfgNetworks ** ppEnumNetworksOut
// );
//
// Description:
// Creates another enumerator that contains the same enumeration state
// as the current one. Using this function, a client can record a
// particular point in the enumeration sequence, and then return to
// that point at a later time. The new enumerator supports the same
// interface as the original one.
//
// Parameter:
// ppEnumNetworksOut
// Address of IEnumClusCfgManagedResources * pointer variable that receives
// the interface pointer to the enumeration object. If the method is
// unsuccessful, the value of this output variable is undefined.
//
// Return Values:
// E_INVALIDARG
// ppEnumNetworksOut is invalid.
//
// E_OUTOFMEMORY
// Out of memory.
//
// E_UNEXPECTED
// Unknown error (it's in the EnumXXXX docs).
//
//////////////////////////////////////////////////////////////////////////
HRESULT
Clone( [ out ] IEnumClusCfgNetworks ** ppEnumNetworksOut );
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// Count(
// [ out, ref ] DWORD * pnCountOut
// );
//
// Description:
// Returns the size (possibly zero) of the enumerator's collection.
//
// Return Values:
// E_POINTER
// pnCountOut was null.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
Count( [ out, ref ] DWORD * pnCountOut );
}; //*** interface IEnumClusCfgNetworks
//****************************************************************************
//++
//
// interface IClusCfgManagedResourceInfo
//
// Description:
// This interface encapsulates a manageable resource on this computer.
//
//--
//****************************************************************************
[
object,
uuid( 8389D687-DF99-442b-81AB-58BA5B029688 ),
async_uuid( 0560D153-892F-4bf5-87B0-06AF2803955C ),
pointer_default( unique )
]
interface IClusCfgManagedResourceInfo : IUnknown
{
//
// UID
//
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// GetUID(
// [ out ] BSTR * pbstrUIDOut
// )
//
// Description:
// Retrieve the Unique IDentifier for this resource. This is not a Universally
// Unique IDentifier (UUID or GUID). This indentifer should match identifiers
// that can be generated on other nodes that can see this resource from a shared
// bus (such as a SCSI disk).
//
// Parameters:
// pbstrUIDOut
// Pointer to the UID string. pbstrUIDOut should be freed by the caller
// by calling SysFreeString( ).
//
// Return Values:
// S_OK
// Success.
//
// E_OUTOFMEMORY
// Out of memory.
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
GetUID( [ out ] BSTR * pbstrUIDOut );
//
// Name
//
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// GetName(
// [ out ] BSTR * pbstrNameOut
// )
//
// Description:
// Retrieves a "user friendly" name of the resource.
//
// Parameter:
// pbstrNameOut
// Pointer to resource name. This should be freed by the caller by calling
// SysFreeString( ).
//
// Return Values:
// S_OK
// Success.
//
// E_OUTOFMEMORY
// Out of memory.
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
GetName( [ out ] BSTR * pbstrNameOut );
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// SetName(
// [ in ] LPCWSTR pcszNameIn
// )
//
// Description:
// Stores a new name for the resource to be set when the cluster
// configuration is commited.
//
// Parameter:
// pcszNameIn
// The name of the user wants to assigned the resource.
//
// Return Value:
// S_OK
// Success.
//
// E_OUTOFMEMORY
// Out of memory.
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
SetName( [ in, pointer_default( unique ) ] LPCWSTR pcszNameIn );
//
// Managed by cluster?
//
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// IsManaged( void )
//
// Description:
// Call this to determine if the resource is/will be managed by the cluster.
//
// A managed device will always have a resource created for it in the
// cluster.
//
// Return Values:
// S_OK
// Call succeeded and the result is "TRUE."
//
// S_FALSE
// Call succeeded and the result is "FALSE."
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
IsManaged( void );
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// SetManaged(
// [ in ] BOOL fIsManagedIn
// )
//
// Description:
// Setting this flag will cause the resource to be configured as being managed
// by the cluster.
//
// Parameter:
// fIsManagedIn
// If TRUE, the resource will be marked as being managed by the cluster.
//
// Setting this to TRUE will cause a resource to be created for this device
// in the cluster. Setting this to FALSE will prevent a resource for for
// this device from being created in the cluster.
//
// Return Value:
// S_OK
// Success.
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
SetManaged( [ in ] BOOL fIsManagedIn );
//
// Quorum resource?
//
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// IsQuorumResource( void )
//
// Description:
// Call this to determine if the resource is/will be set as the quorum
// resource.
//
// Return Values:
// S_OK
// Call succeeded and the result is "TRUE."
//
// S_FALSE
// Call succeeded and the result is "FALSE."
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
IsQuorumResource( void );
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// SetQuorumResource(
// [ in ] BOOL fIsQuorumResourceIn
// )
//
// Description:
// Setting this flag will cause the resource to be configured as the
// quorum resource in the cluster.
//
// Parameter:
// fIsQuorumResourceIn
// If TRUE, the resource will be marked to be the quorum resource.
//
// Return Value:
// S_OK
// Success.
//
// HRESULT_FROM_WIN32( ERROR_NOT_QUORUM_CAPABLE )
// You tried to set a resource to be the quorum when the resource
// is not capable of being a quorum resource.
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
SetQuorumResource( [ in ] BOOL fIsQuorumResourceIn );
//
// Quorum Capable?
//
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// IsQuorumCapable( void )
//
// Description:
// Call this to determine if the resource is capable be set as the quorum
// resource.
//
// Return Values:
// S_OK
// Call succeeded and the result is "TRUE."
//
// S_FALSE
// Call succeeded and the result is "FALSE."
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
IsQuorumCapable( void );
//
// Set Quorum Capable
//
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// SetQuorumCapable(
// [ in ] BOOL fIsQuorumCapableIn
// )
//
// Description:
// Call this to set whether the resource is capable to be the quorum
// resource or not.
//
// Parameter:
// fSetQuorumCapableIn
// If TRUE, the resource will be marked as quorum capable.
//
// Return Values:
// S_OK
// Call succeeded.
// E_NOTIMPL
// The call is not implemented.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
SetQuorumCapable( [ in ] BOOL fIsQuorumCapableIn );
//
// Drive Letter Mapping
//
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// GetDriveLetterMappings(
// [ out ] SDriveLetterMapping dlmDriveLetterMappingsOut
// )
//
// Description:
// Retrieves the drive mappings for the resource (if any).
//
// Parameter:
// rgDriveLetterMappings
// An array of flags representing A: thru Z: (26) drive mappings to
// the resource. See SDriveLetterMapping for flag values.
//
// Return Values:
// S_OK
// Success.
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
GetDriveLetterMappings( [ out ] SDriveLetterMapping * pdlmDriveLetterMappingOut );
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// SetDriveLetterMappings(
// [ in ] SDriveLetterMapping dlmDriveLetterMappingIn
// )
//
// Description:
// Stores the drive mappings for the resource. The change will not take
// effect until the configuration has been committed.
//
// Parameter:
// rgDriveLetterMappings
// An array of flags representing A: thru Z: (26) drive mappings to
// the resource. See EDriveLetterUsage for flag values.
//
// Return Values:
// S_OK
// Success.
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
SetDriveLetterMappings( [ in ] SDriveLetterMapping dlmDriveLetterMappingIn );
//
// Manageable by the cluster?
//
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// IsManagedByDefault( void )
//
// Description:
// Call this to determine if the resource wants to be managed by default
// by the cluster.
//
// When doing a full configuration all devices that are
// managed by default will be have resources created for them
// in the cluster and will therefore be managed by the cluster.
// When doing a minimum configuration resources will not be created
// for any devices that want to be managed by default by the cluster.
//
// Return Values:
// S_OK
// Call succeeded and the result is "TRUE."
//
// S_FALSE
// Call succeeded and the result is "FALSE."
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
IsManagedByDefault( void );
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// SetManagedByDefault(
// [ in ] BOOL fIsManageableIn
// )
//
// Description:
// Setting this flag will cause the resource to be managed by default
// by the cluster.
//
// Parameter:
// fIsManagedByDefaultIn
// If TRUE, the resource will be marked as being managed by default
// by the cluster.
//
// Setting this to TRUE will cause a cluster resource to be created for
// this device by default when doing a full configuration. By
// setting this to FALSE the device will not have a resource created
// for it in the cluster by default.
//
// Return Value:
// S_OK
// Success.
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
SetManagedByDefault( [ in ] BOOL fIsManagedByDefaultIn );
}; //*** interface IClusCfgManagedResourceInfo
//****************************************************************************
//++
//
// interface IEnumClusCfgPartitions
//
// Description:
// This interface enumerates the partitions on a storage device that the
// cluster service can manage.
//
//--
//****************************************************************************
[
object,
uuid( 4440BB6A-B0AC-479d-B534-7265A31D6C55 ),
async_uuid( 4440BB6A-B0AC-479d-B534-7265A31D6C56 ),
pointer_default( unique )
]
interface IEnumClusCfgPartitions : IUnknown
{
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// Next(
// [ in ] ULONG cNumberRequestedIn,
// [ out, size_is( cNumberRequestedIn ), length_is(*pcNumberFetchedOut) ] IClusCfgPartitionInfo ** rgpPartitionInfoOut,
// [ out ] ULONG * pcNumberFetchedOut
// );
//
// Description:
// Retrieves the next cNumberRequestedIn items in the enumeration sequence.
// If there are fewer than the requested number of elements left in the
// sequence, it retrieves the remaining elements. The number of elements
// actually retrieved is returned through pcNumberFetchedOut (unless the
// caller passed in NULL for that parameter).
//
// Parameters:
// cNumberRequestedIn
// number of elements being requested.
//
// rgpPartitionInfoOut
// Array of size cNumberRequestedIn (or larger) of the elements of interest.
// The type of this parameter depends on the item being enumerated.
//
// pcNumberFetchedOut
// Pointer to the number of elements actually supplied in
// rgpPartitionInfoOut. Caller can pass in NULL if cNumberRequestedIn
// is one.
//
// Return Values:
// S_OK
// The number of elements supplied is cNumberRequestedIn
//
// S_FALSE
// The number of elements supplied is not cNumberRequestedIn
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
Next(
[ in ] ULONG cNumberRequestedIn,
[ out, size_is( cNumberRequestedIn ), length_is(*pcNumberFetchedOut) ] IClusCfgPartitionInfo ** rgpPartitionInfoOut,
[ out ] ULONG * pcNumberFetchedOut
);
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// Reset( void );
//
// Description:
// Reset the enumeration sequence to the beginning.
//
// Return Value:
// S_OK
// Success.
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
Reset( void );
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// Skip(
// [ in ] ULONG cNumberToSkip
// );
//
// Description:
// Skips over the next specified number of elements in the enumeration sequence.
//
// Parameter:
// cNumberToSkip
// The number of elements to be skipped.
//
// Return Value:
// S_OK
// The number of elements skipped is cNumberToSkip.
//
// S_FALSE
// Success, but you've past the last element.
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
Skip( [ in ] ULONG cNumberToSkip );
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// Clone(
// [ out ] IEnumClusCfgPartitions ** ppEnumPartitions
// );
//
// Description:
// Creates another enumerator that contains the same enumeration state
// as the current one. Using this function, a client can record a
// particular point in the enumeration sequence, and then return to
// that point at a later time. The new enumerator supports the same
// interface as the original one.
//
// Return Values:
// E_INVALIDARG
// ppEnumPartitions is invalid.
//
// E_OUTOFMEMORY
// Out of memory.
//
// E_UNEXPECTED
// Unknown error (it's in the EnumXXXX docs).
//
//////////////////////////////////////////////////////////////////////////
HRESULT
Clone( [ out ] IEnumClusCfgPartitions ** ppEnumPartitions );
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// Count(
// [ out, ref ] DWORD * pnCountOut
// );
//
// Description:
// Returns the size (possibly zero) of the enumerator's collection.
//
// Return Values:
// E_POINTER
// pnCountOut was null.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
Count( [ out, ref ] DWORD * pnCountOut );
}; //*** interface IEnumClusCfgPartitions
//****************************************************************************
//++
//
// interface IClusCfgPartitionInfo
//
// Description:
// This interface provides the partition info.
//
//--
//****************************************************************************
[
object,
uuid( EC1EBD9F-5866-4846-8952-EC36C3961EEE ),
async_uuid( EC1EBD9F-5866-4846-8952-EC36C3961EEF ),
pointer_default( unique )
]
interface IClusCfgPartitionInfo : IUnknown
{
//
// UID
//
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// GetUID(
// [ out ] BSTR * pbstrUIDOut
// )
//
// Description:
// Retrieve the "Unique IDentifier" for this partition. This is not a Universally
// Unique IDentifier (UUID or GUID). This indentifer should match identifiers
// that can be generated on other nodes, but must be unique for the partition
// the interface (NIC) is on.
//
// Parameters:
// pbstrUIDOut
// Pointer to the UID string. pbstrUIDOut should be freed by the caller
// by calling SysFreeString( ).
//
// Return Values:
// S_OK
// Success.
//
// E_OUTOFMEMORY
// Out of memory.
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
GetUID( [ out ] BSTR * pbstrUIDOut );
//
// Name
//
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// GetName(
// [ out ] BSTR * pbstrNameOut
// )
//
// Description:
// Retrieves a "user friendly" name of the interface.
//
// Parameter:
// pbstrNameOut
// Pointer to partition interface name. This should be freed by the caller
// by calling SysFreeString( ).
//
// Return Values:
// S_OK
// Success.
//
// E_OUTOFMEMORY
// Out of memory.
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
GetName( [ out ] BSTR * pbstrNameOut );
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// SetName(
// [ in ] LPCWSTR pcszNameIn
// )
//
// Description:
// Stores a new name of the partition interface to be set when the cluster
// configuration is commited.
//
// Parameter:
// pcszNameIn
// The name of the user wants to assigned the interface.
//
// Return Value:
// S_OK
// Success.
//
// E_OUTOFMEMORY
// Out of memory.
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
SetName( [ in, pointer_default( unique ) ] LPCWSTR pcszNameIn );
//
// Description
//
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// GetDescription(
// [ out ] BSTR * pbstrDescriptionOut
// )
//
// Description:
// Retrieves the description string for a partition interface.
//
// Parameter:
// pbstrDescription
// Pointer to the description of the partition. This should be freed
// by the caller by calling SysFreeString( ).
//
// Return Values:
// S_OK
// Success.
//
// E_OUTOFMEMORY
// Out of memory.
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
GetDescription( [ out ] BSTR * pbstrDescriptionOut );
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// SetDescription(
// [ in ] LPCWSTR pcszDescriptionIn
// )
//
// Description:
// Stores a new name of the partition interface to be set when the cluster
// configuration is commited.
//
// Parameter:
// pcszDescriptionIn
// The description the user wants to assign to the interface.
//
// Return Values:
// S_OK
// Success.
//
// E_OUTOFMEMORY
// Out of memory.
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
SetDescription(
[ in, pointer_default( unique ) ] LPCWSTR pcszDescriptionIn
);
//
// Drive Letter Mapping
//
//////////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// GetDriveLetterMappings(
// [ out ] SDriveLetterMapping dlmDriveLetterUsageOut
// )
//
// Description:
// Retrieves the drive letter mappings of the partition.
//
// Parameter:
// rgDriveLetterUsage
// An array of flags representing A: thru Z: (26) drive mappings to
// the disk. See SDriveLetterMapping for flag values.
//
// Return Values:
// S_OK
// Success.
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
GetDriveLetterMappings( [ out ] SDriveLetterMapping * pdlmDriveLetterUsageOut );
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// SetDriveLetterMappings(
// [ in ] SDriveLetterMapping dlmDriveLetterMappingIn
// )
//
// Description:
// Stores the drive mappings for the disk. The change will not take
// effect until the configuration has been committed.
//
// Parameter:
// rgDriveLetterMappings
// An array of flags representing A: thru Z: (26) drive mappings to
// the disk. See EDriveLetterUsage for flag values.
//
// Return Values:
// S_OK
// Success.
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
SetDriveLetterMappings( [ in ] SDriveLetterMapping dlmDriveLetterMappingIn );
//
// Partition Size
//
//////////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// GetSize(
// [ out ] ULONG * pcMegaBytes
// )
//
// Description:
// Retrieves the size of the partition in Megabytes.
//
// Parameter:
// pcMegaBytes
// Retrieves the partition size.
//
// Return Values:
// S_OK
// Success.
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
GetSize( [ out ] ULONG * pcMegaBytes );
}; //*** interface IClusCfgPartitionInfo
//****************************************************************************
//++
//
// interface IEnumClusCfgIPAddresses
//
// Description:
// This interface enumerates the IP addresses on this adapter.
//
//--
//****************************************************************************
[
object,
uuid( BD5F35BA-0BC0-455f-926D-C3D356419486 ),
async_uuid( BD5F35BA-0BC0-455f-926D-C3D356419487 ),
pointer_default( unique )
]
interface IEnumClusCfgIPAddresses : IUnknown
{
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// Next(
// [ in ] ULONG cNumberRequestedIn,
// [ out, size_is( cNumberRequestedIn ), length_is(*pcNumberFetchedOut) ] IClusCfgIPAddressInfo ** rgpIPAddressInfoOut,
// [ out ] ULONG * pcNumberFetchedOut
// );
//
// Description:
// Retrieves the next cNumberRequestedIn items in the enumeration sequence.
// If there are fewer than the requested number of elements left in the
// sequence, it retrieves the remaining elements. The number of elements
// actually retrieved is returned through pcNumberFetchedOut (unless the
// caller passed in NULL for that parameter).
//
// Parameters:
// cNumberRequestedIn
// number of elements being requested.
//
// rgpIPAddressInfoOut
// Array of size cNumberRequestedIn (or larger) of the elements of interest.
// The type of this parameter depends on the item being enumerated.
//
// pcNumberFetchedOut
// Pointer to the number of elements actually supplied in
// rgpIPAddressInfoOut. Caller can pass in NULL if cNumberRequestedIn
// is one.
//
// Return Values:
// S_OK
// The number of elements supplied is cNumberRequestedIn
//
// S_FALSE
// The number of elements supplied is not cNumberRequestedIn.
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
Next(
[ in ] ULONG cNumberRequestedIn,
[ out, size_is( cNumberRequestedIn ), length_is(*pcNumberFetchedOut) ] IClusCfgIPAddressInfo ** rgpIPAddressInfoOut,
[ out ] ULONG * pcNumberFetchedOut
);
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// Skip(
// [ in ] ULONG cNumberToSkip
// );
//
// Description:
// Skips over the next specified number of elements in the enumeration sequence.
//
// Parameter:
// cNumberToSkip
// The number of elements to be skipped.
//
// Return Value:
// S_OK
// The number of elements skipped is cNumberToSkip.
//
// S_FALSE
// Success, but you've past the last element.
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
Skip( [ in ] ULONG cNumberToSkipIn );
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// Reset( void );
//
// Description:
// Reset the enumeration sequence to the beginning.
//
// Return Value:
// S_OK
// Success.
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
Reset( void );
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// Clone(
// [ out ] IEnumClusCfgIPAddresses ** ppEnumIPAddressesOut
// );
//
// Description:
// Creates another enumerator that contains the same enumeration state
// as the current one. Using this function, a client can record a
// particular point in the enumeration sequence, and then return to
// that point at a later time. The new enumerator supports the same
// interface as the original one.
//
// Parameter:
// ppEnumIPAddressesOut
// Address of IEnumClusCfgManagedResources * pointer variable that receives
// the interface pointer to the enumeration object. If the method is
// unsuccessful, the value of this output variable is undefined.
//
// Return Values:
// E_INVALIDARG
// ppEnumIPAddressesOut is invalid.
//
// E_OUTOFMEMORY
// Out of memory.
//
// E_UNEXPECTED
// Unknown error (it's in the EnumXXXX docs).
//
//////////////////////////////////////////////////////////////////////////
HRESULT
Clone( [ out ] IEnumClusCfgIPAddresses ** ppEnumIPAddressesOut );
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// Count(
// [ out, ref ] DWORD * pnCountOut
// );
//
// Description:
// Returns the size (possibly zero) of the enumerator's collection.
//
// Return Values:
// E_POINTER
// pnCountOut was null.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
Count( [ out, ref ] DWORD * pnCountOut );
}; //*** interface IEnumClusCfgIPAddresses
//****************************************************************************
//++
//
// interface IClusCfgIPAddressInfo
//
// Description:
// This interface encapsulates the info about an IP address.
//
//--
//****************************************************************************
[
object,
uuid( AAEAF0A5-E310-4604-A55E-2F9DDC4157A8 ),
async_uuid( AAEAF0A5-E310-4604-A55E-2F9DDC4157A9 ),
pointer_default( unique )
]
interface IClusCfgIPAddressInfo : IUnknown
{
//
// UID
//
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// GetUID(
// [ out ] BSTR * pbstrUIDOut
// )
//
// Description:
// Retrieve the "Unique IDentifier" for this IP address. This is not a Universally
// Unique IDentifier (UUID or GUID). This indentifer should match identifiers
// that can be generated on other nodes, but must be unique for the network
// the interface (NIC) is on.
//
// Parameters:
// pbstrUIDOut
// Pointer to the UID string. pbstrUIDOut should be freed by the caller
// by calling SysFreeString( ).
//
// Return Values:
// S_OK
// Success.
//
// E_OUTOFMEMORY
// Out of memory.
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
GetUID( [ out ] BSTR * pbstrUIDOut );
//
// IP Address
//
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// GetIPAddress(
// [ out ] ULONG * pulDottedQuadOut
// )
//
// Description:
// Retrieves an IP Address for the network inteface.
//
// Paramater:
// pulDottedQuadOut
// The IP address of the interface in dotted quad format.
//
// Return Values:
// S_OK
// Success.
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
GetIPAddress( [ out ] ULONG * pulDottedQuadOut );
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// SetIPAddress(
// [ in ] ULONG ulDottedQuadIn
// )
//
// Description:
// Stores an IP Address of the network interface to be set when the cluster
// configuration is committed.
//
// Parameter:
// ulDottedQuadIn
// The IP address of the interface to be stored in dotted quad format.
//
// Return Values:
// S_OK
// Success.
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
SetIPAddress( [ in ] ULONG ulDottedQuadIn );
//
// Subnet Mask
//
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// GetSubnetMask(
// [ out ] ULONG * pulDottedQuadOut
// )
//
// Description:
// Retrieves a subnet mask for the network interface.
//
// Parameter:
// ulDottedQuadOut
// The subnet mask of the interface in dotted quad format.
//
// Return Value:
// S_OK
// Success.
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
GetSubnetMask( [ out ] ULONG * pulDottedQuadOut );
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// SetSubnetMask(
// [ in ] ULONG ulDottedQuadIn
// )
//
// Description:
// Stores a subnet mask for the network interface to be set when the cluster
// configuration is committed.
//
// Parameter:
// ulDottedQuadIn
// The subnet mask of the interface to be stored in dotted quad format.
//
// Return Values:
// S_OK
// Success.
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
SetSubnetMask( [ in ] ULONG ulDottedQuadIn );
}; //*** interface IClusCfgIPAddressInfo
//****************************************************************************
//++
//
// interface IClusCfgNetworkInfo
//
// Description:
// This interface enumerates the networks on this computer.
//
//--
//****************************************************************************
[
object,
uuid( 19FC7580-950A-44a6-966E-74B14B20918F ),
async_uuid( ED71FD2D-AD02-4dfc-B376-5FFA5F5A7C2C ),
pointer_default( unique )
]
interface IClusCfgNetworkInfo : IUnknown
{
//
// UID
//
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// GetUID(
// [ out ] BSTR * pbstrUIDOut
// )
//
// Description:
// Retrieve the "Unique IDentifier" for this network. This is not a Universally
// Unique IDentifier (UUID or GUID). This indentifer should match identifiers
// that can be generated on other nodes, but must be unique for the network
// the interface (NIC) is on.
//
// Parameters:
// pbstrUIDOut
// Pointer to the UID string. pbstrUIDOut should be freed by the caller
// by calling SysFreeString( ).
//
// Return Values:
// S_OK
// Success.
//
// E_OUTOFMEMORY
// Out of memory.
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
GetUID( [ out ] BSTR * pbstrUIDOut );
//
// Name
//
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// GetName(
// [ out ] BSTR * pbstrNameOut
// )
//
// Description:
// Retrieves a "user friendly" name of the interface.
//
// Parameter:
// pbstrNameOut
// Pointer to network interface name. This should be freed by the caller
// by calling SysFreeString( ).
//
// Return Values:
// S_OK
// Success.
//
// E_OUTOFMEMORY
// Out of memory.
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
GetName( [ out ] BSTR * pbstrNameOut );
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// SetName(
// [ in ] LPCWSTR pcszNameIn
// )
//
// Description:
// Stores a new name of the network interface to be set when the cluster
// configuration is commited.
//
// Parameter:
// pcszNameIn
// The name of the user wants to assigned the interface.
//
// Return Value:
// S_OK
// Success.
//
// E_OUTOFMEMORY
// Out of memory.
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
SetName( [ in, pointer_default( unique ) ] LPCWSTR pcszNameIn );
//
// Description
//
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// GetDescription(
// [ out ] BSTR * pbstrDescriptionOut
// )
//
// Description:
// Retrieves the description string for a network interface.
//
// Parameter:
// pbstrDescription
// Pointer to the description of the network. This should be freed
// by the caller by calling SysFreeString( ).
//
// Return Values:
// S_OK
// Success.
//
// E_OUTOFMEMORY
// Out of memory.
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
GetDescription( [ out ] BSTR * pbstrDescriptionOut );
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// SetDescription(
// [ in ] LPCWSTR pcszDescriptionIn
// )
//
// Description:
// Stores a new name of the network interface to be set when the cluster
// configuration is commited.
//
// Parameter:
// pcszDescriptionIn
// The description the user wants to assign to the interface.
//
// Return Values:
// S_OK
// Success.
//
// E_OUTOFMEMORY
// Out of memory.
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
SetDescription(
[ in, pointer_default( unique ) ] LPCWSTR pcszDescriptionIn
);
//
// Network Address
//
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// GetPrimaryNetworkAddress(
// [ out ] IClusCfgIPAddressInfo ** ppIPAddressOut
// )
//
// Description:
// Get the primary network address.
//
// Parameter:
// ppIPAddressOut
// Pointer to the IClusCfgIPAddressInfo interface.
//
// Return Values:
// S_OK
// The call succeeded.
//
// other HRESULTs
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
GetPrimaryNetworkAddress( [ out ] IClusCfgIPAddressInfo ** ppIPAddressOut );
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// SetPrimaryNetworkAddress(
// [ in ] IClusCfgIPAddressInfo * pIPAddressIn
// )
//
// Description:
// Set the primary network address.
//
// Parameter:
// pIPAddressIn
// Pointer to the IClusCfgIPAddressInfo interface.
//
// Return Values:
// S_OK
// The call succeeded.
//
// other HRESULTs
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
SetPrimaryNetworkAddress( [ in ] IClusCfgIPAddressInfo * pIPAddressIn );
//
// Public?
//
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// IsPublic( void )
//
// Description:
// Call this to determine if the network has been configured to be a
// public network. Note that an interface can be both public and private.
//
// Return Values:
// S_OK
// Call succeeded and the result is "TRUE."
//
// S_FALSE
// Call succeeded and the result is "FALSE."
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
IsPublic( void );
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// SetPublic(
// [ in ] BOOL fIsPublicIn
// )
//
// Description:
// Sets the "public property" of a network interface. The change will not
// take effect until the configuration has been committed.
//
// Parameter:
// fIsPublicIn
// If TRUE, the interface will be marked to be a public interface.
//
// Return Value:
// S_OK
// Success.
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
SetPublic( [ in ] BOOL fIsPublicIn );
//
// Private?
//
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// IsPrivate( void )
//
// Description:
// Call this to determine if the network has been configured to be a
// private network. Note that an interface can be both public and private.
//
// Return Values:
// S_OK
// Call succeeded and the result is "TRUE."
// S_FALSE
// Call succeeded and the result is "FALSE."
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
IsPrivate( void );
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// SetPrivate(
// [ in ] BOOL fIsPrivateIn
// )
//
// Description:
// Sets the "private property" of a network interface. The change will not
// take effect until the configuration has been committed.
//
// Parameter:
// fIsPrivateIn
// Value to set the flag to. If TRUE the interface will be marked as
// a private interface. If FALSE the interface will be marked as NOT
// a private interface.
//
// Return Value:
// S_OK
// Success.
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
SetPrivate( [ in ] BOOL fIsPrivateIn );
}; //*** interface IClusCfgNetworkInfo
//****************************************************************************
//++
//
// interface IClusCfgClusterInfo
//
// Description:
// This interface contains information about the cluster configuration.
//
//--
//****************************************************************************
[
object,
uuid( 85B4BBC0-DDC4-4ae7-8268-F4850BB2A6EE ),
async_uuid( 8BDBA247-04F5-4114-837E-B263412A4B64 ),
pointer_default( unique )
]
interface IClusCfgClusterInfo : IUnknown
{
//
// CommitChanges Mode
//
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// SetCommitMode(
// [ in ] ECommitMode ecmNewModeIn
// )
//
// Description:
// Sets the CommitChanges processing to be the new mode that
/// is passed in.
//
// Parameter:
// eccbNewModeIn
// The new mode to set the CommitChanges processing to.
//
// Return Values:
// S_OK
// Call succeed.
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
SetCommitMode( [ in ] ECommitMode ecmNewModeIn );
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// GetCommitMode(
// [ out ] ECommitMode * pecmCurrentModeOut
// )
//
// Description:
// Call this to determine the operation that will be done when
// CommitChanges is invoked.
//
// Parameter:
// pecmCurrentModeOut
// The current mode for CommitChanges processing.
//
// Return Values:
// S_OK
// Call succeeded.
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
GetCommitMode( [ out ] ECommitMode * pecmCurrentModeOut );
//
// Cluster Name
//
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// GetName(
// [ out ] BSTR * pbstrNameOut
// )
//
// Description:
// Retrieves the name of the cluster to be formed or joined.
//
// Notes:
// Name (Fully Qualified Domiain Name) e.g. cluster1.ntdev.microsoft.com
//
// In Forming the cluster, this is the resulting cluster name.
// In Joining the cluster, this is the sponsers cluster name.
//
// Parameter:
// pbstrNameOut
// Pointer to cluster name. This should be freed by the caller by calling
// SysFreeString( ).
//
// Return Values:
// S_OK
// Success.
//
// E_OUTOFMEMORY
// Out of memory.
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
GetName( [ out ] BSTR * pbstrNameOut );
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// SetName(
// [ in ] LPCWSTR pcszNameIn
// )
//
// Description:
// Stores a new name for the cluster to be set when the cluster
// configuration is commited. If the node is joining, then this will
/// will be the cluster to be joined.
//
// Notes:
// Name (Fully Qualified Domiain Name) e.g. cluster1.ntdev.microsoft.com
//
// In Forming the cluster, this is the resulting cluster name.
// In Joining the cluster, this is the sponsers cluster name.
//
// Parameter:
// pcszNameIn
// The name of the user wants to assign to the cluster.
//
// Return Value:
// S_OK
// Success.
//
// E_OUTOFMEMORY
// Out of memory.
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
SetName( [ in, pointer_default( unique ) ] LPCWSTR pcszNameIn );
//
// Cluster IP Address
//
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// GetIPAddress(
// [ out ] ULONG * pulDottedQuadOut
// )
//
// Description:
// Retrieves the IP address of the cluster.
//
// Parameter:
// pulDottedQuadOut
// The IP address of the cluster in dotted quad format.
//
// Return Value:
// S_OK
// The call succeeded.
//
// other HRESULTs
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
GetIPAddress( [ out ] ULONG * pulDottedQuadOut );
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// SetIPAddress(
// [ in ] ULONG ulDottedQuadIn
// )
//
// Description:
// Stores the IP address to be used to form the cluster. If joining,
// this is the IP address of the sponsor.
//
// Parameter:
// ulDottedQuadIn
// IP address in dotted quad format.
//
// Return Value:
// S_OK
// The call succeeded.
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
SetIPAddress( [ in ] ULONG ulDottedQuadIn );
//
// Cluster Subnet Mask
//
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// GetSubnetMask(
// [ out ] ULONG * pulDottedQuadOut
// )
//
// Description:
// Retrieves the subnet mask to be used for the cluster.
//
// Parameter:
// pulDottedQuadOut
// Subnet mask of the cluster in dotted quad format.
//
// Return Values:
// S_OK
// The call succeeded.
//
// other HRESULTs
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
GetSubnetMask( [ out ] ULONG * pulDottedQuadOut );
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// SetSubnetMask(
// [ in ] ULONG ulDottedQuadIn
// )
//
// Description:
// Stores the subnet mask to be used to form the cluster. If joining,
// this is the subnet mask of the sponsor.
//
// Parameter:
// ulDottedQuadIn
// Subnet mask in dotted quad format.
//
// Return Values:
// S_OK
// The call succeeded.
//
// other HRESULTs
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
SetSubnetMask( [ in ] ULONG ulDottedQuadIn );
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// GetNetworkInfo(
// [ out ] IClusCfgNetworkInfo ** ppiccniOut
// )
//
// Description:
// Retrieves the network to be used for the cluster IP address
// and name.
//
// Parameter:
// ppiccniOut
// Pointer of the network to use for the cluster IP address
// and name.
//
// Return Values:
// S_OK
// The call succeeded.
//
// other HRESULTs
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
GetNetworkInfo( [ out ] IClusCfgNetworkInfo ** ppiccniOut );
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// SetNetworkInfo(
// [ in ] IClusCfgNetworkInfo * piccniIn
// )
//
// Description:
// Stores the network to be used for the cluster IP address and name.
//
// Parameter:
// piccniIn
// Pointer to the network to use for the cluster IP address
// and name.
//
// Return Values:
// S_OK
// The call succeeded.
//
// other HRESULTs
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
SetNetworkInfo( [ in ] IClusCfgNetworkInfo * piccniIn );
//
// Cluster Service Account
//
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// GetClusterServiceAccountCredentials(
// [ out ] IClusCfgCredentials ** ppicccCredentialsOut
// )
//
// Description:
// Retrieves the cluster service account credentials used by the
// cluster for authenication. The password is not available from the
// sponsor node and must be supplied by the user. Once supplied, it can
// be retrieved by calling this method.
//
// Parameters:
// ppicccCredentialsOut
// An IClusCfgCredentials * that contains the cluster
// service account credentials.
//
// Return Values:
// S_OK
// The called succeeded.
//
// E_OUTOFMEMORY
// Out of memory.
//
// other HRESULTs
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
GetClusterServiceAccountCredentials(
[ out ] IClusCfgCredentials ** ppicccCredentialsOut
);
//
// Cluster Binding String
//
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// GetBindingString(
// [ out ] BSTR * pbstrBindingStringOut
// )
//
// Description:
// Retrieves the binding string (IP address) of the cluster to be
// formed or joined.
//
// Notes:
//
// Parameter:
// pbstrBindingStringOut
// Pointer to a BSTR. This should be freed by the caller by
// calling SysFreeString( ).
//
// Return Values:
// S_OK
// Success.
//
// E_OUTOFMEMORY
// Out of memory.
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
GetBindingString( [ out ] BSTR * pbstrBindingStringOut );
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// SetBindingString(
// [ in ] LPCWSTR pcszBindingStringIn
// )
//
// Description:
// Stores the binding string for the cluster.
//
// Notes:
//
// Parameter:
// pcszBindingStringIn
// The binding string to use when connecting to this cluster.
//
// Return Value:
// S_OK
// Success.
//
// E_OUTOFMEMORY
// Out of memory.
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
SetBindingString(
[ in, pointer_default( unique ) ] LPCWSTR pcszBindingStringIn
);
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// GetMaxNodeCount(
// [ out ] DWORD * pcMaxNodesOut
// )
//
// Description:
// Returns the maximun number of nodes supported in this cluster.
//
// Notes:
//
// Parameter:
// pcMaxNodesOut
// The maximum number of nodes allowed in this cluster.
//
// Return Value:
// S_OK
// Success.
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
GetMaxNodeCount(
[ out ] DWORD * pcMaxNodesOut
);
}; //*** interface IClusCfgClusterInfo
//****************************************************************************
//++
//
// interface IClusCfgInitialize
//
// Description:
// This interface is used to initialize a configuration object.
//
//--
//****************************************************************************
[
object,
uuid( 2A0EB82D-F878-492a-951E-AE000918C4A6 ),
async_uuid( 2A0EB82E-F878-492a-951E-AE000918C4A6 ),
pointer_default( unique )
]
interface IClusCfgInitialize : IUnknown
{
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// Initialize(
// [ in ] IUnknown * punkCallbackIn,
// [ in ] LCID lcidIn
// )
//
// Description:
// Register callbacks, locale id, etc.
//
// Parameters:
// punkCallbackIn
// The callback interface.
//
// lcidIn
// The locale ID to be used for strings that are passed.
//
// Return Values:
// S_OK
// The initialization succeeded.
//
// other HRESULTs
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
Initialize(
[ in ] IUnknown * punkCallbackIn,
[ in ] LCID lcidIn
);
}; //*** interface IClusCfgInitialize
//****************************************************************************
//++
//
// interface IClusCfgCallback
//
// 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( 238DCA63-E2EF-4f32-A24D-ACBF975BE842 ),
async_uuid( EBCE8945-AC69-4b3a-865D-E2D4EB33E41B ),
pointer_default( unique )
]
interface IClusCfgCallback : IUnknown
{
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// SendStatusReport(
// [ in ] LPCWSTR pcszNodeNameIn,
// [ in ] CLSID clsidTaskMajorIn
// [ in ] CLSID clsidTaskMinorIn,
// [ in ] ULONG ulMinIn,
// [ in ] ULONG ulMaxIn,
// [ in ] ULONG ulCurrentIn,
// [ in ] HRESULT hrStatusIn,
// [ in ] LPCWSTR pcszDescriptionIn,
// [ in ] FILETIME * pftTimeIn,
// [ in ] LPCWSTR pcszReferenceIn
// )
//
// Description:
// Send a status report back to the user interface/script.
//
// Parameters:
// pcszNodeNameIn
// The name of the node (server) that sent the report.
//
// clsidTaskMajorIn
// 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.
//
// clsidTaskMinorIn
// CLSID of the minor task to give status about. These should be
// unique to each sub-task and message.
//
// ulMinIn
// The min value of progress.
//
// ulMaxIn
// The max value of progress.
//
// ulCurrentIn
// The current value of progress.
//
// hrStatusIn
// The current status.
//
// pcszDescriptionIn
// The description of the status. Can be NULL to indicate that nothing
// needs to be passed.
//
// pftTimeIn
// UTC time of when this event was generated.
//
// pcszReference
// 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
SendStatusReport(
[ in, pointer_default( unique ) ] LPCWSTR pcszNodeNameIn,
[ in ] CLSID clsidTaskMajorIn,
[ in ] CLSID clsidTaskMinorIn,
[ in ] ULONG ulMinIn,
[ in ] ULONG ulMaxIn,
[ in ] ULONG ulCurrentIn,
[ in ] HRESULT hrStatusIn,
[ in, pointer_default( unique ) ] LPCWSTR pcszDescriptionIn,
[ in ] FILETIME * pftTimeIn,
[ in, pointer_default( unique ) ] LPCWSTR pcszReferenceIn
);
}; //*** interface IClusCfgCallback
//****************************************************************************
//++
//
// interface IClusCfgCredentials
//
// Description:
// The IClusCfgCredentials interface provides the functions
// for getting and setting user credentials.
//
//--
//****************************************************************************
[
object,
uuid( 54AA9406-A409-4b49-B314-5F0A0CE4C88E ),
async_uuid( 54AA9406-A409-4b49-B314-5F0A0CE4C88F ),
pointer_default( unique )
]
interface IClusCfgCredentials : IUnknown
{
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// SetCredentials(
// [ in ] LPCWSTR pcszUserIn,
// [ in ] LPCWSTR pcszDomainIn,
// [ in ] LPCWSTR pcszPasswordIn
// )
//
// Description:
// Set the credentials.
//
// Parameters:
// pcszUserIn
// The user name.
//
// pcszDomainIn
// The domain name.
//
// pcszPasswordIn
// The user's password.
//
// Return Values:
// S_OK
// The call succeeded.
//
// other HRESULTs
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
SetCredentials(
[ in, pointer_default( unique ) ] LPCWSTR pcszUserIn
, [ in, pointer_default( unique ) ] LPCWSTR pcszDomainIn
, [ in, pointer_default( unique ) ] LPCWSTR pcszPasswordIn
);
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// GetCredentials(
// [ out ] BSTR * pbstrUserOut,
// [ out ] BSTR * pbstrDomainOut,
// [ out ] BSTR * pbstrPasswordOut
// )
//
// Description:
// Get the credentials.
//
// Parameters:
// pbstrUserOut
// Catches the user name.
//
// pbstrDomainOut
// Catches the domain name.
//
// pbstrPasswordOut
// Catches the user's password.
//
// Return Values:
// S_OK
// The call succeeded.
//
// other HRESULTs
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
GetCredentials(
[ out ] BSTR * pbstrUserOut
, [ out ] BSTR * pbstrDomainOut
, [ out ] BSTR * pbstrPasswordOut
);
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// GetIdentity(
// [ out ] BSTR * pbstrUserOut,
// [ out ] BSTR * pbstrDomainOut
// )
//
// Description:
// Get the credentials.
//
// Parameters:
// pbstrUserOut
// Catches the user name.
//
// pbstrDomainOut
// Catches the domain name.
//
// Return Values:
// S_OK
// The call succeeded.
//
// other HRESULTs
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
GetIdentity(
[ out ] BSTR * pbstrUserOut
, [ out ] BSTR * pbstrDomainOut
);
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// GetPassword( [ out ] BSTR * pbstrPasswordOut )
//
// Description:
// Get the credentials.
//
// Parameters:
//
// pbstrPasswordOut
// Catches the user's password.
//
// Return Values:
// S_OK
// The call succeeded.
//
// other HRESULTs
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
GetPassword( [ out ] BSTR * pbstrPasswordOut );
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// AssignTo(
// [ in ] IClusCfgCredentials * picccDestIn
// )
//
// Description:
// Write contents to another instance.
//
// Parameters:
// picccDestIn
// Instance that receives contents.
//
// Return Values:
// S_OK
// The call succeeded.
//
// other HRESULTs
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
AssignTo(
[ in ] IClusCfgCredentials * picccDestIn
);
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// AssignFrom(
// [ in ] IClusCfgCredentials * picccSourceIn
// )
//
// Description:
// Overwrite contents with those from another instance.
//
// Parameters:
// picccSourceIn
// Instance from which to overwrite contents.
//
// Return Values:
// S_OK
// The call succeeded.
//
// other HRESULTs
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
AssignFrom(
[ in ] IClusCfgCredentials * picccSourceIn
);
}; //*** interface IClusCfgCredentials
//****************************************************************************
//++
//
// interface IClusCfgCapabilities
//
// Description:
// The IClusCfgCapabilities interface provides the functions
// for determining the capabilities of a node.
//
//--
//****************************************************************************
[
object,
uuid( D94AB253-36C7-41c1-B52E-26B451975C8D ),
pointer_default( unique )
]
interface IClusCfgCapabilities : IUnknown
{
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// CanNodeBeClustered( void )
//
// Description:
// Determines if a node can be clustered.
//
// Parameters:
// None.
//
// Return Values:
// S_OK
// The call succeeded. The node can be clustered.
//
// S_FALSE
// The call succeeded. The node can not be clustered.
//
// E_NOTIMPL
// The call failed. This is treated as a "don't care."
//
// other HRESULTs
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
CanNodeBeClustered( void );
}; //*** interface IClusCfgCapabilities
//****************************************************************************
//++
//
// interface IClusCfgManagedResourceCfg
//
//--
//****************************************************************************
[
object,
uuid( 60300A0F-77E1-440c-BD94-6BFB0DBFDB3A ),
local,
pointer_default( unique )
]
interface IClusCfgManagedResourceCfg : IUnknown
{
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// IClusCfgManagedResourceCfg::PreCreate(
// IUnknown * punkServicesIn
// )
//
// Description:
// This method is called by the post configuration manager to
// determine the requirements of the resource. Querying the
// punkServicesIn allows the managed resource to use services
// provided by the manager.
//
// Arguments:
// punkServicesIn
// The resource should QI this interface for services provided
// by the post configuration manager and to set its dependencies.
//
// Return Values:
// S_OK
// Success.
//
// other HRESULTs.
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
PreCreate( [ in ] IUnknown * punkServicesIn );
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// IClusCfgManagedResourceCfg::Create(
// IUnknown * punkServicesIn
// )
//
// Description:
// This method is called by the post configuration manager to
// have the resource create an instance of itself. Querying the
// punkServicesIn allows the managed resource to use services
// provided by the manager.
//
// Arguments:
// punkServicesIn
// The resource should QI this interface for services provided
// by the post configuration manager and to create itself.
//
// Return Values:
// S_OK
// Success.
//
// other HRESULTs.
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
Create( [ in ] IUnknown * punkServicesIn );
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// IClusCfgManagedResourceCfg::PostCreate(
// IUnknown * punkServicesIn
// )
//
// Description:
// This method is called by the post configuration manager to allow
// resources to perform any post-creation configuration that may be
// needed. At this point the cluster is fully configured. Querying
// the punkServicesIn allows the managed resource to use services
// provided by the manager.
//
// Arguments:
// punkServicesIn
// The resource should QI this interface for services provided
// by the post configuration manager.
//
// Return Values:
// S_OK
// Success.
//
// other HRESULTs.
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
PostCreate( [ in ] IUnknown * punkServicesIn );
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// IClusCfgManagedResourceCfg::Evict(
// IUnknown * punkServicesIn
// )
//
// Description:
// This method is called by the post configuration manager to alert
// the resource that this node was evicted from the cluster. The
// resource should do whatever cleanup it needs to do revert to a
// non-clustered state. Querying the punkServicesIn allows the
// managed resource to uses services provided by the post
// configuration manager.
//
// Arguments:
// punkServicesIn
// The resource should QI this interface for services provided
// by the post configuration manager.
//
// Return Values:
// S_OK
// Success.
//
// other HRESULTs.
// The call failed. Errors are ignored and do not prevent a node
// from being evicted.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
Evict( [ in ] IUnknown * punkServicesIn );
}; //*** interface IClusCfgManagedResourceCfg
//****************************************************************************
//++
//
// interface IClusCfgResourcePreCreate
//
//--
//****************************************************************************
[
object,
uuid( 4240F6A1-9D49-427e-8F3D-09384E1F59E4 ),
local,
pointer_default( unique )
]
interface IClusCfgResourcePreCreate : IUnknown
{
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// IClusCfgResourcePreCreate::SetDependency(
// LPCLSID pclsidDepResTypeIn,
// EDependencyFlags dflagIn
// )
//
// Description:
// Informs the post configuration manager that a resource has a
// dependency on another type of resource and if the resource needs
// the resource for shared access or exclusive access.
//
// Arguments:
// pclsidDepResTypeIn
// The CLSID of the type of resource that a resource is
// requesting a dependency on. These are documented in the SDK
// or by the 3rd party resource.
//
// dfIn
// Flags to modify the dependency relationship. The following
// are defined flags:
//
// dfSHARED - the dependent resource can be shared.
// dfEXCLUSIVE - the dependent resource can not be shared.
//
// Return Value:
// S_OK
// Success.
//
// other HRESULTs.
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
SetDependency(
[ in ] LPCLSID pclsidDepResTypeIn
, [ in ] DWORD dfIn
);
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// IClusCfgResourcePreCreate::SetType(
// CLSID * pclsidIn
// )
//
// Description:
// A managed resource MUST call this to indicate its resource type.
// Failure to call this during PreCreate will result in your
// resource not being created.
//
// Arguments:
// pclsidIn
// Pointer to the GUID of the resource type.
//
// Return Values:
// S_OK
// Success.
//
// other HRESULTs.
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
SetType( [ in ] CLSID * pclsidIn );
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// IClusCfgResourcePreCreate::SetClassType(
// CLSID * pclsidIn
// )
//
// Description:
// A managed resource sets this to indicate that its resource type
// can be considered to be of a class of resource. You may call this
// multiple times to indicate all the classes you belong to.
//
// Arguments:
// pclsidIn
// Pointer to the GUID of the resource class type.
//
// Return Values:
// S_OK
// Success.
//
// other HRESULTs.
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
SetClassType( [ in ] CLSID * pclsidIn );
}; //*** interface IClusCfgResourcePreCreate
//****************************************************************************
//++
//
// interface IClusCfgResourceCreate
//
//--
//****************************************************************************
[
object,
uuid( 0647B41A-C777-443c-9432-02CCCF4FF443 ),
local,
pointer_default( unique )
]
interface IClusCfgResourceCreate : IUnknown
{
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// IClusCfgResourceCreate::SetPropertyBinary(
// [ in ] LPCWSTR pcszNameIn
// , [ in ] const DWORD cbSizeIn
// , [ in ] const BYTE * pbyteIn
// )
//
// Description:
//
// Arguments:
//
// Return Value:
// S_OK
// Success.
//
// other HRESULTs.
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
SetPropertyBinary(
[ in, pointer_default( unique ) ] LPCWSTR pcszNameIn
, [ in ] const DWORD cbSizeIn
, [ in ] const BYTE * pbyteIn
);
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// IClusCfgResourceCreate::SetPropertyDWORD(
// [ in ] LPCWSTR pcszNameIn
// , [ in ] const DWORD dwDWORDIn
// )
//
// Description:
//
// Arguments:
//
// Return Value:
// S_OK
// Success.
//
// other HRESULTs.
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
SetPropertyDWORD(
[ in, pointer_default( unique ) ] LPCWSTR pcszNameIn
, [ in ] const DWORD dwDWORDIn
);
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// IClusCfgResourceCreate::SetPropertyString(
// [ in ] LPCWSTR pcszNameIn
// , [ in ] LPCWSTR pcszStringIn
// )
//
// Description:
//
// Arguments:
//
// Return Value:
// S_OK
// Success.
//
// other HRESULTs.
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
SetPropertyString(
[ in, pointer_default( unique ) ] LPCWSTR pcszNameIn
, [ in, pointer_default( unique ) ] LPCWSTR pcszStringIn
);
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// IClusCfgResourceCreate::SetPropertyExpandString(
// [ in ] LPCWSTR pcszNameIn
// , [ in ] LPCWSTR pcszStringIn
// )
//
// Description:
//
// Arguments:
//
// Return Value:
// S_OK
// Success.
//
// other HRESULTs.
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
SetPropertyExpandString(
[ in, pointer_default( unique ) ] LPCWSTR pcszNameIn
, [ in, pointer_default( unique ) ] LPCWSTR pcszStringIn
);
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// IClusCfgResourceCreate::SetPropertyMultiString(
// [ in ] LPCWSTR pcszNameIn
// , [ in ] const DWORD cbMultiStringIn
// , [ in ] LPCWSTR pcszMultiStringIn
// )
//
// Description:
//
// Arguments:
//
// Return Value:
// S_OK
// Success.
//
// other HRESULTs.
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
SetPropertyMultiString(
[ in, pointer_default( unique ) ] LPCWSTR pcszNameIn
, [ in ] const DWORD cbMultiStringIn
, [ in, pointer_default( unique ) ] LPCWSTR pcszMultiStringIn
);
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// IClusCfgResourceCreate::SetPropertyUnsignedLargeInt(
// [ in ] LPCWSTR pcszNameIn
// , [ in ] const ULARGE_INTEGER ulIntIn
// )
//
// Description:
//
// Arguments:
//
// Return Value:
// S_OK
// Success.
//
// other HRESULTs.
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
SetPropertyUnsignedLargeInt(
[ in, pointer_default( unique ) ] LPCWSTR pcszNameIn
, [ in ] const ULARGE_INTEGER ulIntIn
);
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// IClusCfgResourceCreate::SetPropertyLong(
// [ in ] LPCWSTR pcszNameIn
// , [ in ] const LONG lLongIn
// )
//
// Description:
//
// Arguments:
//
// Return Value:
// S_OK
// Success.
//
// other HRESULTs.
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
SetPropertyLong(
[ in, pointer_default( unique ) ] LPCWSTR pcszNameIn
, [ in ] const LONG lLongIn
);
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// IClusCfgResourceCreate::SetPropertySecurityDescriptor(
// [ in ] LPCWSTR pcszNameIn
// , [ in ] const SECURITY_DESCRIPTOR * pcsdIn
// )
//
// Description:
//
// Arguments:
//
// Return Value:
// S_OK
// Success.
//
// other HRESULTs.
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
SetPropertySecurityDescriptor(
[ in, pointer_default( unique ) ] LPCWSTR pcszNameIn
, [ in ] const SECURITY_DESCRIPTOR * pcsdIn );
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// IClusCfgResourceCreate::SetPropertyLargeInt(
// [ in ] LPCWSTR pcszNameIn
// , [ in ] const LARGE_INTEGER lIntIn
// )
//
// Description:
//
// Arguments:
//
// Return Value:
// S_OK
// Success.
//
// other HRESULTs.
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
SetPropertyLargeInt(
[ in, pointer_default( unique ) ] LPCWSTR pcszNameIn
, [ in ] const LARGE_INTEGER lIntIn
);
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// IClusCfgResourceCreate::SendResourceControl(
// [ in ] DWORD dwControlCode
// , [ in ] LPVOID lpInBuffer
// , [ in ] DWORD cbInBufferSize
// )
//
// Description:
//
// Arguments:
//
// Return Value:
// S_OK
// Success.
//
// other HRESULTs.
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
SendResourceControl(
[ in ] DWORD dwControlCodeIn
, [ in ] LPVOID lpBufferIn
, [ in ] DWORD cbBufferSizeIn
);
}; //*** interface IClusCfgResourceCreate
//****************************************************************************
//++
//
// interface IClusCfgResourcePostCreate
//
//--
//****************************************************************************
[
object,
uuid( 72A9BF54-13B6-451f-910D-6913EBF025AB ),
local,
pointer_default( unique )
]
interface IClusCfgResourcePostCreate : IUnknown
{
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// IClusCfgResourcePostCreate::ChangeName(
// [ in ] LPCWSTR pcszNameIn
// )
//
// Description:
// Changes the name of the resource.
//
// Arguments:
// pcszNameIn
// The name to assign the group.
//
// Return Value:
// S_OK
// Success.
//
// other HRESULTs.
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
ChangeName( [ in, pointer_default( unique ) ] LPCWSTR pcszNameIn );
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// IClusCfgResourceCreate::SendResourceControl(
// [ in ] DWORD dwControlCode
// , [ in ] LPVOID lpInBuffer
// , [ in ] DWORD cbInBufferSize
// , [ in ] LPVOID lpOutBuffer
// , [ in ] DWORD cbOutBufferSize
// , [ out ] LPDWORD lpcbBytesReturned
// )
//
// Description:
//
// Arguments:
//
// Return Value:
// S_OK
// Success.
//
// other HRESULTs.
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
SendResourceControl(
[ in ] DWORD dwControlCodeIn
, [ in ] LPVOID lpBufferIn
, [ in ] DWORD cbBufferSizeIn
, [ in ] LPVOID lBufferInout
, [ in ] DWORD cbOutBufferSizeIn
, [ out ] LPDWORD lpcbBytesReturnedOut
);
}; //*** interface IClusCfgResourcePostCreate
//****************************************************************************
//++
//
// interface IClusCfgGroupCfg
//
//--
//****************************************************************************
[
object,
uuid( DCB6D3D2-A55F-49e5-A64A-0CCFEB01ED3A ),
local,
pointer_default( unique )
]
interface IClusCfgGroupCfg : IUnknown
{
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// IClusCfgGroupCfg::SetName(
// [ in ] LPCWSTR pcszNameIn
// )
//
// Description:
// Changes the name of the group in which the resource was created.
// Note that the last resource to set the name wins. The ordering
// of the last resource is the resource that doesn't have anything
// depending on it.
//
// Arguments:
// pcszNameIn
// The name to assign the group.
//
// Return Value:
// S_OK
// Success.
//
// other HRESULTs.
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
SetName( [ in, pointer_default( unique ) ] LPCWSTR pcszNameIn );
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// IClusCfgGroupCfg::GetName(
// BSTR * pbstrNameOut
// )
//
// Description:
// Retrieves the name of the group in which the resource was created.
// Note that the last resource to set the name wins. The ordering
// of the last resource is the resource that doesn't have anything
// depending on it. Do not cache this value as the name may change
// after control has been returned to the manager.
//
// Arguments:
// pbstrNameOut
// The name to assign the group.
//
// Return Value:
// S_OK
// Success.
//
// HRESULT_FROM_WIN32( ERROR_MORE_DATA )
// The buffer size specified is too small.
//
// other HRESULTs.
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
GetName( [ out ] BSTR * pbstrNameOut );
}; //*** interface IClusCfgGroupCfg
//****************************************************************************
//++
//
// interface IClusCfgMemberSetChangeListener
//
// Description:
// This interface is implemented by an component that wishes to be notified
// of when the local computer becomes part of a cluster or when it leaves
// a cluster - in other words, when the member set of a cluster changes
// as a result of a cluster configuration operation on the local computer.
//
//--
//****************************************************************************
[
object,
uuid( 2B64534F-2643-4ABC-A4E5-824D881B7582 ),
async_uuid( 2B645350-2643-4ABC-A4E5-824D881B7582 ),
pointer_default( unique )
]
interface IClusCfgMemberSetChangeListener : IUnknown
{
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// IClusCfgMemberSetChangeListener::Notify(
// [ in ] IUnknown * punkClusterInfoIn
// )
//
// Description:
// This method is called to notify a component that this computer has
// either joined or left a cluster. During this call, a component typically
// performs operations that are required to switch it from the "clustered"
// to "non-clustered" mode or vice versa. For example, an application
// that implements this interface could use this function to create
// its resource type when the local computer joins a cluster.
//
// If the node has just become part of a cluster, the cluster
// service is guaranteed to be running when this method is called.
// Querying the punkClusterInfoIn allows the listener to get more
// information about the event that caused the listener to be notified.
//
// Arguments:
// punkClusterInfoIn
// The resource should QI this interface for services provided
// by the caller of this function. Typically, the component that
// this punk refers to also implements the IClusCfgClusterInfo
// interface.
//
// Return Values:
// S_OK
// Success.
//
// other HRESULTs.
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
Notify( [ in ] IUnknown * punkClusterInfoIn );
}; //*** interface IClusCfgMemberSetChangeListener
//****************************************************************************
//++
//
// interface IClusCfgResourceTypeInfo
//
// Description:
// This interface is implemented by components that wish to configure
// ( create, delete, etc. ) resource types during cluster configuration
// ( cluster formation, node addition, node eviction, etc. ).
//
//--
//****************************************************************************
[
object,
uuid( C649A281-C847-4F5C-9841-D2F73B5AA71D ),
async_uuid( C649A282-C847-4F5C-9841-D2F73B5AA71D ),
pointer_default( unique )
]
interface IClusCfgResourceTypeInfo : IUnknown
{
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// IClusCfgResourceTypeInfo::CommitChanges(
// [ in ] IUnknown * punkClusterInfoIn
// )
//
// Description:
// A component that wishes to participate in the configuration of
// cluster resource types should perform the configuration steps
// necessary for its resource type in this method.
//
// This method is called by the cluster configuration server when
// the local computer becomes part of a cluster. The cluster service
// is guaranteed to be running at this stage. This method is also
// called when the local computer is evicted from a cluster - the
// cluster service will not be running if this is the case.
//
// Typically, a component will create a resource type in this method
// during cluster formation and join and will perform any cleanup
// required during node evict.
//
// Arguments:
// punkClusterInfoIn
// The resource type should QI this interface for services provided
// by the caller of this function. Typically, the component that
// this punk refers to also implements the IClusCfgClusterInfo
// interface.
//
// punkResTypeServicesIn
// Pointer to the IUnknown interface of a component that provides
// methods that help configuring a resource type. For example,
// during a join or a form, this punk can be queried for the
// IClusCfgResourceTypeCreate interface, which provides methods
// for resource type creation.
//
// Return Values:
// S_OK
// Success.
//
// other HRESULTs.
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
CommitChanges(
[ in ] IUnknown * punkClusterInfoIn,
[ in ] IUnknown * punkResTypeServicesIn
);
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// IClusCfgResourceTypeInfo::GetTypeName(
// [ out ] BSTR * pbstrTypeNameOut
// )
//
// Description:
// Get the resource type name of this resource type.
//
// Arguments:
// pbstrTypeNameOut
// Pointer to the BSTR that holds the name of the resource type.
// This BSTR has to be freed by the caller using the function
// SysFreeString().
//
// Return Values:
// S_OK
// The call succeeded.
//
// E_OUTOFMEMORY
// Out of memory.
//
// other HRESULTs
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
GetTypeName( [ out ] BSTR * pbstrTypeNameOut );
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// IClusCfgResourceTypeInfo::GetTypeGUID(
// [ out ] GUID * pguidGUIDOut
// )
//
// Description:
// Get the globally unique identifier of this resource type.
//
// Arguments:
// pguidGUIDOut
// Pointer to the GUID object which will receive the GUID of this
// resource type.
//
// Return Values:
// S_OK
// The call succeeded and the *pguidGUIDOut contains the type GUID.
//
// S_FALSE
// The call succeeded but this resource type does not have a GUID.
// The value of *pguidGUIDOut is undefined after this call.
//
// other HRESULTs
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
GetTypeGUID( [ out ] GUID * pguidGUIDOut );
}; //*** interface IClusCfgResourceTypeInfo
//****************************************************************************
//++
//
// interface IClusCfgResourceTypeCreate
//
// Description:
// This interface provides functions that help create a resource type
// during cluster configuration. A pointer to this interface is provided
// to components that participate in resource type configuration during
// cluster configuration.
//
//--
//****************************************************************************
[
object,
uuid( 3AFCE3B8-5F3E-4DDF-A8F4-4B4FCBF28F8F ),
async_uuid( 3AFCE3B9-5F3E-4DDF-A8F4-4B4FCBF28F8F ),
pointer_default( unique )
]
interface IClusCfgResourceTypeCreate : IUnknown
{
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// IClusCfgResourceTypeCreate::Create(
// [in, string ] const WCHAR * pcszResTypeNameIn,
// [in, string ] const WCHAR * pcszResTypeDisplayNameIn,
// [in, string ] const WCHAR * pcszResDllNameIn,
// [in] DWORD dwLooksAliveIntervalIn,
// [in] DWORD dwIsAliveIntervalIn
// )
//
// Description:
// This method creates a cluster resource type.
//
// Arguments:
// pcszResTypeNameIn
// Name of the resource type
//
// pcszResTypeDisplayNameIn
// Display name of the resource type
//
// pcszResDllNameIn
// Name (with or without path information) of DLL of the resource type.
//
// dwLooksAliveIntervalIn
// Looks-alive interval for the resource type (in milliseconds).
//
// dwIsAliveIntervalIn
// Is-alive interval for the resource type (in milliseconds).
//
// Return Values:
// S_OK
// Success.
//
// other HRESULTs.
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
Create(
[in, string ] const WCHAR * pcszResTypeNameIn,
[in, string ] const WCHAR * pcszResTypeDisplayNameIn,
[in, string ] const WCHAR * pcszResDllNameIn,
[in] DWORD dwLooksAliveIntervalIn,
[in] DWORD dwIsAliveIntervalIn
);
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// IClusCfgResourceTypeCreate::RegisterAdminExtensions(
// [in, string ] const WCHAR * pcszResDllNameIn,
// [in] ULONG cExtClsidCountIn,
// [in, size_is( cExtClsidCountIn ) ] const CLSID * rgclsidExtClsidsIn
// )
//
// Description:
// This method registers the cluster administrator extensions for
// a resource type.
//
// Arguments:
// pcszResTypeNameIn
// Name of the resource type against for the extensions are to be
// registered.
//
// cExtClsidCountIn
// Number of extension class ids in the next parameter.
//
// rgclsidExtClsidsIn
// Pointer to an array of class ids of cluster administrator extensions.
// This can be NULL if cExtClsidCountIn is 0.
//
//
// Return Values:
// S_OK
// Success.
//
// other HRESULTs.
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
RegisterAdminExtensions(
[in, string ] const WCHAR * pcszResTypeNameIn,
[in] ULONG cExtClsidCountIn,
[in, size_is( cExtClsidCountIn ) ] const CLSID * rgclsidExtClsidsIn
);
}; //*** interface IClusCfgResourceTypeCreate
//****************************************************************************
//++
//
// interface IClusCfgEvictCleanup
//
// Description:
// This interface can be used to cleanup a node that has been evicted from
// a cluster.
//
//--
//****************************************************************************
[
object,
uuid( 6FE3E361-D373-4C5F-A0AF-1DFE8493C655 ),
async_uuid( 6FE3E362-D373-4C5F-A0AF-1DFE8493C655 ),
pointer_default( unique )
]
interface
IClusCfgEvictCleanup : IUnknown
{
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// IClusCfgEvictCleanup::CleanupLocal( [ in ] DWORD dwDelayIn )
//
// Description:
// This method performs the clean up actions on the local node after
// it has been evicted from a cluster, so that the node can go back
// to its "pre-clustered" state.
//
// Arguments:
// DWORD dwDelayIn
// Number of milliseconds that this method will wait before starting
// cleanup. If some other process cleans up this node while this thread
// is waiting, the wait is terminated. If this value is zero, this method
// will attempt to clean up this node immediately.
//
// Return Values:
// S_OK
// Success.
//
// Other HRESULTs
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
CleanupLocalNode( [ in ] DWORD dwDelayIn );
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// IClusCfgEvictCleanup::CleanupRemoteNode(
// const WCHAR * pcszEvicteeNodeNameIn
// , DWORD dwDelayIn
// )
//
// Description:
// This method performs the clean up actions on a remote node after
// it has been evicted from a cluster, so that the node can go back
// to its "pre-clustered" state.
//
// Arguments:
// const WCHAR * pcszEvictedNodeNameIn
// Name of the node that has just been evicted. This can be the
// NetBios name of the node, the fully qualified domain name or
// the node IP address.
//
// DWORD dwDelayIn
// Number of milliseconds that this method will wait before starting
// cleanup. If some other process cleans up this node while this thread
// is waiting, the wait is terminated. If this value is zero, this method
// will attempt to clean up this node immediately.
//
// Return Values:
// S_OK
// Success.
//
// Other HRESULTs
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
CleanupRemoteNode(
[ in, string ] const WCHAR * pcszEvictedNodeNameIn
, [ in ] DWORD dwDelayIn
);
}; // interface IClusCfgEvictCleanup
//****************************************************************************
//++
//
// interface IClusCfgStartupListener
//
// Description:
// This interface is implemented by a component that wishes to be notified
// when the cluster service has started.
//
//--
//****************************************************************************
[
object,
uuid( D282CAEF-2EDE-4ab9-A5D5-F7BDE3D23F0F ),
async_uuid( D282CAF0-2EDE-4ab9-A5D5-F7BDE3D23F10 ),
pointer_default( unique )
]
interface
IClusCfgStartupListener : IUnknown
{
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// IClusCfgStartupListener::Notify( [ in ] IUnknown * punkIn )
//
// Description:
// This method is called to inform a component that the cluster service
// has started on the local node.
//
// Arguments:
// IUnknown * punkIn
// The component that implements this Punk may also provide services
// that are useful to the implementor of this method. For example,
// this component usually implements the IClusCfgResourceTypeCreate
// interface.
//
// Return Values:
// S_OK
// Success.
//
// Other HRESULTs
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
Notify( [ in ] IUnknown * punkIn );
}; // interface IClusCfgStartupListener
//****************************************************************************
//++
//
// interface IClusCfgStartupNotify
//
// Description:
// This interface is implemented by a component that the cluster service
// instantiates. When the cluster service calls the only method on this
// interface, this component will enumerate the startup listeners and
// inform them that the cluster service has started on the local node.
//
//--
//****************************************************************************
[
object,
uuid( C2B0D069-6353-4EE1-B253-6B0D75DB2CD3 ),
async_uuid( C2B0D06A-6353-4EE1-B253-6B0D75DB2CD3 ),
pointer_default( unique )
]
interface
IClusCfgStartupNotify : IUnknown
{
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// IClusCfgStartupNotify::SendNotifications( void )
//
// Description:
// This method is called by the Cluster Service to inform the implementor
// of this interface to send out notification of cluster service startup
// to interested listeners. If this method is being called for the first
// time, the method waits till the post configuration steps are complete
// before sending out the notifications.
//
// Arguments:
// None.
//
// Return Values:
// S_OK
// Success.
//
// Other HRESULTs
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
SendNotifications( void );
}; // interface IClusCfgStartupNotify
//****************************************************************************
//++
//
// interface IClusCfgManagedResourceData
//
// Description:
// This inteface allows instances of resources to get, set, and exchange
// data between instances of themselves on different nodes.
//
//--
//****************************************************************************
[
object,
uuid( 8447ECB7-2171-4e21-A108-0EB5B0B516DA ),
pointer_default( unique )
]
interface IClusCfgManagedResourceData : IUnknown
{
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// IClusCfgManagedResourceData::GetResourcePrivateData(
// [ out ] BYTE * pbBufferOut
// , [ out ] DWORD * pcbBufferInout
// )
//
// Description:
// Get an already managed resource's private state data. This
// data will then be passed to the instances of that resource on all
// nodes that are being added to the cluster.
//
// Arguments:
// pbBufferOut
// Pointer to a buffer to contain the resource's private state data.
//
// pcbBufferInout
// On input it is the size of the buffer. On output it is the size
// of the data.
//
// Return Value:
// S_OK
// Success.
//
// ERROR_INSUFFICIENT_BUFFER as an HRESULT
// When the passed in buffer is too small to hold the data.
// pcbBufferOutIn will contain the size required.
//
// other HRESULTs.
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
GetResourcePrivateData(
[ out, size_is( *pcbBufferInout ) ] BYTE * pbBufferOut
, [ in, out ] DWORD * pcbBufferInout
);
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// IClusCfgManagedResourceData::SetResourcePrivateData(
// [ in ] const BYTE * pcbBufferIn
// , [ in ] DWORD cbBufferIn
// )
//
// Description:
// Set the private resource data into this instance of a managed
// resource.
//
// Arguments:
// pcbBufferIn
// Pointer to a buffer containing the resource's private data.
//
// cbBufferIn
// The length in bytes of the data buffer.
//
// Return Values:
// S_OK
// Success.
//
// other HRESULTs.
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
SetResourcePrivateData(
[ in
, pointer_default( unique )
, size_is( cbBufferIn )
] const BYTE * pcbBufferIn
, [ in ] DWORD cbBufferIn
);
}; //*** interface IClusCfgManagedResourceData
//****************************************************************************
//++
//
// interface IClusCfgVerifyQuorum
//
// Description:
// Ensure that the quorum resource can be hosted on all nodes being added
// to the cluster.
//
// The IClusCfgManagedResourceData interface will be called just prior to
// any calls to the methods of this interface to allow the quorum resource
// to set all data needed for the quorum to be hosted on the nodes that
// are being added to the cluster.
//
//--
//****************************************************************************
[
object,
uuid( 90A2EFAE-1B62-4ada-BF1C-BECAB56F748D ),
pointer_default( unique )
]
interface IClusCfgVerifyQuorum : IUnknown
{
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// IClusCfgVerifyQuorum::PrepareToHostQuorumResource(
// void
// )
//
// Description:
// This method is called when the implementing managed resource
// is the quorum resource. This gives the implementer a chance
// to do anything required to ensure that this node can
// indeed host the quorum resource.
//
// This method will be called after the SetResourcePrivateData()
// method of the IClusCfgManagedResourceData interface has been
// called. This allows the implementer to get the latest state data
// from a running instance of their resource.
//
// Arguments:
// None.
//
// Return Value:
// S_OK
// Success.
//
// other HRESULTs.
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
PrepareToHostQuorumResource( void );
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// IClusCfgVerifyQuorum::Cleanup(
// EClusCfgCleanupReason cccrReasonIn
// )
//
// Description:
// This method is called when a cluster configuration task is
// shutting down. The reason for the shut down is passed in
// the cccrReasonIn parameter.
//
// It is expected that any lingering changes made in
// PrepareToHostQuorumResource() would be undone when the
// reason code in not a success code.
//
// Arguments:
// cccrReasonIn
// The reason that this method was called. See
// EClusCfgCleanupReason for the complete list of possbile
// reason codes.
//
// Return Values:
// S_OK
// Success.
//
// other HRESULTs.
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
Cleanup( [ in ] EClusCfgCleanupReason cccrReasonIn );
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// IsMultiNodeCapable( void )
//
// Description:
// Call this to determine if this quorum capable resource allows
// other nodes to join the cluster and create a multi node cluster.
//
// Return Values:
// S_OK
// Call succeeded and the result is "TRUE."
//
// S_FALSE
// Call succeeded and the result is "FALSE."
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
IsMultiNodeCapable( void );
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// SetMultiNodeCapable(
// [ in ] BOOL fMultiNodeCapableIn
// )
//
// Description:
// Call this to set this quorum resource as being multi node capable.
//
// Return Values:
// S_OK
// Call succeeded
//
// other HRESULT
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
SetMultiNodeCapable( [ in ] BOOL fMultiNodeCapableIn );
}; //*** interface IClusCfgVerifyQuorum
//****************************************************************************
//++
//
// interface IClusCfgEvictListener
//
// Description:
// This interface is implemented by a component that wishes to be notified
// when the a node has been evicted from the cluster.
//
//--
//****************************************************************************
[
object,
uuid( E20DDEE3-DEFC-4d54-B1F7-2AEB784C3847 ),
async_uuid( 08609AC3-D284-4009-805F-17D3CFE4160B ),
pointer_default( unique )
]
interface
IClusCfgEvictListener : IUnknown
{
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// IClusCfgEvictListener::EvictNotify(
// [ in ] LPCWSTR pcszNodeNameIn
// )
//
// Description:
// This method is called to inform a component that a node has been
// evicted from the cluster.
//
// Arguments:
// pcszNodeNameIn
// The name of the node that was evicted.
//
// Return Values:
// S_OK
// Success.
//
// Other HRESULTs
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
EvictNotify(
[ in, pointer_default( unique ) ] LPCWSTR pcszNodeNameIn
);
}; // interface IClusCfgEvictListener
//****************************************************************************
//++
//
// interface IClusCfgEvictNotify
//
// Description:
// This interface is implemented by a component that the cluster service
// instantiates. When the cluster service calls the only method on this
// interface, this component will enumerate the evict listeners and
// inform them that a node has been evicted from the cluster. These
// components will be running on a cluster node and are capable of using
// the cluster API in their implementation.
//
//--
//****************************************************************************
[
object,
uuid( 090E7745-9E5B-4d76-936E-D760CF2FF3B9 ),
async_uuid( AD2E83CC-1D14-4d20-928E-22D344847454 ),
pointer_default( unique )
]
interface
IClusCfgEvictNotify : IUnknown
{
//////////////////////////////////////////////////////////////////////////
//
// STDMETHOD
// IClusCfgEvictNotify::SendNotifications(
// [ in, pointer_default( unique ) ] LPCWSTR pcszNodeNameIn
// )
//
// Description:
// This method is called by the Cluster Service to inform the implementor
// of this interface to send out notification when a node is evicted from
// the cluster to interested listeners.
//
// Arguments:
// pcszNodeNameIn
// The name of the node that was evicted.
//
// Return Values:
// S_OK
// Success.
//
// Other HRESULTs
// The call failed.
//
//////////////////////////////////////////////////////////////////////////
HRESULT
SendNotifications(
[ in, pointer_default( unique ) ] LPCWSTR pcszNodeNameIn
);
}; // interface IClusCfgEvictNotify