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