Ok to apply?

Kai
From 619ed15542eca39ad965def299e0ce9d69a42989 Mon Sep 17 00:00:00 2001
From: Kai Tietz <ktiet...@googlemail.com>
Date: Mon, 25 Aug 2014 20:16:52 +0200
Subject: Add winapifamily check, add support for CLUSAPI_VERSION_WINDOWS 8

---
 mingw-w64-headers/include/resapi.h |  707 ++++++++++++++++++++++--------------
 1 files changed, 439 insertions(+), 268 deletions(-)

diff --git a/mingw-w64-headers/include/resapi.h 
b/mingw-w64-headers/include/resapi.h
index 9e8edef..363801f 100644
--- a/mingw-w64-headers/include/resapi.h
+++ b/mingw-w64-headers/include/resapi.h
@@ -1,8 +1,12 @@
 /**
- * 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.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
  */
+
+#include <winapifamily.h>
+
+#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
+
 #ifndef _RESAPI_DEFINES_
 #define _RESAPI_DEFINES_
 
@@ -32,12 +36,140 @@ extern "C" {
 #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
 }
+#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 }
+
+#if CLUSAPI_VERSION >= CLUSAPI_VERSION_WINDOWS8
+#define STARTUP_EX_ROUTINE "StartupEx"
+
+#define CLRES_V2_FUNCTION_SIZE sizeof (CLRES_V2_FUNCTIONS)
+#define CLRES_VERSION_V2_00 0x200
+#define CLRES_V2_FUNCTION_TABLE_SET(_Name, _Version, _Prefix, _Arbitrate, 
_Release, _ResControl, _ResTypeControl, _LooksAlive, _IsAlive, _Cancel) 
_Name.TableSize = CLRES_V2_FUNCTION_SIZE; _Name.Version = _Version; 
_Name.V2Functions.Open = _Prefix##OpenV2; _Name.V2Functions.Close = 
_Prefix##Close; _Name.V2Functions.Online = _Prefix##OnlineV2; 
_Name.V2Functions.Offline = _Prefix##OfflineV2; _Name.V2Functions.Terminate = 
_Prefix##Terminate; _Name.V2Functions.LooksAlive= _LooksAlive; 
_Name.V2Functions.IsAlive = _IsAlive; _Name.V2Functions.Arbitrate = _Arbitrate; 
_Name.V2Functions.Release = _Release; _Name.V2Functions.ResourceControl = 
_ResControl; _Name.V2Functions.ResourceTypeControl = _ResTypeControl; 
_Name.V2Functions.Cancel = _Cancel;
+#endif
 #endif
 
 #ifndef _RESAPI_
 #define _RESAPI_
 
