master
   1/**
   2 * This file has no copyright assigned and is placed in the Public Domain.
   3 * This file is part of the mingw-w64 runtime package.
   4 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
   5 */
   6#ifndef _CLUSTER_API_
   7#define _CLUSTER_API_
   8
   9#define CLUSAPI_VERSION 0x0500
  10
  11#ifdef __cplusplus
  12extern "C" {
  13#endif
  14
  15#ifndef _CLUSTER_API_TYPES_
  16  typedef struct _HCLUSTER *HCLUSTER;
  17  typedef struct _HNODE *HNODE;
  18  typedef struct _HRESOURCE *HRESOURCE;
  19  typedef struct _HGROUP *HGROUP;
  20  typedef struct _HNETWORK *HNETWORK;
  21  typedef struct _HNETINTERFACE *HNETINTERFACE;
  22  typedef struct _HCHANGE *HCHANGE;
  23  typedef struct _HCLUSENUM *HCLUSENUM;
  24  typedef struct _HGROUPENUM *HGROUPENUM;
  25  typedef struct _HRESENUM *HRESENUM;
  26  typedef struct _HNETWORKENUM *HNETWORKENUM;
  27  typedef struct _HNODEENUM *HNODEENUM;
  28  typedef struct _HRESTYPEENUM *HRESTYPEENUM;
  29#endif
  30
  31#define MAX_CLUSTERNAME_LENGTH MAX_COMPUTERNAME_LENGTH
  32
  33#ifndef _CLUSTER_API_TYPES_
  34
  35  typedef enum CLUSTER_QUORUM_TYPE {
  36    OperationalQuorum,ModifyQuorum
  37  } CLUSTER_QUORUM_TYPE;
  38
  39  typedef struct CLUSTERVERSIONINFO_NT4 {
  40    DWORD dwVersionInfoSize;
  41    WORD MajorVersion;
  42    WORD MinorVersion;
  43    WORD BuildNumber;
  44    WCHAR szVendorId[64];
  45    WCHAR szCSDVersion[64];
  46  } CLUSTERVERSIONINFO_NT4,*PCLUSTERVERSIONINFO_NT4;
  47
  48  typedef struct CLUSTERVERSIONINFO {
  49    DWORD dwVersionInfoSize;
  50    WORD MajorVersion;
  51    WORD MinorVersion;
  52    WORD BuildNumber;
  53    WCHAR szVendorId[64];
  54    WCHAR szCSDVersion[64];
  55    DWORD dwClusterHighestVersion;
  56    DWORD dwClusterLowestVersion;
  57    DWORD dwFlags;
  58    DWORD dwReserved;
  59  } CLUSTERVERSIONINFO,*LPCLUSTERVERSIONINFO,*PCLUSTERVERSIONINFO;
  60
  61  typedef struct CLUS_STARTING_PARAMS {
  62    DWORD dwSize;
  63    WINBOOL bForm;
  64    WINBOOL bFirst;
  65  } CLUS_STARTING_PARAMS,*PCLUS_STARTING_PARAMS;
  66
  67#define CLUSTER_VERSION_FLAG_MIXED_MODE 0x00000001
  68
  69#define NT4_MAJOR_VERSION 1
  70#define NT4SP4_MAJOR_VERSION 2
  71#define NT5_MAJOR_VERSION 3
  72#define NT51_MAJOR_VERSION 4
  73
  74#define CLUSTER_VERSION_UNKNOWN 0xFFFFFFFF
  75
  76#define CLUSTER_MAKE_VERSION(_maj,_min) (((_maj) << 16) | (_min))
  77#define CLUSTER_GET_MAJOR_VERSION(_ver) ((_ver) >> 16)
  78#define CLUSTER_GET_MINOR_VERSION(_ver) ((_ver) & 0xFFFF)
  79
  80#define CLUSTER_INSTALLED 0x00000001
  81#define CLUSTER_CONFIGURED 0x00000002
  82#define CLUSTER_RUNNING 0x00000010
  83
  84  typedef enum NODE_CLUSTER_STATE {
  85    ClusterStateNotInstalled = 0x00000000,ClusterStateNotConfigured = CLUSTER_INSTALLED,ClusterStateNotRunning = CLUSTER_INSTALLED | CLUSTER_CONFIGURED,
  86    ClusterStateRunning = CLUSTER_INSTALLED | CLUSTER_CONFIGURED | CLUSTER_RUNNING
  87  } NODE_CLUSTER_STATE;
  88
  89#define CLUSCTL_RESOURCE_STATE_CHANGE_REASON_VERSION_1 1
  90
  91  typedef enum CLUSTER_RESOURCE_STATE_CHANGE_REASON {
  92    eResourceStateChangeReasonUnknown = 0,eResourceStateChangeReasonMove,eResourceStateChangeReasonFailover,eResourceStateChangeReasonFailedMove,
  93    eResourceStateChangeReasonShutdown,eResourceStateChangeReasonRundown
  94  } CLUSTER_RESOURCE_STATE_CHANGE_REASON;
  95
  96  typedef struct _CLUSCTL_RESOURCE_STATE_CHANGE_REASON_STRUCT {
  97    DWORD dwSize;
  98    DWORD dwVersion;
  99    CLUSTER_RESOURCE_STATE_CHANGE_REASON eReason;
 100  } CLUSCTL_RESOURCE_STATE_CHANGE_REASON_STRUCT,*PCLUSCTL_RESOURCE_STATE_CHANGE_REASON_STRUCT;
 101#endif
 102
 103#define CLUSAPI_READ_ACCESS __MSABI_LONG(0x00000001)
 104#define CLUSAPI_CHANGE_ACCESS __MSABI_LONG(0x00000002)
 105#define CLUSAPI_NO_ACCESS __MSABI_LONG(0x00000004)
 106#define CLUSAPI_ALL_ACCESS (CLUSAPI_READ_ACCESS | CLUSAPI_CHANGE_ACCESS)
 107
 108  typedef enum CLUSTER_SET_PASSWORD_FLAGS {
 109    CLUSTER_SET_PASSWORD_IGNORE_DOWN_NODES = 1
 110  } CLUSTER_SET_PASSWORD_FLAGS;
 111
 112  typedef struct CLUSTER_SET_PASSWORD_STATUS {
 113    DWORD NodeId;
 114    BOOLEAN SetAttempted;
 115    DWORD ReturnStatus;
 116  } CLUSTER_SET_PASSWORD_STATUS,*PCLUSTER_SET_PASSWORD_STATUS;
 117
 118  DWORD WINAPI GetNodeClusterState(LPCWSTR lpszNodeName,DWORD *pdwClusterState);
 119  HCLUSTER WINAPI OpenCluster(LPCWSTR lpszClusterName);
 120  WINBOOL WINAPI CloseCluster(HCLUSTER hCluster);
 121  DWORD WINAPI SetClusterName(HCLUSTER hCluster,LPCWSTR lpszNewClusterName);
 122  DWORD WINAPI GetClusterInformation(HCLUSTER hCluster,LPWSTR lpszClusterName,LPDWORD lpcchClusterName,LPCLUSTERVERSIONINFO lpClusterInfo);
 123  DWORD WINAPI GetClusterQuorumResource(HCLUSTER hCluster,LPWSTR lpszResourceName,LPDWORD lpcchResourceName,LPWSTR lpszDeviceName,LPDWORD lpcchDeviceName,LPDWORD lpdwMaxQuorumLogSize);
 124  DWORD WINAPI SetClusterQuorumResource(HRESOURCE hResource,LPCWSTR lpszDeviceName,DWORD dwMaxQuoLogSize);
 125  DWORD WINAPI BackupClusterDatabase(HCLUSTER hCluster,LPCWSTR lpszPathName);
 126  DWORD WINAPI RestoreClusterDatabase(LPCWSTR lpszPathName,WINBOOL bForce,LPCWSTR lpszQuorumDriveLetter);
 127  DWORD WINAPI SetClusterNetworkPriorityOrder(HCLUSTER hCluster,DWORD NetworkCount,HNETWORK NetworkList[]);
 128  DWORD WINAPI SetClusterServiceAccountPassword(LPCWSTR lpszClusterName,LPCWSTR lpszNewPassword,DWORD dwFlags,PCLUSTER_SET_PASSWORD_STATUS lpReturnStatusBuffer,LPDWORD lpcbReturnStatusBufferSize);
 129  DWORD WINAPI ClusterControl(HCLUSTER hCluster,HNODE hHostNode,DWORD dwControlCode,LPVOID lpInBuffer,DWORD nInBufferSize,LPVOID lpOutBuffer,DWORD nOutBufferSize,LPDWORD lpBytesReturned);
 130
 131#ifndef _CLUSTER_API_TYPES_
 132
 133  typedef enum CLUSTER_CHANGE {
 134    CLUSTER_CHANGE_NODE_STATE = 0x00000001,CLUSTER_CHANGE_NODE_DELETED = 0x00000002,CLUSTER_CHANGE_NODE_ADDED = 0x00000004,
 135    CLUSTER_CHANGE_NODE_PROPERTY = 0x00000008,CLUSTER_CHANGE_REGISTRY_NAME = 0x00000010,CLUSTER_CHANGE_REGISTRY_ATTRIBUTES = 0x00000020,
 136    CLUSTER_CHANGE_REGISTRY_VALUE = 0x00000040,CLUSTER_CHANGE_REGISTRY_SUBTREE = 0x00000080,CLUSTER_CHANGE_RESOURCE_STATE = 0x00000100,
 137    CLUSTER_CHANGE_RESOURCE_DELETED = 0x00000200,CLUSTER_CHANGE_RESOURCE_ADDED = 0x00000400,CLUSTER_CHANGE_RESOURCE_PROPERTY = 0x00000800,
 138    CLUSTER_CHANGE_GROUP_STATE = 0x00001000,CLUSTER_CHANGE_GROUP_DELETED = 0x00002000,CLUSTER_CHANGE_GROUP_ADDED = 0x00004000,
 139    CLUSTER_CHANGE_GROUP_PROPERTY = 0x00008000,CLUSTER_CHANGE_RESOURCE_TYPE_DELETED = 0x00010000,CLUSTER_CHANGE_RESOURCE_TYPE_ADDED = 0x00020000,
 140    CLUSTER_CHANGE_RESOURCE_TYPE_PROPERTY = 0x00040000,CLUSTER_CHANGE_CLUSTER_RECONNECT = 0x00080000,CLUSTER_CHANGE_NETWORK_STATE = 0x00100000,
 141    CLUSTER_CHANGE_NETWORK_DELETED = 0x00200000,CLUSTER_CHANGE_NETWORK_ADDED = 0x00400000,CLUSTER_CHANGE_NETWORK_PROPERTY = 0x00800000,
 142    CLUSTER_CHANGE_NETINTERFACE_STATE = 0x01000000,CLUSTER_CHANGE_NETINTERFACE_DELETED = 0x02000000,CLUSTER_CHANGE_NETINTERFACE_ADDED = 0x04000000,
 143    CLUSTER_CHANGE_NETINTERFACE_PROPERTY = 0x08000000,CLUSTER_CHANGE_QUORUM_STATE = 0x10000000,CLUSTER_CHANGE_CLUSTER_STATE = 0x20000000,
 144    CLUSTER_CHANGE_CLUSTER_PROPERTY = 0x40000000,CLUSTER_CHANGE_HANDLE_CLOSE = 0x80000000,
 145    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_CLUSTER_RECONNECT | CLUSTER_CHANGE_HANDLE_CLOSE)
 146  } CLUSTER_CHANGE;
 147#endif
 148
 149  HCHANGE WINAPI CreateClusterNotifyPort(HCHANGE hChange,HCLUSTER hCluster,DWORD dwFilter,DWORD_PTR dwNotifyKey);
 150  DWORD WINAPI RegisterClusterNotify(HCHANGE hChange,DWORD dwFilterType,HANDLE hObject,DWORD_PTR dwNotifyKey);
 151  DWORD WINAPI GetClusterNotify(HCHANGE hChange,DWORD_PTR *lpdwNotifyKey,LPDWORD lpdwFilterType,LPWSTR lpszName,LPDWORD lpcchName,DWORD dwMilliseconds);
 152  WINBOOL WINAPI CloseClusterNotifyPort(HCHANGE hChange);
 153
 154#ifndef _CLUSTER_API_TYPES_
 155  typedef enum CLUSTER_ENUM {
 156    CLUSTER_ENUM_NODE = 0x00000001,CLUSTER_ENUM_RESTYPE = 0x00000002,CLUSTER_ENUM_RESOURCE = 0x00000004,CLUSTER_ENUM_GROUP = 0x00000008,
 157    CLUSTER_ENUM_NETWORK = 0x00000010,CLUSTER_ENUM_NETINTERFACE = 0x00000020,CLUSTER_ENUM_INTERNAL_NETWORK = 0x80000000,
 158    CLUSTER_ENUM_ALL = (CLUSTER_ENUM_NODE | CLUSTER_ENUM_RESTYPE | CLUSTER_ENUM_RESOURCE | CLUSTER_ENUM_GROUP | CLUSTER_ENUM_NETWORK | CLUSTER_ENUM_NETINTERFACE)
 159  } CLUSTER_ENUM;
 160#endif
 161
 162  HCLUSENUM WINAPI ClusterOpenEnum(HCLUSTER hCluster,DWORD dwType);
 163  DWORD WINAPI ClusterGetEnumCount(HCLUSENUM hEnum);
 164  DWORD WINAPI ClusterEnum(HCLUSENUM hEnum,DWORD dwIndex,LPDWORD lpdwType,LPWSTR lpszName,LPDWORD lpcchName);
 165  DWORD WINAPI ClusterCloseEnum(HCLUSENUM hEnum);
 166
 167#ifndef _CLUSTER_API_TYPES_
 168  typedef enum CLUSTER_NODE_ENUM {
 169    CLUSTER_NODE_ENUM_NETINTERFACES   = 0x00000001,
 170    CLUSTER_NODE_ENUM_GROUPS          = 0x00000002,
 171    CLUSTER_NODE_ENUM_ALL             = (CLUSTER_NODE_ENUM_NETINTERFACES|CLUSTER_NODE_ENUM_GROUPS)
 172  } CLUSTER_NODE_ENUM;
 173
 174  typedef enum CLUSTER_NODE_STATE {
 175    ClusterNodeStateUnknown = -1,ClusterNodeUp,ClusterNodeDown,ClusterNodePaused,ClusterNodeJoining
 176  } CLUSTER_NODE_STATE;
 177#endif
 178
 179  HNODE WINAPI OpenClusterNode(HCLUSTER hCluster,LPCWSTR lpszNodeName);
 180  WINBOOL WINAPI CloseClusterNode(HNODE hNode);
 181  CLUSTER_NODE_STATE WINAPI GetClusterNodeState(HNODE hNode);
 182  DWORD WINAPI GetClusterNodeId(HNODE hNode,LPWSTR lpszNodeId,LPDWORD lpcchName);
 183#define GetCurrentClusterNodeId(_lpszNodeId_,_lpcchName_) GetClusterNodeId(NULL,(_lpszNodeId_),(_lpcchName_))
 184  HCLUSTER WINAPI GetClusterFromNode(HNODE hNode);
 185  DWORD WINAPI PauseClusterNode(HNODE hNode);
 186  DWORD WINAPI ResumeClusterNode(HNODE hNode);
 187  DWORD WINAPI EvictClusterNode(HNODE hNode);
 188  HNODEENUM WINAPI ClusterNodeOpenEnum(HNODE hNode,DWORD dwType);
 189  DWORD WINAPI ClusterNodeGetEnumCount(HNODEENUM hNodeEnum);
 190  DWORD WINAPI ClusterNodeCloseEnum(HNODEENUM hNodeEnum);
 191  DWORD WINAPI ClusterNodeEnum(HNODEENUM hNodeEnum,DWORD dwIndex,LPDWORD lpdwType,LPWSTR lpszName,LPDWORD lpcchName);
 192  DWORD WINAPI EvictClusterNodeEx(HNODE hNode,DWORD dwTimeOut,HRESULT *phrCleanupStatus);
 193  HKEY WINAPI GetClusterResourceTypeKey(HCLUSTER hCluster,LPCWSTR lpszTypeName,REGSAM samDesired);
 194
 195#ifndef _CLUSTER_API_TYPES_
 196  typedef enum CLUSTER_GROUP_ENUM {
 197    CLUSTER_GROUP_ENUM_CONTAINS = 0x00000001,CLUSTER_GROUP_ENUM_NODES = 0x00000002,
 198    CLUSTER_GROUP_ENUM_ALL = (CLUSTER_GROUP_ENUM_CONTAINS | CLUSTER_GROUP_ENUM_NODES)
 199  } CLUSTER_GROUP_ENUM;
 200
 201  typedef enum CLUSTER_GROUP_STATE {
 202    ClusterGroupStateUnknown = -1,ClusterGroupOnline,ClusterGroupOffline,ClusterGroupFailed,ClusterGroupPartialOnline,ClusterGroupPending
 203  } CLUSTER_GROUP_STATE;
 204
 205  typedef enum CLUSTER_GROUP_AUTOFAILBACK_TYPE {
 206    ClusterGroupPreventFailback = 0,ClusterGroupAllowFailback,ClusterGroupFailbackTypeCount
 207  } CLUSTER_GROUP_AUTOFAILBACK_TYPE,CGAFT;
 208#endif
 209
 210  HGROUP WINAPI CreateClusterGroup(HCLUSTER hCluster,LPCWSTR lpszGroupName);
 211  HGROUP WINAPI OpenClusterGroup(HCLUSTER hCluster,LPCWSTR lpszGroupName);
 212  WINBOOL WINAPI CloseClusterGroup(HGROUP hGroup);
 213  HCLUSTER WINAPI GetClusterFromGroup(HGROUP hGroup);
 214  CLUSTER_GROUP_STATE WINAPI GetClusterGroupState(HGROUP hGroup,LPWSTR lpszNodeName,LPDWORD lpcchNodeName);
 215  DWORD WINAPI SetClusterGroupName(HGROUP hGroup,LPCWSTR lpszGroupName);
 216  DWORD WINAPI SetClusterGroupNodeList(HGROUP hGroup,DWORD NodeCount,HNODE NodeList[]);
 217  DWORD WINAPI OnlineClusterGroup(HGROUP hGroup,HNODE hDestinationNode);
 218  DWORD WINAPI MoveClusterGroup(HGROUP hGroup,HNODE hDestinationNode);
 219  DWORD WINAPI OfflineClusterGroup(HGROUP hGroup);
 220  DWORD WINAPI DeleteClusterGroup(HGROUP hGroup);
 221  HGROUPENUM WINAPI ClusterGroupOpenEnum(HGROUP hGroup,DWORD dwType);
 222  DWORD WINAPI ClusterGroupGetEnumCount(HGROUPENUM hGroupEnum);
 223  DWORD WINAPI ClusterGroupEnum(HGROUPENUM hGroupEnum,DWORD dwIndex,LPDWORD lpdwType,LPWSTR lpszResourceName,LPDWORD lpcchName);
 224  DWORD WINAPI ClusterGroupCloseEnum(HGROUPENUM hGroupEnum);
 225
 226#ifndef _CLUSTER_API_TYPES_
 227  typedef enum CLUSTER_RESOURCE_STATE {
 228    ClusterResourceStateUnknown = -1,ClusterResourceInherited,ClusterResourceInitializing,ClusterResourceOnline,ClusterResourceOffline,
 229    ClusterResourceFailed,ClusterResourcePending = 128,ClusterResourceOnlinePending,ClusterResourceOfflinePending
 230  } CLUSTER_RESOURCE_STATE;
 231
 232  typedef enum CLUSTER_RESOURCE_RESTART_ACTION {
 233    ClusterResourceDontRestart = 0,ClusterResourceRestartNoNotify,ClusterResourceRestartNotify,ClusterResourceRestartActionCount
 234  } CLUSTER_RESOURCE_RESTART_ACTION,CRRA;
 235
 236  typedef enum CLUSTER_RESOURCE_CREATE_FLAGS {
 237    CLUSTER_RESOURCE_DEFAULT_MONITOR = 0,CLUSTER_RESOURCE_SEPARATE_MONITOR = 1,CLUSTER_RESOURCE_VALID_FLAGS = CLUSTER_RESOURCE_SEPARATE_MONITOR
 238  } CLUSTER_RESOURCE_CREATE_FLAGS;
 239#endif
 240
 241  HRESOURCE WINAPI CreateClusterResource(HGROUP hGroup,LPCWSTR lpszResourceName,LPCWSTR lpszResourceType,DWORD dwFlags);
 242  HRESOURCE WINAPI OpenClusterResource(HCLUSTER hCluster,LPCWSTR lpszResourceName);
 243  WINBOOL WINAPI CloseClusterResource(HRESOURCE hResource);
 244  HCLUSTER WINAPI GetClusterFromResource(HRESOURCE hResource);
 245  DWORD WINAPI DeleteClusterResource(HRESOURCE hResource);
 246  CLUSTER_RESOURCE_STATE WINAPI GetClusterResourceState(HRESOURCE hResource,LPWSTR lpszNodeName,LPDWORD lpcchNodeName,LPWSTR lpszGroupName,LPDWORD lpcchGroupName);
 247  DWORD WINAPI SetClusterResourceName(HRESOURCE hResource,LPCWSTR lpszResourceName);
 248  DWORD WINAPI FailClusterResource(HRESOURCE hResource);
 249  DWORD WINAPI OnlineClusterResource(HRESOURCE hResource);
 250  DWORD WINAPI OfflineClusterResource(HRESOURCE hResource);
 251  DWORD WINAPI ChangeClusterResourceGroup(HRESOURCE hResource,HGROUP hGroup);
 252  DWORD WINAPI AddClusterResourceNode(HRESOURCE hResource,HNODE hNode);
 253  DWORD WINAPI RemoveClusterResourceNode(HRESOURCE hResource,HNODE hNode);
 254  DWORD WINAPI AddClusterResourceDependency(HRESOURCE hResource,HRESOURCE hDependsOn);
 255  DWORD WINAPI RemoveClusterResourceDependency(HRESOURCE hResource,HRESOURCE hDependsOn);
 256  WINBOOL WINAPI CanResourceBeDependent(HRESOURCE hResource,HRESOURCE hResourceDependent);
 257  DWORD WINAPI ClusterResourceControl(HRESOURCE hResource,HNODE hHostNode,DWORD dwControlCode,LPVOID lpInBuffer,DWORD cbInBufferSize,LPVOID lpOutBuffer,DWORD cbOutBufferSize,LPDWORD lpBytesReturned);
 258  DWORD WINAPI ClusterResourceTypeControl(HCLUSTER hCluster,LPCWSTR lpszResourceTypeName,HNODE hHostNode,DWORD dwControlCode,LPVOID lpInBuffer,DWORD nInBufferSize,LPVOID lpOutBuffer,DWORD nOutBufferSize,LPDWORD lpBytesReturned);
 259  DWORD WINAPI ClusterGroupControl(HGROUP hGroup,HNODE hHostNode,DWORD dwControlCode,LPVOID lpInBuffer,DWORD nInBufferSize,LPVOID lpOutBuffer,DWORD nOutBufferSize,LPDWORD lpBytesReturned);
 260  DWORD WINAPI ClusterNodeControl(HNODE hNode,HNODE hHostNode,DWORD dwControlCode,LPVOID lpInBuffer,DWORD nInBufferSize,LPVOID lpOutBuffer,DWORD nOutBufferSize,LPDWORD lpBytesReturned);
 261  WINBOOL WINAPI GetClusterResourceNetworkName(HRESOURCE hResource,LPWSTR lpBuffer,LPDWORD nSize);
 262
 263#ifndef _CLUSTER_API_TYPES_
 264  typedef enum CLUSTER_PROPERTY_TYPE {
 265    CLUSPROP_TYPE_UNKNOWN = -1,CLUSPROP_TYPE_ENDMARK = 0,CLUSPROP_TYPE_LIST_VALUE,CLUSPROP_TYPE_RESCLASS,CLUSPROP_TYPE_RESERVED1,CLUSPROP_TYPE_NAME,
 266    CLUSPROP_TYPE_SIGNATURE,CLUSPROP_TYPE_SCSI_ADDRESS,CLUSPROP_TYPE_DISK_NUMBER,CLUSPROP_TYPE_PARTITION_INFO,CLUSPROP_TYPE_FTSET_INFO,
 267    CLUSPROP_TYPE_DISK_SERIALNUMBER,
 268    CLUSPROP_TYPE_DISK_GUID           = 11,
 269    CLUSPROP_TYPE_DISK_SIZE           = 12,
 270    CLUSPROP_TYPE_PARTITION_INFO_EX   = 13,
 271    CLUSPROP_TYPE_USER=32768
 272  } CLUSTER_PROPERTY_TYPE;
 273
 274  typedef enum CLUSTER_PROPERTY_FORMAT {
 275    CLUSPROP_FORMAT_UNKNOWN = 0,CLUSPROP_FORMAT_BINARY,CLUSPROP_FORMAT_DWORD,CLUSPROP_FORMAT_SZ,CLUSPROP_FORMAT_EXPAND_SZ,CLUSPROP_FORMAT_MULTI_SZ,
 276    CLUSPROP_FORMAT_ULARGE_INTEGER,CLUSPROP_FORMAT_LONG,CLUSPROP_FORMAT_EXPANDED_SZ,CLUSPROP_FORMAT_SECURITY_DESCRIPTOR,CLUSPROP_FORMAT_LARGE_INTEGER,
 277    CLUSPROP_FORMAT_WORD,
 278    CLUSPROP_FORMAT_FILETIME              = 12,
 279    CLUSPROP_FORMAT_USER=32768
 280  } CLUSTER_PROPERTY_FORMAT;
 281#endif
 282
 283#define CLUSPROP_SYNTAX_VALUE(type,format) ((DWORD) ((type << 16) | format))
 284
 285#ifndef _CLUSTER_API_TYPES_
 286  typedef enum CLUSTER_PROPERTY_SYNTAX {
 287    CLUSPROP_SYNTAX_ENDMARK = CLUSPROP_SYNTAX_VALUE(CLUSPROP_TYPE_ENDMARK,CLUSPROP_FORMAT_UNKNOWN),
 288    CLUSPROP_SYNTAX_NAME = CLUSPROP_SYNTAX_VALUE(CLUSPROP_TYPE_NAME,CLUSPROP_FORMAT_SZ),
 289    CLUSPROP_SYNTAX_RESCLASS = CLUSPROP_SYNTAX_VALUE(CLUSPROP_TYPE_RESCLASS,CLUSPROP_FORMAT_DWORD),
 290    CLUSPROP_SYNTAX_LIST_VALUE_SZ = CLUSPROP_SYNTAX_VALUE(CLUSPROP_TYPE_LIST_VALUE,CLUSPROP_FORMAT_SZ),
 291    CLUSPROP_SYNTAX_LIST_VALUE_EXPAND_SZ = CLUSPROP_SYNTAX_VALUE(CLUSPROP_TYPE_LIST_VALUE,CLUSPROP_FORMAT_EXPAND_SZ),
 292    CLUSPROP_SYNTAX_LIST_VALUE_DWORD = CLUSPROP_SYNTAX_VALUE(CLUSPROP_TYPE_LIST_VALUE,CLUSPROP_FORMAT_DWORD),
 293    CLUSPROP_SYNTAX_LIST_VALUE_BINARY = CLUSPROP_SYNTAX_VALUE(CLUSPROP_TYPE_LIST_VALUE,CLUSPROP_FORMAT_BINARY),
 294    CLUSPROP_SYNTAX_LIST_VALUE_MULTI_SZ = CLUSPROP_SYNTAX_VALUE(CLUSPROP_TYPE_LIST_VALUE,CLUSPROP_FORMAT_MULTI_SZ),
 295    CLUSPROP_SYNTAX_LIST_VALUE_LONG = CLUSPROP_SYNTAX_VALUE(CLUSPROP_TYPE_LIST_VALUE,CLUSPROP_FORMAT_LONG),
 296    CLUSPROP_SYNTAX_LIST_VALUE_EXPANDED_SZ = CLUSPROP_SYNTAX_VALUE(CLUSPROP_TYPE_LIST_VALUE,CLUSPROP_FORMAT_EXPANDED_SZ),
 297    CLUSPROP_SYNTAX_LIST_VALUE_SECURITY_DESCRIPTOR = CLUSPROP_SYNTAX_VALUE(CLUSPROP_TYPE_LIST_VALUE,CLUSPROP_FORMAT_SECURITY_DESCRIPTOR),
 298    CLUSPROP_SYNTAX_LIST_VALUE_LARGE_INTEGER = CLUSPROP_SYNTAX_VALUE(CLUSPROP_TYPE_LIST_VALUE,CLUSPROP_FORMAT_LARGE_INTEGER),
 299    CLUSPROP_SYNTAX_LIST_VALUE_ULARGE_INTEGER = CLUSPROP_SYNTAX_VALUE(CLUSPROP_TYPE_LIST_VALUE,CLUSPROP_FORMAT_ULARGE_INTEGER),
 300    CLUSPROP_SYNTAX_DISK_SIGNATURE = CLUSPROP_SYNTAX_VALUE(CLUSPROP_TYPE_SIGNATURE,CLUSPROP_FORMAT_DWORD),
 301    CLUSPROP_SYNTAX_SCSI_ADDRESS = CLUSPROP_SYNTAX_VALUE(CLUSPROP_TYPE_SCSI_ADDRESS,CLUSPROP_FORMAT_DWORD),
 302    CLUSPROP_SYNTAX_DISK_NUMBER = CLUSPROP_SYNTAX_VALUE(CLUSPROP_TYPE_DISK_NUMBER,CLUSPROP_FORMAT_DWORD),
 303    CLUSPROP_SYNTAX_PARTITION_INFO = CLUSPROP_SYNTAX_VALUE(CLUSPROP_TYPE_PARTITION_INFO,CLUSPROP_FORMAT_BINARY),
 304    CLUSPROP_SYNTAX_FTSET_INFO = CLUSPROP_SYNTAX_VALUE(CLUSPROP_TYPE_FTSET_INFO,CLUSPROP_FORMAT_BINARY),
 305    CLUSPROP_SYNTAX_DISK_SERIALNUMBER = CLUSPROP_SYNTAX_VALUE(CLUSPROP_TYPE_DISK_SERIALNUMBER,CLUSPROP_FORMAT_SZ),
 306    CLUSPROP_SYNTAX_DISK_GUID = CLUSPROP_SYNTAX_VALUE(CLUSPROP_TYPE_DISK_GUID,CLUSPROP_FORMAT_SZ), /*0x000b0003*/
 307    CLUSPROP_SYNTAX_DISK_SIZE = CLUSPROP_SYNTAX_VALUE(CLUSPROP_TYPE_DISK_SIZE,CLUSPROP_FORMAT_ULARGE_INTEGER),/*0x000c0006*/
 308    CLUSPROP_SYNTAX_PARTITION_INFO_EX = CLUSPROP_SYNTAX_VALUE(CLUSPROP_TYPE_PARTITION_INFO_EX,CLUSPROP_FORMAT_BINARY),/*0x000d0001*/
 309    CLUSPROP_SYNTAX_LIST_VALUE_FILETIME = CLUSPROP_SYNTAX_VALUE(CLUSPROP_TYPE_LIST_VALUE,CLUSPROP_FORMAT_FILETIME) /*0x0001000c*/
 310  } CLUSTER_PROPERTY_SYNTAX;
 311#endif
 312
 313#define CLUS_ACCESS_ANY 0
 314#define CLUS_ACCESS_READ 0x01
 315#define CLUS_ACCESS_WRITE 0x02
 316
 317#define CLUS_NO_MODIFY 0
 318#define CLUS_MODIFY 0x01
 319
 320#define CLUS_NOT_GLOBAL 0
 321#define CLUS_GLOBAL 0x01
 322
 323#ifndef _CLUSTER_API_TYPES_
 324  typedef enum CLUSTER_CONTROL_OBJECT {
 325    CLUS_OBJECT_INVALID=0,CLUS_OBJECT_RESOURCE,CLUS_OBJECT_RESOURCE_TYPE,CLUS_OBJECT_GROUP,CLUS_OBJECT_NODE,CLUS_OBJECT_NETWORK,
 326    CLUS_OBJECT_NETINTERFACE,CLUS_OBJECT_CLUSTER,CLUS_OBJECT_USER=128
 327  } CLUSTER_CONTROL_OBJECT;
 328#endif
 329
 330#define CLUSCTL_ACCESS_SHIFT 0
 331#define CLUSCTL_FUNCTION_SHIFT 2
 332#define CLCTL_INTERNAL_SHIFT 20
 333#define CLCTL_USER_SHIFT 21
 334#define CLCTL_MODIFY_SHIFT 22
 335#define CLCTL_GLOBAL_SHIFT 23
 336#define CLUSCTL_OBJECT_SHIFT 24
 337
 338#define CLCTL_INTERNAL_MASK (1<<CLCTL_INTERNAL_SHIFT)
 339#define CLCTL_USER_MASK (1<<CLCTL_USER_SHIFT)
 340#define CLCTL_MODIFY_MASK (1<<CLCTL_MODIFY_SHIFT)
 341#define CLCTL_GLOBAL_MASK (1<<CLCTL_GLOBAL_SHIFT)
 342#define CLUSCTL_CONTROL_CODE_MASK 0x3FFFFF
 343#define CLUSCTL_OBJECT_MASK 0xFF
 344#define CLUSCTL_ACCESS_MODE_MASK 0x03
 345
 346#define CLCTL_CLUSTER_BASE 0
 347#define CLCTL_USER_BASE (1<<CLCTL_USER_SHIFT)
 348
 349#define CLCTL_EXTERNAL_CODE(Function,Access,Modify) (((Access) << CLUSCTL_ACCESS_SHIFT) | ((CLCTL_CLUSTER_BASE + Function) << CLUSCTL_FUNCTION_SHIFT) | ((Modify) << CLCTL_MODIFY_SHIFT))
 350#define CLCTL_INTERNAL_CODE(Function,Access,Modify) (((Access) << CLUSCTL_ACCESS_SHIFT) | CLCTL_INTERNAL_MASK | ((CLCTL_CLUSTER_BASE + Function) << CLUSCTL_FUNCTION_SHIFT) | ((Modify) << CLCTL_MODIFY_SHIFT))
 351
 352#ifndef _CLUSTER_API_TYPES_
 353  typedef enum CLCTL_CODES {
 354    CLCTL_UNKNOWN = CLCTL_EXTERNAL_CODE(0,CLUS_ACCESS_ANY,CLUS_NO_MODIFY),
 355    CLCTL_GET_CHARACTERISTICS = CLCTL_EXTERNAL_CODE(1,CLUS_ACCESS_READ,CLUS_NO_MODIFY),
 356    CLCTL_GET_FLAGS = CLCTL_EXTERNAL_CODE(2,CLUS_ACCESS_READ,CLUS_NO_MODIFY),
 357    CLCTL_GET_CLASS_INFO = CLCTL_EXTERNAL_CODE(3,CLUS_ACCESS_READ,CLUS_NO_MODIFY),
 358    CLCTL_GET_REQUIRED_DEPENDENCIES = CLCTL_EXTERNAL_CODE(4,CLUS_ACCESS_READ,
 359    CLUS_NO_MODIFY),CLCTL_GET_ARB_TIMEOUT = CLCTL_EXTERNAL_CODE(5,CLUS_ACCESS_READ,
 360    CLUS_NO_MODIFY),CLCTL_GET_NAME = CLCTL_EXTERNAL_CODE(10,CLUS_ACCESS_READ,
 361    CLUS_NO_MODIFY),CLCTL_GET_RESOURCE_TYPE = CLCTL_EXTERNAL_CODE(11,
 362    CLUS_ACCESS_READ,CLUS_NO_MODIFY),CLCTL_GET_NODE = CLCTL_EXTERNAL_CODE(12,CLUS_ACCESS_READ,CLUS_NO_MODIFY),
 363    CLCTL_GET_NETWORK = CLCTL_EXTERNAL_CODE(13,CLUS_ACCESS_READ,CLUS_NO_MODIFY),
 364    CLCTL_GET_ID = CLCTL_EXTERNAL_CODE(14,CLUS_ACCESS_READ,CLUS_NO_MODIFY),
 365    CLCTL_GET_FQDN = CLCTL_EXTERNAL_CODE(15,CLUS_ACCESS_READ,CLUS_NO_MODIFY),
 366    CLCTL_GET_CLUSTER_SERVICE_ACCOUNT_NAME = CLCTL_EXTERNAL_CODE(16,CLUS_ACCESS_READ,CLUS_NO_MODIFY),
 367    CLCTL_CHECK_VOTER_EVICT                    = CLCTL_EXTERNAL_CODE(17,CLUS_ACCESS_READ,CLUS_NO_MODIFY),/*0x00000045*/
 368    CLCTL_CHECK_VOTER_DOWN                     = CLCTL_EXTERNAL_CODE(18,CLUS_ACCESS_READ,CLUS_NO_MODIFY),/*0x00000049*/
 369    CLCTL_SHUTDOWN                             = CLCTL_EXTERNAL_CODE(19,CLUS_ACCESS_READ,CLUS_NO_MODIFY),/*0x0000004d*/
 370    CLCTL_ENUM_COMMON_PROPERTIES = CLCTL_EXTERNAL_CODE(20,CLUS_ACCESS_READ,CLUS_NO_MODIFY),
 371    CLCTL_GET_RO_COMMON_PROPERTIES = CLCTL_EXTERNAL_CODE(21,CLUS_ACCESS_READ,CLUS_NO_MODIFY),
 372    CLCTL_GET_COMMON_PROPERTIES = CLCTL_EXTERNAL_CODE(22,CLUS_ACCESS_READ,CLUS_NO_MODIFY),
 373    CLCTL_SET_COMMON_PROPERTIES = CLCTL_EXTERNAL_CODE(23,CLUS_ACCESS_WRITE,CLUS_MODIFY),
 374    CLCTL_VALIDATE_COMMON_PROPERTIES = CLCTL_EXTERNAL_CODE(24,CLUS_ACCESS_READ,CLUS_NO_MODIFY),
 375    CLCTL_GET_COMMON_PROPERTY_FMTS = CLCTL_EXTERNAL_CODE(25,CLUS_ACCESS_READ,CLUS_NO_MODIFY),
 376    CLCTL_GET_COMMON_RESOURCE_PROPERTY_FMTS = CLCTL_EXTERNAL_CODE(26,CLUS_ACCESS_READ,CLUS_NO_MODIFY),
 377    CLCTL_ENUM_PRIVATE_PROPERTIES = CLCTL_EXTERNAL_CODE(30,CLUS_ACCESS_READ,CLUS_NO_MODIFY),
 378    CLCTL_GET_RO_PRIVATE_PROPERTIES = CLCTL_EXTERNAL_CODE(31,CLUS_ACCESS_READ,CLUS_NO_MODIFY),
 379    CLCTL_GET_PRIVATE_PROPERTIES = CLCTL_EXTERNAL_CODE(32,CLUS_ACCESS_READ,CLUS_NO_MODIFY),
 380    CLCTL_SET_PRIVATE_PROPERTIES = CLCTL_EXTERNAL_CODE(33,CLUS_ACCESS_WRITE,CLUS_MODIFY),
 381    CLCTL_VALIDATE_PRIVATE_PROPERTIES = CLCTL_EXTERNAL_CODE(34,CLUS_ACCESS_READ,CLUS_NO_MODIFY),
 382    CLCTL_GET_PRIVATE_PROPERTY_FMTS = CLCTL_EXTERNAL_CODE(35,CLUS_ACCESS_READ,CLUS_NO_MODIFY),
 383    CLCTL_GET_PRIVATE_RESOURCE_PROPERTY_FMTS= CLCTL_EXTERNAL_CODE(36,CLUS_ACCESS_READ,CLUS_NO_MODIFY),
 384    CLCTL_ADD_REGISTRY_CHECKPOINT = CLCTL_EXTERNAL_CODE(40,CLUS_ACCESS_WRITE,CLUS_MODIFY),
 385    CLCTL_DELETE_REGISTRY_CHECKPOINT = CLCTL_EXTERNAL_CODE(41,CLUS_ACCESS_WRITE,CLUS_MODIFY),
 386    CLCTL_GET_REGISTRY_CHECKPOINTS = CLCTL_EXTERNAL_CODE(42,CLUS_ACCESS_READ,CLUS_NO_MODIFY),
 387    CLCTL_ADD_CRYPTO_CHECKPOINT = CLCTL_EXTERNAL_CODE(43,CLUS_ACCESS_WRITE,CLUS_MODIFY),
 388    CLCTL_DELETE_CRYPTO_CHECKPOINT = CLCTL_EXTERNAL_CODE(44,CLUS_ACCESS_WRITE,CLUS_MODIFY),
 389    CLCTL_GET_CRYPTO_CHECKPOINTS = CLCTL_EXTERNAL_CODE(45,CLUS_ACCESS_READ,CLUS_NO_MODIFY),
 390    CLCTL_RESOURCE_UPGRADE_DLL = CLCTL_EXTERNAL_CODE(46,CLUS_ACCESS_WRITE,CLUS_MODIFY),
 391    CLCTL_ADD_REGISTRY_CHECKPOINT_64BIT = CLCTL_EXTERNAL_CODE(47,CLUS_ACCESS_WRITE,CLUS_MODIFY),
 392    CLCTL_ADD_REGISTRY_CHECKPOINT_32BIT = CLCTL_EXTERNAL_CODE(48,CLUS_ACCESS_WRITE,CLUS_MODIFY),
 393    CLCTL_GET_LOADBAL_PROCESS_LIST = CLCTL_EXTERNAL_CODE(50,CLUS_ACCESS_READ,CLUS_NO_MODIFY),
 394    CLCTL_GET_NETWORK_NAME = CLCTL_EXTERNAL_CODE(90,CLUS_ACCESS_READ,CLUS_NO_MODIFY),
 395    CLCTL_NETNAME_GET_VIRTUAL_SERVER_TOKEN = CLCTL_EXTERNAL_CODE(91,CLUS_ACCESS_READ,
 396    CLUS_NO_MODIFY),CLCTL_NETNAME_REGISTER_DNS_RECORDS = CLCTL_EXTERNAL_CODE(92,CLUS_ACCESS_WRITE,CLUS_NO_MODIFY),
 397    CLCTL_NETNAME_CREDS_UPDATED = (CLCTL_EXTERNAL_CODE(98,CLUS_ACCESS_WRITE,CLUS_MODIFY)|CLCTL_GLOBAL_MASK),
 398    CLCTL_STORAGE_GET_DISK_INFO = CLCTL_EXTERNAL_CODE(100,CLUS_ACCESS_READ,CLUS_NO_MODIFY),
 399    CLCTL_STORAGE_GET_AVAILABLE_DISKS = CLCTL_EXTERNAL_CODE(101,CLUS_ACCESS_READ,CLUS_NO_MODIFY),
 400    CLCTL_STORAGE_IS_PATH_VALID = CLCTL_EXTERNAL_CODE(102,CLUS_ACCESS_READ,CLUS_NO_MODIFY),
 401    CLCTL_STORAGE_GET_ALL_AVAILABLE_DISKS = (CLCTL_EXTERNAL_CODE(103,CLUS_ACCESS_READ,CLUS_NO_MODIFY) | CLCTL_GLOBAL_MASK),
 402    CLCTL_QUERY_DELETE = CLCTL_EXTERNAL_CODE(110,CLUS_ACCESS_READ,CLUS_NO_MODIFY),
 403    CLCTL_QUERY_MAINTENANCE_MODE = CLCTL_EXTERNAL_CODE(120,CLUS_ACCESS_READ,CLUS_NO_MODIFY),
 404    CLCTL_SET_MAINTENANCE_MODE = CLCTL_EXTERNAL_CODE(121,CLUS_ACCESS_WRITE,CLUS_MODIFY),
 405    CLCTL_STORAGE_SET_DRIVELETTER              = CLCTL_EXTERNAL_CODE(122,CLUS_ACCESS_WRITE,CLUS_MODIFY),/*0x004001ea*/
 406    CLCTL_STORAGE_GET_DRIVELETTERS             = CLCTL_EXTERNAL_CODE(123,CLUS_ACCESS_READ,CLUS_NO_MODIFY),/*0x000001ed*/
 407    CLCTL_STORAGE_GET_DISK_INFO_EX             = CLCTL_EXTERNAL_CODE(124,CLUS_ACCESS_READ,CLUS_NO_MODIFY),/*0x000001f1*/
 408    CLCTL_STORAGE_GET_AVAILABLE_DISKS_EX       = CLCTL_EXTERNAL_CODE(125,CLUS_ACCESS_READ,CLUS_NO_MODIFY),/*0x000001f5*/
 409    CLCTL_STORAGE_REMAP_DRIVELETTER            = CLCTL_EXTERNAL_CODE(128,CLUS_ACCESS_READ,CLUS_NO_MODIFY),/*0x00000201,*/
 410    CLCTL_STORAGE_GET_DISKID                   = CLCTL_EXTERNAL_CODE(129,CLUS_ACCESS_READ,CLUS_NO_MODIFY),/*0x00000205*/
 411    CLCTL_STORAGE_IS_CLUSTERABLE               = CLCTL_EXTERNAL_CODE(130,CLUS_ACCESS_READ,CLUS_NO_MODIFY),/*0x00000209*/
 412    CLCTL_STORAGE_REMOVE_VM_OWNERSHIP          = CLCTL_EXTERNAL_CODE(131,CLUS_ACCESS_WRITE,CLUS_MODIFY),/*0x0040020e*/
 413    CLCTL_STORAGE_GET_MOUNTPOINTS              = CLCTL_EXTERNAL_CODE(132,CLUS_ACCESS_READ,CLUS_NO_MODIFY),/*0x00000211*/
 414    CLCTL_STORAGE_CLUSTER_DISK                 = (CLCTL_EXTERNAL_CODE(132,CLUS_ACCESS_WRITE,CLUS_MODIFY)|CLCTL_GLOBAL_MASK),/*0x00c00212*/
 415    CLCTL_STORAGE_GET_DIRTY                    = CLCTL_EXTERNAL_CODE(134,CLUS_ACCESS_READ,CLUS_NO_MODIFY),/*0x00000219*/
 416    CLCTL_STORAGE_GET_SHARED_VOLUME_INFO       = CLCTL_EXTERNAL_CODE(137,CLUS_ACCESS_READ,CLUS_NO_MODIFY),/* 0x00000225 */
 417    CLCTL_STORAGE_IS_CSV_FILE                  = CLCTL_EXTERNAL_CODE(138,CLUS_ACCESS_READ,CLUS_NO_MODIFY),/*0x00000229*/
 418    CLCTL_VALIDATE_PATH                        = CLCTL_EXTERNAL_CODE(140,CLUS_ACCESS_READ,CLUS_NO_MODIFY),/*0x00000231,*/
 419    CLCTL_VALIDATE_NETNAME                     = CLCTL_EXTERNAL_CODE(141,CLUS_ACCESS_READ,CLUS_NO_MODIFY),/*0x00000235*/
 420    CLCTL_VALIDATE_DIRECTORY                   = CLCTL_EXTERNAL_CODE(142,CLUS_ACCESS_READ,CLUS_NO_MODIFY),/*0x00000239*/
 421    CLCTL_BATCH_BLOCK_KEY                      = CLCTL_EXTERNAL_CODE(143,CLUS_ACCESS_WRITE,CLUS_NO_MODIFY),/*0x0000023e*/
 422    CLCTL_BATCH_UNBLOCK_KEY                    = CLCTL_EXTERNAL_CODE(144,CLUS_ACCESS_READ,CLUS_NO_MODIFY),/*0x00000241*/
 423    CLCTL_FILESERVER_SHARE_ADD                 = CLCTL_EXTERNAL_CODE(145,CLUS_ACCESS_READ,CLUS_NO_MODIFY),/*0x00400245*/
 424    CLCTL_FILESERVER_SHARE_DEL                 = CLCTL_EXTERNAL_CODE(146,CLUS_ACCESS_READ,CLUS_NO_MODIFY),/*0x00400249*/
 425    CLCTL_FILESERVER_SHARE_MODIFY              = CLCTL_EXTERNAL_CODE(147,CLUS_ACCESS_READ,CLUS_NO_MODIFY),/*0x0040024d*/
 426    CLCTL_FILESERVER_SHARE_REPORT              = CLCTL_EXTERNAL_CODE(148,CLUS_ACCESS_READ,CLUS_NO_MODIFY),/*0x00000251*/
 427    CLCTL_ENABLE_SHARED_VOLUME_DIRECTIO        = CLCTL_EXTERNAL_CODE(162,CLUS_ACCESS_WRITE,CLUS_MODIFY),/*0x0040028a*/
 428    CLCTL_DISABLE_SHARED_VOLUME_DIRECTIO       = CLCTL_EXTERNAL_CODE(163,CLUS_ACCESS_WRITE,CLUS_MODIFY),/*0x0040028e*/
 429    CLCTL_GET_SHARED_VOLUME_ID                 = CLCTL_EXTERNAL_CODE(164,CLUS_ACCESS_READ,CLUS_NO_MODIFY),/*0x00000291*/
 430    CLCTL_SET_CSV_MAINTENANCE_MODE             = CLCTL_EXTERNAL_CODE(165,CLUS_ACCESS_WRITE,CLUS_MODIFY),/*0x00400296*/
 431    CLCTL_SET_SHARED_VOLUME_BACKUP_MODE        = CLCTL_EXTERNAL_CODE(166,CLUS_ACCESS_WRITE,CLUS_MODIFY),/*0x0040029a,*/
 432    CLCTL_DELETE = CLCTL_INTERNAL_CODE(1,CLUS_ACCESS_WRITE,CLUS_MODIFY),
 433    CLCTL_INSTALL_NODE = CLCTL_INTERNAL_CODE(2,CLUS_ACCESS_WRITE,CLUS_MODIFY),
 434    CLCTL_EVICT_NODE = CLCTL_INTERNAL_CODE(3,CLUS_ACCESS_WRITE,CLUS_MODIFY),
 435    CLCTL_ADD_DEPENDENCY = CLCTL_INTERNAL_CODE(4,CLUS_ACCESS_WRITE,CLUS_MODIFY),
 436    CLCTL_REMOVE_DEPENDENCY = CLCTL_INTERNAL_CODE(5,CLUS_ACCESS_WRITE,CLUS_MODIFY),
 437    CLCTL_ADD_OWNER = CLCTL_INTERNAL_CODE(6,CLUS_ACCESS_WRITE,CLUS_MODIFY),
 438    CLCTL_REMOVE_OWNER = CLCTL_INTERNAL_CODE(7,CLUS_ACCESS_WRITE,
 439    CLUS_MODIFY),CLCTL_SET_NAME = CLCTL_INTERNAL_CODE(9,CLUS_ACCESS_WRITE,CLUS_MODIFY),
 440    CLCTL_CLUSTER_NAME_CHANGED = CLCTL_INTERNAL_CODE(10,CLUS_ACCESS_WRITE,CLUS_MODIFY),
 441    CLCTL_CLUSTER_VERSION_CHANGED = CLCTL_INTERNAL_CODE(11,CLUS_ACCESS_WRITE,CLUS_MODIFY),
 442    CLCTL_FIXUP_ON_UPGRADE = CLCTL_INTERNAL_CODE(12,CLUS_ACCESS_WRITE,CLUS_MODIFY),
 443    CLCTL_STARTING_PHASE1 = CLCTL_INTERNAL_CODE(13,CLUS_ACCESS_WRITE,CLUS_MODIFY),
 444    CLCTL_STARTING_PHASE2 = CLCTL_INTERNAL_CODE(14,CLUS_ACCESS_WRITE,CLUS_MODIFY),
 445    CLCTL_HOLD_IO = CLCTL_INTERNAL_CODE(15,CLUS_ACCESS_WRITE,CLUS_MODIFY),
 446    CLCTL_RESUME_IO = CLCTL_INTERNAL_CODE(16,CLUS_ACCESS_WRITE,CLUS_MODIFY),
 447    CLCTL_FORCE_QUORUM = CLCTL_INTERNAL_CODE(17,CLUS_ACCESS_WRITE,CLUS_MODIFY),
 448    CLCTL_INITIALIZE = CLCTL_INTERNAL_CODE(18,CLUS_ACCESS_WRITE,CLUS_MODIFY),
 449    CLCTL_STATE_CHANGE_REASON = CLCTL_INTERNAL_CODE(19,CLUS_ACCESS_WRITE,CLUS_MODIFY),
 450    CLCTL_PROVIDER_STATE_CHANGE = CLCTL_INTERNAL_CODE(20,CLUS_ACCESS_WRITE, CLUS_MODIFY),/*0x00500052*/
 451    CLCTL_LEAVING_GROUP = CLCTL_INTERNAL_CODE(21,CLUS_ACCESS_WRITE, CLUS_MODIFY),/*0x00500056,*/
 452    CLCTL_JOINING_GROUP = CLCTL_INTERNAL_CODE(22,CLUS_ACCESS_WRITE, CLUS_MODIFY),/*0x0050005a*/
 453    CLCTL_FSWITNESS_GET_EPOCH_INFO = CLCTL_INTERNAL_CODE(23,CLUS_ACCESS_READ, CLUS_NO_MODIFY),/*0x0010005d*/
 454    CLCTL_FSWITNESS_SET_EPOCH_INFO = CLCTL_INTERNAL_CODE(24,CLUS_ACCESS_WRITE, CLUS_MODIFY),/*0x00500062*/
 455    CLCTL_FSWITNESS_RELEASE_LOCK = CLCTL_INTERNAL_CODE(25,CLUS_ACCESS_WRITE, CLUS_MODIFY),/*0x00500066,*/
 456    CLCTL_NETNAME_CREDS_NOTIFYCAM = CLCTL_INTERNAL_CODE(26,CLUS_ACCESS_WRITE, CLUS_MODIFY),/*0x0050006a*/
 457    CLCTL_STORAGE_GET_DISK_NUMBER = CLCTL_INTERNAL_CODE(27,CLUS_ACCESS_READ, CLUS_NO_MODIFY) /*0x0010006d */
 458  } CLCTL_CODES;
 459#endif
 460
 461#define CLUSCTL_RESOURCE_CODE(Function) (((CLUS_OBJECT_RESOURCE << CLUSCTL_OBJECT_SHIFT) | Function))
 462#define CLUSCTL_RESOURCE_TYPE_CODE(Function) (((CLUS_OBJECT_RESOURCE_TYPE << CLUSCTL_OBJECT_SHIFT) | Function))
 463#define CLUSCTL_GROUP_CODE(Function) (((CLUS_OBJECT_GROUP << CLUSCTL_OBJECT_SHIFT) | Function))
 464#define CLUSCTL_NODE_CODE(Function) (((CLUS_OBJECT_NODE << CLUSCTL_OBJECT_SHIFT) | Function))
 465#define CLUSCTL_NETWORK_CODE(Function) (((CLUS_OBJECT_NETWORK << CLUSCTL_OBJECT_SHIFT) | Function))
 466#define CLUSCTL_NETINTERFACE_CODE(Function) (((CLUS_OBJECT_NETINTERFACE << CLUSCTL_OBJECT_SHIFT) | Function))
 467#define CLUSCTL_CLUSTER_CODE(Function) (((CLUS_OBJECT_CLUSTER << CLUSCTL_OBJECT_SHIFT) | Function))
 468#define CLUSCTL_USER_CODE(Function,Object) (((Object) << CLUSCTL_OBJECT_SHIFT) | ((CLCTL_USER_BASE + Function) << CLUSCTL_FUNCTION_SHIFT))
 469#define CLUSCTL_GET_CONTROL_FUNCTION(ControlCode) ((ControlCode >> CLUSCTL_ACCESS_SHIFT) & CLUSCTL_CONTROL_CODE_MASK)
 470#define CLUSCTL_GET_ACCESS_MODE(ControlCode) ((ControlCode >> CLUSCTL_ACCESS_SHIFT) & CLUSCTL_ACCESS_MODE_MASK)
 471#define CLUSCTL_GET_CONTROL_OBJECT(ControlCode) ((ControlCode >> CLUSCTL_OBJECT_SHIFT) & CLUSCTL_OBJECT_MASK)
 472
 473#ifndef _CLUSTER_API_TYPES_
 474  typedef enum CLUSCTL_RESOURCE_CODES {
 475    CLUSCTL_RESOURCE_UNKNOWN = CLUSCTL_RESOURCE_CODE(CLCTL_UNKNOWN),
 476    CLUSCTL_RESOURCE_GET_CHARACTERISTICS = CLUSCTL_RESOURCE_CODE(CLCTL_GET_CHARACTERISTICS),
 477    CLUSCTL_RESOURCE_GET_FLAGS = CLUSCTL_RESOURCE_CODE(CLCTL_GET_FLAGS),
 478    CLUSCTL_RESOURCE_GET_CLASS_INFO = CLUSCTL_RESOURCE_CODE(CLCTL_GET_CLASS_INFO),
 479    CLUSCTL_RESOURCE_GET_REQUIRED_DEPENDENCIES = CLUSCTL_RESOURCE_CODE(CLCTL_GET_REQUIRED_DEPENDENCIES),
 480    CLUSCTL_RESOURCE_GET_NAME = CLUSCTL_RESOURCE_CODE(CLCTL_GET_NAME),
 481    CLUSCTL_RESOURCE_GET_ID = CLUSCTL_RESOURCE_CODE(CLCTL_GET_ID),
 482    CLUSCTL_RESOURCE_GET_RESOURCE_TYPE = CLUSCTL_RESOURCE_CODE(CLCTL_GET_RESOURCE_TYPE),
 483    CLUSCTL_RESOURCE_ENUM_COMMON_PROPERTIES = CLUSCTL_RESOURCE_CODE(CLCTL_ENUM_COMMON_PROPERTIES),
 484    CLUSCTL_RESOURCE_GET_RO_COMMON_PROPERTIES = CLUSCTL_RESOURCE_CODE(CLCTL_GET_RO_COMMON_PROPERTIES),
 485    CLUSCTL_RESOURCE_GET_COMMON_PROPERTIES = CLUSCTL_RESOURCE_CODE(CLCTL_GET_COMMON_PROPERTIES),
 486    CLUSCTL_RESOURCE_SET_COMMON_PROPERTIES = CLUSCTL_RESOURCE_CODE(CLCTL_SET_COMMON_PROPERTIES),
 487    CLUSCTL_RESOURCE_VALIDATE_COMMON_PROPERTIES = CLUSCTL_RESOURCE_CODE(CLCTL_VALIDATE_COMMON_PROPERTIES),
 488    CLUSCTL_RESOURCE_GET_COMMON_PROPERTY_FMTS = CLUSCTL_RESOURCE_CODE(CLCTL_GET_COMMON_PROPERTY_FMTS),
 489    CLUSCTL_RESOURCE_ENUM_PRIVATE_PROPERTIES = CLUSCTL_RESOURCE_CODE(CLCTL_ENUM_PRIVATE_PROPERTIES),
 490    CLUSCTL_RESOURCE_GET_RO_PRIVATE_PROPERTIES = CLUSCTL_RESOURCE_CODE(CLCTL_GET_RO_PRIVATE_PROPERTIES),
 491    CLUSCTL_RESOURCE_GET_PRIVATE_PROPERTIES = CLUSCTL_RESOURCE_CODE(CLCTL_GET_PRIVATE_PROPERTIES),
 492    CLUSCTL_RESOURCE_SET_PRIVATE_PROPERTIES = CLUSCTL_RESOURCE_CODE(CLCTL_SET_PRIVATE_PROPERTIES),
 493    CLUSCTL_RESOURCE_VALIDATE_PRIVATE_PROPERTIES = CLUSCTL_RESOURCE_CODE(CLCTL_VALIDATE_PRIVATE_PROPERTIES),
 494    CLUSCTL_RESOURCE_GET_PRIVATE_PROPERTY_FMTS = CLUSCTL_RESOURCE_CODE(CLCTL_GET_PRIVATE_PROPERTY_FMTS),
 495    CLUSCTL_RESOURCE_ADD_REGISTRY_CHECKPOINT = CLUSCTL_RESOURCE_CODE(CLCTL_ADD_REGISTRY_CHECKPOINT),
 496    CLUSCTL_RESOURCE_DELETE_REGISTRY_CHECKPOINT = CLUSCTL_RESOURCE_CODE(CLCTL_DELETE_REGISTRY_CHECKPOINT),
 497    CLUSCTL_RESOURCE_GET_REGISTRY_CHECKPOINTS = CLUSCTL_RESOURCE_CODE(CLCTL_GET_REGISTRY_CHECKPOINTS),
 498    CLUSCTL_RESOURCE_ADD_CRYPTO_CHECKPOINT = CLUSCTL_RESOURCE_CODE(CLCTL_ADD_CRYPTO_CHECKPOINT),
 499    CLUSCTL_RESOURCE_DELETE_CRYPTO_CHECKPOINT = CLUSCTL_RESOURCE_CODE(CLCTL_DELETE_CRYPTO_CHECKPOINT),
 500    CLUSCTL_RESOURCE_GET_CRYPTO_CHECKPOINTS = CLUSCTL_RESOURCE_CODE(CLCTL_GET_CRYPTO_CHECKPOINTS),
 501    CLUSCTL_RESOURCE_GET_LOADBAL_PROCESS_LIST = CLUSCTL_RESOURCE_CODE(CLCTL_GET_LOADBAL_PROCESS_LIST),
 502    CLUSCTL_RESOURCE_GET_NETWORK_NAME = CLUSCTL_RESOURCE_CODE(CLCTL_GET_NETWORK_NAME),
 503    CLUSCTL_RESOURCE_NETNAME_GET_VIRTUAL_SERVER_TOKEN = CLUSCTL_RESOURCE_CODE(CLCTL_NETNAME_GET_VIRTUAL_SERVER_TOKEN),
 504    CLUSCTL_RESOURCE_NETNAME_REGISTER_DNS_RECORDS = CLUSCTL_RESOURCE_CODE(CLCTL_NETNAME_REGISTER_DNS_RECORDS),
 505    CLUSCTL_RESOURCE_STORAGE_GET_DISK_INFO = CLUSCTL_RESOURCE_CODE(CLCTL_STORAGE_GET_DISK_INFO),
 506    CLUSCTL_RESOURCE_STORAGE_IS_PATH_VALID = CLUSCTL_RESOURCE_CODE(CLCTL_STORAGE_IS_PATH_VALID),
 507    CLUSCTL_RESOURCE_QUERY_DELETE = CLUSCTL_RESOURCE_CODE(CLCTL_QUERY_DELETE),
 508    CLUSCTL_RESOURCE_UPGRADE_DLL = CLUSCTL_RESOURCE_CODE(CLCTL_RESOURCE_UPGRADE_DLL),
 509    CLUSCTL_RESOURCE_ADD_REGISTRY_CHECKPOINT_64BIT = CLUSCTL_RESOURCE_CODE(CLCTL_ADD_REGISTRY_CHECKPOINT_64BIT),
 510    CLUSCTL_RESOURCE_ADD_REGISTRY_CHECKPOINT_32BIT = CLUSCTL_RESOURCE_CODE(CLCTL_ADD_REGISTRY_CHECKPOINT_32BIT),
 511    CLUSCTL_RESOURCE_QUERY_MAINTENANCE_MODE = CLUSCTL_RESOURCE_CODE(CLCTL_QUERY_MAINTENANCE_MODE),
 512    CLUSCTL_RESOURCE_SET_MAINTENANCE_MODE = CLUSCTL_RESOURCE_CODE(CLCTL_SET_MAINTENANCE_MODE),
 513    CLUSCTL_RESOURCE_STORAGE_SET_DRIVELETTER            = CLUSCTL_RESOURCE_CODE(CLCTL_STORAGE_SET_DRIVELETTER),/*0x014001ea*/
 514    CLUSCTL_RESOURCE_STORAGE_GET_DISK_INFO_EX           = CLUSCTL_RESOURCE_CODE(CLCTL_STORAGE_GET_DISK_INFO_EX),/*0x010001f1*/
 515    CLUSCTL_RESOURCE_FILESERVER_SHARE_ADD               = CLUSCTL_RESOURCE_CODE(CLCTL_FILESERVER_SHARE_ADD),/*0x01400245*/
 516    CLUSCTL_RESOURCE_FILESERVER_SHARE_DEL               = CLUSCTL_RESOURCE_CODE(CLCTL_FILESERVER_SHARE_DEL),/*0x01400249*/
 517    CLUSCTL_RESOURCE_FILESERVER_SHARE_MODIFY            = CLUSCTL_RESOURCE_CODE(CLCTL_FILESERVER_SHARE_MODIFY),/*0x0140024d*/
 518    CLUSCTL_RESOURCE_FILESERVER_SHARE_REPORT            = CLUSCTL_RESOURCE_CODE(CLCTL_FILESERVER_SHARE_REPORT),/*0x01000251*/
 519    CLUSCTL_RESOURCE_STORAGE_GET_MOUNTPOINTS            = CLUSCTL_RESOURCE_CODE(CLCTL_STORAGE_GET_MOUNTPOINTS),/*0x01000211*/
 520    CLUSCTL_RESOURCE_STORAGE_CLUSTER_DISK               = CLUSCTL_RESOURCE_CODE(CLCTL_STORAGE_CLUSTER_DISK),/*0x01c00212*/
 521    CLUSCTL_RESOURCE_STORAGE_GET_DIRTY                  = CLUSCTL_RESOURCE_CODE(CLCTL_STORAGE_GET_DIRTY),/*0x01000219*/
 522    CLUSCTL_RESOURCE_STORAGE_GET_SHARED_VOLUME_INFO     = CLUSCTL_RESOURCE_CODE(CLCTL_STORAGE_GET_SHARED_VOLUME_INFO),
 523    CLUSCTL_RESOURCE_SET_CSV_MAINTENANCE_MODE           = CLUSCTL_RESOURCE_CODE(CLCTL_SET_CSV_MAINTENANCE_MODE),/*0x00400296*/
 524    CLUSCTL_RESOURCE_ENABLE_SHARED_VOLUME_DIRECTIO      = CLUSCTL_RESOURCE_CODE(CLCTL_ENABLE_SHARED_VOLUME_DIRECTIO),/*0x0140028a*/
 525    CLUSCTL_RESOURCE_DISABLE_SHARED_VOLUME_DIRECTIO     = CLUSCTL_RESOURCE_CODE(CLCTL_DISABLE_SHARED_VOLUME_DIRECTIO),/*0x0140028e*/
 526    CLUSCTL_RESOURCE_SET_SHARED_VOLUME_BACKUP_MODE      = CLUSCTL_RESOURCE_CODE(CLCTL_SET_SHARED_VOLUME_BACKUP_MODE),/*0x0140029a*/
 527    CLUSCTL_RESOURCE_DELETE = CLUSCTL_RESOURCE_CODE(CLCTL_DELETE),
 528    CLUSCTL_RESOURCE_INSTALL_NODE = CLUSCTL_RESOURCE_CODE(CLCTL_INSTALL_NODE),
 529    CLUSCTL_RESOURCE_EVICT_NODE = CLUSCTL_RESOURCE_CODE(CLCTL_EVICT_NODE),
 530    CLUSCTL_RESOURCE_ADD_DEPENDENCY = CLUSCTL_RESOURCE_CODE(CLCTL_ADD_DEPENDENCY),
 531    CLUSCTL_RESOURCE_REMOVE_DEPENDENCY = CLUSCTL_RESOURCE_CODE(CLCTL_REMOVE_DEPENDENCY),
 532    CLUSCTL_RESOURCE_ADD_OWNER = CLUSCTL_RESOURCE_CODE(CLCTL_ADD_OWNER),
 533    CLUSCTL_RESOURCE_REMOVE_OWNER = CLUSCTL_RESOURCE_CODE(CLCTL_REMOVE_OWNER),
 534    CLUSCTL_RESOURCE_SET_NAME = CLUSCTL_RESOURCE_CODE(CLCTL_SET_NAME),
 535    CLUSCTL_RESOURCE_CLUSTER_NAME_CHANGED = CLUSCTL_RESOURCE_CODE(CLCTL_CLUSTER_NAME_CHANGED),
 536    CLUSCTL_RESOURCE_CLUSTER_VERSION_CHANGED = CLUSCTL_RESOURCE_CODE(CLCTL_CLUSTER_VERSION_CHANGED),
 537    CLUSCTL_RESOURCE_FORCE_QUORUM = CLUSCTL_RESOURCE_CODE(CLCTL_FORCE_QUORUM),
 538    CLUSCTL_RESOURCE_INITIALIZE = CLUSCTL_RESOURCE_CODE(CLCTL_INITIALIZE),
 539    CLUSCTL_RESOURCE_STATE_CHANGE_REASON = CLUSCTL_RESOURCE_CODE(CLCTL_STATE_CHANGE_REASON),
 540    CLUSCTL_RESOURCE_PROVIDER_STATE_CHANGE = CLUSCTL_RESOURCE_CODE(CLCTL_PROVIDER_STATE_CHANGE),/*0x01500052*/
 541    CLUSCTL_RESOURCE_LEAVING_GROUP = CLUSCTL_RESOURCE_CODE(CLCTL_LEAVING_GROUP),/*0x01500056*/
 542    CLUSCTL_RESOURCE_JOINING_GROUP = CLUSCTL_RESOURCE_CODE(CLCTL_JOINING_GROUP),/*0x0150005a*/
 543    CLUSCTL_RESOURCE_FSWITNESS_GET_EPOCH_INFO = CLUSCTL_RESOURCE_CODE(CLCTL_FSWITNESS_GET_EPOCH_INFO),/*0x0110005d*/
 544    CLUSCTL_RESOURCE_FSWITNESS_SET_EPOCH_INFO = CLUSCTL_RESOURCE_CODE(CLCTL_FSWITNESS_SET_EPOCH_INFO),/*0x01500062*/
 545    CLUSCTL_RESOURCE_FSWITNESS_RELEASE_LOCK = CLUSCTL_RESOURCE_CODE(CLCTL_FSWITNESS_RELEASE_LOCK),/*0x01500066*/
 546    CLUSCTL_RESOURCE_NETNAME_CREDS_UPDATED = CLUSCTL_RESOURCE_CODE(CLCTL_NETNAME_CREDS_UPDATED)/*0x01c0018a */
 547  } CLUSCTL_RESOURCE_CODES;
 548
 549  typedef enum CLUSCTL_RESOURCE_TYPE_CODES {
 550    CLUSCTL_RESOURCE_TYPE_UNKNOWN = CLUSCTL_RESOURCE_TYPE_CODE(CLCTL_UNKNOWN),
 551    CLUSCTL_RESOURCE_TYPE_GET_CHARACTERISTICS = CLUSCTL_RESOURCE_TYPE_CODE(CLCTL_GET_CHARACTERISTICS),
 552    CLUSCTL_RESOURCE_TYPE_GET_FLAGS = CLUSCTL_RESOURCE_TYPE_CODE(CLCTL_GET_FLAGS),
 553    CLUSCTL_RESOURCE_TYPE_GET_CLASS_INFO = CLUSCTL_RESOURCE_TYPE_CODE(CLCTL_GET_CLASS_INFO),
 554    CLUSCTL_RESOURCE_TYPE_GET_REQUIRED_DEPENDENCIES = CLUSCTL_RESOURCE_TYPE_CODE(CLCTL_GET_REQUIRED_DEPENDENCIES),
 555    CLUSCTL_RESOURCE_TYPE_GET_ARB_TIMEOUT = CLUSCTL_RESOURCE_TYPE_CODE(CLCTL_GET_ARB_TIMEOUT),
 556    CLUSCTL_RESOURCE_TYPE_ENUM_COMMON_PROPERTIES = CLUSCTL_RESOURCE_TYPE_CODE(CLCTL_ENUM_COMMON_PROPERTIES),
 557    CLUSCTL_RESOURCE_TYPE_GET_RO_COMMON_PROPERTIES = CLUSCTL_RESOURCE_TYPE_CODE(CLCTL_GET_RO_COMMON_PROPERTIES),
 558    CLUSCTL_RESOURCE_TYPE_GET_COMMON_PROPERTIES = CLUSCTL_RESOURCE_TYPE_CODE(CLCTL_GET_COMMON_PROPERTIES),
 559    CLUSCTL_RESOURCE_TYPE_VALIDATE_COMMON_PROPERTIES = CLUSCTL_RESOURCE_TYPE_CODE(CLCTL_VALIDATE_COMMON_PROPERTIES),
 560    CLUSCTL_RESOURCE_TYPE_SET_COMMON_PROPERTIES = CLUSCTL_RESOURCE_TYPE_CODE(CLCTL_SET_COMMON_PROPERTIES),
 561    CLUSCTL_RESOURCE_TYPE_GET_COMMON_PROPERTY_FMTS = CLUSCTL_RESOURCE_TYPE_CODE(CLCTL_GET_COMMON_PROPERTY_FMTS),
 562    CLUSCTL_RESOURCE_TYPE_GET_COMMON_RESOURCE_PROPERTY_FMTS = CLUSCTL_RESOURCE_TYPE_CODE(CLCTL_GET_COMMON_RESOURCE_PROPERTY_FMTS),
 563    CLUSCTL_RESOURCE_TYPE_ENUM_PRIVATE_PROPERTIES = CLUSCTL_RESOURCE_TYPE_CODE(CLCTL_ENUM_PRIVATE_PROPERTIES),
 564    CLUSCTL_RESOURCE_TYPE_GET_RO_PRIVATE_PROPERTIES = CLUSCTL_RESOURCE_TYPE_CODE(CLCTL_GET_RO_PRIVATE_PROPERTIES),
 565    CLUSCTL_RESOURCE_TYPE_GET_PRIVATE_PROPERTIES = CLUSCTL_RESOURCE_TYPE_CODE(CLCTL_GET_PRIVATE_PROPERTIES),
 566    CLUSCTL_RESOURCE_TYPE_SET_PRIVATE_PROPERTIES = CLUSCTL_RESOURCE_TYPE_CODE(CLCTL_SET_PRIVATE_PROPERTIES),
 567    CLUSCTL_RESOURCE_TYPE_VALIDATE_PRIVATE_PROPERTIES = CLUSCTL_RESOURCE_TYPE_CODE(CLCTL_VALIDATE_PRIVATE_PROPERTIES),
 568    CLUSCTL_RESOURCE_TYPE_GET_PRIVATE_PROPERTY_FMTS = CLUSCTL_RESOURCE_TYPE_CODE(CLCTL_GET_PRIVATE_PROPERTY_FMTS),
 569    CLUSCTL_RESOURCE_TYPE_GET_PRIVATE_RESOURCE_PROPERTY_FMTS = CLUSCTL_RESOURCE_TYPE_CODE(CLCTL_GET_PRIVATE_RESOURCE_PROPERTY_FMTS),
 570    CLUSCTL_RESOURCE_TYPE_GET_REGISTRY_CHECKPOINTS = CLUSCTL_RESOURCE_TYPE_CODE(CLCTL_GET_REGISTRY_CHECKPOINTS),
 571    CLUSCTL_RESOURCE_TYPE_GET_CRYPTO_CHECKPOINTS = CLUSCTL_RESOURCE_TYPE_CODE(CLCTL_GET_CRYPTO_CHECKPOINTS),
 572    CLUSCTL_RESOURCE_TYPE_STORAGE_GET_AVAILABLE_DISKS = CLUSCTL_RESOURCE_TYPE_CODE(CLCTL_STORAGE_GET_AVAILABLE_DISKS),
 573    CLUSCTL_RESOURCE_TYPE_QUERY_DELETE = CLUSCTL_RESOURCE_TYPE_CODE(CLCTL_QUERY_DELETE),
 574    CLUSCTL_RESOURCE_TYPE_INSTALL_NODE = CLUSCTL_RESOURCE_TYPE_CODE(CLCTL_INSTALL_NODE),
 575    CLUSCTL_RESOURCE_TYPE_EVICT_NODE = CLUSCTL_RESOURCE_TYPE_CODE(CLCTL_EVICT_NODE),
 576    CLUSCTL_RESOURCE_TYPE_CLUSTER_VERSION_CHANGED = CLUSCTL_RESOURCE_TYPE_CODE(CLCTL_CLUSTER_VERSION_CHANGED),
 577    CLUSCTL_RESOURCE_TYPE_FIXUP_ON_UPGRADE = CLUSCTL_RESOURCE_TYPE_CODE(CLCTL_FIXUP_ON_UPGRADE),
 578    CLUSCTL_RESOURCE_TYPE_STARTING_PHASE1 = CLUSCTL_RESOURCE_TYPE_CODE(CLCTL_STARTING_PHASE1),
 579    CLUSCTL_RESOURCE_TYPE_STARTING_PHASE2 = CLUSCTL_RESOURCE_TYPE_CODE(CLCTL_STARTING_PHASE2),
 580    CLUSCTL_RESOURCE_TYPE_HOLD_IO = CLUSCTL_RESOURCE_TYPE_CODE(CLCTL_HOLD_IO),
 581    CLUSCTL_RESOURCE_TYPE_RESUME_IO = CLUSCTL_RESOURCE_TYPE_CODE(CLCTL_RESUME_IO)
 582  } CLUSCTL_RESOURCE_TYPE_CODES;
 583
 584  typedef enum CLUSPROP_IPADDR_ENABLENETBIOS {
 585    CLUSPROP_IPADDR_ENABLENETBIOS_DISABLED    = 0,  // 0x0
 586    CLUSPROP_IPADDR_ENABLENETBIOS_ENABLED,
 587    CLUSPROP_IPADDR_ENABLENETBIOS_TRACK_NIC 
 588  } CLUSPROP_IPADDR_ENABLENETBIOS;
 589
 590  typedef enum CLUSCTL_GROUP_CODES {
 591    CLUSCTL_GROUP_UNKNOWN = CLUSCTL_GROUP_CODE(CLCTL_UNKNOWN),
 592    CLUSCTL_GROUP_GET_CHARACTERISTICS = CLUSCTL_GROUP_CODE(CLCTL_GET_CHARACTERISTICS),
 593    CLUSCTL_GROUP_GET_FLAGS = CLUSCTL_GROUP_CODE(CLCTL_GET_FLAGS),
 594    CLUSCTL_GROUP_GET_NAME = CLUSCTL_GROUP_CODE(CLCTL_GET_NAME),
 595    CLUSCTL_GROUP_GET_ID = CLUSCTL_GROUP_CODE(CLCTL_GET_ID),
 596    CLUSCTL_GROUP_ENUM_COMMON_PROPERTIES = CLUSCTL_GROUP_CODE(CLCTL_ENUM_COMMON_PROPERTIES),
 597    CLUSCTL_GROUP_GET_RO_COMMON_PROPERTIES = CLUSCTL_GROUP_CODE(CLCTL_GET_RO_COMMON_PROPERTIES),
 598    CLUSCTL_GROUP_GET_COMMON_PROPERTIES = CLUSCTL_GROUP_CODE(CLCTL_GET_COMMON_PROPERTIES),
 599    CLUSCTL_GROUP_SET_COMMON_PROPERTIES = CLUSCTL_GROUP_CODE(CLCTL_SET_COMMON_PROPERTIES),
 600    CLUSCTL_GROUP_VALIDATE_COMMON_PROPERTIES = CLUSCTL_GROUP_CODE(CLCTL_VALIDATE_COMMON_PROPERTIES),
 601    CLUSCTL_GROUP_ENUM_PRIVATE_PROPERTIES = CLUSCTL_GROUP_CODE(CLCTL_ENUM_PRIVATE_PROPERTIES),
 602    CLUSCTL_GROUP_GET_RO_PRIVATE_PROPERTIES = CLUSCTL_GROUP_CODE(CLCTL_GET_RO_PRIVATE_PROPERTIES),
 603    CLUSCTL_GROUP_GET_PRIVATE_PROPERTIES = CLUSCTL_GROUP_CODE(CLCTL_GET_PRIVATE_PROPERTIES),
 604    CLUSCTL_GROUP_SET_PRIVATE_PROPERTIES = CLUSCTL_GROUP_CODE(CLCTL_SET_PRIVATE_PROPERTIES),
 605    CLUSCTL_GROUP_VALIDATE_PRIVATE_PROPERTIES = CLUSCTL_GROUP_CODE(CLCTL_VALIDATE_PRIVATE_PROPERTIES),
 606    CLUSCTL_GROUP_QUERY_DELETE = CLUSCTL_GROUP_CODE(CLCTL_QUERY_DELETE),
 607    CLUSCTL_GROUP_GET_COMMON_PROPERTY_FMTS = CLUSCTL_GROUP_CODE(CLCTL_GET_COMMON_PROPERTY_FMTS),
 608    CLUSCTL_GROUP_GET_PRIVATE_PROPERTY_FMTS = CLUSCTL_GROUP_CODE(CLCTL_GET_PRIVATE_PROPERTY_FMTS)
 609  } CLUSCTL_GROUP_CODES;
 610
 611  typedef enum CLUSCTL_NODE_CODES {
 612    CLUSCTL_NODE_UNKNOWN = CLUSCTL_NODE_CODE(CLCTL_UNKNOWN),
 613    CLUSCTL_NODE_GET_CHARACTERISTICS = CLUSCTL_NODE_CODE(CLCTL_GET_CHARACTERISTICS),
 614    CLUSCTL_NODE_GET_FLAGS = CLUSCTL_NODE_CODE(CLCTL_GET_FLAGS),
 615    CLUSCTL_NODE_GET_NAME = CLUSCTL_NODE_CODE(CLCTL_GET_NAME),
 616    CLUSCTL_NODE_GET_ID = CLUSCTL_NODE_CODE(CLCTL_GET_ID),
 617    CLUSCTL_NODE_ENUM_COMMON_PROPERTIES = CLUSCTL_NODE_CODE(CLCTL_ENUM_COMMON_PROPERTIES),
 618    CLUSCTL_NODE_GET_RO_COMMON_PROPERTIES = CLUSCTL_NODE_CODE(CLCTL_GET_RO_COMMON_PROPERTIES),
 619    CLUSCTL_NODE_GET_COMMON_PROPERTIES = CLUSCTL_NODE_CODE(CLCTL_GET_COMMON_PROPERTIES),
 620    CLUSCTL_NODE_SET_COMMON_PROPERTIES = CLUSCTL_NODE_CODE(CLCTL_SET_COMMON_PROPERTIES),
 621    CLUSCTL_NODE_VALIDATE_COMMON_PROPERTIES = CLUSCTL_NODE_CODE(CLCTL_VALIDATE_COMMON_PROPERTIES),
 622    CLUSCTL_NODE_ENUM_PRIVATE_PROPERTIES = CLUSCTL_NODE_CODE(CLCTL_ENUM_PRIVATE_PROPERTIES),
 623    CLUSCTL_NODE_GET_RO_PRIVATE_PROPERTIES = CLUSCTL_NODE_CODE(CLCTL_GET_RO_PRIVATE_PROPERTIES),
 624    CLUSCTL_NODE_GET_PRIVATE_PROPERTIES = CLUSCTL_NODE_CODE(CLCTL_GET_PRIVATE_PROPERTIES),
 625    CLUSCTL_NODE_SET_PRIVATE_PROPERTIES = CLUSCTL_NODE_CODE(CLCTL_SET_PRIVATE_PROPERTIES),
 626    CLUSCTL_NODE_VALIDATE_PRIVATE_PROPERTIES = CLUSCTL_NODE_CODE(CLCTL_VALIDATE_PRIVATE_PROPERTIES),
 627    CLUSCTL_NODE_GET_COMMON_PROPERTY_FMTS = CLUSCTL_NODE_CODE(CLCTL_GET_COMMON_PROPERTY_FMTS),
 628    CLUSCTL_NODE_GET_PRIVATE_PROPERTY_FMTS = CLUSCTL_NODE_CODE(CLCTL_GET_PRIVATE_PROPERTY_FMTS),
 629    CLUSCTL_NODE_GET_CLUSTER_SERVICE_ACCOUNT_NAME = CLUSCTL_NODE_CODE(CLCTL_GET_CLUSTER_SERVICE_ACCOUNT_NAME)
 630  } CLUSCTL_NODE_CODES;
 631
 632  typedef enum CLUSCTL_NETWORK_CODES {
 633    CLUSCTL_NETWORK_UNKNOWN = CLUSCTL_NETWORK_CODE(CLCTL_UNKNOWN),
 634    CLUSCTL_NETWORK_GET_CHARACTERISTICS = CLUSCTL_NETWORK_CODE(CLCTL_GET_CHARACTERISTICS),
 635    CLUSCTL_NETWORK_GET_FLAGS = CLUSCTL_NETWORK_CODE(CLCTL_GET_FLAGS),
 636    CLUSCTL_NETWORK_GET_NAME = CLUSCTL_NETWORK_CODE(CLCTL_GET_NAME),
 637    CLUSCTL_NETWORK_GET_ID = CLUSCTL_NETWORK_CODE(CLCTL_GET_ID),
 638    CLUSCTL_NETWORK_ENUM_COMMON_PROPERTIES = CLUSCTL_NETWORK_CODE(CLCTL_ENUM_COMMON_PROPERTIES),
 639    CLUSCTL_NETWORK_GET_RO_COMMON_PROPERTIES = CLUSCTL_NETWORK_CODE(CLCTL_GET_RO_COMMON_PROPERTIES),
 640    CLUSCTL_NETWORK_GET_COMMON_PROPERTIES = CLUSCTL_NETWORK_CODE(CLCTL_GET_COMMON_PROPERTIES),
 641    CLUSCTL_NETWORK_SET_COMMON_PROPERTIES = CLUSCTL_NETWORK_CODE(CLCTL_SET_COMMON_PROPERTIES),
 642    CLUSCTL_NETWORK_VALIDATE_COMMON_PROPERTIES = CLUSCTL_NETWORK_CODE(CLCTL_VALIDATE_COMMON_PROPERTIES),
 643    CLUSCTL_NETWORK_ENUM_PRIVATE_PROPERTIES = CLUSCTL_NETWORK_CODE(CLCTL_ENUM_PRIVATE_PROPERTIES),
 644    CLUSCTL_NETWORK_GET_RO_PRIVATE_PROPERTIES = CLUSCTL_NETWORK_CODE(CLCTL_GET_RO_PRIVATE_PROPERTIES),
 645    CLUSCTL_NETWORK_GET_PRIVATE_PROPERTIES = CLUSCTL_NETWORK_CODE(CLCTL_GET_PRIVATE_PROPERTIES),
 646    CLUSCTL_NETWORK_SET_PRIVATE_PROPERTIES = CLUSCTL_NETWORK_CODE(CLCTL_SET_PRIVATE_PROPERTIES),
 647    CLUSCTL_NETWORK_VALIDATE_PRIVATE_PROPERTIES = CLUSCTL_NETWORK_CODE(CLCTL_VALIDATE_PRIVATE_PROPERTIES),
 648    CLUSCTL_NETWORK_GET_COMMON_PROPERTY_FMTS = CLUSCTL_NETWORK_CODE(CLCTL_GET_COMMON_PROPERTY_FMTS),
 649    CLUSCTL_NETWORK_GET_PRIVATE_PROPERTY_FMTS = CLUSCTL_NETWORK_CODE(CLCTL_GET_PRIVATE_PROPERTY_FMTS)
 650  } CLUSCTL_NETWORK_CODES;
 651
 652  typedef enum CLUSCTL_NETINTERFACE_CODES {
 653    CLUSCTL_NETINTERFACE_UNKNOWN = CLUSCTL_NETINTERFACE_CODE(CLCTL_UNKNOWN),
 654    CLUSCTL_NETINTERFACE_GET_CHARACTERISTICS = CLUSCTL_NETINTERFACE_CODE(CLCTL_GET_CHARACTERISTICS),
 655    CLUSCTL_NETINTERFACE_GET_FLAGS = CLUSCTL_NETINTERFACE_CODE(CLCTL_GET_FLAGS),
 656    CLUSCTL_NETINTERFACE_GET_NAME = CLUSCTL_NETINTERFACE_CODE(CLCTL_GET_NAME),
 657    CLUSCTL_NETINTERFACE_GET_ID = CLUSCTL_NETINTERFACE_CODE(CLCTL_GET_ID),
 658    CLUSCTL_NETINTERFACE_GET_NODE = CLUSCTL_NETINTERFACE_CODE(CLCTL_GET_NODE),
 659    CLUSCTL_NETINTERFACE_GET_NETWORK = CLUSCTL_NETINTERFACE_CODE(CLCTL_GET_NETWORK),
 660    CLUSCTL_NETINTERFACE_ENUM_COMMON_PROPERTIES = CLUSCTL_NETINTERFACE_CODE(CLCTL_ENUM_COMMON_PROPERTIES),
 661    CLUSCTL_NETINTERFACE_GET_RO_COMMON_PROPERTIES = CLUSCTL_NETINTERFACE_CODE(CLCTL_GET_RO_COMMON_PROPERTIES),
 662    CLUSCTL_NETINTERFACE_GET_COMMON_PROPERTIES = CLUSCTL_NETINTERFACE_CODE(CLCTL_GET_COMMON_PROPERTIES),
 663    CLUSCTL_NETINTERFACE_SET_COMMON_PROPERTIES = CLUSCTL_NETINTERFACE_CODE(CLCTL_SET_COMMON_PROPERTIES),
 664    CLUSCTL_NETINTERFACE_VALIDATE_COMMON_PROPERTIES = CLUSCTL_NETINTERFACE_CODE(CLCTL_VALIDATE_COMMON_PROPERTIES),
 665    CLUSCTL_NETINTERFACE_ENUM_PRIVATE_PROPERTIES = CLUSCTL_NETINTERFACE_CODE(CLCTL_ENUM_PRIVATE_PROPERTIES),
 666    CLUSCTL_NETINTERFACE_GET_RO_PRIVATE_PROPERTIES = CLUSCTL_NETINTERFACE_CODE(CLCTL_GET_RO_PRIVATE_PROPERTIES),
 667    CLUSCTL_NETINTERFACE_GET_PRIVATE_PROPERTIES = CLUSCTL_NETINTERFACE_CODE(CLCTL_GET_PRIVATE_PROPERTIES),
 668    CLUSCTL_NETINTERFACE_SET_PRIVATE_PROPERTIES = CLUSCTL_NETINTERFACE_CODE(CLCTL_SET_PRIVATE_PROPERTIES),
 669    CLUSCTL_NETINTERFACE_VALIDATE_PRIVATE_PROPERTIES = CLUSCTL_NETINTERFACE_CODE(CLCTL_VALIDATE_PRIVATE_PROPERTIES),
 670    CLUSCTL_NETINTERFACE_GET_COMMON_PROPERTY_FMTS = CLUSCTL_NETINTERFACE_CODE(CLCTL_GET_COMMON_PROPERTY_FMTS),
 671    CLUSCTL_NETINTERFACE_GET_PRIVATE_PROPERTY_FMTS = CLUSCTL_NETINTERFACE_CODE(CLCTL_GET_PRIVATE_PROPERTY_FMTS)
 672  } CLUSCTL_NETINTERFACE_CODES;
 673
 674  typedef enum CLUSCTL_CLUSTER_CODES {
 675    CLUSCTL_CLUSTER_UNKNOWN = CLUSCTL_CLUSTER_CODE(CLCTL_UNKNOWN),
 676    CLUSCTL_CLUSTER_GET_FQDN = CLUSCTL_CLUSTER_CODE(CLCTL_GET_FQDN),
 677    CLUSCTL_CLUSTER_ENUM_COMMON_PROPERTIES = CLUSCTL_CLUSTER_CODE(CLCTL_ENUM_COMMON_PROPERTIES),
 678    CLUSCTL_CLUSTER_GET_RO_COMMON_PROPERTIES = CLUSCTL_CLUSTER_CODE(CLCTL_GET_RO_COMMON_PROPERTIES),
 679    CLUSCTL_CLUSTER_GET_COMMON_PROPERTIES = CLUSCTL_CLUSTER_CODE(CLCTL_GET_COMMON_PROPERTIES),
 680    CLUSCTL_CLUSTER_SET_COMMON_PROPERTIES = CLUSCTL_CLUSTER_CODE(CLCTL_SET_COMMON_PROPERTIES),
 681    CLUSCTL_CLUSTER_VALIDATE_COMMON_PROPERTIES = CLUSCTL_CLUSTER_CODE(CLCTL_VALIDATE_COMMON_PROPERTIES),
 682    CLUSCTL_CLUSTER_ENUM_PRIVATE_PROPERTIES = CLUSCTL_CLUSTER_CODE(CLCTL_ENUM_PRIVATE_PROPERTIES),
 683    CLUSCTL_CLUSTER_GET_RO_PRIVATE_PROPERTIES = CLUSCTL_CLUSTER_CODE(CLCTL_GET_RO_PRIVATE_PROPERTIES),
 684    CLUSCTL_CLUSTER_GET_PRIVATE_PROPERTIES = CLUSCTL_CLUSTER_CODE(CLCTL_GET_PRIVATE_PROPERTIES),
 685    CLUSCTL_CLUSTER_SET_PRIVATE_PROPERTIES = CLUSCTL_CLUSTER_CODE(CLCTL_SET_PRIVATE_PROPERTIES),
 686    CLUSCTL_CLUSTER_VALIDATE_PRIVATE_PROPERTIES = CLUSCTL_CLUSTER_CODE(CLCTL_VALIDATE_PRIVATE_PROPERTIES),
 687    CLUSCTL_CLUSTER_GET_COMMON_PROPERTY_FMTS = CLUSCTL_CLUSTER_CODE(CLCTL_GET_COMMON_PROPERTY_FMTS),
 688    CLUSCTL_CLUSTER_GET_PRIVATE_PROPERTY_FMTS = CLUSCTL_CLUSTER_CODE(CLCTL_GET_PRIVATE_PROPERTY_FMTS),
 689    CLUSCTL_CLUSTER_CHECK_VOTER_EVICT             = CLUSCTL_CLUSTER_CODE(CLCTL_CHECK_VOTER_EVICT),/*0x07000045*/
 690    CLUSCTL_CLUSTER_CHECK_VOTER_DOWN              = CLUSCTL_CLUSTER_CODE(CLCTL_CHECK_VOTER_DOWN),/*0x07000049*/
 691    CLUSCTL_CLUSTER_SHUTDOWN                      = CLUSCTL_CLUSTER_CODE(CLCTL_SHUTDOWN),/*0x0700004d*/
 692    CLUSCTL_CLUSTER_BATCH_BLOCK_KEY               = CLUSCTL_CLUSTER_CODE(CLCTL_BATCH_BLOCK_KEY),/*0x0700023e*/
 693    CLUSCTL_CLUSTER_BATCH_UNBLOCK_KEY             = CLUSCTL_CLUSTER_CODE(CLCTL_BATCH_UNBLOCK_KEY),/*0x07000241*/
 694    CLUSCTL_CLUSTER_GET_SHARED_VOLUME_ID          = CLUSCTL_CLUSTER_CODE(CLCTL_GET_SHARED_VOLUME_ID),/*0x07000291*/
 695  } CLUSCTL_CLUSTER_CODES;
 696
 697  typedef enum CLUSTER_RESOURCE_CLASS {
 698    CLUS_RESCLASS_UNKNOWN = 0,CLUS_RESCLASS_STORAGE,CLUS_RESCLASS_USER = 32768
 699  } CLUSTER_RESOURCE_CLASS;
 700
 701  typedef enum CLUS_RESSUBCLASS {
 702    CLUS_RESSUBCLASS_SHARED = 0x80000000
 703  } CLUS_RESSUBCLASS;
 704
 705  typedef enum CLUS_CHARACTERISTICS {
 706    CLUS_CHAR_UNKNOWN = 0x00000000,CLUS_CHAR_QUORUM = 0x00000001,CLUS_CHAR_DELETE_REQUIRES_ALL_NODES = 0x00000002,CLUS_CHAR_LOCAL_QUORUM = 0x00000004,
 707    CLUS_CHAR_LOCAL_QUORUM_DEBUG = 0x00000008,CLUS_CHAR_REQUIRES_STATE_CHANGE_REASON = 0x00000010,
 708    CLUS_CHAR_BROADCAST_DELETE               = 0x00000020,
 709    CLUS_CHAR_SINGLE_CLUSTER_INSTANCE        = 0x00000040,
 710    CLUS_CHAR_SINGLE_GROUP_INSTANCE          = 0x00000080 
 711  } CLUS_CHARACTERISTICS;
 712
 713  typedef enum CLUS_FLAGS {
 714    CLUS_FLAG_CORE = 0x00000001
 715  } CLUS_FLAGS;
 716
 717  typedef enum CLUS_RESSUBCLASS_NETWORK {
 718    CLUS_RESSUBCLASS_NETWORK_INTERNET_PROTOCOL   = 0x80000000
 719  } CLUS_RESSUBCLASS_NETWORK;
 720
 721  typedef enum CLUS_RESSUBCLASS_STORAGE {
 722    CLUS_RESSUBCLASS_STORAGE_SHARED_BUS   = 0x80000000
 723  } CLUS_RESSUBCLASS_STORAGE;
 724
 725  typedef union CLUSPROP_SYNTAX {
 726    DWORD dw;
 727    __C89_NAMELESS struct {
 728      WORD wFormat;
 729      WORD wType;
 730    };
 731  } CLUSPROP_SYNTAX,*PCLUSPROP_SYNTAX;
 732
 733  typedef struct CLUSPROP_VALUE {
 734    CLUSPROP_SYNTAX Syntax;
 735    DWORD cbLength;
 736  } CLUSPROP_VALUE,*PCLUSPROP_VALUE;
 737
 738  typedef struct CLUSPROP_BINARY
 739#ifdef __cplusplus
 740    : public CLUSPROP_VALUE
 741#endif
 742  {
 743#ifndef __cplusplus
 744    CLUSPROP_VALUE;
 745#endif
 746    BYTE rgb[1];
 747  } CLUSPROP_BINARY,*PCLUSPROP_BINARY;
 748
 749  typedef struct CLUSPROP_WORD
 750#ifdef __cplusplus
 751    : public CLUSPROP_VALUE
 752#endif
 753  {
 754#ifndef __cplusplus
 755    CLUSPROP_VALUE;
 756#endif
 757    WORD w;
 758  } CLUSPROP_WORD,*PCLUSPROP_WORD;
 759
 760  typedef struct CLUSPROP_DWORD
 761#ifdef __cplusplus
 762    : public CLUSPROP_VALUE
 763#endif
 764  {
 765#ifndef __cplusplus
 766    CLUSPROP_VALUE;
 767#endif
 768    DWORD dw;
 769  } CLUSPROP_DWORD,*PCLUSPROP_DWORD;
 770
 771  typedef struct CLUSPROP_LONG
 772#ifdef __cplusplus
 773    : public CLUSPROP_VALUE
 774#endif
 775  {
 776#ifndef __cplusplus
 777    CLUSPROP_VALUE;
 778#endif
 779    LONG l;
 780  } CLUSPROP_LONG,*PCLUSPROP_LONG;
 781
 782  typedef struct CLUSPROP_SZ
 783#ifdef __cplusplus
 784    : public CLUSPROP_VALUE
 785#endif
 786  {
 787#ifndef __cplusplus
 788    CLUSPROP_VALUE;
 789#endif
 790    WCHAR sz[1];
 791  } CLUSPROP_SZ,*PCLUSPROP_SZ;
 792
 793  typedef CLUSPROP_SZ CLUSPROP_MULTI_SZ,*PCLUSPROP_MULTI_SZ;
 794  typedef CLUSPROP_SZ CLUSPROP_PROPERTY_NAME,*PCLUSPROP_PROPERTY_NAME;
 795
 796  typedef struct CLUSPROP_ULARGE_INTEGER
 797#ifdef __cplusplus
 798    : public CLUSPROP_VALUE
 799#endif
 800  {
 801#ifndef __cplusplus
 802    CLUSPROP_VALUE;
 803#endif
 804    ULARGE_INTEGER li;
 805  } CLUSPROP_ULARGE_INTEGER,*PCLUSPROP_ULARGE_INTEGER;
 806
 807  typedef struct CLUSPROP_LARGE_INTEGER
 808#ifdef __cplusplus
 809    : public CLUSPROP_VALUE
 810#endif
 811  {
 812#ifndef __cplusplus
 813    CLUSPROP_VALUE;
 814#endif
 815    LARGE_INTEGER li;
 816  } CLUSPROP_LARGE_INTEGER,*PCLUSPROP_LARGE_INTEGER;
 817
 818  typedef struct CLUSPROP_SECURITY_DESCRIPTOR
 819#ifdef __cplusplus
 820    : public CLUSPROP_VALUE
 821#endif
 822  {
 823#ifndef __cplusplus
 824    CLUSPROP_VALUE;
 825#endif
 826    __C89_NAMELESS union {
 827      SECURITY_DESCRIPTOR_RELATIVE sd;
 828      BYTE rgbSecurityDescriptor[1];
 829    };
 830  } CLUSPROP_SECURITY_DESCRIPTOR,*PCLUSPROP_SECURITY_DESCRIPTOR;
 831
 832  typedef struct CLUS_RESOURCE_CLASS_INFO {
 833    __C89_NAMELESS union {
 834      __C89_NAMELESS struct {
 835	__C89_NAMELESS union {
 836	  DWORD dw;
 837	  CLUSTER_RESOURCE_CLASS rc;
 838	};
 839	DWORD SubClass;
 840      };
 841      ULARGE_INTEGER li;
 842    };
 843  } CLUS_RESOURCE_CLASS_INFO,*PCLUS_RESOURCE_CLASS_INFO;
 844
 845  typedef struct CLUSPROP_RESOURCE_CLASS
 846#ifdef __cplusplus
 847    : public CLUSPROP_VALUE
 848#endif
 849  {
 850#ifndef __cplusplus
 851    CLUSPROP_VALUE;
 852#endif
 853    CLUSTER_RESOURCE_CLASS rc;
 854  } CLUSPROP_RESOURCE_CLASS,*PCLUSPROP_RESOURCE_CLASS;
 855
 856  typedef struct CLUSPROP_RESOURCE_CLASS_INFO
 857#ifdef __cplusplus
 858    : public CLUSPROP_VALUE,public CLUS_RESOURCE_CLASS_INFO
 859#endif
 860  {
 861#ifndef __cplusplus
 862    CLUSPROP_VALUE;
 863    CLUS_RESOURCE_CLASS_INFO;
 864#endif
 865  } CLUSPROP_RESOURCE_CLASS_INFO,*PCLUSPROP_RESOURCE_CLASS_INFO;
 866
 867  typedef union CLUSPROP_REQUIRED_DEPENDENCY {
 868    CLUSPROP_VALUE Value;
 869    CLUSPROP_RESOURCE_CLASS ResClass;
 870    CLUSPROP_SZ ResTypeName;
 871  } CLUSPROP_REQUIRED_DEPENDENCY,*PCLUSPROP_REQUIRED_DEPENDENCY;
 872
 873  typedef CLUSPROP_DWORD CLUSPROP_DISK_NUMBER,*PCLUSPROP_DISK_NUMBER;
 874#endif
 875
 876#ifndef _CLUSTER_API_TYPES_
 877  typedef enum CLUSPROP_PIFLAGS {
 878    CLUSPROP_PIFLAG_STICKY = 0x00000001,CLUSPROP_PIFLAG_REMOVABLE = 0x00000002,CLUSPROP_PIFLAG_USABLE = 0x00000004,
 879    CLUSPROP_PIFLAG_DEFAULT_QUORUM = 0x00000008
 880  } CLUSPROP_PIFLAGS;
 881
 882  typedef struct CLUS_FORCE_QUORUM_INFO {
 883    DWORD dwSize;
 884    DWORD dwNodeBitMask;
 885    DWORD dwMaxNumberofNodes;
 886    WCHAR multiszNodeList[1];
 887  } CLUS_FORCE_QUORUM_INFO,*PCLUS_FORCE_QUORUM_INFO;
 888
 889  typedef struct CLUS_PARTITION_INFO {
 890    DWORD dwFlags;
 891    WCHAR szDeviceName[MAX_PATH];
 892    WCHAR szVolumeLabel[MAX_PATH];
 893    DWORD dwSerialNumber;
 894    DWORD rgdwMaximumComponentLength;
 895    DWORD dwFileSystemFlags;
 896    WCHAR szFileSystem[32];
 897  } CLUS_PARTITION_INFO,*PCLUS_PARTITION_INFO;
 898
 899  typedef struct CLUSPROP_PARTITION_INFO
 900#ifdef __cplusplus
 901    : public CLUSPROP_VALUE,public CLUS_PARTITION_INFO
 902#endif
 903  {
 904#ifndef __cplusplus
 905    CLUSPROP_VALUE;
 906    CLUS_PARTITION_INFO;
 907#endif
 908  } CLUSPROP_PARTITION_INFO,*PCLUSPROP_PARTITION_INFO;
 909
 910  typedef struct CLUS_FTSET_INFO {
 911    DWORD dwRootSignature;
 912    DWORD dwFtType;
 913  } CLUS_FTSET_INFO,*PCLUS_FTSET_INFO;
 914
 915  typedef struct CLUSPROP_FTSET_INFO
 916#ifdef __cplusplus
 917    : public CLUSPROP_VALUE,public CLUS_FTSET_INFO
 918#endif
 919  {
 920#ifndef __cplusplus
 921    CLUSPROP_VALUE;
 922    CLUS_FTSET_INFO;
 923#endif
 924  } CLUSPROP_FTSET_INFO,*PCLUSPROP_FTSET_INFO;
 925
 926  typedef CLUSPROP_DWORD CLUSPROP_DISK_SIGNATURE,*PCLUSPROP_DISK_SIGNATURE;
 927  typedef struct CLUS_SCSI_ADDRESS {
 928    __C89_NAMELESS union {
 929      __C89_NAMELESS struct {
 930	UCHAR PortNumber;
 931	UCHAR PathId;
 932	UCHAR TargetId;
 933	UCHAR Lun;
 934      };
 935      DWORD dw;
 936    };
 937  } CLUS_SCSI_ADDRESS,*PCLUS_SCSI_ADDRESS;
 938
 939  typedef struct CLUSPROP_SCSI_ADDRESS
 940#ifdef __cplusplus
 941    : public CLUSPROP_VALUE,public CLUS_SCSI_ADDRESS
 942#endif
 943  {
 944#ifndef __cplusplus
 945    CLUSPROP_VALUE;
 946    CLUS_SCSI_ADDRESS;
 947#endif
 948  } CLUSPROP_SCSI_ADDRESS,*PCLUSPROP_SCSI_ADDRESS;
 949
 950  typedef struct CLUS_NETNAME_VS_TOKEN_INFO {
 951    DWORD ProcessID;
 952    DWORD DesiredAccess;
 953    WINBOOL InheritHandle;
 954  } CLUS_NETNAME_VS_TOKEN_INFO,*PCLUS_NETNAME_VS_TOKEN_INFO;
 955
 956  typedef struct CLUS_MAINTENANCE_MODE_INFO {
 957    WINBOOL InMaintenance;
 958  } CLUS_MAINTENANCE_MODE_INFO,*PCLUS_MAINTENANCE_MODE_INFO;
 959
 960  typedef struct CLUSPROP_LIST {
 961    DWORD nPropertyCount;
 962    CLUSPROP_PROPERTY_NAME PropertyName;
 963  } CLUSPROP_LIST,*PCLUSPROP_LIST;
 964
 965  typedef union CLUSPROP_BUFFER_HELPER {
 966    BYTE *pb;
 967    WORD *pw;
 968    DWORD *pdw;
 969    LONG *pl;
 970    LPWSTR psz;
 971    PCLUSPROP_LIST pList;
 972    PCLUSPROP_SYNTAX pSyntax;
 973    PCLUSPROP_PROPERTY_NAME pName;
 974    PCLUSPROP_VALUE pValue;
 975    PCLUSPROP_BINARY pBinaryValue;
 976    PCLUSPROP_WORD pWordValue;
 977    PCLUSPROP_DWORD pDwordValue;
 978    PCLUSPROP_LONG pLongValue;
 979    PCLUSPROP_ULARGE_INTEGER pULargeIntegerValue;
 980    PCLUSPROP_LARGE_INTEGER pLargeIntegerValue;
 981    PCLUSPROP_SZ pStringValue;
 982    PCLUSPROP_MULTI_SZ pMultiSzValue;
 983    PCLUSPROP_SECURITY_DESCRIPTOR pSecurityDescriptor;
 984    PCLUSPROP_RESOURCE_CLASS pResourceClassValue;
 985    PCLUSPROP_RESOURCE_CLASS_INFO pResourceClassInfoValue;
 986    PCLUSPROP_DISK_SIGNATURE pDiskSignatureValue;
 987    PCLUSPROP_SCSI_ADDRESS pScsiAddressValue;
 988    PCLUSPROP_DISK_NUMBER pDiskNumberValue;
 989    PCLUSPROP_PARTITION_INFO pPartitionInfoValue;
 990    PCLUSPROP_REQUIRED_DEPENDENCY pRequiredDependencyValue;
 991  } CLUSPROP_BUFFER_HELPER,*PCLUSPROP_BUFFER_HELPER;
 992#endif
 993
 994#define ALIGN_CLUSPROP(count) ((count + 3) & ~3)
 995#define CLUSPROP_BINARY_DECLARE(name,cb) struct { CLUSPROP_SYNTAX Syntax; DWORD cbLength; BYTE rgb[(cb + 3) & ~3]; } name
 996#define CLUSPROP_SZ_DECLARE(name,cch) struct { CLUSPROP_SYNTAX Syntax; DWORD cbLength; WCHAR sz[(cch + 1) & ~1]; } name
 997#define CLUSPROP_PROPERTY_NAME_DECLARE(name,cch) CLUSPROP_SZ_DECLARE(name,cch)
 998
 999#ifndef _CLUSTER_API_TYPES_
