Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

1052 lines
24 KiB

/*++
Copyright (c) Microsoft Corporation. All rights reserved.
Module Name:
resapi.h
Abstract:
This module defines the interface exported by Windows Clusters resources.
Revision History:
--*/
#ifndef _RESAPI_DEFINES_
#define _RESAPI_DEFINES_
#if _MSC_VER > 1000
#pragma once
#endif
#include <windows.h>
#include <winsvc.h>
#include <clusapi.h>
#include <stdio.h>
#ifdef __cplusplus
extern "C" {
#endif
#define IN
#define OUT
//
// Definitions for entrypoints exported by a resource DLL.
//
#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_DEFINES_
#ifndef _RESAPI_
#define _RESAPI_
//
// Define a RESID
//
typedef PVOID RESID;
//
// Define a RESOURCE_HANDLE
//
typedef HANDLE RESOURCE_HANDLE;
//
// Define the Resource Status structure.
//
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) )
//
// Define Resource DLL callback method for updating the state of a resource.
//
typedef
DWORD
(_stdcall *PSET_RESOURCE_STATUS_ROUTINE) (
IN RESOURCE_HANDLE ResourceHandle,
IN PRESOURCE_STATUS ResourceStatus
);
//
// Define Resource DLL callback method for notifying that a quorum
// resource DLL failed to hold the quorum resource.
//
typedef
VOID
(_stdcall *PQUORUM_RESOURCE_LOST) (
IN RESOURCE_HANDLE Resource
);
//
// Define Resource DLL callback method for logging events.
//
typedef enum LOG_LEVEL {
LOG_INFORMATION,
LOG_WARNING,
LOG_ERROR,
LOG_SEVERE
} LOG_LEVEL, *PLOG_LEVEL;
typedef
VOID
(_stdcall *PLOG_EVENT_ROUTINE) (
IN RESOURCE_HANDLE ResourceHandle,
IN LOG_LEVEL LogLevel,
IN LPCWSTR FormatString,
...
);
typedef
RESID
(_stdcall *POPEN_ROUTINE) (
IN LPCWSTR ResourceName,
IN HKEY ResourceKey,
IN RESOURCE_HANDLE ResourceHandle
);
typedef
VOID
(_stdcall *PCLOSE_ROUTINE) (
IN RESID Resource
);
typedef
DWORD
(_stdcall *PONLINE_ROUTINE) (
IN RESID Resource,
IN OUT LPHANDLE EventHandle
);
typedef
DWORD
(_stdcall *POFFLINE_ROUTINE) (
IN RESID Resource
);
typedef
VOID
(_stdcall *PTERMINATE_ROUTINE) (
IN RESID Resource
);
typedef
BOOL
(_stdcall *PIS_ALIVE_ROUTINE) (
IN RESID Resource
);
typedef
BOOL
(_stdcall *PLOOKS_ALIVE_ROUTINE) (
IN RESID Resource
);
typedef
DWORD
(_stdcall *PARBITRATE_ROUTINE) (
IN RESID Resource,
IN PQUORUM_RESOURCE_LOST LostQuorumResource
);
typedef
DWORD
(_stdcall *PRELEASE_ROUTINE) (
IN RESID Resource
);
typedef
DWORD
(_stdcall *PRESOURCE_CONTROL_ROUTINE) (
IN RESID Resource,
IN DWORD ControlCode,
IN PVOID InBuffer,
IN DWORD InBufferSize,
OUT PVOID OutBuffer,
IN DWORD OutBufferSize,
OUT LPDWORD BytesReturned
);
typedef
DWORD
(_stdcall *PRESOURCE_TYPE_CONTROL_ROUTINE) (
IN LPCWSTR ResourceTypeName,
IN DWORD ControlCode,
IN PVOID InBuffer,
IN DWORD InBufferSize,
OUT PVOID OutBuffer,
IN DWORD OutBufferSize,
OUT LPDWORD BytesReturned
);
typedef enum _RESOURCE_EXIT_STATE {
ResourceExitStateContinue,
ResourceExitStateTerminate,
ResourceExitStateMax
} RESOURCE_EXIT_STATE;
//***************************************************************
//
// Define the Function Table Format
//
//***************************************************************
//
// Version 1 Resource DLL Interface definition
//
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;
//
// Resource DLL Function Table definition
//
#if _MSC_VER >= 1200
#pragma warning(push)
#endif
#pragma warning( disable : 4201 ) // nonstandard extension used : nameless struct/union
typedef struct CLRES_FUNCTION_TABLE {
DWORD TableSize;
DWORD Version;
union {
CLRES_V1_FUNCTIONS V1Functions;
};
} CLRES_FUNCTION_TABLE, *PCLRES_FUNCTION_TABLE;
#if _MSC_VER >= 1200
#pragma warning(pop)
#else
#pragma warning( default : 4201 ) // nonstandard extension used : nameless struct/union
#endif
//
// Define the Resource DLL Startup routine. This is the only routine
// that should be exported from a resource DLL.
//
//
// Calculate the byte offset of a field in a structure of type type.
//
#ifndef FIELD_OFFSET
#define FIELD_OFFSET(type, field) ((LONG)&(((type *)0)->field))
#endif
//
// large ints need more space than what was originally allocated.
//
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;
//
// Property list structures and functions
//
typedef struct RESUTIL_PROPERTY_ITEM {
LPWSTR Name; // Property name
LPWSTR KeyName; // Name of value in cluster database
DWORD Format; // Format: REG_SZ, REG_DWORD, etc.
union {
DWORD_PTR DefaultPtr;
DWORD Default; // Default value
LPVOID lpDefault;
PRESUTIL_LARGEINT_DATA LargeIntData;
PRESUTIL_ULARGEINT_DATA ULargeIntData;
};
DWORD Minimum; // Minimum value
DWORD Maximum; // Maximum value
DWORD Flags; // Flags for this item
#define RESUTIL_PROPITEM_READ_ONLY 0x00000001 // Property is read-only
#define RESUTIL_PROPITEM_REQUIRED 0x00000002 // Property is required
#define RESUTIL_PROPITEM_SIGNED 0x00000004 // Numeric property is signed (defaults to unsigned)
DWORD Offset; // Byte offset to value in parameter block
// Assumes MULTI_SZ and BINARY parameters
// are LPWSTRs followed by DWORDs for length
} RESUTIL_PROPERTY_ITEM, *PRESUTIL_PROPERTY_ITEM;
typedef
DWORD
(_stdcall *PSTARTUP_ROUTINE) (
IN LPCWSTR ResourceType,
IN DWORD MinVersionSupported,
IN DWORD MaxVersionSupported,
IN PSET_RESOURCE_STATUS_ROUTINE SetResourceStatus,
IN PLOG_EVENT_ROUTINE LogEvent,
OUT PCLRES_FUNCTION_TABLE *FunctionTable
);
//
// Define layout of shared memory used for tracking Resource Monitor 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 struct MONITOR_STATE {
LARGE_INTEGER LastUpdate;
RESOURCE_MONITOR_STATE State;
HANDLE ActiveResource;
BOOL ResmonStop;
} MONITOR_STATE, *PMONITOR_STATE;
//
// Resource Utility Routines
//
DWORD
WINAPI
ResUtilStartResourceService(
IN LPCWSTR pszServiceName,
OUT LPSC_HANDLE phServiceHandle
);
DWORD
WINAPI
ResUtilVerifyResourceService(
IN LPCWSTR pszServiceName
);
DWORD
WINAPI
ResUtilStopResourceService(
IN LPCWSTR pszServiceName
);
DWORD
WINAPI
ResUtilVerifyService(
IN SC_HANDLE hServiceHandle
);
DWORD
WINAPI
ResUtilStopService(
IN SC_HANDLE hServiceHandle
);
DWORD
WINAPI
ResUtilCreateDirectoryTree(
IN LPCWSTR pszPath
);
BOOL
WINAPI
ResUtilIsPathValid(
IN LPCWSTR pszPath
);
DWORD
WINAPI
ResUtilEnumProperties(
IN const PRESUTIL_PROPERTY_ITEM pPropertyTable,
OUT LPWSTR pszOutProperties,
IN DWORD cbOutPropertiesSize,
OUT LPDWORD pcbBytesReturned,
OUT LPDWORD pcbRequired
);
DWORD
WINAPI
ResUtilEnumPrivateProperties(
IN HKEY hkeyClusterKey,
OUT LPWSTR pszOutProperties,
IN DWORD cbOutPropertiesSize,
OUT LPDWORD pcbBytesReturned,
OUT LPDWORD pcbRequired
);
DWORD
WINAPI
ResUtilGetProperties(
IN HKEY hkeyClusterKey,
IN const PRESUTIL_PROPERTY_ITEM pPropertyTable,
OUT PVOID pOutPropertyList,
IN DWORD cbOutPropertyListSize,
OUT LPDWORD pcbBytesReturned,
OUT LPDWORD pcbRequired
);
DWORD
WINAPI
ResUtilGetAllProperties(
IN HKEY hkeyClusterKey,
IN const PRESUTIL_PROPERTY_ITEM pPropertyTable,
OUT PVOID pOutPropertyList,
IN DWORD cbOutPropertyListSize,
OUT LPDWORD pcbBytesReturned,
OUT LPDWORD pcbRequired
);
DWORD
WINAPI
ResUtilGetPrivateProperties(
IN HKEY hkeyClusterKey,
OUT PVOID pOutPropertyList,
IN DWORD cbOutPropertyListSize,
OUT LPDWORD pcbBytesReturned,
OUT LPDWORD pcbRequired
);
DWORD
WINAPI
ResUtilGetPropertySize(
IN HKEY hkeyClusterKey,
IN const PRESUTIL_PROPERTY_ITEM pPropertyTableItem,
IN OUT LPDWORD pcbOutPropertyListSize,
IN OUT LPDWORD pnPropertyCount
);
DWORD
WINAPI
ResUtilGetProperty(
IN HKEY hkeyClusterKey,
IN const PRESUTIL_PROPERTY_ITEM pPropertyTableItem,
OUT PVOID * pOutPropertyItem,
IN OUT LPDWORD pcbOutPropertyItemSize
);
DWORD
WINAPI
ResUtilVerifyPropertyTable(
IN const PRESUTIL_PROPERTY_ITEM pPropertyTable,
IN PVOID Reserved,
IN BOOL bAllowUnknownProperties,
IN const PVOID pInPropertyList,
IN DWORD cbInPropertyListSize,
OUT OPTIONAL LPBYTE pOutParams
);
DWORD
WINAPI
ResUtilSetPropertyTable(
IN HKEY hkeyClusterKey,
IN const PRESUTIL_PROPERTY_ITEM pPropertyTable,
IN PVOID Reserved,
IN BOOL bAllowUnknownProperties,
IN const PVOID pInPropertyList,
IN DWORD cbInPropertyListSize,
OUT OPTIONAL LPBYTE pOutParams
);
DWORD
WINAPI
ResUtilSetPropertyTableEx(
IN HKEY hkeyClusterKey,
IN const PRESUTIL_PROPERTY_ITEM pPropertyTable,
IN PVOID Reserved,
IN BOOL bAllowUnknownProperties,
IN const PVOID pInPropertyList,
IN DWORD cbInPropertyListSize,
IN BOOL bForceWrite,
OUT OPTIONAL LPBYTE pOutParams
);
DWORD
WINAPI
ResUtilSetPropertyParameterBlock(
IN HKEY hkeyClusterKey,
IN const PRESUTIL_PROPERTY_ITEM pPropertyTable,
IN PVOID Reserved,
IN const LPBYTE pInParams,
IN const PVOID pInPropertyList,
IN DWORD cbInPropertyListSize,
OUT OPTIONAL LPBYTE pOutParams
);
DWORD
WINAPI
ResUtilSetPropertyParameterBlockEx(
IN HKEY hkeyClusterKey,
IN const PRESUTIL_PROPERTY_ITEM pPropertyTable,
IN PVOID Reserved,
IN const LPBYTE pInParams,
IN const PVOID pInPropertyList,
IN DWORD cbInPropertyListSize,
IN BOOL bForceWrite,
OUT OPTIONAL LPBYTE pOutParams
);
DWORD
WINAPI
ResUtilSetUnknownProperties(
IN HKEY hkeyClusterKey,
IN const PRESUTIL_PROPERTY_ITEM pPropertyTable,
IN const PVOID pInPropertyList,
IN DWORD cbInPropertyListSize
);
DWORD
WINAPI
ResUtilGetPropertiesToParameterBlock(
IN HKEY hkeyClusterKey,
IN const PRESUTIL_PROPERTY_ITEM pPropertyTable,
OUT LPBYTE pOutParams,
IN BOOL bCheckForRequiredProperties,
OUT OPTIONAL LPWSTR * pszNameOfPropInError
);
DWORD
WINAPI
ResUtilPropertyListFromParameterBlock(
IN const PRESUTIL_PROPERTY_ITEM pPropertyTable,
OUT PVOID pOutPropertyList,
IN OUT LPDWORD pcbOutPropertyListSize,
IN const LPBYTE pInParams,
OUT LPDWORD pcbBytesReturned,
OUT LPDWORD pcbRequired
);
DWORD
WINAPI
ResUtilDupParameterBlock(
OUT LPBYTE pOutParams,
IN const LPBYTE pInParams,
IN const PRESUTIL_PROPERTY_ITEM pPropertyTable
);
void
WINAPI
ResUtilFreeParameterBlock(
IN OUT LPBYTE pOutParams,
IN const LPBYTE pInParams,
IN const PRESUTIL_PROPERTY_ITEM pPropertyTable
);
DWORD
WINAPI
ResUtilAddUnknownProperties(
IN HKEY hkeyClusterKey,
IN const PRESUTIL_PROPERTY_ITEM pPropertyTable,
IN OUT PVOID pOutPropertyList,
IN DWORD pcbOutPropertyListSize,
IN OUT LPDWORD pcbBytesReturned,
IN OUT LPDWORD pcbRequired
);
DWORD
WINAPI
ResUtilSetPrivatePropertyList(
IN HKEY hkeyClusterKey,
IN const PVOID pInPropertyList,
IN DWORD cbInPropertyListSize
);
DWORD
WINAPI
ResUtilVerifyPrivatePropertyList(
IN const PVOID pInPropertyList,
IN DWORD cbInPropertyListSize
);
PWSTR
WINAPI
ResUtilDupString(
IN LPCWSTR pszInString
);
DWORD
WINAPI
ResUtilGetBinaryValue(
IN HKEY hkeyClusterKey,
IN LPCWSTR pszValueName,
OUT LPBYTE * ppbOutValue,
OUT DWORD * pcbOutValueSize
);
LPWSTR
WINAPI
ResUtilGetSzValue(
IN HKEY hkeyClusterKey,
IN LPCWSTR pszValueName
);
LPWSTR
WINAPI
ResUtilGetExpandSzValue(
IN HKEY hkeyClusterKey,
IN LPCWSTR pszValueName,
IN BOOL bExpand
);
FORCEINLINE
DWORD
WINAPI
ResUtilGetMultiSzValue(
IN HKEY hkeyClusterKey,
IN LPCWSTR pszValueName,
OUT LPWSTR * ppszOutValue,
OUT LPDWORD pcbOutValueSize
)
{
return ResUtilGetBinaryValue( hkeyClusterKey, pszValueName, (LPBYTE *) ppszOutValue, pcbOutValueSize );
}
DWORD
WINAPI
ResUtilGetDwordValue(
IN HKEY hkeyClusterKey,
IN LPCWSTR pszValueName,
OUT LPDWORD pdwOutValue,
IN DWORD dwDefaultValue OPTIONAL
);
DWORD
WINAPI
ResUtilSetBinaryValue(
IN HKEY hkeyClusterKey,
IN LPCWSTR pszValueName,
IN const LPBYTE pbNewValue,
IN DWORD cbNewValueSize,
IN OUT LPBYTE * ppbOutValue,
IN OUT LPDWORD pcbOutValueSize
);
DWORD
WINAPI
ResUtilSetSzValue(
IN HKEY hkeyClusterKey,
IN LPCWSTR pszValueName,
IN LPCWSTR pszNewValue,
IN OUT LPWSTR * ppszOutString
);
DWORD
WINAPI
ResUtilSetExpandSzValue(
IN HKEY hkeyClusterKey,
IN LPCWSTR pszValueName,
IN LPCWSTR pszNewValue,
IN OUT LPWSTR * ppszOutString
);
DWORD
WINAPI
ResUtilSetMultiSzValue(
IN HKEY hkeyClusterKey,
IN LPCWSTR pszValueName,
IN LPCWSTR pszNewValue,
IN DWORD cbNewValueSize,
IN OUT LPWSTR * ppszOutValue,
IN OUT LPDWORD pcbOutValueSize
);
DWORD
WINAPI
ResUtilSetDwordValue(
IN HKEY hkeyClusterKey,
IN LPCWSTR pszValueName,
IN DWORD dwNewValue,
IN OUT LPDWORD pdwOutValue
);
DWORD
WINAPI
ResUtilGetBinaryProperty(
OUT LPBYTE * ppbOutValue,
OUT LPDWORD pcbOutValueSize,
IN const PCLUSPROP_BINARY pValueStruct,
IN const LPBYTE pbOldValue,
IN DWORD cbOldValueSize,
OUT LPBYTE * ppPropertyList,
OUT LPDWORD pcbPropertyListSize
);
DWORD
WINAPI
ResUtilGetSzProperty(
OUT LPWSTR * ppszOutValue,
IN const PCLUSPROP_SZ pValueStruct,
IN LPCWSTR pszOldValue,
OUT LPBYTE * ppPropertyList,
OUT LPDWORD pcbPropertyListSize
);
DWORD
WINAPI
ResUtilGetMultiSzProperty(
OUT LPWSTR * ppszOutValue,
OUT LPDWORD pcbOutValueSize,
IN const PCLUSPROP_SZ pValueStruct,
IN LPCWSTR pszOldValue,
IN DWORD cbOldValueSize,
OUT LPBYTE * ppPropertyList,
OUT LPDWORD pcbPropertyListSize
);
DWORD
WINAPI
ResUtilGetDwordProperty(
OUT LPDWORD pdwOutValue,
IN const PCLUSPROP_DWORD pValueStruct,
IN DWORD dwOldValue,
IN DWORD dwMinimum,
IN DWORD dwMaximum,
OUT LPBYTE * ppPropertyList,
OUT LPDWORD pcbPropertyListSize
);
LPVOID
WINAPI
ResUtilGetEnvironmentWithNetName(
IN HRESOURCE hResource
);
DWORD
WINAPI
ResUtilFreeEnvironment(
IN LPVOID lpEnvironment
);
LPWSTR
WINAPI
ResUtilExpandEnvironmentStrings(
IN LPCWSTR pszSrc
);
DWORD
WINAPI
ResUtilSetResourceServiceEnvironment(
IN LPCWSTR pszServiceName,
IN HRESOURCE hResource,
IN PLOG_EVENT_ROUTINE pfnLogEvent,
IN RESOURCE_HANDLE hResourceHandle
);
DWORD
WINAPI
ResUtilRemoveResourceServiceEnvironment(
IN LPCWSTR pszServiceName,
IN PLOG_EVENT_ROUTINE pfnLogEvent,
IN RESOURCE_HANDLE hResourceHandle
);
DWORD
WINAPI
ResUtilSetResourceServiceStartParameters(
IN LPCWSTR pszServiceName,
IN SC_HANDLE schSCMHandle,
IN OUT LPSC_HANDLE phService,
IN PLOG_EVENT_ROUTINE pfnLogEvent,
IN RESOURCE_HANDLE hResourceHandle
);
DWORD
WINAPI
ResUtilFindSzProperty(
IN const PVOID pPropertyList,
IN DWORD cbPropertyListSize,
IN LPCWSTR pszPropertyName,
OUT LPWSTR * pszPropertyValue
);
DWORD
WINAPI
ResUtilFindExpandSzProperty(
IN const PVOID pPropertyList,
IN DWORD cbPropertyListSize,
IN LPCWSTR pszPropertyName,
OUT LPWSTR * pszPropertyValue
);
DWORD
WINAPI
ResUtilFindExpandedSzProperty(
IN const PVOID pPropertyList,
IN DWORD cbPropertyListSize,
IN LPCWSTR pszPropertyName,
OUT LPWSTR * pszPropertyValue
);
DWORD
WINAPI
ResUtilFindDwordProperty(
IN const PVOID pPropertyList,
IN DWORD cbPropertyListSize,
IN LPCWSTR pszPropertyName,
OUT LPDWORD pdwPropertyValue
);
DWORD
WINAPI
ResUtilFindBinaryProperty(
IN const PVOID pPropertyList,
IN DWORD cbPropertyListSize,
IN LPCWSTR pszPropertyName,
OUT LPBYTE * pbPropertyValue,
OUT LPDWORD pcbPropertyValueSize
);
DWORD
WINAPI
ResUtilFindMultiSzProperty(
IN const PVOID pPropertyList,
IN DWORD cbPropertyListSize,
IN LPCWSTR pszPropertyName,
OUT LPWSTR * pszPropertyValue,
OUT LPDWORD pcbPropertyValueSize
);
DWORD
WINAPI
ResUtilFindLongProperty(
IN const PVOID pPropertyList,
IN DWORD cbPropertyListSize,
IN LPCWSTR pszPropertyName,
OUT LPLONG plPropertyValueSize
);
//
// Common worker thread routines that allow a pending operation to
// be cancelled with CORRECT synchronization.
//
typedef struct CLUS_WORKER {
HANDLE hThread;
BOOL Terminate;
} CLUS_WORKER, *PCLUS_WORKER;
typedef DWORD (WINAPI *PWORKER_START_ROUTINE)(
PCLUS_WORKER pWorker,
LPVOID lpThreadParameter
);
DWORD
WINAPI
ClusWorkerCreate(
OUT PCLUS_WORKER lpWorker,
IN PWORKER_START_ROUTINE lpStartAddress,
IN PVOID lpParameter
);
BOOL
WINAPI
ClusWorkerCheckTerminate(
IN PCLUS_WORKER lpWorker
);
VOID
WINAPI
ClusWorkerTerminate(
IN PCLUS_WORKER lpWorker
);
//Define enumerate resource callback function. This gets called for each resource enumerated
//by ResUtilEnumResources
typedef DWORD (*LPRESOURCE_CALLBACK)( HRESOURCE, HRESOURCE , PVOID );
typedef DWORD (*LPRESOURCE_CALLBACK_EX)( HCLUSTER, HRESOURCE, HRESOURCE , PVOID );
BOOL
WINAPI
ResUtilResourcesEqual(
IN HRESOURCE hSelf,
IN HRESOURCE hResource
);
BOOL
WINAPI
ResUtilResourceTypesEqual(
IN LPCWSTR lpszResourceTypeName,
IN HRESOURCE hResource
);
BOOL
WINAPI
ResUtilIsResourceClassEqual(
IN PCLUS_RESOURCE_CLASS_INFO prci,
IN HRESOURCE hResource
);
DWORD
WINAPI
ResUtilEnumResources(
IN HRESOURCE hSelf,
IN LPCWSTR lpszResTypeName,
IN LPRESOURCE_CALLBACK pResCallBack,
IN PVOID pParameter
);
DWORD
WINAPI
ResUtilEnumResourcesEx(
IN HCLUSTER hCluster,
IN HRESOURCE hSelf,
IN LPCWSTR lpszResTypeName,
IN LPRESOURCE_CALLBACK_EX pResCallBack,
IN PVOID pParameter
);
HRESOURCE
WINAPI
ResUtilGetResourceDependency(
IN HANDLE hSelf,
IN LPCWSTR lpszResourceType
);
HRESOURCE
WINAPI
ResUtilGetResourceDependencyByName(
IN HCLUSTER hCluster,
IN HANDLE hSelf,
IN LPCWSTR lpszResourceType,
IN BOOL bRecurse
);
HRESOURCE
WINAPI
ResUtilGetResourceDependencyByClass(
IN HCLUSTER hCluster,
IN HANDLE hSelf,
IN PCLUS_RESOURCE_CLASS_INFO prci,
IN BOOL bRecurse
);
HRESOURCE
WINAPI
ResUtilGetResourceNameDependency(
IN LPCWSTR lpszResourceName,
IN LPCWSTR lpszResourceType
);
DWORD
WINAPI
ResUtilGetResourceDependentIPAddressProps(
IN HRESOURCE hResource,
OUT LPWSTR pszAddress,
IN OUT DWORD * pcchAddress,
OUT LPWSTR pszSubnetMask,
IN OUT DWORD * pcchSubnetMask,
OUT LPWSTR pszNetwork,
IN OUT DWORD * pcchNetwork
);
DWORD
WINAPI
ResUtilFindDependentDiskResourceDriveLetter(
IN HCLUSTER hCluster, // handle to cluster
IN HRESOURCE hResource, // handle to resource to query for dependencies
IN LPWSTR pszDriveLetter, // buffer to store drive letter (ex. "X:\0")
IN OUT DWORD * pcchDriveLetter // IN size of the pszDriveLetter buffer, OUT size of buffer required
);
DWORD
WINAPI
ResUtilTerminateServiceProcessFromResDll(
IN DWORD dwServicePid,
IN BOOL bOffline,
OUT PDWORD pdwResourceState,
IN PLOG_EVENT_ROUTINE pfnLogEvent,
IN RESOURCE_HANDLE hResourceHandle
);
DWORD
WINAPI
ResUtilGetPropertyFormats(
IN const PRESUTIL_PROPERTY_ITEM pPropertyTable,
OUT PVOID pOutPropertyFormatList,
IN DWORD cbPropertyFormatListSize,
OUT LPDWORD pcbBytesReturned,
OUT LPDWORD pcbRequired
);
DWORD
WINAPI
ResUtilGetCoreClusterResources(
IN HCLUSTER hCluster
, OUT HRESOURCE * phClusterNameResource
, OUT HRESOURCE * phClusterIPAddressResource
, OUT HRESOURCE * phClusterQuorumResource
);
DWORD
WINAPI
ResUtilGetResourceName(
IN HRESOURCE hResource
, OUT WCHAR * pszResourceName
, IN OUT DWORD * pcchResourceName
);
#ifdef __cplusplus
}
#endif
#endif // ifdef _RESAPI_DEFINES_