+#ifndef FIELD_OFFSET
+#define FIELD_OFFSET(type, field) ((LONG) __builtin_offsetof(Type, Field))
+#endif
+
+#define ClusterResourceCannotComeOnlineOnThisNode (CLUSTER_RESOURCE_STATE) 
(ClusterResourcePending - 1)
+#define ClusterResourceCannotComeOnlineOnAnyNode (CLUSTER_RESOURCE_STATE) 
(ClusterResourcePending - 2)
+
+#define ResUtilInitializeResourceStatus(_resource_status_) ZeroMemory 
(_resource_status_, sizeof (RESOURCE_STATUS))
+
+#if CLUSAPI_VERSION >= CLUSAPI_VERSION_WINDOWS8
+#define CLUSCTL_GET_OPERATION_CONTEXT_PARAMS_VERSION_1 1
+
+#define CLUSRES_GET_OPERATION_CONTEXT_FLAGS { 
CLUSRES_NAME_GET_OPERATION_CONTEXT_FLAGS, NULL, CLUSPROP_FORMAT_DWORD, 0, 0, 
0xffffffff, RESUTIL_PROPITEM_REQUIRED, 0 }
+#define CLUSRES_NAME_GET_OPERATION_CONTEXT_FLAGS L"Flags"
+
+#define RESOURCE_SPECIFIC_STATUS_PROP_ITEM { CLUSREG_NAME_RES_STATUS, NULL, 
CLUSPROP_FORMAT_SZ, 0, 0, 0, RESUTIL_PROPITEM_IN_MEMORY, 0 }
+#define RESOURCE_SPECIFIC_DATA1_PROP_ITEM { CLUSREG_NAME_RES_DATA1, NULL, 
CLUSPROP_FORMAT_ULARGE_INTEGER, 0, 0, 0, RESUTIL_PROPITEM_READ_ONLY | 
RESUTIL_PROPITEM_IN_MEMORY, 0 }
+#define RESOURCE_SPECIFIC_DATA2_PROP_ITEM { CLUSREG_NAME_RES_DATA2, NULL, 
CLUSPROP_FORMAT_ULARGE_INTEGER, 0, 0, 0, RESUTIL_PROPITEM_READ_ONLY | 
RESUTIL_PROPITEM_IN_MEMORY, 0 }
+
+#define CLUSRESDLL_STATUS_OFFLINE_BUSY 0x00000001
+#define CLUSRESDLL_STATUS_OFFLINE_SOURCE_THROTTLED 0x00000002
+#define CLUSRESDLL_STATUS_OFFLINE_DESTINATION_THROTTLED 0x00000004
+#define CLUSRESDLL_STATUS_OFFLINE_DESTINATION_REJECTED 0x00000008
+#define CLUSRESDLL_STATUS_INSUFFICIENT_MEMORY 0x00000010
+#define CLUSRESDLL_STATUS_INSUFFICIENT_PROCESSOR 0x00000020
+#define CLUSRESDLL_STATUS_INSUFFICIENT_OTHER_RESOURCES 0x00000040
+#define CLUSRESDLL_STATUS_INVALID_PARAMETERS 0x00000080
+
+#define ResUtilInitializeResourceStatusEx(_resource_status_) ZeroMemory 
(_resource_status_, sizeof (RESOURCE_STATUS_EX))
+
+#define CLUS_RESDLL_OPEN_RECOVER_MONITOR_STATE 0x00000001
+#define CLUS_RESDLL_ONLINE_RECOVER_MONITOR_STATE 0x00000001
+#define CLUS_RESDLL_ONLINE_IGNORE_RESOURCE_STATUS 0x00000002
+#define CLUS_RESDLL_ONLINE_RETURN_TO_SOURCE_NODE_ON_ERROR 0x00000004
+#define CLUS_RESDLL_ONLINE_RESTORE_ONLINE_STATE 0x00000008
+
+#define CLUS_RESDLL_OFFLINE_IGNORE_RESOURCE_STATUS 0x00000001
+#define CLUS_RESDLL_OFFLINE_RETURN_TO_SOURCE_NODE_ON_ERROR 0x00000002
+#define CLUS_RESDLL_OFFLINE_QUEUE_ENABLED 0x00000004
+#define CLUS_RESDLL_OFFLINE_RETURNING_TO_SOURCE_NODE_BECAUSE_OF_ERROR 
0x00000008
+#define CLUS_RESDLL_OFFLINE_DUE_TO_EMBEDDED_FAILURE 0x00000010
+#endif
+
+#define RESUTIL_PROPITEM_READ_ONLY 0x00000001
+#define RESUTIL_PROPITEM_REQUIRED 0x00000002
+#define RESUTIL_PROPITEM_SIGNED 0x00000004
+#define RESUTIL_PROPITEM_IN_MEMORY 0x00000008
+
+  typedef enum LOG_LEVEL {
+    LOG_INFORMATION,
+    LOG_WARNING,
+    LOG_ERROR,
+    LOG_SEVERE
+  } LOG_LEVEL,*PLOG_LEVEL;
+
+  typedef enum _RESOURCE_EXIT_STATE {
+    ResourceExitStateContinue,
+    ResourceExitStateTerminate,
+    ResourceExitStateMax
+  } RESOURCE_EXIT_STATE;
+
+  typedef enum _CLUSTER_ROLE {
+    ClusterRoleDHCP,
+    ClusterRoleDTC,
+    ClusterRoleFileServer,
+    ClusterRoleGenericApplication,
+    ClusterRoleGenericScript,
+    ClusterRoleGenericService,
+    ClusterRoleISCSINameServer,
+    ClusterRoleMSMQ,
+    ClusterRoleNFS,
+    ClusterRolePrintServer,
+    ClusterRoleStandAloneNamespaceServer,
+    ClusterRoleVolumeShadowCopyServiceTask,
+    ClusterRoleWINS,
+    ClusterRoleTaskScheduler,
+    ClusterRoleNetworkFileSystem,
+    ClusterRoleDFSReplicatedFolder,
+    ClusterRoleDistributedFileSystem,
+    ClusterRoleDistributedNetworkName,
+    ClusterRoleFileShare,
+    ClusterRoleFileShareWitness,
+    ClusterRoleHardDisk,
+    ClusterRoleIPAddress,
+    ClusterRoleIPV6Address,
+    ClusterRoleIPV6TunnelAddress,
+    ClusterRoleISCSITargetServer,
+    ClusterRoleNetworkName,
+    ClusterRolePhysicalDisk,
+    ClusterRoleSODAFileServer,
+    ClusterRoleStoragePool,
+    ClusterRoleVirtualMachine,
+    ClusterRoleVirtualMachineConfiguration,
+    ClusterRoleVirtualMachineReplicaBroker
+  } CLUSTER_ROLE;
+
+  typedef enum _CLUSTER_ROLE_STATE {
+    ClusterRoleUnknown = -1,
+    ClusterRoleClustered,
+    ClusterRoleUnclustered
+  } CLUSTER_ROLE_STATE;
+
+#if CLUSAPI_VERSION >= CLUSAPI_VERSION_WINDOWS8
+  typedef enum VM_RESDLL_CONTEXT {
+    VmResdllContextTurnOff = 0,
+    VmResdllContextSave = 1,
+    VmResdllContextShutdown = 2,
+    VmResdllContextShutdownForce = 3,
+    VmResdllContextLiveMigration = 4
+  } VM_RESDLL_CONTEXT,*PVM_RESDLL_CONTEXT;
+
+  typedef enum RESDLL_CONTEXT_OPERATION_TYPE {
+    ResdllContextOperationTypeFailback,
+    ResdllContextOperationTypeDrain,
+    ResdllContextOperationTypeDrainFailure,
+    ResdllContextOperationTypeEmbeddedFailure,
+    ResdllContextOperationTypePreemption
+  } RESDLL_CONTEXT_OPERATION_TYPE,*PRESDLL_CONTEXT_OPERATION_TYPE;
+#endif
+
   typedef PVOID RESID;
   typedef HANDLE RESOURCE_HANDLE;
 
@@ -48,31 +180,57 @@ extern "C" {
     HANDLE EventHandle;
   } RESOURCE_STATUS,*PRESOURCE_STATUS;
 
-#define ResUtilInitializeResourceStatus(_resource_status_) 
ZeroMemory(_resource_status_,sizeof(RESOURCE_STATUS))
+#if CLUSAPI_VERSION >= CLUSAPI_VERSION_WINDOWS8
+  struct NodeUtilizationInfoElement {
+    ULONGLONG Id;
+    ULONGLONG AvailableMemory;
+    ULONGLONG AvailableMemoryAfterReclamation;
+  };
 
-  typedef DWORD (_stdcall *PSET_RESOURCE_STATUS_ROUTINE)(RESOURCE_HANDLE 
ResourceHandle,PRESOURCE_STATUS ResourceStatus);
-  typedef VOID (_stdcall *PQUORUM_RESOURCE_LOST)(RESOURCE_HANDLE Resource);
+  struct ResourceUtilizationInfoElement {
+    ULONGLONG PhysicalNumaId;
+    ULONGLONG CurrentMemory;
+  };
 
-  typedef enum LOG_LEVEL {
-    LOG_INFORMATION = 0,LOG_WARNING,LOG_ERROR,LOG_SEVERE
-  } LOG_LEVEL,*PLOG_LEVEL;
+  typedef struct GET_OPERATION_CONTEXT_PARAMS {
+    DWORD Size;
+    DWORD Version;
+    RESDLL_CONTEXT_OPERATION_TYPE Type;
+    DWORD Priority;
+  } GET_OPERATION_CONTEXT_PARAMS,*PGET_OPERATION_CONTEXT_PARAMS;
 
-  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 struct RESOURCE_STATUS_EX {
+    CLUSTER_RESOURCE_STATE ResourceState;
+    DWORD CheckPoint;
+    HANDLE EventHandle;
+    DWORD ApplicationSpecificErrorCode;
+    DWORD Flags;
+  } RESOURCE_STATUS_EX,*PRESOURCE_STATUS_EX;
 
