clusapi.h 76 KB

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