1000  typedef enum CLUSTER_RESOURCE_ENUM {
1001    CLUSTER_RESOURCE_ENUM_DEPENDS = 0x00000001,CLUSTER_RESOURCE_ENUM_PROVIDES = 0x00000002,CLUSTER_RESOURCE_ENUM_NODES = 0x00000004,
1002    CLUSTER_RESOURCE_ENUM_ALL = (CLUSTER_RESOURCE_ENUM_DEPENDS | CLUSTER_RESOURCE_ENUM_PROVIDES | CLUSTER_RESOURCE_ENUM_NODES)
1003  } CLUSTER_RESOURCE_ENUM;
1004
1005  typedef enum CLUSTER_RESOURCE_TYPE_ENUM {
1006    CLUSTER_RESOURCE_TYPE_ENUM_NODES = 0x00000001,
1007    CLUSTER_RESOURCE_TYPE_ENUM_RESOURCES = 0x00000002,
1008    CLUSTER_RESOURCE_TYPE_ENUM_ALL = (CLUSTER_RESOURCE_TYPE_ENUM_NODES | CLUSTER_RESOURCE_TYPE_ENUM_RESOURCES)
1009  } CLUSTER_RESOURCE_TYPE_ENUM;
1010#endif
1011
1012  HRESENUM WINAPI ClusterResourceOpenEnum(HRESOURCE hResource,DWORD dwType);
1013  DWORD WINAPI ClusterResourceGetEnumCount(HRESENUM hResEnum);
1014  DWORD WINAPI ClusterResourceEnum(HRESENUM hResEnum,DWORD dwIndex,LPDWORD lpdwType,LPWSTR lpszName,LPDWORD lpcchName);
1015  DWORD WINAPI ClusterResourceCloseEnum(HRESENUM hResEnum);
1016  DWORD WINAPI CreateClusterResourceType(HCLUSTER hCluster,LPCWSTR lpszResourceTypeName,LPCWSTR lpszDisplayName,LPCWSTR lpszResourceTypeDll,DWORD dwLooksAlivePollInterval,DWORD dwIsAlivePollInterval);
1017  DWORD WINAPI DeleteClusterResourceType(HCLUSTER hCluster,LPCWSTR lpszResourceTypeName);
1018  HRESTYPEENUM WINAPI ClusterResourceTypeOpenEnum(HCLUSTER hCluster,LPCWSTR lpszResourceTypeName,DWORD dwType);
1019  DWORD WINAPI ClusterResourceTypeGetEnumCount(HRESTYPEENUM hResTypeEnum);
1020  DWORD WINAPI ClusterResourceTypeEnum(HRESTYPEENUM hResTypeEnum,DWORD dwIndex,LPDWORD lpdwType,LPWSTR lpszName,LPDWORD lpcchName);
1021  DWORD WINAPI ClusterResourceTypeCloseEnum(HRESTYPEENUM hResTypeEnum);
1022
1023#ifndef _CLUSTER_API_TYPES_
1024  typedef enum CLUSTER_NETWORK_ENUM {
1025    CLUSTER_NETWORK_ENUM_NETINTERFACES = 0x00000001,CLUSTER_NETWORK_ENUM_ALL = CLUSTER_NETWORK_ENUM_NETINTERFACES
1026  } CLUSTER_NETWORK_ENUM;
1027
1028  typedef enum CLUSTER_NETWORK_STATE {
1029    ClusterNetworkStateUnknown = -1,ClusterNetworkUnavailable,ClusterNetworkDown,ClusterNetworkPartitioned,ClusterNetworkUp
1030  } CLUSTER_NETWORK_STATE;
1031
1032  typedef enum CLUSTER_NETWORK_ROLE {
1033    ClusterNetworkRoleNone = 0,ClusterNetworkRoleInternalUse = 0x00000001,ClusterNetworkRoleClientAccess = 0x00000002,
1034    ClusterNetworkRoleInternalAndClient = 0x00000003
1035  } CLUSTER_NETWORK_ROLE;
1036#endif
1037
1038  HNETWORK WINAPI OpenClusterNetwork(HCLUSTER hCluster,LPCWSTR lpszNetworkName);
1039  WINBOOL WINAPI CloseClusterNetwork(HNETWORK hNetwork);
1040  HCLUSTER WINAPI GetClusterFromNetwork(HNETWORK hNetwork);
1041  HNETWORKENUM WINAPI ClusterNetworkOpenEnum(HNETWORK hNetwork,DWORD dwType);
1042  DWORD WINAPI ClusterNetworkGetEnumCount(HNETWORKENUM hNetworkEnum);
1043  DWORD WINAPI ClusterNetworkEnum(HNETWORKENUM hNetworkEnum,DWORD dwIndex,LPDWORD lpdwType,LPWSTR lpszName,LPDWORD lpcchName);
1044  DWORD WINAPI ClusterNetworkCloseEnum(HNETWORKENUM hNetworkEnum);
1045  CLUSTER_NETWORK_STATE WINAPI GetClusterNetworkState(HNETWORK hNetwork);
1046  DWORD WINAPI SetClusterNetworkName(HNETWORK hNetwork,LPCWSTR lpszName);
1047  DWORD WINAPI GetClusterNetworkId(HNETWORK hNetwork,LPWSTR lpszNetworkId,LPDWORD lpcchName);
1048  DWORD WINAPI ClusterNetworkControl(HNETWORK hNetwork,HNODE hHostNode,DWORD dwControlCode,LPVOID lpInBuffer,DWORD nInBufferSize,LPVOID lpOutBuffer,DWORD nOutBufferSize,LPDWORD lpBytesReturned);
1049
1050#ifndef _CLUSTER_API_TYPES_
1051  typedef enum CLUSTER_NETINTERFACE_STATE {
1052    ClusterNetInterfaceStateUnknown = -1,ClusterNetInterfaceUnavailable,ClusterNetInterfaceFailed,ClusterNetInterfaceUnreachable,ClusterNetInterfaceUp
1053  } CLUSTER_NETINTERFACE_STATE;
1054#endif
1055
1056  HNETINTERFACE WINAPI OpenClusterNetInterface(HCLUSTER hCluster,LPCWSTR lpszInterfaceName);
1057  DWORD WINAPI GetClusterNetInterface(HCLUSTER hCluster,LPCWSTR lpszNodeName,LPCWSTR lpszNetworkName,LPWSTR lpszInterfaceName,LPDWORD lpcchInterfaceName);
1058  WINBOOL WINAPI CloseClusterNetInterface(HNETINTERFACE hNetInterface);
1059  HCLUSTER WINAPI GetClusterFromNetInterface(HNETINTERFACE hNetInterface);
1060  CLUSTER_NETINTERFACE_STATE WINAPI GetClusterNetInterfaceState(HNETINTERFACE hNetInterface);
1061  DWORD WINAPI ClusterNetInterfaceControl(HNETINTERFACE hNetInterface,HNODE hHostNode,DWORD dwControlCode,LPVOID lpInBuffer,DWORD nInBufferSize,LPVOID lpOutBuffer,DWORD nOutBufferSize,LPDWORD lpBytesReturned);
1062  HKEY WINAPI GetClusterKey(HCLUSTER hCluster,REGSAM samDesired);
1063  HKEY WINAPI GetClusterGroupKey(HGROUP hGroup,REGSAM samDesired);
1064  HKEY WINAPI GetClusterResourceKey(HRESOURCE hResource,REGSAM samDesired);
1065  HKEY WINAPI GetClusterNodeKey(HNODE hNode,REGSAM samDesired);
1066  HKEY WINAPI GetClusterNetworkKey(HNETWORK hNetwork,REGSAM samDesired);
1067  HKEY WINAPI GetClusterNetInterfaceKey(HNETINTERFACE hNetInterface,REGSAM samDesired);
1068  LONG WINAPI ClusterRegCreateKey(HKEY hKey,LPCWSTR lpszSubKey,DWORD dwOptions,REGSAM samDesired,LPSECURITY_ATTRIBUTES lpSecurityAttributes,PHKEY phkResult,LPDWORD lpdwDisposition);
1069  LONG WINAPI ClusterRegOpenKey(HKEY hKey,LPCWSTR lpszSubKey,REGSAM samDesired,PHKEY phkResult);
1070  LONG WINAPI ClusterRegDeleteKey(HKEY hKey,LPCWSTR lpszSubKey);
1071  LONG WINAPI ClusterRegCloseKey(HKEY hKey);
1072  LONG WINAPI ClusterRegEnumKey(HKEY hKey,DWORD dwIndex,LPWSTR lpszName,LPDWORD lpcchName,PFILETIME lpftLastWriteTime);
1073  DWORD WINAPI ClusterRegSetValue(HKEY hKey,LPCWSTR lpszValueName,DWORD dwType,CONST BYTE *lpData,DWORD cbData);
1074  DWORD WINAPI ClusterRegDeleteValue(HKEY hKey,LPCWSTR lpszValueName);
1075  LONG WINAPI ClusterRegQueryValue(HKEY hKey,LPCWSTR lpszValueName,LPDWORD lpdwValueType,LPBYTE lpData,LPDWORD lpcbData);
1076  DWORD WINAPI ClusterRegEnumValue(HKEY hKey,DWORD dwIndex,LPWSTR lpszValueName,LPDWORD lpcchValueName,LPDWORD lpdwType,LPBYTE lpData,LPDWORD lpcbData);
1077  LONG WINAPI ClusterRegQueryInfoKey(HKEY hKey,LPDWORD lpcSubKeys,LPDWORD lpcchMaxSubKeyLen,LPDWORD lpcValues,LPDWORD lpcchMaxValueNameLen,LPDWORD lpcbMaxValueLen,LPDWORD lpcbSecurityDescriptor,PFILETIME lpftLastWriteTime);
1078  LONG WINAPI ClusterRegGetKeySecurity (HKEY hKey,SECURITY_INFORMATION RequestedInformation,PSECURITY_DESCRIPTOR pSecurityDescriptor,LPDWORD lpcbSecurityDescriptor);
1079  LONG WINAPI ClusterRegSetKeySecurity(HKEY hKey,SECURITY_INFORMATION SecurityInformation,PSECURITY_DESCRIPTOR pSecurityDescriptor);
1080
1081typedef HCLUSTER (WINAPI *PCLUSAPI_OPEN_CLUSTER)( 
1082  LPCWSTR lpszClusterName
1083);
1084
1085#if (_WIN32_WINNT >= 0x0600)
1086#define FS_CASE_SENSITIVE 1
1087#define FS_CASE_IS_PRESERVED 2
1088#define FS_UNICODE_STORED_ON_DISK 3
1089#define FS_PERSISTENT_ACLS 4
1090
1091typedef enum _MAINTENANCE_MODE_TYPE_ENUM {
1092  MaintenanceModeTypeDisableIsAliveCheck   = 1,
1093  MaintenanceModeTypeOfflineResource       = 2,
1094  MaintenanceModeTypeUnclusterResource     = 3 
1095} MAINTENANCE_MODE_TYPE_ENUM, *PMAINTENANCE_MODE_TYPE_ENUM;
1096
1097typedef enum CLUSTER_RESOURCE_STATE {
1098  ClusterResourceStateUnknown     = -1,
1099  ClusterResourceInherited        = 0,
1100  ClusterResourceInitializing     = 1,
1101  ClusterResourceOnline           = 2,
1102  ClusterResourceOffline          = 3,
1103  ClusterResourceFailed           = 4,
1104  ClusterResourcePending          = 128,  // 0x80
1105  ClusterResourceOnlinePending    = 129,  // 0x81
1106  ClusterResourceOfflinePending   = 130   // 0x82
1107} CLUSTER_RESOURCE_STATE;
1108
1109typedef enum _CLUSTER_REG_COMMAND {
1110  CLUSREG_COMMAND_NONE       = 0,
1111  CLUSREG_SET_VALUE          = 1,
1112  CLUSREG_CREATE_KEY         = 2,
1113  CLUSREG_DELETE_KEY         = 3,
1114  CLUSREG_DELETE_VALUE       = 4,
1115  CLUSREG_SET_KEY_SECURITY   = 5,
1116  CLUSREG_VALUE_DELETED      = 6,
1117  CLUSREG_LAST_COMMAND       = 7 
1118} CLUSTER_REG_COMMAND;
1119
1120typedef enum CLUSTER_GROUP_STATE {
1121  ClusterGroupStateUnknown    = -1,
1122  ClusterGroupOnline          = 0,
1123  ClusterGroupOffline         = 1,
1124  ClusterGroupFailed          = 2,
1125  ClusterGroupPartialOnline   = 3,
1126  ClusterGroupPending         = 4 
1127} CLUSTER_GROUP_STATE;
1128
1129typedef enum CLUSTER_QUORUM_TYPE {
1130  OperationalQuorum   = 0,
1131  ModifyQuorum        = 1 
1132} CLUSTER_QUORUM_TYPE;
1133
1134typedef enum CLUSTER_QUORUM_VALUE {
1135  CLUSTER_QUORUM_MAINTAINED   = 0,
1136  CLUSTER_QUORUM_LOST         = 1 
1137} CLUSTER_QUORUM_VALUE;
1138
1139typedef enum CLUSTER_RESOURCE_CLASS {
1140  CLUS_RESCLASS_UNKNOWN   = 0,
1141  CLUS_RESCLASS_STORAGE   = 1,
1142  CLUS_RESCLASS_NETWORK   = 2,
1143  CLUS_RESCLASS_USER      = 32768 
1144} CLUSTER_RESOURCE_CLASS;
1145
1146typedef enum CLUSTER_RESOURCE_CREATE_FLAGS {
1147  CLUSTER_RESOURCE_DEFAULT_MONITOR    = 0,
1148  CLUSTER_RESOURCE_SEPARATE_MONITOR   = 1,
1149  CLUSTER_RESOURCE_VALID_FLAGS        = 1 
1150} CLUSTER_RESOURCE_CREATE_FLAGS;
1151
1152typedef enum _CLUSTER_SETUP_PHASE {
1153  ClusterSetupPhaseInitialize                   = 1,
1154  ClusterSetupPhaseValidateNodeState            = 100,
1155  ClusterSetupPhaseValidateNetft                = 102,
1156  ClusterSetupPhaseValidateClusDisk             = 103,
1157  ClusterSetupPhaseConfigureClusSvc             = 104,
1158  ClusterSetupPhaseStartingClusSvc              = 105,
1159  ClusterSetupPhaseQueryClusterNameAccount      = 106,
1160  ClusterSetupPhaseValidateClusterNameAccount   = 107,
1161  ClusterSetupPhaseCreateClusterAccount         = 108,
1162  ClusterSetupPhaseConfigureClusterAccount      = 109,
1163  ClusterSetupPhaseFormingCluster               = 200,
1164  ClusterSetupPhaseAddClusterProperties         = 201,
1165  ClusterSetupPhaseCreateResourceTypes          = 202,
1166  ClusterSetupPhaseCreateGroups                 = 203,
1167  ClusterSetupPhaseCreateIPAddressResources     = 204,
1168  ClusterSetupPhaseCreateNetworkName            = 205,
1169  ClusterSetupPhaseClusterGroupOnline           = 206,
1170  ClusterSetupPhaseGettingCurrentMembership     = 300,
1171  ClusterSetupPhaseAddNodeToCluster             = 301,
1172  ClusterSetupPhaseNodeUp                       = 302,
1173  ClusterSetupPhaseMoveGroup                    = 400,
1174  ClusterSetupPhaseDeleteGroup                  = 401,
1175  ClusterSetupPhaseCleanupCOs                   = 402,
1176  ClusterSetupPhaseOfflineGroup                 = 403,
1177  ClusterSetupPhaseEvictNode                    = 404,
1178  ClusterSetupPhaseCleanupNode                  = 405,
1179  ClusterSetupPhaseCoreGroupCleanup             = 406,
1180  ClusterSetupPhaseFailureCleanup               = 999 
1181} CLUSTER_SETUP_PHASE;
1182
1183typedef enum _CLUSTER_SETUP_PHASE_TYPE {
1184  ClusterSetupPhaseStart      = 1,
1185  ClusterSetupPhaseContinue   = 2,
1186  ClusterSetupPhaseEnd        = 3 
1187} CLUSTER_SETUP_PHASE_TYPE;
1188
1189typedef enum _CLUSTER_SETUP_PHASE_SEVERITY {
1190  ClusterSetupPhaseInformational   = 1,
1191  ClusterSetupPhaseWarning         = 2,
1192  ClusterSetupPhaseFatal           = 3 
1193} CLUSTER_SETUP_PHASE_SEVERITY;
1194
1195typedef struct _CLUSPROP_FILETIME {
1196  CLUSPROP_SYNTAX Syntax;
1197  DWORD           cbLength;
1198  FILETIME        ft;
1199} CLUSPROP_FILETIME, *PCLUSPROP_FILETIME;
1200
1201typedef struct _CLUS_MAINTENANCE_MODE_INFOEX {
1202  WINBOOL                    InMaintenance;
1203  MAINTENANCE_MODE_TYPE_ENUM MaintainenceModeType;
1204  CLUSTER_RESOURCE_STATE     InternalState;
1205  DWORD                      Signature;
1206} CLUS_MAINTENANCE_MODE_INFOEX, *PCLUS_MAINTENANCE_MODE_INFOEX;
1207
1208typedef struct CLUS_NETNAME_PWD_INFO {
1209  DWORD Flags;
1210  WCHAR Password[MAX_CO_PASSWORD_LENGTH];
1211  WCHAR CreatingDC[MAX_CREATINGDC_LENGTH+2];
1212  WCHAR ObjectGuid[MAX_OBJECTID];
1213} CLUS_NETNAME_PWD_INFO, *PCLUS_NETNAME_PWD_INFO;
1214
1215typedef struct CLUS_NETNAME_VS_TOKEN_INFO {
1216  DWORD   ProcessID;
1217  DWORD   DesiredAccess;
1218  WINBOOL InheritHandle;
1219} CLUS_NETNAME_VS_TOKEN_INFO, *PCLUS_NETNAME_VS_TOKEN_INFO;
1220
1221typedef struct CLUS_PARTITION_INFO_EX {
1222  DWORD          dwFlags;
1223  WCHAR          szDeviceName[MAX_PATH];
1224  WCHAR          szVolumeLabel[MAX_PATH];
1225  DWORD          dwSerialNumber;
1226  DWORD          rgdwMaximumComponentLength;
1227  DWORD          dwFileSystemFlags;
1228  WCHAR          szFileSystem[32];
1229  ULARGE_INTEGER TotalSizeInBytes;
1230  ULARGE_INTEGER FreeSizeInBytes;
1231  DWORD          DeviceNumber;
1232  DWORD          PartitionNumber;
1233  GUID           VolumeGuid;
1234} CLUS_PARTITION_INFO_EX, *PCLUS_PARTITION_INFO_EX;
1235
1236typedef struct _CLUS_PROVIDER_STATE_CHANGE_INFO {
1237  DWORD                  dwSize;
1238  CLUSTER_RESOURCE_STATE resourceState;
1239  WCHAR                  szProviderId[1];
1240} CLUS_PROVIDER_STATE_CHANGE_INFO, *PCLUS_PROVIDER_STATE_CHANGE_INFO;
1241
1242typedef struct _CLUS_STORAGE_GET_AVAILABLE_DRIVELETTERS {
1243  DWORD AvailDrivelettersMask;
1244} CLUS_STORAGE_GET_AVAILABLE_DRIVELETTERS, *PCLUS_STORAGE_GET_AVAILABLE_DRIVELETTERS;
1245
1246typedef struct _CLUS_STORAGE_REMAP_DRIVELETTER {
1247  DWORD CurrentDriveLetterMask;
1248  DWORD TargetDriveLetterMask;
1249} CLUS_STORAGE_REMAP_DRIVELETTER, *PCLUS_STORAGE_REMAP_DRIVELETTER;
1250
1251typedef struct _CLUS_STORAGE_SET_DRIVELETTER {
1252  DWORD PartitionNumber;
1253  DWORD DriveLetterMask;
1254} CLUS_STORAGE_SET_DRIVELETTER, *PCLUS_STORAGE_SET_DRIVELETTER;
1255
1256typedef struct _CLUSPROP_PARTITION_INFO_EX {
1257  CLUSPROP_SYNTAX Syntax;
1258  DWORD           cbLength;
1259  DWORD           dwFlags;
1260  WCHAR           szDeviceName[MAX_PATH];
1261  WCHAR           szVolumeLabel[MAX_PATH];
1262  DWORD           dwSerialNumber;
1263  DWORD           rgdwMaximumComponentLength;
1264  DWORD           dwFileSystemFlags;
1265  WCHAR           szFileSystem[32];
1266  ULARGE_INTEGER  TotalSizeInBytes;
1267  ULARGE_INTEGER  FreeSizeInBytes;
1268  DWORD           DeviceNumber;
1269  DWORD           PartitionNumber;
1270  GUID            VolumeGuid;
1271} CLUSPROP_PARTITION_INFO_EX, *PCLUSPROP_PARTITION_INFO_EX;
1272
1273typedef struct _CLUSTER_BATCH_COMMAND {
1274  CLUSTER_REG_COMMAND Command;
1275  DWORD               dwOptions;
1276  LPCWSTR             wzName;
1277  BYTE CONST *        lpData;
1278  DWORD               cbData;
1279} CLUSTER_BATCH_COMMAND;
1280
1281typedef struct _CLUSTER_IP_ENTRY {
1282  PCWSTR lpszIpAddress;
1283  DWORD  dwPrefixLength;
1284} CLUSTER_IP_ENTRY, *PCLUSTER_IP_ENTRY;
1285
1286typedef struct _CREATE_CLUSTER_CONFIG {
1287  DWORD             dwVersion;
1288  PCWSTR            lpszClusterName;
1289  DWORD             cNodes;
1290  PCWSTR            *ppszNodeNames;
1291  DWORD             cIpEntries;
1292  PCLUSTER_IP_ENTRY pIpEntries;
1293  BOOLEAN           fEmptyCluster;
1294} CREATE_CLUSTER_CONFIG, *PCREATE_CLUSTER_CONFIG;
1295
1296typedef struct _CLUSTER_VALIDATE_DIRECTORY {
1297  __MINGW_EXTENSION WCHAR szPath[0];
1298} CLUSTER_VALIDATE_DIRECTORY, *PCLUSTER_VALIDATE_DIRECTORY;
1299
1300typedef struct _CLUSTER_VALIDATE_NETNAME {
1301  __MINGW_EXTENSION WCHAR szNetworkName[0];
1302} CLUSTER_VALIDATE_NETNAME, *PCLUSTER_VALIDATE_NETNAME;
1303
1304typedef struct _CLUSTER_VALIDATE_PATH {
1305  __MINGW_EXTENSION WCHAR szPath[0];
1306} CLUSTER_VALIDATE_PATH, *PCLUSTER_VALIDATE_PATH;
1307
1308typedef LPVOID HREGBATCH;
1309typedef LPVOID HREGBATCHPORT;
1310typedef LPVOID HREGBATCHNOTIFICATION;
1311
1312LONG ClusterRegBatchAddCommand(
1313  HREGBATCH hRegBatch,
1314  CLUSTER_REG_COMMAND dwCommand,
1315  LPCWSTR wzName,
1316  DWORD dwOptions,
1317  VOID CONST *lpData,
1318  DWORD cbData
1319);
1320
1321LONG WINAPI ClusterRegBatchCloseNotification(
1322  HREGBATCHNOTIFICATION hBatchNotification
1323);
1324
1325LONG WINAPI ClusterRegBatchReadCommand(
1326  HREGBATCHNOTIFICATION hBatchNotification,
1327  CLUSTER_BATCH_COMMAND *pBatchCommand
1328);
1329
1330LONG WINAPI ClusterRegCloseBatch(
1331  HREGBATCH hRegBatch,
1332  WINBOOL bCommit,
1333  INT *failedCommandNumber
1334);
1335
1336LONG WINAPI ClusterRegCloseBatchNotifyPort(
1337  HREGBATCHPORT hBatchNotifyPort
1338);
1339
1340typedef LONG (WINAPI *PCLUSTER_REG_CREATE_BATCH)(
1341  HKEY hKey,
1342  HREGBATCH *pHREGBATCH
1343);
1344
1345LONG WINAPI ClusterRegCreateBatch(
1346  HKEY hKey,
1347  HREGBATCH *pHREGBATCH
1348);
1349
1350typedef LONG (WINAPI *PCLUSTER_REG_CREATE_BATCH_NOTIFY_PORT)(
1351  HKEY hKey,
1352  HREGBATCHPORT *phBatchNotifyPort
1353);
1354
1355LONG WINAPI ClusterRegCreateBatchNotifyPort(
1356  HKEY hKey,
1357  HREGBATCHPORT *phBatchNotifyPort
1358);
1359
1360typedef LONG (WINAPI *PCLUSTER_REG_GET_BATCH_NOTIFICATION)(
1361  HREGBATCHPORT hBatchNotify,
1362  HREGBATCHNOTIFICATION *phBatchNotification
1363);
1364
1365LONG WINAPI ClusterRegGetBatchNotification(
1366  HREGBATCHPORT hBatchNotify,
1367  HREGBATCHNOTIFICATION *phBatchNotification
1368);
1369
1370typedef WINBOOL (WINAPI *PCLUSTER_SETUP_PROGRESS_CALLBACK)( 
1371  PVOID pvCallbackArg,
1372  CLUSTER_SETUP_PHASE eSetupPhase,
1373  CLUSTER_SETUP_PHASE_TYPE ePhaseType,
1374  CLUSTER_SETUP_PHASE_SEVERITY ePhaseSeverity,
1375  DWORD dwPercentComplete,
1376  PCWSTR lpszObjectName,
1377  DWORD dwStatus
1378);
1379
1380HNODE WINAPI AddClusterNode(
1381  HCLUSTER hCluster,
1382  PCWSTR lpszNodeName,
1383  PCLUSTER_SETUP_PROGRESS_CALLBACK pfnProgressCallback,
1384  PVOID pvCallbackArg
1385);
1386
1387DWORD WINAPI DestroyCluster(
1388  HCLUSTER hCluster,
1389  PCLUSTER_SETUP_PROGRESS_CALLBACK pfnProgressCallback,
1390  PVOID pvCallbackArg,
1391  WINBOOL fdeleteVirtualComputerObjects
1392);
1393
1394HCLUSTER WINAPI CreateCluster(
1395  PCREATE_CLUSTER_CONFIG pConfig,
1396  PCLUSTER_SETUP_PROGRESS_CALLBACK pfnProgressCallback,
1397  PVOID pvCallbackArg
1398);
1399
1400DWORD DestroyClusterGroup(
1401  HGROUP hGroup
1402);
1403
1404typedef enum _FILESHARE_CHANGE_ENUM {
1405  FILESHARE_CHANGE_NONE     = 0,
1406  FILESHARE_CHANGE_ADD      = 1,
1407  FILESHARE_CHANGE_DEL      = 2,
1408  FILESHARE_CHANGE_MODIFY   = 3 
1409} FILESHARE_CHANGE_ENUM;
1410
1411#define NNLEN       80                  /* Net name length (share name) */
1412
1413typedef struct _FILESHARE_CHANGE {
1414  FILESHARE_CHANGE_ENUM Change;
1415  WCHAR                 ShareName[NNLEN+4];
1416} FILESHARE_CHANGE, *PFILESHARE_CHANGE;
1417
1418typedef struct _FILESHARE_CHANGE_LIST {
1419  DWORD            NumEntries;
1420  __MINGW_EXTENSION FILESHARE_CHANGE ChangeEntry[0];
1421} FILESHARE_CHANGE_LIST, *PFILESHARE_CHANGE_LIST;
1422
1423DWORD WINAPI GetClusterResourceDependencyExpression(
1424  HRESOURCE hResource,
1425  LPWSTR lpszDependencyExpression,
1426  LPDWORD lpcchDependencyExpression
1427);
1428
1429DWORD WINAPI SetClusterResourceDependencyExpression(
1430  HRESOURCE hResource,
1431  LPCWSTR lpszDependencyExpression
1432);
1433
1434#endif /* (_WIN32_WINNT >= 0x0600) */
1435#if (_WIN32_WINNT >= 0x0601)
1436typedef enum _CLUSTER_SHARED_VOLUME_BACKUP_STATE {
1437  VolumeBackupNone         = 0x00000000,
1438  VolumeBackupInProgress   = 0x00000001 
1439} CLUSTER_SHARED_VOLUME_BACKUP_STATE, *PCLUSTER_SHARED_VOLUME_BACKUP_STATE;
1440#endif /* (_WIN32_WINNT >= 0x0601) */
1441
1442#ifdef __cplusplus
1443}
1444#endif
1445
1446#ifndef _CLUSTER_API_TYPES_
1447#define _CLUSTER_API_TYPES_
1448#endif
1449#endif