-  typedef enum _RESOURCE_EXIT_STATE {
-    ResourceExitStateContinue = 
0,ResourceExitStateTerminate,ResourceExitStateMax
-  } RESOURCE_EXIT_STATE;
+  typedef DWORD (_stdcall *PSET_RESOURCE_STATUS_ROUTINE_EX) (RESOURCE_HANDLE 
ResourceHandle, PRESOURCE_STATUS_EX ResourceStatus);
+#endif
+
+  typedef DWORD (_stdcall *PSET_RESOURCE_STATUS_ROUTINE) (RESOURCE_HANDLE 
ResourceHandle, PRESOURCE_STATUS ResourceStatus);
+  typedef VOID (_stdcall *PQUORUM_RESOURCE_LOST) (RESOURCE_HANDLE Resource);
+  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);
+
+#if CLUSAPI_VERSION >= CLUSAPI_VERSION_WINDOWS8
+  typedef RESID (_stdcall *POPEN_V2_ROUTINE) (LPCWSTR ResourceName, HKEY 
ResourceKey, RESOURCE_HANDLE ResourceHandle, DWORD OpenFlags);
+  typedef DWORD (_stdcall *PONLINE_V2_ROUTINE) (RESID Resource, LPHANDLE 
EventHandle, DWORD OnlineFlags, PBYTE InBuffer, DWORD InBufferSize, DWORD 
Reserved);
+  typedef DWORD (_stdcall *POFFLINE_V2_ROUTINE) (RESID Resource, LPCWSTR 
DestinationNodeName, DWORD OfflineFlags, PBYTE InBuffer, DWORD InBufferSize, 
DWORD Reserved);
+  typedef DWORD (_stdcall *PCANCEL_ROUTINE) (RESID Resource, DWORD 
CancelFlags_RESERVED);
+#endif
 
   typedef struct CLRES_V1_FUNCTIONS {
     POPEN_ROUTINE Open;
@@ -88,17 +246,33 @@ extern "C" {
     PRESOURCE_TYPE_CONTROL_ROUTINE ResourceTypeControl;
   } CLRES_V1_FUNCTIONS,*PCLRES_V1_FUNCTIONS;
 
+#if CLUSAPI_VERSION >= CLUSAPI_VERSION_WINDOWS8
+  typedef struct CLRES_V2_FUNCTIONS {
+    POPEN_V2_ROUTINE Open;
+    PCLOSE_ROUTINE Close;
+    PONLINE_V2_ROUTINE Online;
+    POFFLINE_V2_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;
+    PCANCEL_ROUTINE Cancel;
+  } CLRES_V2_FUNCTIONS,*PCLRES_V2_FUNCTIONS;
+#endif
+
   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) __builtin_offsetof(Type, Field))
+#if CLUSAPI_VERSION >= CLUSAPI_VERSION_WINDOWS8
+      CLRES_V2_FUNCTIONS V2Functions;
 #endif
+    } DUMMYUNIONNAME;
+  } CLRES_FUNCTION_TABLE,*PCLRES_FUNCTION_TABLE;
 
   typedef struct RESUTIL_LARGEINT_DATA {
     LARGE_INTEGER Default;
@@ -112,9 +286,11 @@ extern "C" {
     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_FILETIME_DATA {
+    FILETIME Default;
+    FILETIME Minimum;
+    FILETIME Maximum;
+  } RESUTIL_FILETIME_DATA,*PRESUTIL_FILETIME_DATA;
 
   typedef struct RESUTIL_PROPERTY_ITEM {
     LPWSTR Name;
@@ -126,19 +302,54 @@ extern "C" {
       LPVOID lpDefault;
       PRESUTIL_LARGEINT_DATA LargeIntData;
       PRESUTIL_ULARGEINT_DATA ULargeIntData;
-    };
+      PRESUTIL_FILETIME_DATA FileTimeData;
+    } DUMMYUNIONNAME;
     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 struct CLUS_WORKER {
+    HANDLE hThread;
+    WINBOOL Terminate;
+  } CLUS_WORKER,*PCLUS_WORKER;
+
+  typedef DWORD (_stdcall *PSTARTUP_ROUTINE) (LPCWSTR ResourceType, DWORD 
MinVersionSupported, DWORD MaxVersionSupported, PSET_RESOURCE_STATUS_ROUTINE 
SetResourceStatus, PLOG_EVENT_ROUTINE LogEvent, PCLRES_FUNCTION_TABLE 
*FunctionTable);
+
+#if CLUSAPI_VERSION >= CLUSAPI_VERSION_WINDOWS8
+  typedef DWORD (_stdcall *PSET_RESOURCE_LOCKED_MODE_ROUTINE) (RESOURCE_HANDLE 
ResourceHandle, WINBOOL LockedModeEnabled, DWORD LockedModeReason);
+  typedef DWORD (_stdcall *PSIGNAL_FAILURE_ROUTINE) (RESOURCE_HANDLE 
ResourceHandle, WINBOOL IsEmbeddedFailure, DWORD ApplicationSpecificErrorCode);
+  typedef DWORD (_stdcall 
*PSET_RESOURCE_INMEMORY_NODELOCAL_PROPERTIES_ROUTINE) (RESOURCE_HANDLE 
ResourceHandle, unsigned char *propertyListBuffer, DWORD 
propertyListBufferSize);
+
+  typedef struct CLRES_CALLBACK_FUNCTION_TABLE {
+    PLOG_EVENT_ROUTINE LogEvent;
+    PSET_RESOURCE_STATUS_ROUTINE_EX SetResourceStatusEx;
+    PSET_RESOURCE_LOCKED_MODE_ROUTINE SetResourceLockedMode;
+    PSIGNAL_FAILURE_ROUTINE SignalFailure;
+    PSET_RESOURCE_INMEMORY_NODELOCAL_PROPERTIES_ROUTINE 
SetResourceInMemoryNodeLocalProperties;
+  } CLRES_CALLBACK_FUNCTION_TABLE,*PCLRES_CALLBACK_FUNCTION_TABLE;
+
+  typedef DWORD (_stdcall *PSTARTUP_EX_ROUTINE) (LPCWSTR ResourceType, DWORD 
MinVersionSupported, DWORD MaxVersionSupported, PCLRES_CALLBACK_FUNCTION_TABLE 
MonitorCallbackFunctions, PCLRES_FUNCTION_TABLE *ResourceDllInterfaceFunctions);
+#endif
 
   typedef enum RESOURCE_MONITOR_STATE {
-    
RmonInitializing,RmonIdle,RmonStartingResource,RmonInitializingResource,RmonOnlineResource,RmonOfflineResource,RmonShutdownResource,
-    
RmonDeletingResource,RmonIsAlivePoll,RmonLooksAlivePoll,RmonArbitrateResource,RmonReleaseResource,RmonResourceControl,
-    RmonResourceTypeControl,RmonTerminateResource,RmonDeadlocked
+    RmonInitializing,
+    RmonIdle,
+    RmonStartingResource,
+    RmonInitializingResource,
+    RmonOnlineResource,
+    RmonOfflineResource,
+    RmonShutdownResource,
+    RmonDeletingResource,
+    RmonIsAlivePoll,
+    RmonLooksAlivePoll,
+    RmonArbitrateResource,
+    RmonReleaseResource,
+    RmonResourceControl,
+    RmonResourceTypeControl,
+    RmonTerminateResource,
+    RmonDeadlocked
   } RESOURCE_MONITOR_STATE;
 
   typedef struct MONITOR_STATE {
@@ -148,241 +359,201 @@ extern "C" {
     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 DWORD (WINAPI *PRESUTIL_START_RESOURCE_SERVICE) (LPCWSTR 
pszServiceName, LPSC_HANDLE phServiceHandle);
+  typedef DWORD (WINAPI *PRESUTIL_VERIFY_RESOURCE_SERVICE) (LPCWSTR 
pszServiceName);
+  typedef DWORD (WINAPI *PRESUTIL_STOP_RESOURCE_SERVICE) (LPCWSTR 
pszServiceName);
+  typedef DWORD (WINAPI *PRESUTIL_VERIFY_SERVICE) (SC_HANDLE hServiceHandle);
+  typedef DWORD (WINAPI *PRESUTIL_STOP_SERVICE) (SC_HANDLE hServiceHandle);
+  typedef DWORD (WINAPI *PRESUTIL_CREATE_DIRECTORY_TREE) (LPCWSTR pszPath);
+  typedef WINBOOL (WINAPI *PRESUTIL_IS_PATH_VALID) (LPCWSTR pszPath);
+  typedef DWORD (WINAPI *PRESUTIL_ENUM_PROPERTIES) (const 
PRESUTIL_PROPERTY_ITEM pPropertyTable, LPWSTR pszOutProperties, DWORD 
cbOutPropertiesSize, LPDWORD pcbBytesReturned, LPDWORD pcbRequired);
+  typedef DWORD (WINAPI *PRESUTIL_ENUM_PRIVATE_PROPERTIES) (HKEY 
hkeyClusterKey, LPWSTR pszOutProperties, DWORD cbOutPropertiesSize, LPDWORD 
pcbBytesReturned, LPDWORD pcbRequired);
+  typedef DWORD (WINAPI *PRESUTIL_GET_PROPERTIES) (HKEY hkeyClusterKey, const 
PRESUTIL_PROPERTY_ITEM pPropertyTable, PVOID pOutPropertyList, DWORD 
cbOutPropertyListSize, LPDWORD pcbBytesReturned, LPDWORD pcbRequired);
+  typedef DWORD (WINAPI *PRESUTIL_GET_ALL_PROPERTIES) (HKEY hkeyClusterKey, 
const PRESUTIL_PROPERTY_ITEM pPropertyTable, PVOID pOutPropertyList, DWORD 
cbOutPropertyListSize, LPDWORD pcbBytesReturned, LPDWORD pcbRequired);
+  typedef DWORD (WINAPI *PRESUTIL_GET_PRIVATE_PROPERTIES) (HKEY 
hkeyClusterKey, PVOID pOutPropertyList, DWORD cbOutPropertyListSize, LPDWORD 
pcbBytesReturned, LPDWORD pcbRequired);
+  typedef DWORD (WINAPI *PRESUTIL_GET_PROPERTY_SIZE) (HKEY hkeyClusterKey, 
const PRESUTIL_PROPERTY_ITEM pPropertyTableItem, LPDWORD 
pcbOutPropertyListSize, LPDWORD pnPropertyCount);
+  typedef DWORD (WINAPI *PRESUTIL_GET_PROPERTY) (HKEY hkeyClusterKey, const 
PRESUTIL_PROPERTY_ITEM pPropertyTableItem, PVOID *pOutPropertyItem, LPDWORD 
pcbOutPropertyItemSize);
+  typedef DWORD (WINAPI *PRESUTIL_VERIFY_PROPERTY_TABLE) (const 
PRESUTIL_PROPERTY_ITEM pPropertyTable, PVOID Reserved, WINBOOL 
bAllowUnknownProperties, const PVOID pInPropertyList, DWORD 
cbInPropertyListSize, LPBYTE pOutParams);
+  typedef DWORD (WINAPI *PRESUTIL_SET_PROPERTY_TABLE) (HKEY hkeyClusterKey, 
const PRESUTIL_PROPERTY_ITEM pPropertyTable, PVOID Reserved, WINBOOL 
bAllowUnknownProperties, const PVOID pInPropertyList, DWORD 
cbInPropertyListSize, LPBYTE pOutParams);
+  typedef DWORD (WINAPI *PRESUTIL_SET_PROPERTY_TABLE_EX) (HKEY hkeyClusterKey, 
const PRESUTIL_PROPERTY_ITEM pPropertyTable, PVOID Reserved, WINBOOL 
bAllowUnknownProperties, const PVOID pInPropertyList, DWORD 
cbInPropertyListSize, WINBOOL bForceWrite, LPBYTE pOutParams);
+  typedef DWORD (WINAPI *PRESUTIL_SET_PROPERTY_PARAMETER_BLOCK) (HKEY 
hkeyClusterKey, const PRESUTIL_PROPERTY_ITEM pPropertyTable, PVOID Reserved, 
const LPBYTE pInParams, const PVOID pInPropertyList, DWORD 
cbInPropertyListSize, LPBYTE pOutParams);
+  typedef DWORD (WINAPI *PRESUTIL_SET_PROPERTY_PARAMETER_BLOCK_EX) (HKEY 
hkeyClusterKey, const PRESUTIL_PROPERTY_ITEM pPropertyTable, PVOID Reserved, 
const LPBYTE pInParams, const PVOID pInPropertyList, DWORD 
cbInPropertyListSize, WINBOOL bForceWrite, LPBYTE pOutParams);
+  typedef DWORD (WINAPI *PRESUTIL_SET_UNKNOWN_PROPERTIES) (HKEY 
hkeyClusterKey, const PRESUTIL_PROPERTY_ITEM pPropertyTable, const PVOID 
pInPropertyList, DWORD cbInPropertyListSize);
+  typedef DWORD (WINAPI *PRESUTIL_GET_PROPERTIES_TO_PARAMETER_BLOCK) (HKEY 
hkeyClusterKey, const PRESUTIL_PROPERTY_ITEM pPropertyTable, LPBYTE pOutParams, 
WINBOOL bCheckForRequiredProperties, LPWSTR *pszNameOfPropInError);
+  typedef DWORD (WINAPI *PRESUTIL_GET_PROPERTIES_TO_PARAMETER_BLOCK) (HKEY 
hkeyClusterKey, const PRESUTIL_PROPERTY_ITEM pPropertyTable, LPBYTE pOutParams, 
WINBOOL bCheckForRequiredProperties, LPWSTR *pszNameOfPropInError);
+  typedef DWORD (WINAPI *PRESUTIL_PROPERTY_LIST_FROM_PARAMETER_BLOCK) (const 
PRESUTIL_PROPERTY_ITEM pPropertyTable, PVOID pOutPropertyList, LPDWORD 
pcbOutPropertyListSize, const LPBYTE pInParams, LPDWORD pcbBytesReturned, 
LPDWORD pcbRequired);
+  typedef DWORD (WINAPI *PRESUTIL_DUP_PARAMETER_BLOCK) (LPBYTE pOutParams, 
const LPBYTE pInParams, const PRESUTIL_PROPERTY_ITEM pPropertyTable);
+  typedef void (WINAPI *PRESUTIL_FREE_PARAMETER_BLOCK) (LPBYTE pOutParams, 
const LPBYTE pInParams, const PRESUTIL_PROPERTY_ITEM pPropertyTable);
+  typedef DWORD (WINAPI *PRESUTIL_ADD_UNKNOWN_PROPERTIES) (HKEY 
hkeyClusterKey, const PRESUTIL_PROPERTY_ITEM pPropertyTable, PVOID 
pOutPropertyList, DWORD pcbOutPropertyListSize, LPDWORD pcbBytesReturned, 
LPDWORD pcbRequired);
+  typedef DWORD (WINAPI *PRESUTIL_SET_PRIVATE_PROPERTY_LIST) (HKEY 
hkeyClusterKey, const PVOID pInPropertyList, DWORD cbInPropertyListSize);
+  typedef DWORD (WINAPI *PRESUTIL_VERIFY_PRIVATE_PROPERTY_LIST) (const PVOID 
pInPropertyList, DWORD cbInPropertyListSize);
+  typedef PWSTR (WINAPI *PRESUTIL_DUP_STRING) (LPCWSTR pszInString);
+  typedef DWORD (WINAPI *PRESUTIL_GET_BINARY_VALUE) (HKEY hkeyClusterKey, 
LPCWSTR pszValueName, LPBYTE *ppbOutValue, LPDWORD pcbOutValueSize);
+  typedef LPWSTR (WINAPI *PRESUTIL_GET_SZ_VALUE) (HKEY hkeyClusterKey, LPCWSTR 
pszValueName);
+  typedef LPWSTR (WINAPI *PRESUTIL_GET_EXPAND_SZ_VALUE) (HKEY hkeyClusterKey, 
LPCWSTR pszValueName, WINBOOL bExpand);
+  typedef DWORD (WINAPI *PRESUTIL_GET_DWORD_VALUE) (HKEY hkeyClusterKey, 
LPCWSTR pszValueName, LPDWORD pdwOutValue, DWORD dwDefaultValue);
+  typedef DWORD (WINAPI *PRESUTIL_GET_QWORD_VALUE) (HKEY hkeyClusterKey, 
LPCWSTR pszValueName, PULONGLONG pqwOutValue, ULONGLONG qwDefaultValue);
+  typedef DWORD (WINAPI *PRESUTIL_SET_BINARY_VALUE) (HKEY hkeyClusterKey, 
LPCWSTR pszValueName, const LPBYTE pbNewValue, DWORD cbNewValueSize, LPBYTE 
*ppbOutValue, LPDWORD pcbOutValueSize);
+  typedef DWORD (WINAPI *PRESUTIL_SET_SZ_VALUE) (HKEY hkeyClusterKey, LPCWSTR 
pszValueName, LPCWSTR pszNewValue, LPWSTR *ppszOutString);
+  typedef DWORD (WINAPI *PRESUTIL_SET_EXPAND_SZ_VALUE) (HKEY hkeyClusterKey, 
LPCWSTR pszValueName, LPCWSTR pszNewValue, LPWSTR *ppszOutString);
+  typedef DWORD (WINAPI *PRESUTIL_SET_MULTI_SZ_VALUE) (HKEY hkeyClusterKey, 
LPCWSTR pszValueName, LPCWSTR pszNewValue, DWORD cbNewValueSize, LPWSTR 
*ppszOutValue, LPDWORD pcbOutValueSize);
+  typedef DWORD (WINAPI *PRESUTIL_SET_DWORD_VALUE) (HKEY hkeyClusterKey, 
LPCWSTR pszValueName, DWORD dwNewValue, LPDWORD pdwOutValue);
+  typedef DWORD (WINAPI *PRESUTIL_SET_QWORD_VALUE) (HKEY hkeyClusterKey, 
LPCWSTR pszValueName, ULONGLONG qwNewValue, PULONGLONG pqwOutValue);
+  typedef DWORD (WINAPI *PRESUTIL_GET_BINARY_PROPERTY) (LPBYTE *ppbOutValue, 
LPDWORD pcbOutValueSize, const PCLUSPROP_BINARY pValueStruct, const LPBYTE 
pbOldValue, DWORD cbOldValueSize, LPBYTE *ppPropertyList, LPDWORD 
pcbPropertyListSize);
+  typedef DWORD (WINAPI *PRESUTIL_GET_SZ_PROPERTY) (LPWSTR *ppszOutValue, 
const PCLUSPROP_SZ pValueStruct, LPCWSTR pszOldValue, LPBYTE *ppPropertyList, 
LPDWORD pcbPropertyListSize);
+  typedef DWORD (WINAPI *PRESUTIL_GET_MULTI_SZ_PROPERTY) (LPWSTR 
*ppszOutValue, LPDWORD pcbOutValueSize, const PCLUSPROP_SZ pValueStruct, 
LPCWSTR pszOldValue, DWORD cbOldValueSize, LPBYTE *ppPropertyList, LPDWORD 
pcbPropertyListSize);
+  typedef DWORD (WINAPI *PRESUTIL_GET_DWORD_PROPERTY) (LPDWORD pdwOutValue, 
const PCLUSPROP_DWORD pValueStruct, DWORD dwOldValue, DWORD dwMinimum, DWORD 
dwMaximum, LPBYTE *ppPropertyList, LPDWORD pcbPropertyListSize);
+  typedef DWORD (WINAPI *PRESUTIL_GET_LONG_PROPERTY) (LPLONG plOutValue, const 
PCLUSPROP_LONG pValueStruct, LONG lOldValue, LONG lMinimum, LONG lMaximum, 
LPBYTE *ppPropertyList, LPDWORD pcbPropertyListSize);
+  typedef DWORD (WINAPI *PRESUTIL_GET_FILETIME_PROPERTY) (LPFILETIME 
pftOutValue, const PCLUSPROP_FILETIME pValueStruct, FILETIME ftOldValue, 
FILETIME ftMinimum, FILETIME ftMaximum, LPBYTE *ppPropertyList, LPDWORD 
pcbPropertyListSize);
+  typedef LPVOID (WINAPI *PRESUTIL_GET_ENVIRONMENT_WITH_NET_NAME) (HRESOURCE 
hResource);
+  typedef DWORD (WINAPI *PRESUTIL_FREE_ENVIRONMENT) (LPVOID lpEnvironment);
+  typedef LPWSTR (WINAPI *PRESUTIL_EXPAND_ENVIRONMENT_STRINGS) (LPCWSTR 
pszSrc);
+  typedef DWORD (WINAPI *PRESUTIL_SET_RESOURCE_SERVICE_ENVIRONMENT) (LPCWSTR 
pszServiceName, HRESOURCE hResource, PLOG_EVENT_ROUTINE pfnLogEvent, 
RESOURCE_HANDLE hResourceHandle);
+  typedef DWORD (WINAPI *PRESUTIL_REMOVE_RESOURCE_SERVICE_ENVIRONMENT) 
(LPCWSTR pszServiceName, PLOG_EVENT_ROUTINE pfnLogEvent, RESOURCE_HANDLE 
hResourceHandle);
+  typedef DWORD (WINAPI *PRESUTIL_SET_RESOURCE_SERVICE_START_PARAMETERS) 
(LPCWSTR pszServiceName, SC_HANDLE schSCMHandle, LPSC_HANDLE phService, 
PLOG_EVENT_ROUTINE pfnLogEvent, RESOURCE_HANDLE hResourceHandle);
+  typedef DWORD (WINAPI *PRESUTIL_FIND_SZ_PROPERTY) (const PVOID 
pPropertyList, DWORD cbPropertyListSize, LPCWSTR pszPropertyName, LPWSTR 
*pszPropertyValue);
+  typedef DWORD (WINAPI *PRESUTIL_FIND_EXPAND_SZ_PROPERTY) (const PVOID 
pPropertyList, DWORD cbPropertyListSize, LPCWSTR pszPropertyName, LPWSTR 
*pszPropertyValue);
+  typedef DWORD (WINAPI *PRESUTIL_FIND_EXPANDED_SZ_PROPERTY) (const PVOID 
pPropertyList, DWORD cbPropertyListSize, LPCWSTR pszPropertyName, LPWSTR 
*pszPropertyValue);
+  typedef DWORD (WINAPI *PRESUTIL_FIND_DWORD_PROPERTY) (const PVOID 
pPropertyList, DWORD cbPropertyListSize, LPCWSTR pszPropertyName, LPDWORD 
pdwPropertyValue);
+  typedef DWORD (WINAPI *PRESUTIL_FIND_BINARY_PROPERTY) (const PVOID 
pPropertyList, DWORD cbPropertyListSize, LPCWSTR pszPropertyName, LPBYTE 
*pbPropertyValue, LPDWORD pcbPropertyValueSize);
+  typedef DWORD (WINAPI *PRESUTIL_FIND_MULTI_SZ_PROPERTY) (const PVOID 
pPropertyList, DWORD cbPropertyListSize, LPCWSTR pszPropertyName, LPWSTR 
*pszPropertyValue, LPDWORD pcbPropertyValueSize);
+  typedef DWORD (WINAPI *PRESUTIL_FIND_LONG_PROPERTY) (const PVOID 
pPropertyList, DWORD cbPropertyListSize, LPCWSTR pszPropertyName, LPLONG 
plPropertyValue);
+  typedef DWORD (WINAPI *PRESUTIL_FIND_FILETIME_PROPERTY) (const PVOID 
pPropertyList, DWORD cbPropertyListSize, LPCWSTR pszPropertyName, LPFILETIME 
pftPropertyValue);
+  typedef DWORD (WINAPI *PWORKER_START_ROUTINE) (PCLUS_WORKER pWorker, LPVOID 
lpThreadParameter);
+  typedef DWORD (WINAPI *PCLUSAPI_CLUS_WORKER_CREATE) (PCLUS_WORKER lpWorker, 
PWORKER_START_ROUTINE lpStartAddress, PVOID lpParameter);
+  typedef WINBOOL (WINAPI *PCLUSAPIClusWorkerCheckTerminate) (PCLUS_WORKER 
lpWorker);
+  typedef VOID (WINAPI *PCLUSAPI_CLUS_WORKER_TERMINATE) (PCLUS_WORKER 
lpWorker);
+  typedef DWORD (*LPRESOURCE_CALLBACK) (HRESOURCE, HRESOURCE, PVOID);
+  typedef DWORD (*LPRESOURCE_CALLBACK_EX) (HCLUSTER, HRESOURCE, HRESOURCE, 
PVOID);
+  typedef WINBOOL (WINAPI *PRESUTIL_RESOURCES_EQUAL) (HRESOURCE hSelf, 
HRESOURCE hResource);
+  typedef WINBOOL (WINAPI *PRESUTIL_RESOURCE_TYPES_EQUAL) (LPCWSTR 
lpszResourceTypeName, HRESOURCE hResource);
+  typedef WINBOOL (WINAPI *PRESUTIL_IS_RESOURCE_CLASS_EQUAL) 
(PCLUS_RESOURCE_CLASS_INFO prci, HRESOURCE hResource);
+  typedef DWORD (WINAPI *PRESUTIL_ENUM_RESOURCES) (HRESOURCE hSelf, LPCWSTR 
lpszResTypeName, LPRESOURCE_CALLBACK pResCallBack, PVOID pParameter);
+  typedef DWORD (WINAPI *PRESUTIL_ENUM_RESOURCES_EX) (HCLUSTER hCluster, 
HRESOURCE hSelf, LPCWSTR lpszResTypeName, LPRESOURCE_CALLBACK_EX pResCallBack, 
PVOID pParameter);
+  typedef HRESOURCE (WINAPI *PRESUTIL_GET_RESOURCE_DEPENDENCY) (HANDLE hSelf, 
LPCWSTR lpszResourceType);
+  typedef HRESOURCE (WINAPI *PRESUTIL_GET_RESOURCE_DEPENDENCY_BY_NAME) 
(HCLUSTER hCluster, HANDLE hSelf, LPCWSTR lpszResourceType, WINBOOL bRecurse);
+  typedef HRESOURCE (WINAPI *PRESUTIL_GET_RESOURCE_DEPENDENCY_BY_CLASS) 
(HCLUSTER hCluster, HANDLE hSelf, PCLUS_RESOURCE_CLASS_INFO prci, WINBOOL 
bRecurse);
+  typedef HRESOURCE (WINAPI *PRESUTIL_GET_RESOURCE_NAME_DEPENDENCY) (LPCWSTR 
lpszResourceName, LPCWSTR lpszResourceType);
+  typedef DWORD (WINAPI *PRESUTIL_GET_RESOURCE_DEPENDENTIP_ADDRESS_PROPS) 
(HRESOURCE hResource, LPWSTR pszAddress, DWORD *pcchAddress, LPWSTR 
pszSubnetMask, DWORD *pcchSubnetMask, LPWSTR pszNetwork, DWORD *pcchNetwork);
+  typedef DWORD (WINAPI *PRESUTIL_FIND_DEPENDENT_DISK_RESOURCE_DRIVE_LETTER) 
(HCLUSTER hCluster, HRESOURCE hResource, LPWSTR pszDriveLetter, DWORD 
*pcchDriveLetter);
+  typedef DWORD (WINAPI *PRESUTIL_TERMINATE_SERVICE_PROCESS_FROM_RES_DLL) 
(DWORD dwServicePid, WINBOOL bOffline, PDWORD pdwResourceState, 
PLOG_EVENT_ROUTINE pfnLogEvent, RESOURCE_HANDLE hResourceHandle);
+  typedef DWORD (WINAPI *PRESUTIL_GET_PROPERTY_FORMATS) (const 
PRESUTIL_PROPERTY_ITEM pPropertyTable, PVOID pOutPropertyFormatList, DWORD 
cbPropertyFormatListSize, LPDWORD pcbBytesReturned, LPDWORD pcbRequired);
+  typedef DWORD (WINAPI *PRESUTIL_GET_CORE_CLUSTER_RESOURCES) (HCLUSTER 
hCluster, HRESOURCE *phClusterNameResource, HRESOURCE 
*phClusterIPAddressResource, HRESOURCE *phClusterQuorumResource);
+  typedef DWORD (WINAPI *PRESUTIL_GET_RESOURCE_NAME) (HRESOURCE hResource, 
PWSTR pszResourceName, DWORD *pcchResourceNameInOut);
+  typedef WINBOOL (WINAPI *PCLUSTER_IS_PATH_ON_SHARED_VOLUME) (LPCWSTR 
lpszPathName);
+  typedef WINBOOL (WINAPI *PCLUSTER_GET_VOLUME_PATH_NAME) (LPCWSTR 
lpszFileName, LPWSTR lpszVolumePathName, DWORD cchBufferLength);
+  typedef WINBOOL (WINAPI *PCLUSTER_GET_VOLUME_NAME_FOR_VOLUME_MOUNT_POINT) 
(LPCWSTR lpszVolumeMountPoint, LPWSTR lpszVolumeName, DWORD cchBufferLength);
+  typedef DWORD (WINAPI *PCLUSTER_PREPARE_SHARED_VOLUME_FOR_BACKUP) (LPCWSTR 
lpszFileName, LPWSTR lpszVolumePathName, LPDWORD lpcchVolumePathName, LPWSTR 
lpszVolumeName, LPDWORD lpcchVolumeName);
+  typedef DWORD (WINAPI *PCLUSTER_CLEAR_BACKUP_STATE_FOR_SHARED_VOLUME) 
(LPCWSTR lpszVolumePathName);
+#if CLUSAPI_VERSION >= CLUSAPI_VERSION_WINDOWS8
+  typedef DWORD (WINAPI *PRESUTIL_SET_RESOURCE_SERVICE_START_PARAMETERS_EX) 
(LPCWSTR pszServiceName, SC_HANDLE schSCMHandle, LPSC_HANDLE phService, DWORD 
dwDesiredAccess, PLOG_EVENT_ROUTINE pfnLogEvent, RESOURCE_HANDLE 
hResourceHandle);
+  typedef DWORD (WINAPI *PRESUTIL_ENUM_RESOURCES_EX2) (HCLUSTER hCluster, 
HRESOURCE hSelf, LPCWSTR lpszResTypeName, LPRESOURCE_CALLBACK_EX pResCallBack, 
PVOID pParameter, DWORD dwDesiredAccess);
+  typedef HRESOURCE (WINAPI *PRESUTIL_GET_RESOURCE_DEPENDENCY_EX) (HANDLE 
hSelf, LPCWSTR lpszResourceType, DWORD dwDesiredAccess);
+  typedef HRESOURCE (WINAPI *PRESUTIL_GET_RESOURCE_DEPENDENCY_BY_NAME_EX) 
(HCLUSTER hCluster, HANDLE hSelf, LPCWSTR lpszResourceType, WINBOOL bRecurse, 
DWORD dwDesiredAccess);
+  typedef HRESOURCE (WINAPI *PRESUTIL_GET_RESOURCE_DEPENDENCY_BY_CLASS_EX) 
(HCLUSTER hCluster, HANDLE hSelf, PCLUS_RESOURCE_CLASS_INFO prci, WINBOOL 
bRecurse, DWORD dwDesiredAccess);
+  typedef HRESOURCE (WINAPI *PRESUTIL_GET_RESOURCE_NAME_DEPENDENCY_EX) 
(LPCWSTR lpszResourceName, LPCWSTR lpszResourceType, DWORD dwDesiredAccess);
+  typedef DWORD (WINAPI *PRESUTIL_GET_CORE_CLUSTER_RESOURCES_EX) (HCLUSTER 
hClusterIn, HRESOURCE *phClusterNameResourceOut, HRESOURCE 
*phClusterIPAddressResourceOut, HRESOURCE *phClusterQuorumResourceOut, DWORD 
dwDesiredAccess);
+#endif
 
-  typedef struct CLUS_WORKER {
-    HANDLE hThread;
-    WINBOOL Terminate;
-  } CLUS_WORKER,*PCLUS_WORKER;
+  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);
+  DWORD WINAPI ResUtilGetDwordValue (HKEY hkeyClusterKey, LPCWSTR 
pszValueName, LPDWORD pdwOutValue, DWORD dwDefaultValue);
+  DWORD WINAPI ResUtilGetQwordValue (HKEY hkeyClusterKey, LPCWSTR 
pszValueName, PULONGLONG pqwOutValue, ULONGLONG qwDefaultValue);
+  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 ResUtilSetQwordValue (HKEY hkeyClusterKey, LPCWSTR 
pszValueName, ULONGLONG qwNewValue, PULONGLONG pqwOutValue);
+  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);
+  DWORD WINAPI ResUtilGetLongProperty (LPLONG plOutValue, const PCLUSPROP_LONG 
pValueStruct, LONG lOldValue, LONG lMinimum, LONG lMaximum, LPBYTE 
*ppPropertyList, LPDWORD pcbPropertyListSize);
+  DWORD WINAPI ResUtilGetFileTimeProperty (LPFILETIME pftOutValue, const 
PCLUSPROP_FILETIME pValueStruct, FILETIME ftOldValue, FILETIME ftMinimum, 
FILETIME ftMaximum, 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 plPropertyValue);
+  DWORD WINAPI ResUtilFindFileTimeProperty (const PVOID pPropertyList, DWORD 
cbPropertyListSize, LPCWSTR pszPropertyName, LPFILETIME pftPropertyValue);
+  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 *pcch_Network);
+  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);
+  CLUSTER_ROLE_STATE WINAPI ResUtilGetClusterRoleState (HCLUSTER hCluster, 
CLUSTER_ROLE eClusterRole);
+  WINBOOL WINAPI ClusterIsPathOnSharedVolume (LPCWSTR lpszPathName);
+  WINBOOL WINAPI ClusterGetVolumePathName (LPCWSTR lpszFileName, LPWSTR 
lpszVolumePathName, DWORD cchBufferLength);
+  WINBOOL WINAPI ClusterGetVolumeNameForVolumeMountPoint (LPCWSTR 
lpszVolumeMountPoint, LPWSTR lpszVolumeName, DWORD cchBufferLength);
+  DWORD WINAPI ClusterPrepareSharedVolumeForBackup (LPCWSTR lpszFileName, 
LPWSTR lpszVolumePathName, LPDWORD lpcchVolumePathName, LPWSTR lpszVolumeName, 
LPDWORD lpcchVolumeName);
+  DWORD WINAPI ClusterClearBackupStateForSharedVolume (LPCWSTR 
lpszVolumePathName);
+#if CLUSAPI_VERSION >= CLUSAPI_VERSION_WINDOWS8
+  DWORD WINAPI ResUtilSetResourceServiceStartParametersEx (LPCWSTR 
pszServiceName, SC_HANDLE schSCMHandle, LPSC_HANDLE phService, DWORD 
dwDesiredAccess, PLOG_EVENT_ROUTINE pfnLogEvent, RESOURCE_HANDLE 
hResourceHandle);
+  DWORD WINAPI ResUtilEnumResourcesEx2 (HCLUSTER hCluster, HRESOURCE hSelf, 
LPCWSTR lpszResTypeName, LPRESOURCE_CALLBACK_EX pResCallBack, PVOID pParameter, 
DWORD dwDesiredAccess);
+  HRESOURCE WINAPI ResUtilGetResourceDependencyEx (HANDLE hSelf, LPCWSTR 
lpszResourceType, DWORD dwDesiredAccess);
+  HRESOURCE WINAPI ResUtilGetResourceDependencyByNameEx (HCLUSTER hCluster, 
HANDLE hSelf, LPCWSTR lpszResourceType, WINBOOL bRecurse, DWORD 
dwDesiredAccess);
+  HRESOURCE WINAPI ResUtilGetResourceDependencyByClassEx (HCLUSTER hCluster, 
HANDLE hSelf, PCLUS_RESOURCE_CLASS_INFO prci, WINBOOL bRecurse, DWORD 
dwDesiredAccess);
+  HRESOURCE WINAPI ResUtilGetResourceNameDependencyEx (LPCWSTR 
lpszResourceName, LPCWSTR lpszResourceType, DWORD dwDesiredAccess);
+  DWORD WINAPI ResUtilGetCoreClusterResourcesEx (HCLUSTER hClusterIn, 
HRESOURCE *phClusterNameResourceOut, HRESOURCE *phClusterQuorumResourceOut, 
DWORD dwDesiredAccess);
+#endif
 
-  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) */
+  FORCEINLINE DWORD WINAPI_INLINE ResUtilGetMultiSzValue (HKEY hkeyClusterKey, 
LPCWSTR pszValueName, LPWSTR *ppszOutValue, LPDWORD pcbOutValueSize) {
+    return ResUtilGetBinaryValue (hkeyClusterKey, pszValueName,(LPBYTE *) 
ppszOutValue, pcbOutValueSize);
+  }
 
 #ifdef __cplusplus
 }
 #endif
 #endif
+#endif
-- 
1.7.9

------------------------------------------------------------------------------
Slashdot TV.  
Video for Nerds.  Stuff that matters.
http://tv.slashdot.org/
_______________________________________________
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public

Reply via email to