/** * This file has no copyright assigned and is placed in the Public Domain. * This file is part of the mingw-w64 runtime package. * No warranty is given; refer to the file DISCLAIMER.PD within this package. */ #ifndef _RESAPI_DEFINES_ #define _RESAPI_DEFINES_ #include <windows.h> #include <winsvc.h> #include <clusapi.h> #include <stdio.h> #ifdef __cplusplus extern "C" { #endif #ifndef _NO_W32_PSEUDO_MODIFIERS #ifndef IN #define IN #endif #ifndef OUT #define OUT #endif #ifndef OPTIONAL #define OPTIONAL #endif #endif #define STARTUP_ROUTINE "Startup" #define CLRES_V1_FUNCTION_SIZE sizeof(CLRES_V1_FUNCTIONS) #define CLRES_VERSION_V1_00 0x100 #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 } #endif #ifndef _RESAPI_ #define _RESAPI_ typedef PVOID RESID; typedef HANDLE RESOURCE_HANDLE; typedef struct RESOURCE_STATUS { CLUSTER_RESOURCE_STATE ResourceState; DWORD CheckPoint; DWORD WaitHint; HANDLE EventHandle; } RESOURCE_STATUS,*PRESOURCE_STATUS; #define ResUtilInitializeResourceStatus(_resource_status_) ZeroMemory(_resource_status_,sizeof(RESOURCE_STATUS)) typedef DWORD (_stdcall *PSET_RESOURCE_STATUS_ROUTINE)(RESOURCE_HANDLE ResourceHandle,PRESOURCE_STATUS ResourceStatus); typedef VOID (_stdcall *PQUORUM_RESOURCE_LOST)(RESOURCE_HANDLE Resource); typedef enum LOG_LEVEL { LOG_INFORMATION = 0,LOG_WARNING,LOG_ERROR,LOG_SEVERE } LOG_LEVEL,*PLOG_LEVEL; typedef VOID (_stdcall *PLOG_EVENT_ROUTINE)(RESOURCE_HANDLE ResourceHandle,LOG_LEVEL LogLevel,LPCWSTR FormatString,...); typedef RESID (_stdcall *POPEN_ROUTINE)(LPCWSTR ResourceName,HKEY ResourceKey,RESOURCE_HANDLE ResourceHandle); typedef VOID (_stdcall *PCLOSE_ROUTINE)(RESID Resource); typedef DWORD (_stdcall *PONLINE_ROUTINE)(RESID Resource,LPHANDLE EventHandle); typedef DWORD (_stdcall *POFFLINE_ROUTINE)(RESID Resource); typedef VOID (_stdcall *PTERMINATE_ROUTINE)(RESID Resource); typedef WINBOOL (_stdcall *PIS_ALIVE_ROUTINE)(RESID Resource); typedef WINBOOL (_stdcall *PLOOKS_ALIVE_ROUTINE)(RESID Resource); typedef DWORD (_stdcall *PARBITRATE_ROUTINE)(RESID Resource,PQUORUM_RESOURCE_LOST LostQuorumResource); typedef DWORD (_stdcall *PRELEASE_ROUTINE)(RESID Resource); typedef DWORD (_stdcall *PRESOURCE_CONTROL_ROUTINE)(RESID Resource,DWORD ControlCode,PVOID InBuffer,DWORD InBufferSize,PVOID OutBuffer,DWORD OutBufferSize,LPDWORD BytesReturned); typedef DWORD (_stdcall *PRESOURCE_TYPE_CONTROL_ROUTINE)(LPCWSTR ResourceTypeName,DWORD ControlCode,PVOID InBuffer,DWORD InBufferSize,PVOID OutBuffer,DWORD OutBufferSize,LPDWORD BytesReturned); typedef enum _RESOURCE_EXIT_STATE { ResourceExitStateContinue = 0,ResourceExitStateTerminate,ResourceExitStateMax } RESOURCE_EXIT_STATE; typedef struct CLRES_V1_FUNCTIONS { POPEN_ROUTINE Open; PCLOSE_ROUTINE Close; PONLINE_ROUTINE Online; POFFLINE_ROUTINE Offline; PTERMINATE_ROUTINE Terminate; PLOOKS_ALIVE_ROUTINE LooksAlive; PIS_ALIVE_ROUTINE IsAlive; PARBITRATE_ROUTINE Arbitrate; PRELEASE_ROUTINE Release; PRESOURCE_CONTROL_ROUTINE ResourceControl; PRESOURCE_TYPE_CONTROL_ROUTINE ResourceTypeControl; } CLRES_V1_FUNCTIONS,*PCLRES_V1_FUNCTIONS; typedef struct CLRES_FUNCTION_TABLE { DWORD TableSize; DWORD Version; __C89_NAMELESS union { CLRES_V1_FUNCTIONS V1Functions; }; } CLRES_FUNCTION_TABLE,*PCLRES_FUNCTION_TABLE; #ifndef FIELD_OFFSET #define FIELD_OFFSET(type,field) ((LONG)&(((type *)0)->field)) #endif typedef struct RESUTIL_LARGEINT_DATA { LARGE_INTEGER Default; LARGE_INTEGER Minimum; LARGE_INTEGER Maximum; } RESUTIL_LARGEINT_DATA,*PRESUTIL_LARGEINT_DATA; typedef struct RESUTIL_ULARGEINT_DATA { ULARGE_INTEGER Default; ULARGE_INTEGER Minimum; ULARGE_INTEGER Maximum; } RESUTIL_ULARGEINT_DATA,*PRESUTIL_ULARGEINT_DATA; #define RESUTIL_PROPITEM_READ_ONLY 0x00000001 #define RESUTIL_PROPITEM_REQUIRED 0x00000002 #define RESUTIL_PROPITEM_SIGNED 0x00000004 typedef struct RESUTIL_PROPERTY_ITEM { LPWSTR Name; LPWSTR KeyName; DWORD Format; __C89_NAMELESS union { DWORD_PTR DefaultPtr; DWORD Default; LPVOID lpDefault; PRESUTIL_LARGEINT_DATA LargeIntData; PRESUTIL_ULARGEINT_DATA ULargeIntData; }; DWORD Minimum; DWORD Maximum; DWORD Flags; DWORD Offset; } RESUTIL_PROPERTY_ITEM,*PRESUTIL_PROPERTY_ITEM; typedef DWORD (_stdcall *PSTARTUP_ROUTINE)(LPCWSTR ResourceType,DWORD MinVersionSupported,DWORD MaxVersionSupported,PSET_RESOURCE_STATUS_ROUTINE SetResourceStatus,PLOG_EVENT_ROUTINE LogEvent,PCLRES_FUNCTION_TABLE *FunctionTable); typedef enum RESOURCE_MONITOR_STATE { RmonInitializing,RmonIdle,RmonStartingResource,RmonInitializingResource,RmonOnlineResource,RmonOfflineResource,RmonShutdownResource, RmonDeletingResource,RmonIsAlivePoll,RmonLooksAlivePoll,RmonArbitrateResource,RmonReleaseResource,RmonResourceControl, RmonResourceTypeControl,RmonTerminateResource,RmonDeadlocked } RESOURCE_MONITOR_STATE; typedef struct MONITOR_STATE { LARGE_INTEGER LastUpdate; RESOURCE_MONITOR_STATE State; HANDLE ActiveResource; WINBOOL ResmonStop; } MONITOR_STATE,*PMONITOR_STATE; DWORD WINAPI ResUtilStartResourceService(LPCWSTR pszServiceName,LPSC_HANDLE phServiceHandle); DWORD WINAPI ResUtilVerifyResourceService(LPCWSTR pszServiceName); DWORD WINAPI ResUtilStopResourceService(LPCWSTR pszServiceName); DWORD WINAPI ResUtilVerifyService(SC_HANDLE hServiceHandle); DWORD WINAPI ResUtilStopService(SC_HANDLE hServiceHandle); DWORD WINAPI ResUtilCreateDirectoryTree(LPCWSTR pszPath); WINBOOL WINAPI ResUtilIsPathValid(LPCWSTR pszPath); DWORD WINAPI ResUtilEnumProperties(const PRESUTIL_PROPERTY_ITEM pPropertyTable,LPWSTR pszOutProperties,DWORD cbOutPropertiesSize,LPDWORD pcbBytesReturned,LPDWORD pcbRequired); DWORD WINAPI ResUtilEnumPrivateProperties(HKEY hkeyClusterKey,LPWSTR pszOutProperties,DWORD cbOutPropertiesSize,LPDWORD pcbBytesReturned,LPDWORD pcbRequired); DWORD WINAPI ResUtilGetProperties(HKEY hkeyClusterKey,const PRESUTIL_PROPERTY_ITEM pPropertyTable,PVOID pOutPropertyList,DWORD cbOutPropertyListSize,LPDWORD pcbBytesReturned,LPDWORD pcbRequired); DWORD WINAPI ResUtilGetAllProperties(HKEY hkeyClusterKey,const PRESUTIL_PROPERTY_ITEM pPropertyTable,PVOID pOutPropertyList,DWORD cbOutPropertyListSize,LPDWORD pcbBytesReturned,LPDWORD pcbRequired); DWORD WINAPI ResUtilGetPrivateProperties(HKEY hkeyClusterKey,PVOID pOutPropertyList,DWORD cbOutPropertyListSize,LPDWORD pcbBytesReturned,LPDWORD pcbRequired); DWORD WINAPI ResUtilGetPropertySize(HKEY hkeyClusterKey,const PRESUTIL_PROPERTY_ITEM pPropertyTableItem,LPDWORD pcbOutPropertyListSize,LPDWORD pnPropertyCount); DWORD WINAPI ResUtilGetProperty(HKEY hkeyClusterKey,const PRESUTIL_PROPERTY_ITEM pPropertyTableItem,PVOID *pOutPropertyItem,LPDWORD pcbOutPropertyItemSize); DWORD WINAPI ResUtilVerifyPropertyTable(const PRESUTIL_PROPERTY_ITEM pPropertyTable,PVOID Reserved,WINBOOL bAllowUnknownProperties,const PVOID pInPropertyList,DWORD cbInPropertyListSize,LPBYTE pOutParams); DWORD WINAPI ResUtilSetPropertyTable(HKEY hkeyClusterKey,const PRESUTIL_PROPERTY_ITEM pPropertyTable,PVOID Reserved,WINBOOL bAllowUnknownProperties,const PVOID pInPropertyList,DWORD cbInPropertyListSize,LPBYTE pOutParams); DWORD WINAPI ResUtilSetPropertyTableEx(HKEY hkeyClusterKey,const PRESUTIL_PROPERTY_ITEM pPropertyTable,PVOID Reserved,WINBOOL bAllowUnknownProperties,const PVOID pInPropertyList,DWORD cbInPropertyListSize,WINBOOL bForceWrite,LPBYTE pOutParams); DWORD WINAPI ResUtilSetPropertyParameterBlock(HKEY hkeyClusterKey,const PRESUTIL_PROPERTY_ITEM pPropertyTable,PVOID Reserved,const LPBYTE pInParams,const PVOID pInPropertyList,DWORD cbInPropertyListSize,LPBYTE pOutParams); DWORD WINAPI ResUtilSetPropertyParameterBlockEx(HKEY hkeyClusterKey,const PRESUTIL_PROPERTY_ITEM pPropertyTable,PVOID Reserved,const LPBYTE pInParams,const PVOID pInPropertyList,DWORD cbInPropertyListSize,WINBOOL bForceWrite,LPBYTE pOutParams); DWORD WINAPI ResUtilSetUnknownProperties(HKEY hkeyClusterKey,const PRESUTIL_PROPERTY_ITEM pPropertyTable,const PVOID pInPropertyList,DWORD cbInPropertyListSize); DWORD WINAPI ResUtilGetPropertiesToParameterBlock(HKEY hkeyClusterKey,const PRESUTIL_PROPERTY_ITEM pPropertyTable,LPBYTE pOutParams,WINBOOL bCheckForRequiredProperties,LPWSTR *pszNameOfPropInError); DWORD WINAPI ResUtilPropertyListFromParameterBlock(const PRESUTIL_PROPERTY_ITEM pPropertyTable,PVOID pOutPropertyList,LPDWORD pcbOutPropertyListSize,const LPBYTE pInParams,LPDWORD pcbBytesReturned,LPDWORD pcbRequired); DWORD WINAPI ResUtilDupParameterBlock(LPBYTE pOutParams,const LPBYTE pInParams,const PRESUTIL_PROPERTY_ITEM pPropertyTable); void WINAPI ResUtilFreeParameterBlock(LPBYTE pOutParams,const LPBYTE pInParams,const PRESUTIL_PROPERTY_ITEM pPropertyTable); DWORD WINAPI ResUtilAddUnknownProperties(HKEY hkeyClusterKey,const PRESUTIL_PROPERTY_ITEM pPropertyTable,PVOID pOutPropertyList,DWORD pcbOutPropertyListSize,LPDWORD pcbBytesReturned,LPDWORD pcbRequired); DWORD WINAPI ResUtilSetPrivatePropertyList(HKEY hkeyClusterKey,const PVOID pInPropertyList,DWORD cbInPropertyListSize); DWORD WINAPI ResUtilVerifyPrivatePropertyList(const PVOID pInPropertyList,DWORD cbInPropertyListSize); PWSTR WINAPI ResUtilDupString(LPCWSTR pszInString); DWORD WINAPI ResUtilGetBinaryValue(HKEY hkeyClusterKey,LPCWSTR pszValueName,LPBYTE *ppbOutValue,LPDWORD pcbOutValueSize); LPWSTR WINAPI ResUtilGetSzValue(HKEY hkeyClusterKey,LPCWSTR pszValueName); LPWSTR WINAPI ResUtilGetExpandSzValue(HKEY hkeyClusterKey,LPCWSTR pszValueName,WINBOOL bExpand); #ifndef __CRT__NO_INLINE __CRT_INLINE DWORD WINAPI ResUtilGetMultiSzValue(HKEY hkeyClusterKey,LPCWSTR pszValueName,LPWSTR *ppszOutValue,LPDWORD pcbOutValueSize) { return ResUtilGetBinaryValue(hkeyClusterKey,pszValueName,(LPBYTE *)ppszOutValue,pcbOutValueSize); } #endif /* !__CRT__NO_INLINE */ DWORD WINAPI ResUtilGetDwordValue(HKEY hkeyClusterKey,LPCWSTR pszValueName,LPDWORD pdwOutValue,DWORD dwDefaultValue); DWORD WINAPI ResUtilSetBinaryValue(HKEY hkeyClusterKey,LPCWSTR pszValueName,const LPBYTE pbNewValue,DWORD cbNewValueSize,LPBYTE *ppbOutValue,LPDWORD pcbOutValueSize); DWORD WINAPI ResUtilSetSzValue(HKEY hkeyClusterKey,LPCWSTR pszValueName,LPCWSTR pszNewValue,LPWSTR *ppszOutString); DWORD WINAPI ResUtilSetExpandSzValue(HKEY hkeyClusterKey,LPCWSTR pszValueName,LPCWSTR pszNewValue,LPWSTR *ppszOutString); DWORD WINAPI ResUtilSetMultiSzValue(HKEY hkeyClusterKey,LPCWSTR pszValueName,LPCWSTR pszNewValue,DWORD cbNewValueSize,LPWSTR *ppszOutValue,LPDWORD pcbOutValueSize); DWORD WINAPI ResUtilSetDwordValue(HKEY hkeyClusterKey,LPCWSTR pszValueName,DWORD dwNewValue,LPDWORD pdwOutValue); DWORD WINAPI ResUtilGetBinaryProperty(LPBYTE *ppbOutValue,LPDWORD pcbOutValueSize,const PCLUSPROP_BINARY pValueStruct,const LPBYTE pbOldValue,DWORD cbOldValueSize,LPBYTE *ppPropertyList,LPDWORD pcbPropertyListSize); DWORD WINAPI ResUtilGetSzProperty(LPWSTR *ppszOutValue,const PCLUSPROP_SZ pValueStruct,LPCWSTR pszOldValue,LPBYTE *ppPropertyList,LPDWORD pcbPropertyListSize); DWORD WINAPI ResUtilGetMultiSzProperty(LPWSTR *ppszOutValue,LPDWORD pcbOutValueSize,const PCLUSPROP_SZ pValueStruct,LPCWSTR pszOldValue,DWORD cbOldValueSize,LPBYTE *ppPropertyList,LPDWORD pcbPropertyListSize); DWORD WINAPI ResUtilGetDwordProperty(LPDWORD pdwOutValue,const PCLUSPROP_DWORD pValueStruct,DWORD dwOldValue,DWORD dwMinimum,DWORD dwMaximum,LPBYTE *ppPropertyList,LPDWORD pcbPropertyListSize); LPVOID WINAPI ResUtilGetEnvironmentWithNetName(HRESOURCE hResource); DWORD WINAPI ResUtilFreeEnvironment(LPVOID lpEnvironment); LPWSTR WINAPI ResUtilExpandEnvironmentStrings(LPCWSTR pszSrc); DWORD WINAPI ResUtilSetResourceServiceEnvironment(LPCWSTR pszServiceName,HRESOURCE hResource,PLOG_EVENT_ROUTINE pfnLogEvent,RESOURCE_HANDLE hResourceHandle); DWORD WINAPI ResUtilRemoveResourceServiceEnvironment(LPCWSTR pszServiceName,PLOG_EVENT_ROUTINE pfnLogEvent,RESOURCE_HANDLE hResourceHandle); DWORD WINAPI ResUtilSetResourceServiceStartParameters(LPCWSTR pszServiceName,SC_HANDLE schSCMHandle,LPSC_HANDLE phService,PLOG_EVENT_ROUTINE pfnLogEvent,RESOURCE_HANDLE hResourceHandle); DWORD WINAPI ResUtilFindSzProperty(const PVOID pPropertyList,DWORD cbPropertyListSize,LPCWSTR pszPropertyName,LPWSTR *pszPropertyValue); DWORD WINAPI ResUtilFindExpandSzProperty(const PVOID pPropertyList,DWORD cbPropertyListSize,LPCWSTR pszPropertyName,LPWSTR *pszPropertyValue); DWORD WINAPI ResUtilFindExpandedSzProperty(const PVOID pPropertyList,DWORD cbPropertyListSize,LPCWSTR pszPropertyName,LPWSTR *pszPropertyValue); DWORD WINAPI ResUtilFindDwordProperty(const PVOID pPropertyList,DWORD cbPropertyListSize,LPCWSTR pszPropertyName,LPDWORD pdwPropertyValue); DWORD WINAPI ResUtilFindBinaryProperty(const PVOID pPropertyList,DWORD cbPropertyListSize,LPCWSTR pszPropertyName,LPBYTE *pbPropertyValue,LPDWORD pcbPropertyValueSize); DWORD WINAPI ResUtilFindMultiSzProperty(const PVOID pPropertyList,DWORD cbPropertyListSize,LPCWSTR pszPropertyName,LPWSTR *pszPropertyValue,LPDWORD pcbPropertyValueSize); DWORD WINAPI ResUtilFindLongProperty(const PVOID pPropertyList,DWORD cbPropertyListSize,LPCWSTR pszPropertyName,LPLONG plPropertyValueSize); typedef struct CLUS_WORKER { HANDLE hThread; WINBOOL Terminate; } CLUS_WORKER,*PCLUS_WORKER; typedef DWORD (WINAPI *PWORKER_START_ROUTINE)(PCLUS_WORKER pWorker,LPVOID lpThreadParameter); typedef DWORD (*LPRESOURCE_CALLBACK)(HRESOURCE,HRESOURCE,PVOID); typedef DWORD (*LPRESOURCE_CALLBACK_EX)(HCLUSTER,HRESOURCE,HRESOURCE,PVOID); DWORD WINAPI ClusWorkerCreate(PCLUS_WORKER lpWorker,PWORKER_START_ROUTINE lpStartAddress,PVOID lpParameter); WINBOOL WINAPI ClusWorkerCheckTerminate(PCLUS_WORKER lpWorker); VOID WINAPI ClusWorkerTerminate(PCLUS_WORKER lpWorker); WINBOOL WINAPI ResUtilResourcesEqual(HRESOURCE hSelf,HRESOURCE hResource); WINBOOL WINAPI ResUtilResourceTypesEqual(LPCWSTR lpszResourceTypeName,HRESOURCE hResource); WINBOOL WINAPI ResUtilIsResourceClassEqual(PCLUS_RESOURCE_CLASS_INFO prci,HRESOURCE hResource); DWORD WINAPI ResUtilEnumResources(HRESOURCE hSelf,LPCWSTR lpszResTypeName,LPRESOURCE_CALLBACK pResCallBack,PVOID pParameter); DWORD WINAPI ResUtilEnumResourcesEx(HCLUSTER hCluster,HRESOURCE hSelf,LPCWSTR lpszResTypeName,LPRESOURCE_CALLBACK_EX pResCallBack,PVOID pParameter); HRESOURCE WINAPI ResUtilGetResourceDependency(HANDLE hSelf,LPCWSTR lpszResourceType); HRESOURCE WINAPI ResUtilGetResourceDependencyByName(HCLUSTER hCluster,HANDLE hSelf,LPCWSTR lpszResourceType,WINBOOL bRecurse); HRESOURCE WINAPI ResUtilGetResourceDependencyByClass(HCLUSTER hCluster,HANDLE hSelf,PCLUS_RESOURCE_CLASS_INFO prci,WINBOOL bRecurse); HRESOURCE WINAPI ResUtilGetResourceNameDependency(LPCWSTR lpszResourceName,LPCWSTR lpszResourceType); DWORD WINAPI ResUtilGetResourceDependentIPAddressProps(HRESOURCE hResource,LPWSTR pszAddress,DWORD *pcchAddress,LPWSTR pszSubnetMask,DWORD *pcchSubnetMask,LPWSTR pszNetwork,DWORD *pcchNetwork); DWORD WINAPI ResUtilFindDependentDiskResourceDriveLetter(HCLUSTER hCluster,HRESOURCE hResource,LPWSTR pszDriveLetter,DWORD *pcchDriveLetter); DWORD WINAPI ResUtilTerminateServiceProcessFromResDll(DWORD dwServicePid,WINBOOL bOffline,PDWORD pdwResourceState,PLOG_EVENT_ROUTINE pfnLogEvent,RESOURCE_HANDLE hResourceHandle); DWORD WINAPI ResUtilGetPropertyFormats(const PRESUTIL_PROPERTY_ITEM pPropertyTable,PVOID pOutPropertyFormatList,DWORD cbPropertyFormatListSize,LPDWORD pcbBytesReturned,LPDWORD pcbRequired); DWORD WINAPI ResUtilGetCoreClusterResources(HCLUSTER hCluster,HRESOURCE *phClusterNameResource,HRESOURCE *phClusterIPAddressResource,HRESOURCE *phClusterQuorumResource); DWORD WINAPI ResUtilGetResourceName(HRESOURCE hResource,PWSTR pszResourceName,DWORD *pcchResourceNameInOut); #if (_WIN32_WINNT >= 0x0600) typedef enum _CLUSTER_ROLE { ClusterRoleDHCP = 0, ClusterRoleDTC = 1, ClusterRoleFileServer = 2, ClusterRoleGenericApplication = 3, ClusterRoleGenericScript = 4, ClusterRoleGenericService = 5, ClusterRoleISCSINameServer = 6, ClusterRoleMSMQ = 7, ClusterRoleNFS = 8, ClusterRolePrintServer = 9, ClusterRoleStandAloneNamespaceServer = 10, ClusterRoleVolumeShadowCopyServiceTask = 11, ClusterRoleWINS = 12 } CLUSTER_ROLE; typedef enum _CLUSTER_ROLE_STATE { ClusterRoleUnknown = -1, ClusterRoleClustered = 0, ClusterRoleUnclustered = 1 } CLUSTER_ROLE_STATE; typedef enum RESOURCE_MONITOR_STATE { RmonInitializing, RmonIdle, RmonStartingResource, RmonInitializingResource, RmonOnlineResource, RmonOfflineResource, RmonShutdownResource, RmonDeletingResource, RmonIsAlivePoll, RmonLooksAlivePoll, RmonArbitrateResource, RmonReleaseResource, RmonResourceControl, RmonResourceTypeControl, RmonTerminateResource, RmonDeadlocked } RESOURCE_MONITOR_STATE; typedef DWORD (CALLBACK *LPRESOURCE_CALLBACK)( HRESOURCE hSelf, HRESOURCE hResource, PVOID pParameter ); typedef DWORD (CALLBACK *LPRESOURCE_CALLBACK_EX)( HCLUSTER hCluster, HRESOURCE hSelf, HRESOURCE hResource, PVOID pParameter ); typedef struct RESUTIL_FILETIME_DATA { FILETIME Default; FILETIME Minimum; FILETIME Maximum; } RESUTIL_FILETIME_DATA, *PRESUTIL_FILETIME_DATA; DWORD ResUtilFindFileTimeProperty( const PVOID pPropertyList, DWORD cbPropertyListSize, LPCWSTR pszPropertyName, LPFILETIME pftPropertyValue ); CLUSTER_ROLE_STATE WINAPI ResUtilGetClusterRoleState( HCLUSTER hCluster, CLUSTER_ROLE eClusterRole ); DWORD WINAPI ResUtilGetFileTimeProperty( LPFILETIME pftOutValue, const PCLUSPROP_FILETIME pValueStruct, FILETIME ftOldValue, FILETIME ftMinimum, FILETIME ftMaximum, LPBYTE *ppPropertyList, LPDWORD pcbPropertyListSize ); DWORD WINAPI ResUtilGetLongProperty( LPLONG plOutValue, const PCLUSPROP_LONG pValueStruct, LONG lOldValue, LONG lMinimum, LONG lMaximum, LPBYTE *ppPropertyList, LPDWORD pcbPropertyListSize ); DWORD WINAPI ResUtilGetQwordValue( HKEY hkeyClusterKey, LPCWSTR pszValueName, PULONGLONG pqwOutValue, ULONGLONG qwDefaultValue ); DWORD WINAPI ResUtilSetQwordValue( HKEY hkeyClusterKey, LPCWSTR pszValueName, ULONGLONG qwNewValue, PULONGLONG pqwOutValue ); typedef DWORD (WINAPI *PWORKER_START_ROUTINE)( PCLUS_WORKER pWorker, LPVOID lpThreadParameter ); #endif /* (_WIN32_WINNT >= 0x0600) */ #if (_WIN32_WINNT >= 0x0600) DWORD WINAPI ClusterClearBackupStateForSharedVolume( LPCWSTR lpszVolumePathName ); WINBOOL WINAPI ClusterGetVolumeNameForVolumeMountPoint( LPCWSTR lpszVolumeMountPoint, LPWSTR lpszVolumeName, DWORD cchBufferLength ); WINBOOL WINAPI ClusterGetVolumePathName( LPCWSTR lpszFileName, LPWSTR lpszVolumePathName, DWORD cchBufferLength ); WINBOOL WINAPI ClusterIsPathOnSharedVolume( LPCWSTR lpszPathName ); DWORD WINAPI ClusterPrepareSharedVolumeForBackup( LPCWSTR lpszFileName, LPWSTR lpszVolumePathName, LPDWORD lpcchVolumePathName, LPWSTR lpszVolumeName, LPDWORD lpcchVolumeName ); #endif /* (_WIN32_WINNT >= 0x0600) */ #ifdef __cplusplus } #endif #endif