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 _RESAPI_DEFINES_ 7#define _RESAPI_DEFINES_ 8 9#include <windows.h> 10#include <winsvc.h> 11#include <clusapi.h> 12#include <stdio.h> 13 14#ifdef __cplusplus 15extern "C" { 16#endif 17 18#ifndef _NO_W32_PSEUDO_MODIFIERS 19#ifndef IN 20#define IN 21#endif 22#ifndef OUT 23#define OUT 24#endif 25#ifndef OPTIONAL 26#define OPTIONAL 27#endif 28#endif 29 30#define STARTUP_ROUTINE "Startup" 31 32#define CLRES_V1_FUNCTION_SIZE sizeof(CLRES_V1_FUNCTIONS) 33#define CLRES_VERSION_V1_00 0x100 34 35#define CLRES_V1_FUNCTION_TABLE(_Name,_Version,_Prefix,_Arbitrate,_Release,_ResControl,_ResTypeControl) CLRES_FUNCTION_TABLE _Name = { CLRES_V1_FUNCTION_SIZE,_Version,_Prefix##Open,_Prefix##Close,_Prefix##Online,_Prefix##Offline,_Prefix##Terminate,_Prefix##LooksAlive,_Prefix##IsAlive,_Arbitrate,_Release,_ResControl,_ResTypeControl } 36#endif 37 38#ifndef _RESAPI_ 39#define _RESAPI_ 40 41 typedef PVOID RESID; 42 typedef HANDLE RESOURCE_HANDLE; 43 44 typedef struct RESOURCE_STATUS { 45 CLUSTER_RESOURCE_STATE ResourceState; 46 DWORD CheckPoint; 47 DWORD WaitHint; 48 HANDLE EventHandle; 49 } RESOURCE_STATUS,*PRESOURCE_STATUS; 50 51#define ResUtilInitializeResourceStatus(_resource_status_) ZeroMemory(_resource_status_,sizeof(RESOURCE_STATUS)) 52 53 typedef DWORD (_stdcall *PSET_RESOURCE_STATUS_ROUTINE)(RESOURCE_HANDLE ResourceHandle,PRESOURCE_STATUS ResourceStatus); 54 typedef VOID (_stdcall *PQUORUM_RESOURCE_LOST)(RESOURCE_HANDLE Resource); 55 56 typedef enum LOG_LEVEL { 57 LOG_INFORMATION = 0,LOG_WARNING,LOG_ERROR,LOG_SEVERE 58 } LOG_LEVEL,*PLOG_LEVEL; 59 60 typedef VOID (_stdcall *PLOG_EVENT_ROUTINE)(RESOURCE_HANDLE ResourceHandle,LOG_LEVEL LogLevel,LPCWSTR FormatString,...); 61 typedef RESID (_stdcall *POPEN_ROUTINE)(LPCWSTR ResourceName,HKEY ResourceKey,RESOURCE_HANDLE ResourceHandle); 62 typedef VOID (_stdcall *PCLOSE_ROUTINE)(RESID Resource); 63 typedef DWORD (_stdcall *PONLINE_ROUTINE)(RESID Resource,LPHANDLE EventHandle); 64 typedef DWORD (_stdcall *POFFLINE_ROUTINE)(RESID Resource); 65 typedef VOID (_stdcall *PTERMINATE_ROUTINE)(RESID Resource); 66 typedef WINBOOL (_stdcall *PIS_ALIVE_ROUTINE)(RESID Resource); 67 typedef WINBOOL (_stdcall *PLOOKS_ALIVE_ROUTINE)(RESID Resource); 68 typedef DWORD (_stdcall *PARBITRATE_ROUTINE)(RESID Resource,PQUORUM_RESOURCE_LOST LostQuorumResource); 69 typedef DWORD (_stdcall *PRELEASE_ROUTINE)(RESID Resource); 70 typedef DWORD (_stdcall *PRESOURCE_CONTROL_ROUTINE)(RESID Resource,DWORD ControlCode,PVOID InBuffer,DWORD InBufferSize,PVOID OutBuffer,DWORD OutBufferSize,LPDWORD BytesReturned); 71 typedef DWORD (_stdcall *PRESOURCE_TYPE_CONTROL_ROUTINE)(LPCWSTR ResourceTypeName,DWORD ControlCode,PVOID InBuffer,DWORD InBufferSize,PVOID OutBuffer,DWORD OutBufferSize,LPDWORD BytesReturned); 72 73 typedef enum _RESOURCE_EXIT_STATE { 74 ResourceExitStateContinue = 0,ResourceExitStateTerminate,ResourceExitStateMax 75 } RESOURCE_EXIT_STATE; 76 77 typedef struct CLRES_V1_FUNCTIONS { 78 POPEN_ROUTINE Open; 79 PCLOSE_ROUTINE Close; 80 PONLINE_ROUTINE Online; 81 POFFLINE_ROUTINE Offline; 82 PTERMINATE_ROUTINE Terminate; 83 PLOOKS_ALIVE_ROUTINE LooksAlive; 84 PIS_ALIVE_ROUTINE IsAlive; 85 PARBITRATE_ROUTINE Arbitrate; 86 PRELEASE_ROUTINE Release; 87 PRESOURCE_CONTROL_ROUTINE ResourceControl; 88 PRESOURCE_TYPE_CONTROL_ROUTINE ResourceTypeControl; 89 } CLRES_V1_FUNCTIONS,*PCLRES_V1_FUNCTIONS; 90 91 typedef struct CLRES_FUNCTION_TABLE { 92 DWORD TableSize; 93 DWORD Version; 94 __C89_NAMELESS union { 95 CLRES_V1_FUNCTIONS V1Functions; 96 }; 97 } CLRES_FUNCTION_TABLE,*PCLRES_FUNCTION_TABLE; 98 99#ifndef FIELD_OFFSET 100#define FIELD_OFFSET(type,field) ((LONG)&(((type *)0)->field)) 101#endif 102 103 typedef struct RESUTIL_LARGEINT_DATA { 104 LARGE_INTEGER Default; 105 LARGE_INTEGER Minimum; 106 LARGE_INTEGER Maximum; 107 } RESUTIL_LARGEINT_DATA,*PRESUTIL_LARGEINT_DATA; 108 109 typedef struct RESUTIL_ULARGEINT_DATA { 110 ULARGE_INTEGER Default; 111 ULARGE_INTEGER Minimum; 112 ULARGE_INTEGER Maximum; 113 } RESUTIL_ULARGEINT_DATA,*PRESUTIL_ULARGEINT_DATA; 114 115#define RESUTIL_PROPITEM_READ_ONLY 0x00000001 116#define RESUTIL_PROPITEM_REQUIRED 0x00000002 117#define RESUTIL_PROPITEM_SIGNED 0x00000004 118 119 typedef struct RESUTIL_PROPERTY_ITEM { 120 LPWSTR Name; 121 LPWSTR KeyName; 122 DWORD Format; 123 __C89_NAMELESS union { 124 DWORD_PTR DefaultPtr; 125 DWORD Default; 126 LPVOID lpDefault; 127 PRESUTIL_LARGEINT_DATA LargeIntData; 128 PRESUTIL_ULARGEINT_DATA ULargeIntData; 129 }; 130 DWORD Minimum; 131 DWORD Maximum; 132 DWORD Flags; 133 DWORD Offset; 134 } RESUTIL_PROPERTY_ITEM,*PRESUTIL_PROPERTY_ITEM; 135 136 typedef DWORD (_stdcall *PSTARTUP_ROUTINE)(LPCWSTR ResourceType,DWORD MinVersionSupported,DWORD MaxVersionSupported,PSET_RESOURCE_STATUS_ROUTINE SetResourceStatus,PLOG_EVENT_ROUTINE LogEvent,PCLRES_FUNCTION_TABLE *FunctionTable); 137 138 typedef enum RESOURCE_MONITOR_STATE { 139 RmonInitializing,RmonIdle,RmonStartingResource,RmonInitializingResource,RmonOnlineResource,RmonOfflineResource,RmonShutdownResource, 140 RmonDeletingResource,RmonIsAlivePoll,RmonLooksAlivePoll,RmonArbitrateResource,RmonReleaseResource,RmonResourceControl, 141 RmonResourceTypeControl,RmonTerminateResource,RmonDeadlocked 142 } RESOURCE_MONITOR_STATE; 143 144 typedef struct MONITOR_STATE { 145 LARGE_INTEGER LastUpdate; 146 RESOURCE_MONITOR_STATE State; 147 HANDLE ActiveResource; 148 WINBOOL ResmonStop; 149 } MONITOR_STATE,*PMONITOR_STATE; 150 151 DWORD WINAPI ResUtilStartResourceService(LPCWSTR pszServiceName,LPSC_HANDLE phServiceHandle); 152 DWORD WINAPI ResUtilVerifyResourceService(LPCWSTR pszServiceName); 153 DWORD WINAPI ResUtilStopResourceService(LPCWSTR pszServiceName); 154 DWORD WINAPI ResUtilVerifyService(SC_HANDLE hServiceHandle); 155 DWORD WINAPI ResUtilStopService(SC_HANDLE hServiceHandle); 156 DWORD WINAPI ResUtilCreateDirectoryTree(LPCWSTR pszPath); 157 WINBOOL WINAPI ResUtilIsPathValid(LPCWSTR pszPath); 158 DWORD WINAPI ResUtilEnumProperties(const PRESUTIL_PROPERTY_ITEM pPropertyTable,LPWSTR pszOutProperties,DWORD cbOutPropertiesSize,LPDWORD pcbBytesReturned,LPDWORD pcbRequired); 159 DWORD WINAPI ResUtilEnumPrivateProperties(HKEY hkeyClusterKey,LPWSTR pszOutProperties,DWORD cbOutPropertiesSize,LPDWORD pcbBytesReturned,LPDWORD pcbRequired); 160 DWORD WINAPI ResUtilGetProperties(HKEY hkeyClusterKey,const PRESUTIL_PROPERTY_ITEM pPropertyTable,PVOID pOutPropertyList,DWORD cbOutPropertyListSize,LPDWORD pcbBytesReturned,LPDWORD pcbRequired); 161 DWORD WINAPI ResUtilGetAllProperties(HKEY hkeyClusterKey,const PRESUTIL_PROPERTY_ITEM pPropertyTable,PVOID pOutPropertyList,DWORD cbOutPropertyListSize,LPDWORD pcbBytesReturned,LPDWORD pcbRequired); 162 DWORD WINAPI ResUtilGetPrivateProperties(HKEY hkeyClusterKey,PVOID pOutPropertyList,DWORD cbOutPropertyListSize,LPDWORD pcbBytesReturned,LPDWORD pcbRequired); 163 DWORD WINAPI ResUtilGetPropertySize(HKEY hkeyClusterKey,const PRESUTIL_PROPERTY_ITEM pPropertyTableItem,LPDWORD pcbOutPropertyListSize,LPDWORD pnPropertyCount); 164 DWORD WINAPI ResUtilGetProperty(HKEY hkeyClusterKey,const PRESUTIL_PROPERTY_ITEM pPropertyTableItem,PVOID *pOutPropertyItem,LPDWORD pcbOutPropertyItemSize); 165 DWORD WINAPI ResUtilVerifyPropertyTable(const PRESUTIL_PROPERTY_ITEM pPropertyTable,PVOID Reserved,WINBOOL bAllowUnknownProperties,const PVOID pInPropertyList,DWORD cbInPropertyListSize,LPBYTE pOutParams); 166 DWORD WINAPI ResUtilSetPropertyTable(HKEY hkeyClusterKey,const PRESUTIL_PROPERTY_ITEM pPropertyTable,PVOID Reserved,WINBOOL bAllowUnknownProperties,const PVOID pInPropertyList,DWORD cbInPropertyListSize,LPBYTE pOutParams); 167 DWORD WINAPI ResUtilSetPropertyTableEx(HKEY hkeyClusterKey,const PRESUTIL_PROPERTY_ITEM pPropertyTable,PVOID Reserved,WINBOOL bAllowUnknownProperties,const PVOID pInPropertyList,DWORD cbInPropertyListSize,WINBOOL bForceWrite,LPBYTE pOutParams); 168 DWORD WINAPI ResUtilSetPropertyParameterBlock(HKEY hkeyClusterKey,const PRESUTIL_PROPERTY_ITEM pPropertyTable,PVOID Reserved,const LPBYTE pInParams,const PVOID pInPropertyList,DWORD cbInPropertyListSize,LPBYTE pOutParams); 169 DWORD WINAPI ResUtilSetPropertyParameterBlockEx(HKEY hkeyClusterKey,const PRESUTIL_PROPERTY_ITEM pPropertyTable,PVOID Reserved,const LPBYTE pInParams,const PVOID pInPropertyList,DWORD cbInPropertyListSize,WINBOOL bForceWrite,LPBYTE pOutParams); 170 DWORD WINAPI ResUtilSetUnknownProperties(HKEY hkeyClusterKey,const PRESUTIL_PROPERTY_ITEM pPropertyTable,const PVOID pInPropertyList,DWORD cbInPropertyListSize); 171 DWORD WINAPI ResUtilGetPropertiesToParameterBlock(HKEY hkeyClusterKey,const PRESUTIL_PROPERTY_ITEM pPropertyTable,LPBYTE pOutParams,WINBOOL bCheckForRequiredProperties,LPWSTR *pszNameOfPropInError); 172 DWORD WINAPI ResUtilPropertyListFromParameterBlock(const PRESUTIL_PROPERTY_ITEM pPropertyTable,PVOID pOutPropertyList,LPDWORD pcbOutPropertyListSize,const LPBYTE pInParams,LPDWORD pcbBytesReturned,LPDWORD pcbRequired); 173 DWORD WINAPI ResUtilDupParameterBlock(LPBYTE pOutParams,const LPBYTE pInParams,const PRESUTIL_PROPERTY_ITEM pPropertyTable); 174 void WINAPI ResUtilFreeParameterBlock(LPBYTE pOutParams,const LPBYTE pInParams,const PRESUTIL_PROPERTY_ITEM pPropertyTable); 175 DWORD WINAPI ResUtilAddUnknownProperties(HKEY hkeyClusterKey,const PRESUTIL_PROPERTY_ITEM pPropertyTable,PVOID pOutPropertyList,DWORD pcbOutPropertyListSize,LPDWORD pcbBytesReturned,LPDWORD pcbRequired); 176 DWORD WINAPI ResUtilSetPrivatePropertyList(HKEY hkeyClusterKey,const PVOID pInPropertyList,DWORD cbInPropertyListSize); 177 DWORD WINAPI ResUtilVerifyPrivatePropertyList(const PVOID pInPropertyList,DWORD cbInPropertyListSize); 178 PWSTR WINAPI ResUtilDupString(LPCWSTR pszInString); 179 DWORD WINAPI ResUtilGetBinaryValue(HKEY hkeyClusterKey,LPCWSTR pszValueName,LPBYTE *ppbOutValue,LPDWORD pcbOutValueSize); 180 LPWSTR WINAPI ResUtilGetSzValue(HKEY hkeyClusterKey,LPCWSTR pszValueName); 181 LPWSTR WINAPI ResUtilGetExpandSzValue(HKEY hkeyClusterKey,LPCWSTR pszValueName,WINBOOL bExpand); 182#ifndef __CRT__NO_INLINE 183 __CRT_INLINE DWORD WINAPI ResUtilGetMultiSzValue(HKEY hkeyClusterKey,LPCWSTR pszValueName,LPWSTR *ppszOutValue,LPDWORD pcbOutValueSize) 184 { 185 return ResUtilGetBinaryValue(hkeyClusterKey,pszValueName,(LPBYTE *)ppszOutValue,pcbOutValueSize); 186 } 187#endif /* !__CRT__NO_INLINE */ 188 DWORD WINAPI ResUtilGetDwordValue(HKEY hkeyClusterKey,LPCWSTR pszValueName,LPDWORD pdwOutValue,DWORD dwDefaultValue); 189 DWORD WINAPI ResUtilSetBinaryValue(HKEY hkeyClusterKey,LPCWSTR pszValueName,const LPBYTE pbNewValue,DWORD cbNewValueSize,LPBYTE *ppbOutValue,LPDWORD pcbOutValueSize); 190 DWORD WINAPI ResUtilSetSzValue(HKEY hkeyClusterKey,LPCWSTR pszValueName,LPCWSTR pszNewValue,LPWSTR *ppszOutString); 191 DWORD WINAPI ResUtilSetExpandSzValue(HKEY hkeyClusterKey,LPCWSTR pszValueName,LPCWSTR pszNewValue,LPWSTR *ppszOutString); 192 DWORD WINAPI ResUtilSetMultiSzValue(HKEY hkeyClusterKey,LPCWSTR pszValueName,LPCWSTR pszNewValue,DWORD cbNewValueSize,LPWSTR *ppszOutValue,LPDWORD pcbOutValueSize); 193 DWORD WINAPI ResUtilSetDwordValue(HKEY hkeyClusterKey,LPCWSTR pszValueName,DWORD dwNewValue,LPDWORD pdwOutValue); 194 DWORD WINAPI ResUtilGetBinaryProperty(LPBYTE *ppbOutValue,LPDWORD pcbOutValueSize,const PCLUSPROP_BINARY pValueStruct,const LPBYTE pbOldValue,DWORD cbOldValueSize,LPBYTE *ppPropertyList,LPDWORD pcbPropertyListSize); 195 DWORD WINAPI ResUtilGetSzProperty(LPWSTR *ppszOutValue,const PCLUSPROP_SZ pValueStruct,LPCWSTR pszOldValue,LPBYTE *ppPropertyList,LPDWORD pcbPropertyListSize); 196 DWORD WINAPI ResUtilGetMultiSzProperty(LPWSTR *ppszOutValue,LPDWORD pcbOutValueSize,const PCLUSPROP_SZ pValueStruct,LPCWSTR pszOldValue,DWORD cbOldValueSize,LPBYTE *ppPropertyList,LPDWORD pcbPropertyListSize); 197 DWORD WINAPI ResUtilGetDwordProperty(LPDWORD pdwOutValue,const PCLUSPROP_DWORD pValueStruct,DWORD dwOldValue,DWORD dwMinimum,DWORD dwMaximum,LPBYTE *ppPropertyList,LPDWORD pcbPropertyListSize); 198 LPVOID WINAPI ResUtilGetEnvironmentWithNetName(HRESOURCE hResource); 199 DWORD WINAPI ResUtilFreeEnvironment(LPVOID lpEnvironment); 200 LPWSTR WINAPI ResUtilExpandEnvironmentStrings(LPCWSTR pszSrc); 201 DWORD WINAPI ResUtilSetResourceServiceEnvironment(LPCWSTR pszServiceName,HRESOURCE hResource,PLOG_EVENT_ROUTINE pfnLogEvent,RESOURCE_HANDLE hResourceHandle); 202 DWORD WINAPI ResUtilRemoveResourceServiceEnvironment(LPCWSTR pszServiceName,PLOG_EVENT_ROUTINE pfnLogEvent,RESOURCE_HANDLE hResourceHandle); 203 DWORD WINAPI ResUtilSetResourceServiceStartParameters(LPCWSTR pszServiceName,SC_HANDLE schSCMHandle,LPSC_HANDLE phService,PLOG_EVENT_ROUTINE pfnLogEvent,RESOURCE_HANDLE hResourceHandle); 204 DWORD WINAPI ResUtilFindSzProperty(const PVOID pPropertyList,DWORD cbPropertyListSize,LPCWSTR pszPropertyName,LPWSTR *pszPropertyValue); 205 DWORD WINAPI ResUtilFindExpandSzProperty(const PVOID pPropertyList,DWORD cbPropertyListSize,LPCWSTR pszPropertyName,LPWSTR *pszPropertyValue); 206 DWORD WINAPI ResUtilFindExpandedSzProperty(const PVOID pPropertyList,DWORD cbPropertyListSize,LPCWSTR pszPropertyName,LPWSTR *pszPropertyValue); 207 DWORD WINAPI ResUtilFindDwordProperty(const PVOID pPropertyList,DWORD cbPropertyListSize,LPCWSTR pszPropertyName,LPDWORD pdwPropertyValue); 208 DWORD WINAPI ResUtilFindBinaryProperty(const PVOID pPropertyList,DWORD cbPropertyListSize,LPCWSTR pszPropertyName,LPBYTE *pbPropertyValue,LPDWORD pcbPropertyValueSize); 209 DWORD WINAPI ResUtilFindMultiSzProperty(const PVOID pPropertyList,DWORD cbPropertyListSize,LPCWSTR pszPropertyName,LPWSTR *pszPropertyValue,LPDWORD pcbPropertyValueSize); 210 DWORD WINAPI ResUtilFindLongProperty(const PVOID pPropertyList,DWORD cbPropertyListSize,LPCWSTR pszPropertyName,LPLONG plPropertyValueSize); 211 212 typedef struct CLUS_WORKER { 213 HANDLE hThread; 214 WINBOOL Terminate; 215 } CLUS_WORKER,*PCLUS_WORKER; 216 217 typedef DWORD (WINAPI *PWORKER_START_ROUTINE)(PCLUS_WORKER pWorker,LPVOID lpThreadParameter); 218 typedef DWORD (*LPRESOURCE_CALLBACK)(HRESOURCE,HRESOURCE,PVOID); 219 typedef DWORD (*LPRESOURCE_CALLBACK_EX)(HCLUSTER,HRESOURCE,HRESOURCE,PVOID); 220 221 DWORD WINAPI ClusWorkerCreate(PCLUS_WORKER lpWorker,PWORKER_START_ROUTINE lpStartAddress,PVOID lpParameter); 222 WINBOOL WINAPI ClusWorkerCheckTerminate(PCLUS_WORKER lpWorker); 223 VOID WINAPI ClusWorkerTerminate(PCLUS_WORKER lpWorker); 224 WINBOOL WINAPI ResUtilResourcesEqual(HRESOURCE hSelf,HRESOURCE hResource); 225 WINBOOL WINAPI ResUtilResourceTypesEqual(LPCWSTR lpszResourceTypeName,HRESOURCE hResource); 226 WINBOOL WINAPI ResUtilIsResourceClassEqual(PCLUS_RESOURCE_CLASS_INFO prci,HRESOURCE hResource); 227 DWORD WINAPI ResUtilEnumResources(HRESOURCE hSelf,LPCWSTR lpszResTypeName,LPRESOURCE_CALLBACK pResCallBack,PVOID pParameter); 228 DWORD WINAPI ResUtilEnumResourcesEx(HCLUSTER hCluster,HRESOURCE hSelf,LPCWSTR lpszResTypeName,LPRESOURCE_CALLBACK_EX pResCallBack,PVOID pParameter); 229 HRESOURCE WINAPI ResUtilGetResourceDependency(HANDLE hSelf,LPCWSTR lpszResourceType); 230 HRESOURCE WINAPI ResUtilGetResourceDependencyByName(HCLUSTER hCluster,HANDLE hSelf,LPCWSTR lpszResourceType,WINBOOL bRecurse); 231 HRESOURCE WINAPI ResUtilGetResourceDependencyByClass(HCLUSTER hCluster,HANDLE hSelf,PCLUS_RESOURCE_CLASS_INFO prci,WINBOOL bRecurse); 232 HRESOURCE WINAPI ResUtilGetResourceNameDependency(LPCWSTR lpszResourceName,LPCWSTR lpszResourceType); 233 DWORD WINAPI ResUtilGetResourceDependentIPAddressProps(HRESOURCE hResource,LPWSTR pszAddress,DWORD *pcchAddress,LPWSTR pszSubnetMask,DWORD *pcchSubnetMask,LPWSTR pszNetwork,DWORD *pcchNetwork); 234 DWORD WINAPI ResUtilFindDependentDiskResourceDriveLetter(HCLUSTER hCluster,HRESOURCE hResource,LPWSTR pszDriveLetter,DWORD *pcchDriveLetter); 235 DWORD WINAPI ResUtilTerminateServiceProcessFromResDll(DWORD dwServicePid,WINBOOL bOffline,PDWORD pdwResourceState,PLOG_EVENT_ROUTINE pfnLogEvent,RESOURCE_HANDLE hResourceHandle); 236 DWORD WINAPI ResUtilGetPropertyFormats(const PRESUTIL_PROPERTY_ITEM pPropertyTable,PVOID pOutPropertyFormatList,DWORD cbPropertyFormatListSize,LPDWORD pcbBytesReturned,LPDWORD pcbRequired); 237 DWORD WINAPI ResUtilGetCoreClusterResources(HCLUSTER hCluster,HRESOURCE *phClusterNameResource,HRESOURCE *phClusterIPAddressResource,HRESOURCE *phClusterQuorumResource); 238 DWORD WINAPI ResUtilGetResourceName(HRESOURCE hResource,PWSTR pszResourceName,DWORD *pcchResourceNameInOut); 239 240#if (_WIN32_WINNT >= 0x0600) 241typedef enum _CLUSTER_ROLE { 242 ClusterRoleDHCP = 0, 243 ClusterRoleDTC = 1, 244 ClusterRoleFileServer = 2, 245 ClusterRoleGenericApplication = 3, 246 ClusterRoleGenericScript = 4, 247 ClusterRoleGenericService = 5, 248 ClusterRoleISCSINameServer = 6, 249 ClusterRoleMSMQ = 7, 250 ClusterRoleNFS = 8, 251 ClusterRolePrintServer = 9, 252 ClusterRoleStandAloneNamespaceServer = 10, 253 ClusterRoleVolumeShadowCopyServiceTask = 11, 254 ClusterRoleWINS = 12 255} CLUSTER_ROLE; 256 257typedef enum _CLUSTER_ROLE_STATE { 258 ClusterRoleUnknown = -1, 259 ClusterRoleClustered = 0, 260 ClusterRoleUnclustered = 1 261} CLUSTER_ROLE_STATE; 262 263typedef enum RESOURCE_MONITOR_STATE { 264 RmonInitializing, 265 RmonIdle, 266 RmonStartingResource, 267 RmonInitializingResource, 268 RmonOnlineResource, 269 RmonOfflineResource, 270 RmonShutdownResource, 271 RmonDeletingResource, 272 RmonIsAlivePoll, 273 RmonLooksAlivePoll, 274 RmonArbitrateResource, 275 RmonReleaseResource, 276 RmonResourceControl, 277 RmonResourceTypeControl, 278 RmonTerminateResource, 279 RmonDeadlocked 280} RESOURCE_MONITOR_STATE; 281 282typedef DWORD (CALLBACK *LPRESOURCE_CALLBACK)( 283 HRESOURCE hSelf, 284 HRESOURCE hResource, 285 PVOID pParameter 286); 287 288typedef DWORD (CALLBACK *LPRESOURCE_CALLBACK_EX)( 289 HCLUSTER hCluster, 290 HRESOURCE hSelf, 291 HRESOURCE hResource, 292 PVOID pParameter 293); 294 295typedef struct RESUTIL_FILETIME_DATA { 296 FILETIME Default; 297 FILETIME Minimum; 298 FILETIME Maximum; 299} RESUTIL_FILETIME_DATA, *PRESUTIL_FILETIME_DATA; 300 301DWORD ResUtilFindFileTimeProperty( 302 const PVOID pPropertyList, 303 DWORD cbPropertyListSize, 304 LPCWSTR pszPropertyName, 305 LPFILETIME pftPropertyValue 306); 307 308CLUSTER_ROLE_STATE WINAPI ResUtilGetClusterRoleState( 309 HCLUSTER hCluster, 310 CLUSTER_ROLE eClusterRole 311); 312 313DWORD WINAPI ResUtilGetFileTimeProperty( 314 LPFILETIME pftOutValue, 315 const PCLUSPROP_FILETIME pValueStruct, 316 FILETIME ftOldValue, 317 FILETIME ftMinimum, 318 FILETIME ftMaximum, 319 LPBYTE *ppPropertyList, 320 LPDWORD pcbPropertyListSize 321); 322 323DWORD WINAPI ResUtilGetLongProperty( 324 LPLONG plOutValue, 325 const PCLUSPROP_LONG pValueStruct, 326 LONG lOldValue, 327 LONG lMinimum, 328 LONG lMaximum, 329 LPBYTE *ppPropertyList, 330 LPDWORD pcbPropertyListSize 331); 332 333DWORD WINAPI ResUtilGetQwordValue( 334 HKEY hkeyClusterKey, 335 LPCWSTR pszValueName, 336 PULONGLONG pqwOutValue, 337 ULONGLONG qwDefaultValue 338); 339 340DWORD WINAPI ResUtilSetQwordValue( 341 HKEY hkeyClusterKey, 342 LPCWSTR pszValueName, 343 ULONGLONG qwNewValue, 344 PULONGLONG pqwOutValue 345); 346 347typedef DWORD (WINAPI *PWORKER_START_ROUTINE)( 348 PCLUS_WORKER pWorker, 349 LPVOID lpThreadParameter 350); 351 352#endif /* (_WIN32_WINNT >= 0x0600) */ 353 354#if (_WIN32_WINNT >= 0x0600) 355DWORD WINAPI ClusterClearBackupStateForSharedVolume( 356 LPCWSTR lpszVolumePathName 357); 358 359WINBOOL WINAPI ClusterGetVolumeNameForVolumeMountPoint( 360 LPCWSTR lpszVolumeMountPoint, 361 LPWSTR lpszVolumeName, 362 DWORD cchBufferLength 363); 364 365WINBOOL WINAPI ClusterGetVolumePathName( 366 LPCWSTR lpszFileName, 367 LPWSTR lpszVolumePathName, 368 DWORD cchBufferLength 369); 370 371WINBOOL WINAPI ClusterIsPathOnSharedVolume( 372 LPCWSTR lpszPathName 373); 374 375DWORD WINAPI ClusterPrepareSharedVolumeForBackup( 376 LPCWSTR lpszFileName, 377 LPWSTR lpszVolumePathName, 378 LPDWORD lpcchVolumePathName, 379 LPWSTR lpszVolumeName, 380 LPDWORD lpcchVolumeName 381); 382 383#endif /* (_WIN32_WINNT >= 0x0600) */ 384 385#ifdef __cplusplus 386} 387#endif 388#endif 389