📄 clusapi.h
字号:
/*++
Copyright (c) 1995-1997 Microsoft Corporation
Module Name:
clusapi.h
Abstract:
This module defines the common management and application interface to
the Microsoft Cluster Server services.
Revision History:
--*/
#ifndef _CLUSTER_API_
#define _CLUSTER_API_
#ifdef __cplusplus
extern "C" {
#endif
//
// General cluster definitions
//
#ifndef _CLUSTER_API_TYPES_
//
// Defined cluster handle types.
//
typedef struct _HCLUSTER *HCLUSTER;
typedef struct _HNODE *HNODE;
typedef struct _HRESOURCE *HRESOURCE;
typedef struct _HGROUP *HGROUP;
typedef struct _HRESTYPE *HRESTYPE;
typedef struct _HNETWORK *HNETWORK;
typedef struct _HNETINTERFACE *HNETINTERFACE;
typedef struct _HCHANGE *HCHANGE;
typedef struct _HCLUSENUM *HCLUSENUM;
typedef struct _HGROUPENUM *HGROUPENUM;
typedef struct _HRESENUM *HRESENUM;
typedef struct _HNETWORKENUM *HNETWORKENUM;
typedef struct _HNODEENUM *HNODEENUM;
#endif // _CLUSTER_API_TYPES_
//
// Definitions used in cluster management routines.
//
#define MAX_CLUSTERNAME_LENGTH MAX_COMPUTERNAME_LENGTH
#ifndef _CLUSTER_API_TYPES_
//
// Cluster-related structures and types
//
typedef enum CLUSTER_QUORUM_TYPE {
OperationalQuorum,
ModifyQuorum
} CLUSTER_QUORUM_TYPE;
#ifndef MIDL_PASS
typedef struct CLUSTERVERSIONINFO {
DWORD dwVersionInfoSize;
WORD MajorVersion;
WORD MinorVersion;
WORD BuildNumber;
WCHAR szVendorId[64];
WCHAR szCSDVersion[64];
} CLUSTERVERSIONINFO, *LPCLUSTERVERSIONINFO;
#endif // MIDL_PASS
#endif // _CLUSTER_API_TYPES_
//
// Interfaces for managing clusters
//
//
// Cluster API Specific Access Rights
//
#define CLUSAPI_READ_ACCESS 0x00000001L
#define CLUSAPI_CHANGE_ACCESS 0x00000002L
#define CLUSAPI_NO_ACCESS 0x00000004L
#define CLUSAPI_ALL_ACCESS (CLUSAPI_READ_ACCESS | CLUSAPI_CHANGE_ACCESS)
#ifndef MIDL_PASS
HCLUSTER
WINAPI
OpenCluster(
IN LPCWSTR lpszClusterName
);
BOOL
WINAPI
CloseCluster(
IN HCLUSTER hCluster
);
DWORD
WINAPI
SetClusterName(
IN HCLUSTER hCluster,
IN LPCWSTR lpszNewClusterName
);
DWORD
WINAPI
GetClusterInformation(
IN HCLUSTER hCluster,
OUT LPWSTR lpszClusterName,
IN OUT LPDWORD lpcbClusterName,
OUT OPTIONAL LPCLUSTERVERSIONINFO lpClusterInfo
);
DWORD
WINAPI
GetClusterQuorumResource(
IN HCLUSTER hCluster,
OUT LPWSTR lpszResourceName,
IN OUT LPDWORD lpcbResourceName,
OUT LPWSTR lpszDeviceName,
IN OUT LPDWORD lpcbDeviceName,
OUT LPDWORD lpdwMaxQuorumLogSize
);
DWORD
WINAPI
SetClusterQuorumResource(
IN HRESOURCE hResource,
IN LPCWSTR lpszDeviceName,
IN DWORD dwMaxQuoLogSize
);
DWORD
WINAPI
SetClusterNetworkPriorityOrder(
IN HCLUSTER hCluster,
IN DWORD NetworkCount,
IN HNETWORK NetworkList[]
);
#endif // MIDL_PASS
//
// Cluster Event Notification API
//
#ifndef _CLUSTER_API_TYPES_
//
// Cluster event filter flags.
//
typedef enum CLUSTER_CHANGE {
CLUSTER_CHANGE_NODE_STATE = 0x00000001,
CLUSTER_CHANGE_NODE_DELETED = 0x00000002,
CLUSTER_CHANGE_NODE_ADDED = 0x00000004,
CLUSTER_CHANGE_NODE_PROPERTY = 0x00000008,
CLUSTER_CHANGE_REGISTRY_NAME = 0x00000010,
CLUSTER_CHANGE_REGISTRY_ATTRIBUTES = 0x00000020,
CLUSTER_CHANGE_REGISTRY_VALUE = 0x00000040,
CLUSTER_CHANGE_REGISTRY_SUBTREE = 0x00000080,
CLUSTER_CHANGE_RESOURCE_STATE = 0x00000100,
CLUSTER_CHANGE_RESOURCE_DELETED = 0x00000200,
CLUSTER_CHANGE_RESOURCE_ADDED = 0x00000400,
CLUSTER_CHANGE_RESOURCE_PROPERTY = 0x00000800,
CLUSTER_CHANGE_GROUP_STATE = 0x00001000,
CLUSTER_CHANGE_GROUP_DELETED = 0x00002000,
CLUSTER_CHANGE_GROUP_ADDED = 0x00004000,
CLUSTER_CHANGE_GROUP_PROPERTY = 0x00008000,
CLUSTER_CHANGE_RESOURCE_TYPE_DELETED = 0x00010000,
CLUSTER_CHANGE_RESOURCE_TYPE_ADDED = 0x00020000,
CLUSTER_CHANGE_NETWORK_STATE = 0x00100000,
CLUSTER_CHANGE_NETWORK_DELETED = 0x00200000,
CLUSTER_CHANGE_NETWORK_ADDED = 0x00400000,
CLUSTER_CHANGE_NETWORK_PROPERTY = 0x00800000,
CLUSTER_CHANGE_NETINTERFACE_STATE = 0x01000000,
CLUSTER_CHANGE_NETINTERFACE_DELETED = 0x02000000,
CLUSTER_CHANGE_NETINTERFACE_ADDED = 0x04000000,
CLUSTER_CHANGE_NETINTERFACE_PROPERTY = 0x08000000,
CLUSTER_CHANGE_QUORUM_STATE = 0x10000000,
CLUSTER_CHANGE_CLUSTER_STATE = 0x20000000,
CLUSTER_CHANGE_CLUSTER_PROPERTY = 0x40000000,
CLUSTER_CHANGE_HANDLE_CLOSE = 0x80000000,
CLUSTER_CHANGE_ALL = (CLUSTER_CHANGE_NODE_STATE |
CLUSTER_CHANGE_NODE_DELETED |
CLUSTER_CHANGE_NODE_ADDED |
CLUSTER_CHANGE_NODE_PROPERTY |
CLUSTER_CHANGE_REGISTRY_NAME |
CLUSTER_CHANGE_REGISTRY_ATTRIBUTES |
CLUSTER_CHANGE_REGISTRY_VALUE |
CLUSTER_CHANGE_REGISTRY_SUBTREE |
CLUSTER_CHANGE_RESOURCE_STATE |
CLUSTER_CHANGE_RESOURCE_DELETED |
CLUSTER_CHANGE_RESOURCE_ADDED |
CLUSTER_CHANGE_RESOURCE_PROPERTY |
CLUSTER_CHANGE_GROUP_STATE |
CLUSTER_CHANGE_GROUP_DELETED |
CLUSTER_CHANGE_GROUP_ADDED |
CLUSTER_CHANGE_GROUP_PROPERTY |
CLUSTER_CHANGE_RESOURCE_TYPE_DELETED |
CLUSTER_CHANGE_RESOURCE_TYPE_ADDED |
CLUSTER_CHANGE_NETWORK_STATE |
CLUSTER_CHANGE_NETWORK_DELETED |
CLUSTER_CHANGE_NETWORK_ADDED |
CLUSTER_CHANGE_NETWORK_PROPERTY |
CLUSTER_CHANGE_NETINTERFACE_STATE |
CLUSTER_CHANGE_NETINTERFACE_DELETED |
CLUSTER_CHANGE_NETINTERFACE_ADDED |
CLUSTER_CHANGE_NETINTERFACE_PROPERTY |
CLUSTER_CHANGE_QUORUM_STATE |
CLUSTER_CHANGE_CLUSTER_STATE |
CLUSTER_CHANGE_CLUSTER_PROPERTY |
CLUSTER_CHANGE_HANDLE_CLOSE)
} CLUSTER_CHANGE;
#endif // _CLUSTER_API_TYPES_
#ifndef MIDL_PASS
HCHANGE
WINAPI
CreateClusterNotifyPort(
IN OPTIONAL HCHANGE hChange,
IN OPTIONAL HCLUSTER hCluster,
IN DWORD dwFilter,
IN DWORD dwNotifyKey
);
DWORD
WINAPI
RegisterClusterNotify(
IN HCHANGE hChange,
IN DWORD dwFilterType,
IN HANDLE hObject,
IN DWORD dwNotifyKey
);
DWORD
WINAPI
GetClusterNotify(
IN HCHANGE hChange,
OUT LPDWORD lpdwNotifyKey,
OUT LPDWORD lpdwFilterType,
OUT OPTIONAL LPWSTR lpszName,
IN OUT LPDWORD lpcbName,
IN DWORD dwMilliseconds
);
BOOL
WINAPI
CloseClusterNotifyPort(
IN HCHANGE hChange
);
#endif // MIDL_PASS
//
// Enumeration routines
//
#ifndef _CLUSTER_API_TYPES_
//
// Define enumerable types
//
typedef enum CLUSTER_ENUM {
CLUSTER_ENUM_NODE = 0x00000001,
CLUSTER_ENUM_RESTYPE = 0x00000002,
CLUSTER_ENUM_RESOURCE = 0x00000004,
CLUSTER_ENUM_GROUP = 0x00000008,
CLUSTER_ENUM_NETWORK = 0x00000010,
CLUSTER_ENUM_NETINTERFACE = 0x00000020,
CLUSTER_ENUM_INTERNAL_NETWORK = 0x80000000,
CLUSTER_ENUM_ALL = (CLUSTER_ENUM_NODE |
CLUSTER_ENUM_RESTYPE |
CLUSTER_ENUM_RESOURCE |
CLUSTER_ENUM_GROUP |
CLUSTER_ENUM_NETWORK |
CLUSTER_ENUM_NETINTERFACE)
} CLUSTER_ENUM;
#endif // _CLUSTER_API_TYPES_
#ifndef MIDL_PASS
HCLUSENUM
WINAPI
ClusterOpenEnum(
IN HCLUSTER hCluster,
IN DWORD dwType
);
DWORD
WINAPI
ClusterEnum(
IN HCLUSENUM hEnum,
IN DWORD dwIndex,
OUT LPDWORD lpdwType,
OUT LPWSTR lpszName,
IN OUT LPDWORD lpcbName
);
DWORD
WINAPI
ClusterCloseEnum(
IN HCLUSENUM hEnum
);
#endif // MIDL_PASS
#ifndef _CLUSTER_API_TYPES_
//
// Define enumerable node types
//
typedef enum CLUSTER_NODE_ENUM {
CLUSTER_NODE_ENUM_NETINTERFACES = 0x00000001,
CLUSTER_NODE_ENUM_ALL = (CLUSTER_NODE_ENUM_NETINTERFACES)
} CLUSTER_NODE_ENUM;
//
// Node-related structures and types.
//
typedef enum CLUSTER_NODE_STATE {
ClusterNodeStateUnknown = -1,
ClusterNodeUp,
ClusterNodeDown,
ClusterNodePaused,
ClusterNodeJoining
} CLUSTER_NODE_STATE;
#endif // _CLUSTER_API_TYPES_
//
// Interfaces for managing the nodes of a cluster.
//
#ifndef MIDL_PASS
HNODE
WINAPI
OpenClusterNode(
IN HCLUSTER hCluster,
IN LPCWSTR lpszNodeName
);
BOOL
WINAPI
CloseClusterNode(
IN HNODE hNode
);
CLUSTER_NODE_STATE
WINAPI
GetClusterNodeState(
IN HNODE hNode
);
DWORD
WINAPI
GetClusterNodeId(
IN HNODE hNode,
OUT LPWSTR lpszNodeId,
IN OUT LPDWORD lpcchName
);
#define GetCurrentClusterNodeId(_lpszNodeId_, _lpcchName_) \
GetClusterNodeId(NULL, (_lpszNodeId_), (_lpcchName_))
DWORD
WINAPI
PauseClusterNode(
IN HNODE hNode
);
DWORD
WINAPI
ResumeClusterNode(
IN HNODE hNode
);
DWORD
WINAPI
EvictClusterNode(
IN HNODE hNode
);
HNODEENUM
WINAPI
ClusterNodeOpenEnum(
IN HNODE hNode,
IN DWORD dwType
);
DWORD
WINAPI
ClusterNodeCloseEnum(
IN HNODEENUM hNodeEnum
);
DWORD
WINAPI
ClusterNodeEnum(
IN HNODEENUM hNodeEnum,
IN DWORD dwIndex,
OUT LPDWORD lpdwType,
OUT LPWSTR lpszName,
IN OUT LPDWORD lpcbName
);
#endif // MIDL_PASS
//
// Interfaces for managing the resource types in a cluster
//
#ifndef MIDL_PASS
HKEY
WINAPI
GetClusterResourceTypeKey(
IN HCLUSTER hCluster,
IN LPCWSTR lpszTypeName,
IN REGSAM samDesired
);
#endif // MIDL_PASS
#ifndef _CLUSTER_API_TYPES_
//
// Define enumerable group types
//
typedef enum CLUSTER_GROUP_ENUM {
CLUSTER_GROUP_ENUM_CONTAINS = 0x00000001,
CLUSTER_GROUP_ENUM_NODES = 0x00000002,
CLUSTER_GROUP_ENUM_ALL = (CLUSTER_GROUP_ENUM_CONTAINS |
CLUSTER_GROUP_ENUM_NODES)
} CLUSTER_GROUP_ENUM;
//
// Interfaces for managing the failover groups in a cluster.
//
typedef enum CLUSTER_GROUP_STATE {
ClusterGroupStateUnknown = -1,
ClusterGroupOnline,
ClusterGroupOffline,
ClusterGroupFailed,
ClusterGroupPartialOnline
} CLUSTER_GROUP_STATE;
typedef enum CLUSTER_GROUP_AUTOFAILBACK_TYPE
{
ClusterGroupPreventFailback = 0,
ClusterGroupAllowFailback,
ClusterGroupFailbackTypeCount
} CLUSTER_GROUP_AUTOFAILBACK_TYPE, CGAFT;
#endif // _CLUSTER_API_TYPES_
#ifndef MIDL_PASS
HGROUP
WINAPI
CreateClusterGroup(
IN HCLUSTER hCluster,
IN LPCWSTR lpszGroupName
);
HGROUP
WINAPI
OpenClusterGroup(
IN HCLUSTER hCluster,
IN LPCWSTR lpszGroupName
);
BOOL
WINAPI
CloseClusterGroup(
IN HGROUP hGroup
);
CLUSTER_GROUP_STATE
WINAPI
GetClusterGroupState(
IN HGROUP hGroup,
OUT OPTIONAL LPWSTR lpszNodeName,
IN OUT LPDWORD lpcbNodeName
);
DWORD
WINAPI
SetClusterGroupName(
IN HGROUP hGroup,
IN LPCWSTR lpszGroupName
);
DWORD
WINAPI
SetClusterGroupNodeList(
IN HGROUP hGroup,
IN DWORD NodeCount,
IN HNODE NodeList[]
);
DWORD
WINAPI
OnlineClusterGroup(
IN HGROUP hGroup,
IN OPTIONAL HNODE hDestinationNode
);
DWORD
WINAPI
MoveClusterGroup(
IN HGROUP hGroup,
IN OPTIONAL HNODE hDestinationNode
);
DWORD
WINAPI
OfflineClusterGroup(
IN HGROUP hGroup
);
DWORD
WINAPI
DeleteClusterGroup(
IN HGROUP hGroup
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -