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.
1162 lines
29 KiB
1162 lines
29 KiB
/*++
|
|
|
|
Copyright (c) 1996 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
clusrpc.idl
|
|
|
|
Abstract:
|
|
|
|
Interface Description for Cluster RPC interface. This contains
|
|
two interfaces. The first is used for out-of-band cluster server
|
|
RPC and is used for things like Join. The second is stricly for
|
|
intra-cluster communications and runs only over the cluster
|
|
transport.
|
|
|
|
Author:
|
|
|
|
John Vert (jvert) 6/5/1996
|
|
|
|
--*/
|
|
|
|
cpp_quote("#ifndef _CLUSRPC_INCLUDED_")
|
|
cpp_quote("#define _CLUSRPC_INCLUDED_")
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Intracluster (Internal) RPC Interface Definition
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////
|
|
[
|
|
uuid(e248d0b8-bf15-11cf-8c5e-08002bb49649),
|
|
version(2.0)
|
|
]
|
|
interface IntraCluster
|
|
{
|
|
import "wtypes.idl";
|
|
|
|
const short CLUSTER_ID_SIZE = 37;
|
|
|
|
typedef WCHAR CLUSTER_ID[CLUSTER_ID_SIZE]; // unicode representation of a GUID
|
|
|
|
//
|
|
// Interface descriptions for the FM component.
|
|
//
|
|
|
|
//
|
|
// Types
|
|
//
|
|
typedef [context_handle] void *HGROUP_ENUM_RPC;
|
|
|
|
//
|
|
// Routines and structures for dealing with Groups
|
|
//
|
|
|
|
//
|
|
// Cluster Group State
|
|
//
|
|
|
|
typedef enum _GROUP_STATE {
|
|
GroupOnline,
|
|
GroupOffline,
|
|
GroupFailed,
|
|
GroupPartialOnline
|
|
} GROUP_STATE;
|
|
|
|
//
|
|
// Group and Resource enumeration interface
|
|
//
|
|
|
|
typedef struct _GROUP_ENUM_ENTRY {
|
|
[string] LPWSTR Id;
|
|
DWORD State;
|
|
DWORD StateSequence;
|
|
} GROUP_ENUM_ENTRY, *PGROUP_ENUM_ENTRY;
|
|
|
|
typedef struct _GROUP_ENUM {
|
|
DWORD EntryCount;
|
|
[size_is(EntryCount)] GROUP_ENUM_ENTRY Entry[*];
|
|
} GROUP_ENUM, *PGROUP_ENUM;
|
|
|
|
typedef struct _RESOURCE_ENUM_ENTRY {
|
|
[string] LPWSTR Id;
|
|
DWORD State;
|
|
DWORD StateSequence;
|
|
} RESOURCE_ENUM_ENTRY, *PRESOURCE_ENUM_ENTRY;
|
|
|
|
typedef struct _RESOURCE_ENUM {
|
|
DWORD EntryCount;
|
|
int ContainsQuorum;
|
|
[size_is(EntryCount)] RESOURCE_ENUM_ENTRY Entry[*];
|
|
} RESOURCE_ENUM, *PRESOURCE_ENUM;
|
|
|
|
//
|
|
// Remotely arbitrate a group.
|
|
//
|
|
error_status_t
|
|
FmsQueryOwnedGroups(
|
|
[ out ] PGROUP_ENUM *OwnedGroups,
|
|
[ out ] PRESOURCE_ENUM *OwnedResources
|
|
);
|
|
|
|
//
|
|
// Remotely bring a group online.
|
|
//
|
|
|
|
error_status_t
|
|
FmsOnlineGroupRequest(
|
|
[ in ] LPCWSTR GroupId
|
|
);
|
|
|
|
//
|
|
// Remotely take a group offline.
|
|
//
|
|
|
|
error_status_t
|
|
FmsOfflineGroupRequest(
|
|
[ in ] LPCWSTR GroupId
|
|
);
|
|
|
|
//
|
|
// Remotely move a group.
|
|
//
|
|
|
|
error_status_t
|
|
FmsMoveGroupRequest(
|
|
[ in ] LPCWSTR GroupId,
|
|
[ in, unique ] LPCWSTR DestinationNode
|
|
);
|
|
|
|
//
|
|
// Remotely take a group.
|
|
//
|
|
|
|
error_status_t
|
|
FmsTakeGroupRequest(
|
|
[ in ] LPCWSTR GroupId,
|
|
[ in ] PRESOURCE_ENUM ResourceList
|
|
);
|
|
|
|
//
|
|
// Remotely bring a resource online.
|
|
//
|
|
|
|
error_status_t
|
|
FmsOnlineResourceRequest(
|
|
[ in ] LPCWSTR ResourceId
|
|
);
|
|
|
|
//
|
|
// Remotely take a resource offline.
|
|
//
|
|
|
|
error_status_t
|
|
FmsOfflineResourceRequest(
|
|
[ in ] LPCWSTR ResourceId
|
|
);
|
|
|
|
//
|
|
// Remotely change node list for a resource.
|
|
//
|
|
|
|
error_status_t
|
|
FmsChangeResourceNode(
|
|
[ in ] LPCWSTR ResourceId,
|
|
[ in ] LPCWSTR NodeId,
|
|
[ in ] BOOL Add
|
|
);
|
|
|
|
//
|
|
// Remotely arbitrate a resource.
|
|
//
|
|
|
|
error_status_t
|
|
FmsArbitrateResource(
|
|
[ in ] LPCWSTR ResourceId
|
|
);
|
|
|
|
//
|
|
// Remotely fail a resource.
|
|
//
|
|
|
|
error_status_t
|
|
FmsFailResource(
|
|
[ in ] LPCWSTR ResourceId
|
|
);
|
|
|
|
//
|
|
// Remotely create a resource.
|
|
//
|
|
|
|
error_status_t
|
|
FmsCreateResource(
|
|
[ in ] LPCWSTR GroupId,
|
|
[ in ] LPWSTR ResourceId,
|
|
[ in ] LPCWSTR ResourceName
|
|
);
|
|
|
|
//
|
|
// Remotely delete a resource.
|
|
//
|
|
|
|
error_status_t
|
|
FmsDeleteResource(
|
|
[ in ] LPCWSTR ResourceId
|
|
);
|
|
|
|
//
|
|
// Remotely synchronize the online/offline of a resource.
|
|
//
|
|
|
|
error_status_t
|
|
FmsQuoNodeOnlineResource(
|
|
[ in ] LPCWSTR ResourceId,
|
|
[ in ] LPCWSTR NodeId,
|
|
[ out ] LPDWORD State
|
|
);
|
|
|
|
error_status_t
|
|
FmsQuoNodeOfflineResource(
|
|
[ in ] LPCWSTR ResourceId,
|
|
[ in ] LPCWSTR NodeId,
|
|
[ out ] LPDWORD State
|
|
);
|
|
|
|
error_status_t
|
|
FmsRmOnlineResource(
|
|
[ in ] LPCWSTR ResourceId,
|
|
[ out ] LPDWORD State
|
|
);
|
|
|
|
error_status_t
|
|
FmsRmOfflineResource(
|
|
[ in ] LPCWSTR ResourceId,
|
|
[ out ] LPDWORD State
|
|
);
|
|
|
|
//
|
|
// Remotely control a resource.
|
|
//
|
|
|
|
error_status_t
|
|
FmsResourceControl(
|
|
[ in ] LPCWSTR ResourceId,
|
|
[ in ] DWORD ControlCode,
|
|
[ in, unique, size_is(InBufferSize) ] UCHAR *InBuffer,
|
|
[ in ] DWORD InBufferSize,
|
|
[ out, size_is(OutBufferSize), length_is(*BytesReturned) ] UCHAR *OutBuffer,
|
|
[ in ] DWORD OutBufferSize,
|
|
[ out ] LPDWORD BytesReturned,
|
|
[ out ] LPDWORD Required
|
|
);
|
|
|
|
//
|
|
// Remotely control a resource type.
|
|
//
|
|
|
|
error_status_t
|
|
FmsResourceTypeControl(
|
|
[ in ] LPCWSTR ResourceTypeName,
|
|
[ in ] DWORD ControlCode,
|
|
[ in, unique, size_is(InBufferSize) ] UCHAR *InBuffer,
|
|
[ in ] DWORD InBufferSize,
|
|
[ out, size_is(OutBufferSize), length_is(*BytesReturned) ] UCHAR *OutBuffer,
|
|
[ in ] DWORD OutBufferSize,
|
|
[ out ] LPDWORD BytesReturned,
|
|
[ out ] LPDWORD Required
|
|
);
|
|
|
|
//
|
|
// Remotely control a group.
|
|
//
|
|
|
|
error_status_t
|
|
FmsGroupControl(
|
|
[ in ] LPCWSTR GroupId,
|
|
[ in ] DWORD ControlCode,
|
|
[ in, unique, size_is(InBufferSize) ] UCHAR *InBuffer,
|
|
[ in ] DWORD InBufferSize,
|
|
[ out, size_is(OutBufferSize), length_is(*BytesReturned) ] UCHAR *OutBuffer,
|
|
[ in ] DWORD OutBufferSize,
|
|
[ out ] LPDWORD BytesReturned,
|
|
[ out ] LPDWORD Required
|
|
);
|
|
|
|
//
|
|
//Remotely prepare a resource to become the quorum resource(create quorum log file/take checkpoint)
|
|
//
|
|
error_status_t
|
|
FmsPrepareQuorumResChange(
|
|
[ in ] LPCWSTR ResourceId,
|
|
[ in ] LPCWSTR lpszQuoLogPath,
|
|
[ in ] DWORD dwMaxQuoLogSize
|
|
);
|
|
|
|
|
|
//
|
|
//Remotely ask the resource to relinquish being a quorum resource or prepare a tombstone in the previous
|
|
// location of quorum log files.
|
|
//
|
|
error_status_t
|
|
FmsCompleteQuorumResChange(
|
|
[ in ] LPCWSTR lpszResourceId,
|
|
[ in ] LPCWSTR lpszQuoLogPath
|
|
);
|
|
|
|
//
|
|
// Interface descriptions for the GUM component.
|
|
//
|
|
typedef UCHAR *PGUM_DATA;
|
|
|
|
error_status_t
|
|
GumQueueLockingUpdate(
|
|
[ in ] DWORD NodeId,
|
|
[ in ] DWORD Type,
|
|
[ in ] DWORD Context,
|
|
[ out ] LPDWORD Sequence,
|
|
[ in ] DWORD BufferLength,
|
|
[ in,size_is(BufferLength) ] PGUM_DATA Buffer
|
|
);
|
|
|
|
#ifdef GUM_POST_SUPPORT
|
|
error_status_t
|
|
GumQueueLockingPost(
|
|
[ in ] DWORD NodeId,
|
|
[ in ] DWORD Type,
|
|
[ in ] DWORD Context,
|
|
[ out ] LPDWORD Sequence,
|
|
[ in ] DWORD BufferLength,
|
|
[ in,size_is(BufferLength) ] PGUM_DATA Buffer,
|
|
[ in ] DWORD ActualBuffer
|
|
);
|
|
|
|
error_status_t
|
|
GumDeliverPostCallback(
|
|
[ in ] DWORD FirstNode,
|
|
[ in ] DWORD Type,
|
|
[ in ] DWORD Context,
|
|
[ in ] DWORD Sequence,
|
|
[ in ] DWORD BufferLength,
|
|
[ in ] DWORD Buffer
|
|
);
|
|
#endif
|
|
|
|
|
|
|
|
error_status_t
|
|
GumAttemptJoinUpdate(
|
|
[ in ] DWORD JoiningId,
|
|
[ in ] DWORD Type,
|
|
[ in ] DWORD Context,
|
|
[ in ] DWORD Sequence,
|
|
[ in ] DWORD BufferLength,
|
|
[ in,unique,size_is(BufferLength) ] PGUM_DATA Buffer
|
|
);
|
|
|
|
error_status_t
|
|
GumUnlockUpdate(
|
|
[ in ] DWORD Type,
|
|
[ in ] DWORD Sequence
|
|
);
|
|
|
|
error_status_t
|
|
GumUpdateNode(
|
|
[ in ] DWORD Type,
|
|
[ in ] DWORD Context,
|
|
[ in ] DWORD Sequence,
|
|
[ in ] DWORD BufferLength,
|
|
[ in,size_is(BufferLength) ] PGUM_DATA Buffer
|
|
);
|
|
|
|
error_status_t
|
|
GumJoinUpdateNode(
|
|
[ in ] DWORD JoiningId,
|
|
[ in ] DWORD Type,
|
|
[ in ] DWORD Context,
|
|
[ in ] DWORD Sequence,
|
|
[ in ] DWORD BufferLength,
|
|
[ in,unique,size_is(BufferLength) ] PGUM_DATA Buffer
|
|
);
|
|
|
|
typedef struct _GUM_NODE_LIST {
|
|
DWORD NodeCount;
|
|
[size_is(NodeCount)] DWORD NodeId[*];
|
|
} GUM_NODE_LIST, *PGUM_NODE_LIST;
|
|
|
|
error_status_t
|
|
GumGetNodeSequence(
|
|
[ in ] DWORD Type,
|
|
[ out ] LPDWORD Sequence,
|
|
[ out ] LPDWORD LockerNodeId,
|
|
[ out ] PGUM_NODE_LIST *NodeList
|
|
);
|
|
|
|
|
|
//
|
|
// Interface descriptions for the MM component.
|
|
//
|
|
error_status_t
|
|
MmRpcMsgSend(
|
|
[ in, size_is(length) ] const UCHAR *buffer,
|
|
[ in ] DWORD length
|
|
);
|
|
|
|
//
|
|
// we can't import sspi.h but SECURITY_STATUS is an HRESULT
|
|
//
|
|
|
|
typedef enum _SECURITY_ROLE {
|
|
SecurityRoleJoiningMember = 1,
|
|
SecurityRoleClusterMember
|
|
} SECURITY_ROLE;
|
|
|
|
error_status_t
|
|
MmRpcEstablishSecurityContext(
|
|
[ in ] DWORD NmJoinSequence,
|
|
[ in ] DWORD EstablishingNodeId,
|
|
[ in ] BOOL FirstTime,
|
|
[ in ] SECURITY_ROLE RoleOfClient,
|
|
[ in, size_is(ServerContextLength) ] const UCHAR *ServerContext,
|
|
[ in ] DWORD ServerContextLength,
|
|
[ out, size_is(*ClientContextLength) ] UCHAR *ClientContext,
|
|
[ in, out ] DWORD * ClientContextLength,
|
|
[ out ] HRESULT * ServerStatus
|
|
);
|
|
|
|
error_status_t
|
|
MmRpcDeleteSecurityContext(
|
|
[ in ] DWORD NodeId
|
|
);
|
|
|
|
error_status_t
|
|
MmRpcBanishNode(
|
|
[ in ] DWORD NodeId
|
|
);
|
|
|
|
error_status_t
|
|
NmRpcCreateJoinerBinding(
|
|
[in] DWORD JoinSequence,
|
|
[in, string] LPWSTR JoinerNodeId,
|
|
[in, string] LPWSTR JoinerInterfaceId
|
|
);
|
|
|
|
error_status_t
|
|
NmRpcDeliverJoinMessage(
|
|
[ in, size_is(MessageLength) ] UCHAR *Message,
|
|
[ in ] DWORD MessageLength
|
|
);
|
|
|
|
|
|
//
|
|
// Interface descriptions for the Checkpoint Manager (CP)
|
|
//
|
|
typedef pipe byte BYTE_PIPE;
|
|
|
|
error_status_t
|
|
CpDepositCheckpoint(
|
|
[ in ] const CLUSTER_ID ResourceId,
|
|
[ in ] DWORD dwCheckpointId,
|
|
[ in ] BYTE_PIPE CheckpointData
|
|
);
|
|
|
|
error_status_t
|
|
CpRetrieveCheckpoint(
|
|
[ in ] const CLUSTER_ID ResourceId,
|
|
[ in ] DWORD dwCheckpointId,
|
|
[ out ] BYTE_PIPE CheckpointData
|
|
);
|
|
|
|
//
|
|
// Interface descriptions for the ClusterEventlog Manager (Evtlog)
|
|
//
|
|
error_status_t
|
|
EvPropEvents(
|
|
[ in ] DWORD dwEventInfoSize,
|
|
[in , size_is(dwEventInfoSize)] UCHAR *pPackedEventInfo
|
|
);
|
|
|
|
|
|
//
|
|
// Interface description for the Checkpoint managaer
|
|
//
|
|
error_status_t
|
|
CpDeleteCheckpoint(
|
|
[in] const CLUSTER_ID ResourceId,
|
|
[in] DWORD dwCheckpointId,
|
|
[in, unique] LPCWSTR lpszQuorumPath
|
|
);
|
|
|
|
//
|
|
// New structures and procedures added for version 2.0 (NT4 SP4)
|
|
//
|
|
|
|
//
|
|
// Global Update Manager
|
|
//
|
|
error_status_t
|
|
GumAttemptLockingUpdate(
|
|
[ in ] DWORD NodeId,
|
|
[ in ] DWORD Type,
|
|
[ in ] DWORD Context,
|
|
[ in ] DWORD Sequence,
|
|
[ in ] DWORD BufferLength,
|
|
[ in,size_is(BufferLength) ] PGUM_DATA Buffer
|
|
);
|
|
|
|
error_status_t
|
|
GumCollectVoteFromNode(
|
|
[ in ] DWORD UpdateType,
|
|
[ in ] DWORD dwContext,
|
|
[ in ] DWORD dwInputBufLength,
|
|
[ in, size_is(dwInputBufLength) ] UCHAR *pInputBuf,
|
|
[ in ] DWORD dwVoteLength,
|
|
[ out, size_is(dwVoteLength) ] UCHAR *pVoteBuf
|
|
);
|
|
|
|
//
|
|
// Node Manager
|
|
//
|
|
typedef UCHAR NM_STATE_ENTRY, *PNM_STATE_ENTRY;
|
|
|
|
typedef struct _NM_CONNECTIVITY_VECTOR {
|
|
DWORD EntryCount;
|
|
[ size_is(EntryCount) ] NM_STATE_ENTRY Data[*];
|
|
} NM_CONNECTIVITY_VECTOR, *PNM_CONNECTIVITY_VECTOR;
|
|
|
|
typedef struct _NM_ADDRESS_ENUM {
|
|
DWORD AddressSize;
|
|
DWORD AddressCount;
|
|
[size_is(AddressCount)] ULONGLONG AddressList[*];
|
|
} NM_ADDRESS_ENUM, *PNM_ADDRESS_ENUM;
|
|
|
|
error_status_t
|
|
NmRpcReportInterfaceConnectivity(
|
|
[ in, string ] LPWSTR ReportingInterfaceId,
|
|
[ in ] PNM_CONNECTIVITY_VECTOR ConnectivityVector
|
|
);
|
|
|
|
error_status_t
|
|
NmRpcGetInterfaceOnlineAddressEnum(
|
|
[ in, string ] LPWSTR InterfaceId,
|
|
[ out ] PNM_ADDRESS_ENUM * InterfaceAddressEnum
|
|
);
|
|
|
|
error_status_t
|
|
NmRpcGetInterfacePingAddressEnum(
|
|
[ in, string ] LPWSTR InterfaceId,
|
|
[ in ] PNM_ADDRESS_ENUM OnlineAddressEnum,
|
|
[ out ] PNM_ADDRESS_ENUM * PingAddressEnum
|
|
);
|
|
|
|
//
|
|
// This call returns void rather than error_status_t because of a
|
|
// bug in the MIDL compiler in an early beta of W2K. Making the
|
|
// status the last argument results in the same format on the wire,
|
|
// which will enable us to change the definition later and still
|
|
// interoperate. The call works in its current format, so there
|
|
// is little point in changing it.
|
|
//
|
|
void
|
|
NmRpcDoInterfacePing(
|
|
[ in ] LPWSTR InterfaceId,
|
|
[ in ] PNM_ADDRESS_ENUM PingAddressEnum,
|
|
[ out ] BOOLEAN * PingSucceeded,
|
|
[ out ] error_status_t * CallStatus
|
|
);
|
|
|
|
//
|
|
// Remotely request the owner of the quorum resource to make a backup of the
|
|
// quorum log file and the checkpoint file to the supplied directory path
|
|
//
|
|
error_status_t
|
|
FmsBackupClusterDatabase(
|
|
[ in ] LPCWSTR lpszResourceId,
|
|
[ in ] LPCWSTR lpszPathName
|
|
);
|
|
|
|
|
|
//
|
|
// Remotely change the group for a resource
|
|
//
|
|
error_status_t
|
|
FmsChangeResourceGroup(
|
|
[ in ] LPCWSTR ResourceId,
|
|
[ in ] LPCWSTR GroupId
|
|
);
|
|
|
|
//
|
|
// Remotely request the owner of the node to handle the delete group request.
|
|
//
|
|
error_status_t
|
|
FmsDeleteGroupRequest(
|
|
[ in ] LPCWSTR GroupId
|
|
);
|
|
|
|
//
|
|
// Interface descriptions for the Crypto Checkpoint Management (CP)
|
|
//
|
|
error_status_t
|
|
CpDepositCryptoCheckpoint(
|
|
[ in ] const CLUSTER_ID ResourceId,
|
|
[ in ] DWORD dwCheckpointId,
|
|
[ in ] BYTE_PIPE CheckpointData
|
|
);
|
|
|
|
error_status_t
|
|
CpRetrieveCryptoCheckpoint(
|
|
[ in ] const CLUSTER_ID ResourceId,
|
|
[ in ] DWORD dwCheckpointId,
|
|
[ out ] BYTE_PIPE CheckpointData
|
|
);
|
|
|
|
error_status_t
|
|
CpDeleteCryptoCheckpoint(
|
|
[in] const CLUSTER_ID ResourceId,
|
|
[in] DWORD dwCheckpointId,
|
|
[in, unique] LPCWSTR lpszQuorumPath
|
|
);
|
|
|
|
//
|
|
// Remotely add a resource dependency
|
|
//
|
|
error_status_t
|
|
FmsAddResourceDependency(
|
|
[ in ] LPCWSTR pszResourceId,
|
|
[ in ] LPCWSTR pszDependsOnId
|
|
);
|
|
|
|
//
|
|
// Remotely remove a resource dependency
|
|
//
|
|
error_status_t
|
|
FmsRemoveResourceDependency(
|
|
[ in ] LPCWSTR pszResourceId,
|
|
[ in ] LPCWSTR pszDependsOnId
|
|
);
|
|
|
|
//
|
|
// New structures and procedures added for version 3.0 (Windows 2000)
|
|
//
|
|
error_status_t
|
|
NmRpcAddNode(
|
|
[ in ] LPCWSTR NewNodeName,
|
|
[ in ] DWORD NewNodeHighestVersion,
|
|
[ in ] DWORD NewNodeLowestVersion,
|
|
[ in ] DWORD NewNodeProductSuite
|
|
);
|
|
|
|
//
|
|
// New structures and procedures added for version 4.0 (Windows Server 2003)
|
|
//
|
|
error_status_t
|
|
FmsCreateResource2(
|
|
[ in ] LPCWSTR GroupId,
|
|
[ in ] LPWSTR ResourceId,
|
|
[ in ] LPCWSTR ResourceName,
|
|
[ in ] LPCWSTR ResourceType,
|
|
[ in ] DWORD dwFlags
|
|
);
|
|
|
|
//
|
|
// Interface descriptions for the ClusterEventlog Manager (Evtlog)
|
|
//
|
|
error_status_t
|
|
EvPropEvents2(
|
|
[ in ] DWORD dwEventInfoSize,
|
|
[in , size_is(dwEventInfoSize)] UCHAR *pPackedEventInfo,
|
|
[in] FILETIME TimeofSend,
|
|
[in] DWORD dwSenderNodeId
|
|
);
|
|
|
|
|
|
//
|
|
// Forward a node control request
|
|
//
|
|
error_status_t
|
|
NmRpcNodeControl(
|
|
[ in ] LPCWSTR lpNodeId,
|
|
[ in ] DWORD dwControlCode,
|
|
[ in, unique, size_is(nInBufferSize) ] UCHAR *lpInBuffer,
|
|
[ in ] DWORD nInBufferSize,
|
|
[ out, size_is(nOutBufferSize), length_is (*lpBytesReturned)] UCHAR *lpOutBuffer,
|
|
[ in ] DWORD nOutBufferSize,
|
|
[ out ] DWORD *lpBytesReturned,
|
|
[ out ] DWORD *lpcbRequired
|
|
);
|
|
|
|
// New Gum interfaces defined so that the unlock includes the unlocker id and the generation at which the lock was acquired
|
|
error_status_t
|
|
GumQueueLockingUpdate2(
|
|
[ in ] DWORD NodeId,
|
|
[ in ] DWORD Type,
|
|
[ in ] DWORD Context,
|
|
[ out ] LPDWORD Sequence,
|
|
[ in ] DWORD BufferLength,
|
|
[ in,size_is(BufferLength) ] PGUM_DATA Buffer,
|
|
[ out ] LPDWORD GenerationNum
|
|
);
|
|
|
|
error_status_t
|
|
GumUnlockUpdate2(
|
|
[ in ] DWORD Type,
|
|
[ in ] DWORD Sequence,
|
|
[ in] DWORD SourceId,
|
|
[ in ] DWORD GenerationNum
|
|
);
|
|
|
|
error_status_t
|
|
GumAttemptJoinUpdate2(
|
|
[ in ] DWORD JoiningId,
|
|
[ in ] DWORD Type,
|
|
[ in ] DWORD Context,
|
|
[ in ] DWORD Sequence,
|
|
[ in ] DWORD BufferLength,
|
|
[ in,unique,size_is(BufferLength) ] PGUM_DATA Buffer,
|
|
[ out ] LPDWORD GenerationNum
|
|
);
|
|
|
|
error_status_t
|
|
GumAttemptLockingUpdate2(
|
|
[ in ] DWORD NodeId,
|
|
[ in ] DWORD Type,
|
|
[ in ] DWORD Context,
|
|
[ in ] DWORD Sequence,
|
|
[ in ] DWORD BufferLength,
|
|
[ in,size_is(BufferLength) ] PGUM_DATA Buffer,
|
|
[ out ] LPDWORD GenerationNum
|
|
);
|
|
|
|
} // IntraCluster interface
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// ExtroCluster (Join) RPC Interface Definition
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////
|
|
[
|
|
uuid(ffe561b8-bf15-11cf-8c5e-08002bb49649),
|
|
version(2.0)
|
|
]
|
|
interface ExtroCluster
|
|
{
|
|
import "wtypes.idl";
|
|
|
|
//
|
|
// Constants
|
|
//
|
|
const unsigned long CS_MAX_NODE_NAME_LENGTH = 15; // MAX_COMPUTERNAME_LENGTH
|
|
const unsigned long CS_MAX_NODE_ID_LENGTH = 5; // enough for 99,999 nodes
|
|
const unsigned long CS_NETWORK_ID_LENGTH = 36 ; // size of a GUID.
|
|
const unsigned long CS_NETINTERFACE_ID_LENGTH = 36 ; // size of a GUID.
|
|
|
|
|
|
//
|
|
// Node Configuration Information
|
|
//
|
|
typedef struct _NM_NODE_INFO {
|
|
[string] WCHAR NodeId[CS_MAX_NODE_ID_LENGTH + 1];
|
|
[string] WCHAR NodeName[CS_MAX_NODE_NAME_LENGTH + 1];
|
|
DWORD State;
|
|
} NM_NODE_INFO, *PNM_NODE_INFO;
|
|
|
|
typedef struct _NM_NODE_ENUM {
|
|
DWORD NodeCount;
|
|
[ size_is(NodeCount) ] NM_NODE_INFO NodeList[*];
|
|
} NM_NODE_ENUM, *PNM_NODE_ENUM;
|
|
|
|
//
|
|
// Network Configuration Information.
|
|
//
|
|
typedef struct _NM_INTERFACE_INFO {
|
|
[string] LPWSTR Id;
|
|
[string] LPWSTR Name;
|
|
[string] LPWSTR Description;
|
|
[string] LPWSTR NodeId;
|
|
[string] LPWSTR NetworkId;
|
|
[string] LPWSTR Adapter;
|
|
[string] LPWSTR Address;
|
|
[string] LPWSTR ClusnetEndpoint;
|
|
DWORD State;
|
|
BOOLEAN Ignore;
|
|
} NM_INTERFACE_INFO, *PNM_INTERFACE_INFO;
|
|
|
|
typedef struct _NM_INTERFACE_ENUM {
|
|
DWORD InterfaceCount;
|
|
[ size_is(InterfaceCount) ] NM_INTERFACE_INFO InterfaceList[*];
|
|
} NM_INTERFACE_ENUM, *PNM_INTERFACE_ENUM;
|
|
|
|
typedef struct _NM_NETWORK_INFO {
|
|
[string] LPWSTR Id;
|
|
[string] LPWSTR Name;
|
|
[string] LPWSTR Description;
|
|
DWORD Role;
|
|
DWORD Priority;
|
|
[string] LPWSTR Transport;
|
|
[string] LPWSTR Address;
|
|
[string] LPWSTR AddressMask;
|
|
BOOLEAN Ignore;
|
|
} NM_NETWORK_INFO, *PNM_NETWORK_INFO;
|
|
|
|
typedef struct _NM_NETWORK_ENUM {
|
|
DWORD NetworkCount;
|
|
[ size_is(NetworkCount) ] NM_NETWORK_INFO NetworkList[*];
|
|
} NM_NETWORK_ENUM, *PNM_NETWORK_ENUM;
|
|
|
|
|
|
|
|
|
|
typedef struct _NM_NETWORK_MULTICASTKEY {
|
|
DWORD MulticastKeyExpires;
|
|
[ size_is(EncryptedMulticastKeyLength) ] UCHAR *EncryptedMulticastKey;
|
|
DWORD EncryptedMulticastKeyLength;
|
|
[ size_is(SaltLength) ] UCHAR *Salt;
|
|
DWORD SaltLength;
|
|
[ size_is(MACLength) ] UCHAR *MAC;
|
|
DWORD MACLength;
|
|
} NM_NETWORK_MULTICASTKEY, *PNM_NETWORK_MULTICASTKEY;
|
|
|
|
//
|
|
// Routines
|
|
//
|
|
error_status_t
|
|
NmRpcEnumNodeDefinitions(
|
|
[ in ] DWORD JoinSequence,
|
|
[ in, string ] LPWSTR JoinerNodeId,
|
|
[ out ] PNM_NODE_ENUM * NodeEnum
|
|
);
|
|
|
|
error_status_t
|
|
NmRpcEnumNetworkDefinitions(
|
|
[ in ] DWORD JoinSequence,
|
|
[ in, string ] LPWSTR JoinerNodeId,
|
|
[ out ] PNM_NETWORK_ENUM * NetworkEnum
|
|
);
|
|
|
|
error_status_t
|
|
NmRpcEnumInterfaceDefinitions(
|
|
[ in ] DWORD JoinSequence,
|
|
[ in, string ] LPWSTR JoinerNodeId,
|
|
[ out ] PNM_INTERFACE_ENUM * InterfaceEnum
|
|
);
|
|
|
|
error_status_t
|
|
NmRpcCreateNetwork(
|
|
[ in ] DWORD JoinSequence,
|
|
[ in, string ] LPWSTR JoinerNodeId,
|
|
[ in ] PNM_NETWORK_INFO NetworkInfo,
|
|
[ in ] PNM_INTERFACE_INFO InterfaceInfo
|
|
);
|
|
|
|
error_status_t
|
|
NmRpcCreateInterface(
|
|
[ in ] DWORD JoinSequence,
|
|
[ in, string ] LPWSTR JoinerNodeId,
|
|
[ in ] PNM_INTERFACE_INFO InterfaceInfo
|
|
);
|
|
|
|
error_status_t
|
|
NmRpcSetInterfaceInfo(
|
|
[ in ] DWORD JoinSequence,
|
|
[ in, string ] LPWSTR JoinerNodeId,
|
|
[ in ] PNM_INTERFACE_INFO InterfaceInfo
|
|
);
|
|
|
|
error_status_t
|
|
NmRpcDeleteInterface(
|
|
[ in ] DWORD JoinSequence,
|
|
[ in, string ] LPWSTR JoinerNodeId,
|
|
[ in, string ] LPWSTR InterfaceId,
|
|
[ out ] BOOLEAN * NetworkDeleted
|
|
);
|
|
|
|
error_status_t
|
|
NmRpcJoinBegin(
|
|
[in, string ] LPWSTR JoinerNodeId,
|
|
[in, string ] LPWSTR JoinerNodeName,
|
|
[ out ] LPDWORD SponsorNodeId,
|
|
[ out ] LPDWORD JoinSequenceNumber,
|
|
[ out, string ] LPWSTR * ClusnetEndpoint
|
|
);
|
|
|
|
error_status_t
|
|
NmRpcCreateBinding(
|
|
[ in ] DWORD JoinSequence,
|
|
[ in, string ] LPWSTR JoinerNodeId,
|
|
[ in, string ] LPWSTR JoinerInterfaceId,
|
|
[ in, string ] LPWSTR MemberNodeId
|
|
);
|
|
|
|
error_status_t
|
|
NmRpcPetitionForMembership(
|
|
[ in ] DWORD JoinSequence,
|
|
[ in, string ] LPCWSTR JoinerNodeId
|
|
);
|
|
|
|
error_status_t
|
|
JoinAddNode(
|
|
[ in, string ] LPCWSTR lpszNodeId
|
|
);
|
|
|
|
error_status_t
|
|
DmSyncDatabase(
|
|
[ out ] BYTE_PIPE reg_data
|
|
);
|
|
|
|
error_status_t
|
|
TestRPCSecurity(
|
|
);
|
|
|
|
|
|
//
|
|
// New structures added for version 2.0 (NT 5.0) that are understood
|
|
// by NT4 SP4.
|
|
//
|
|
|
|
//
|
|
// Node Configuration Information Structure
|
|
//
|
|
typedef struct _NM_NODE_INFO2{
|
|
[string] WCHAR NodeId[CS_MAX_NODE_ID_LENGTH + 1];
|
|
[string] WCHAR NodeName[CS_MAX_NODE_NAME_LENGTH + 1];
|
|
DWORD State;
|
|
//
|
|
// New fields in Version 2.0
|
|
//
|
|
DWORD NodeHighestVersion;
|
|
DWORD NodeLowestVersion;
|
|
} NM_NODE_INFO2, *PNM_NODE_INFO2;
|
|
|
|
typedef struct _NM_NODE_ENUM2{
|
|
DWORD NodeCount;
|
|
[ size_is(NodeCount) ] NM_NODE_INFO2 NodeList[*];
|
|
} NM_NODE_ENUM2, *PNM_NODE_ENUM2;
|
|
|
|
//
|
|
// Network Interface Configuration Information Structure
|
|
//
|
|
// Extension of NM_INTERFACE_INFO structure. Extended fields
|
|
// are appended to the original structure.
|
|
//
|
|
typedef struct _NM_INTERFACE_INFO2 {
|
|
[string] LPWSTR Id;
|
|
[string] LPWSTR Name;
|
|
[string] LPWSTR Description;
|
|
[string] LPWSTR NodeId;
|
|
[string] LPWSTR NetworkId;
|
|
[string] LPWSTR AdapterName; // Field renamed, but location unchanged
|
|
[string] LPWSTR Address;
|
|
[string] LPWSTR ClusnetEndpoint;
|
|
DWORD State;
|
|
BOOLEAN Ignore;
|
|
//
|
|
// New fields in Version 2.0
|
|
//
|
|
[string] LPWSTR AdapterId;
|
|
DWORD NetIndex;
|
|
} NM_INTERFACE_INFO2, *PNM_INTERFACE_INFO2;
|
|
|
|
typedef struct _NM_INTERFACE_ENUM2 {
|
|
DWORD InterfaceCount;
|
|
[ size_is(InterfaceCount) ] NM_INTERFACE_INFO2 InterfaceList[*];
|
|
} NM_INTERFACE_ENUM2, *PNM_INTERFACE_ENUM2;
|
|
|
|
cpp_quote("#define NmInvalidInterfaceNetIndex 0xFFFFFFFF")
|
|
|
|
//
|
|
// Network Interface State Information Structure
|
|
//
|
|
typedef struct _NM_INTERFACE_STATE_INFO {
|
|
[string] LPWSTR Id;
|
|
DWORD State;
|
|
} NM_INTERFACE_STATE_INFO, *PNM_INTERFACE_STATE_INFO;
|
|
|
|
typedef struct _NM_INTERFACE_STATE_ENUM {
|
|
DWORD InterfaceCount;
|
|
[ size_is(InterfaceCount) ] NM_INTERFACE_STATE_INFO InterfaceList[*];
|
|
} NM_INTERFACE_STATE_ENUM, *PNM_INTERFACE_STATE_ENUM;
|
|
|
|
typedef struct _NM_NETWORK_STATE_INFO {
|
|
[string] LPWSTR Id;
|
|
DWORD State;
|
|
} NM_NETWORK_STATE_INFO, *PNM_NETWORK_STATE_INFO;
|
|
|
|
typedef struct _NM_NETWORK_STATE_ENUM {
|
|
DWORD NetworkCount;
|
|
[ size_is(NetworkCount) ] NM_NETWORK_STATE_INFO NetworkList[*];
|
|
} NM_NETWORK_STATE_ENUM, *PNM_NETWORK_STATE_ENUM;
|
|
|
|
//
|
|
// New routines added for version 2.0 (NT 5.0) that are understood
|
|
// by NT4 SP4.
|
|
//
|
|
error_status_t
|
|
NmRpcJoinBegin2(
|
|
[in, string ] LPWSTR JoinerNodeId,
|
|
[in, string ] LPWSTR JoinerNodeName,
|
|
[in ] DWORD JoinerHighestVersion,
|
|
[in ] DWORD JoinerLowestVersion,
|
|
[ out ] LPDWORD SponsorNodeId,
|
|
[ out ] LPDWORD JoinSequenceNumber,
|
|
[ out, string ] LPWSTR * ClusnetEndpoint
|
|
);
|
|
|
|
error_status_t
|
|
JoinAddNode2(
|
|
[ in, string ] LPCWSTR lpszNodeId,
|
|
[ in ] DWORD dwNodeHighestVersion,
|
|
[ in ] DWORD dwNodeLowestVersion
|
|
);
|
|
|
|
error_status_t
|
|
NmRpcEnumNodeDefinitions2(
|
|
[ in ] DWORD JoinSequence,
|
|
[ in, string ] LPWSTR JoinerNodeId,
|
|
[ out ] PNM_NODE_ENUM2 * NodeEnum2
|
|
);
|
|
|
|
error_status_t
|
|
NmRpcEnumInterfaceDefinitions2(
|
|
[ in ] DWORD JoinSequence,
|
|
[ in, string ] LPWSTR JoinerNodeId,
|
|
[ out ] PNM_INTERFACE_ENUM2 * InterfaceEnum2
|
|
);
|
|
|
|
error_status_t
|
|
NmRpcCreateNetwork2(
|
|
[ in ] DWORD JoinSequence,
|
|
[ in, string ] LPWSTR JoinerNodeId,
|
|
[ in ] PNM_NETWORK_INFO NetworkInfo,
|
|
[ in ] PNM_INTERFACE_INFO2 InterfaceInfo2
|
|
);
|
|
|
|
error_status_t
|
|
NmRpcCreateInterface2(
|
|
[ in ] DWORD JoinSequence,
|
|
[ in, string ] LPWSTR JoinerNodeId,
|
|
[ in ] PNM_INTERFACE_INFO2 InterfaceInfo2
|
|
);
|
|
|
|
error_status_t
|
|
NmRpcSetInterfaceInfo2(
|
|
[ in ] DWORD JoinSequence,
|
|
[ in, string ] LPWSTR JoinerNodeId,
|
|
[ in ] PNM_INTERFACE_INFO2 InterfaceInfo2
|
|
);
|
|
|
|
error_status_t
|
|
NmRpcSetNetworkName(
|
|
[ in ] DWORD JoinSequence,
|
|
[ in, string ] LPWSTR JoinerNodeId,
|
|
[ in ] PNM_NETWORK_INFO NetworkInfo
|
|
);
|
|
|
|
error_status_t
|
|
NmRpcReportJoinerInterfaceConnectivity(
|
|
[ in ] DWORD JoinSequence,
|
|
[ in, string ] LPWSTR JoinerNodeId,
|
|
[ in, string ] LPWSTR ReportingInterfaceId,
|
|
[ in ] PNM_CONNECTIVITY_VECTOR ConnectivityVector
|
|
);
|
|
|
|
error_status_t
|
|
NmRpcEnumNetworkAndInterfaceStates(
|
|
[ in ] DWORD JoinSequence,
|
|
[ in, string ] LPWSTR JoinerNodeId,
|
|
[ out ] PNM_NETWORK_STATE_ENUM * NetworkStateEnum,
|
|
[ out ] PNM_INTERFACE_STATE_ENUM * InterfaceStateEnum
|
|
);
|
|
|
|
error_status_t
|
|
NmRpcGetLeaderNodeId(
|
|
[ in ] DWORD JoinSequence,
|
|
[ in, string ] LPWSTR JoinerNodeId,
|
|
[ out ] LPDWORD LeaderNodeId
|
|
);
|
|
|
|
//
|
|
// New structures and procedures added for version 2.0 (NT 5.0)
|
|
// that are not understood by NT4 SP4.
|
|
//
|
|
error_status_t
|
|
JoinAddNode3(
|
|
[ in, string ] LPCWSTR lpszNodeId,
|
|
[ in ] DWORD dwNodeHighestVersion,
|
|
[ in ] DWORD dwNodeLowestVersion,
|
|
[ in ] DWORD dwNodeProductSuite
|
|
);
|
|
|
|
//
|
|
// New structures and procedures added for version 2.1 (NT 5.1)
|
|
// that are not understood by NT 5.0 or earlier
|
|
//
|
|
error_status_t
|
|
NmRpcJoinBegin3(
|
|
[in, string ] LPWSTR JoinerClusterInstanceId,
|
|
[in, string ] LPWSTR JoinerNodeId,
|
|
[in, string ] LPWSTR JoinerNodeName,
|
|
[in ] DWORD JoinerHighestVersion,
|
|
[in ] DWORD JoinerLowestVersion,
|
|
[in ] DWORD JoinerMajorVersion,
|
|
[in ] DWORD JoinerMinorVersion,
|
|
[in, string ] LPWSTR JoinerCsdVersion,
|
|
[in ] DWORD JoinerProductSuite,
|
|
[ out ] LPDWORD SponsorNodeId,
|
|
[ out ] LPDWORD JoinSequenceNumber,
|
|
[ out, string ] LPWSTR * ClusnetEndpoint
|
|
);
|
|
|
|
error_status_t
|
|
JoinAddNode4(
|
|
[ in, string ] LPCWSTR lpszNodeId,
|
|
[ in ] DWORD dwNodeHighestVersion,
|
|
[ in ] DWORD dwNodeLowestVersion,
|
|
[ in ] DWORD dwNodeProductSuite,
|
|
[ in ] BOOL bIsNodeRunningWin64,
|
|
[ in ] DWORD dwNodeProcessorArchitecture
|
|
);
|
|
|
|
error_status_t
|
|
NmRpcGetNetworkMulticastKey(
|
|
[ in, string ] LPWSTR JoinerNodeId,
|
|
[ in, string ] LPWSTR NetworkId,
|
|
[ out ] PNM_NETWORK_MULTICASTKEY * NetworkMutlicastKey
|
|
);
|
|
|
|
|
|
} // ExtroCluster interface
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Join Version RPC Interface Definition
|
|
//
|
|
// Don't ever change this interface unless you really, really,
|
|
// really know what you're doing.
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////
|
|
[
|
|
uuid(6e17aaa0-1a47-11d1-98bd-0000f875292e),
|
|
version(2.0)
|
|
]
|
|
interface JoinVersion
|
|
{
|
|
import "wtypes.idl";
|
|
|
|
error_status_t
|
|
CsRpcGetJoinVersionData(
|
|
[ in ] DWORD JoiningNodeId,
|
|
[ in ] DWORD JoinerHighestVersion,
|
|
[ in ] DWORD JoinerLowestVersion,
|
|
[ out ] LPDWORD SponsorNodeId,
|
|
[ out ] LPDWORD ClusterHighestVersion,
|
|
[ out ] LPDWORD ClusterLowestVersion,
|
|
[ out ] LPDWORD JoinStatus
|
|
);
|
|
|
|
} // JoinVersion interface
|
|
|
|
|
|
cpp_quote("#endif //_CLUSRPC_INCLUDED_")
|