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
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
|