📄 clusapi.h
字号:
/*++
Copyright (c) 1995-1999 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_
#pragma option push -b -a8 -pc -A- /*P_O_Push*/
#define _CLUSTER_API_
#define CLUSAPI_VERSION 0x0500
#if _MSC_VER > 1000
#pragma once
#endif
#ifdef __cplusplus
extern "C" {
#endif
#ifndef MIDL_PASS
#if _MSC_VER >= 1200
#pragma warning(push)
#endif
#pragma warning( disable : 4200 ) // nonstandard extension used : zero-sized array in struct/union
#pragma warning( disable : 4201 ) // nonstandard extension used : nameless struct/union
#endif // MIDL_PASS
//
// 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;
typedef struct _HRESTYPEENUM *HRESTYPEENUM;
#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_NT4 {
DWORD dwVersionInfoSize;
WORD MajorVersion;
WORD MinorVersion;
WORD BuildNumber;
WCHAR szVendorId[64];
WCHAR szCSDVersion[64];
}CLUSTERVERSIONINFO_NT4, *PCLUSTERVERSIONINFO_NT4;
typedef struct CLUSTERVERSIONINFO {
DWORD dwVersionInfoSize;
WORD MajorVersion;
WORD MinorVersion;
WORD BuildNumber;
WCHAR szVendorId[64];
WCHAR szCSDVersion[64];
DWORD dwClusterHighestVersion;
DWORD dwClusterLowestVersion;
DWORD dwFlags;
DWORD dwReserved;
} CLUSTERVERSIONINFO, *LPCLUSTERVERSIONINFO, *PCLUSTERVERSIONINFO;
typedef struct CLUS_STARTING_PARAMS {
DWORD dwSize;
BOOL bForm;
BOOL bFirst;
} CLUS_STARTING_PARAMS, * PCLUS_STARTING_PARAMS;
#define CLUSTER_VERSION_FLAG_MIXED_MODE 0x00000001
#define NT4_MAJOR_VERSION 1
#define NT4SP4_MAJOR_VERSION 2
#define NT5_MAJOR_VERSION 3
#define CLUSTER_VERSION_UNKNOWN 0xFFFFFFFF
//
// Version number macros
//
#define CLUSTER_MAKE_VERSION( _maj, _min ) ((( _maj ) << 16 ) | ( _min ))
#define CLUSTER_GET_MAJOR_VERSION( _ver ) (( _ver ) >> 16 )
#define CLUSTER_GET_MINOR_VERSION( _ver ) (( _ver ) & 0xFFFF )
//
// Interfaces for the cluster state on a node
//
#define CLUSTER_INSTALLED 0x00000001
#define CLUSTER_CONFIGURED 0x00000002
#define CLUSTER_RUNNING 0x00000010
typedef enum NODE_CLUSTER_STATE {
ClusterStateNotInstalled = 0x00000000,
ClusterStateNotConfigured = CLUSTER_INSTALLED,
ClusterStateNotRunning = CLUSTER_INSTALLED | CLUSTER_CONFIGURED,
ClusterStateRunning = CLUSTER_INSTALLED | CLUSTER_CONFIGURED | CLUSTER_RUNNING
} NODE_CLUSTER_STATE;
#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
DWORD
WINAPI
GetNodeClusterState(
IN LPCWSTR lpszNodeName,
OUT DWORD *pdwClusterState
);
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 lpcchClusterName,
OUT OPTIONAL LPCLUSTERVERSIONINFO lpClusterInfo
);
DWORD
WINAPI
GetClusterQuorumResource(
IN HCLUSTER hCluster,
OUT LPWSTR lpszResourceName,
IN OUT LPDWORD lpcchResourceName,
OUT LPWSTR lpszDeviceName,
IN OUT LPDWORD lpcchDeviceName,
OUT LPDWORD lpdwMaxQuorumLogSize
);
DWORD
WINAPI
SetClusterQuorumResource(
IN HRESOURCE hResource,
IN LPCWSTR lpszDeviceName,
IN DWORD dwMaxQuoLogSize
);
DWORD
WINAPI
BackupClusterDatabase(
IN HCLUSTER hCluster,
IN LPCWSTR lpszPathName
);
DWORD
WINAPI
RestoreClusterDatabase(
IN LPCWSTR lpszPathName,
IN BOOL bForce,
IN OPTIONAL LPCWSTR lpszQuorumDriveLetter
);
DWORD
WINAPI
SetClusterNetworkPriorityOrder(
IN HCLUSTER hCluster,
IN DWORD NetworkCount,
IN HNETWORK NetworkList[]
);
DWORD
WINAPI
ClusterControl(
IN HCLUSTER hCluster,
IN OPTIONAL HNODE hHostNode,
IN DWORD dwControlCode,
IN LPVOID lpInBuffer,
IN DWORD nInBufferSize,
OUT LPVOID lpOutBuffer,
IN DWORD nOutBufferSize,
OUT LPDWORD lpBytesReturned
);
#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_RESOURCE_TYPE_PROPERTY = 0x00040000,
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_RESOURCE_TYPE_PROPERTY |
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_PTR dwNotifyKey
);
DWORD
WINAPI
RegisterClusterNotify(
IN HCHANGE hChange,
IN DWORD dwFilterType,
IN HANDLE hObject,
IN DWORD_PTR dwNotifyKey
);
DWORD
WINAPI
GetClusterNotify(
IN HCHANGE hChange,
OUT DWORD_PTR *lpdwNotifyKey,
OUT LPDWORD lpdwFilterType,
OUT OPTIONAL LPWSTR lpszName,
IN OUT LPDWORD lpcchName,
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 lpcchName
);
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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -