JD2022-TU1/main/extern/Camcam/PlatformSDK/Include/Resapi.h

1778 lines
44 KiB
C

/*++
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.
//
#define ClusterResourceCannotComeOnlineOnThisNode ( CLUSTER_RESOURCE_STATE ) ( ClusterResourcePending - 1 )
#define ClusterResourceCannotComeOnlineOnAnyNode ( CLUSTER_RESOURCE_STATE ) ( ClusterResourcePending - 2 )
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;
} DUMMYUNIONNAME;
} 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;
typedef struct RESUTIL_FILETIME_DATA {
FILETIME Default;
FILETIME Minimum;
FILETIME Maximum;
} RESUTIL_FILETIME_DATA, *PRESUTIL_FILETIME_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;
PRESUTIL_FILETIME_DATA FileTimeData;
} DUMMYUNIONNAME;
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
);
typedef DWORD
(WINAPI * PRESUTIL_START_RESOURCE_SERVICE)(
IN LPCWSTR pszServiceName,
OUT LPSC_HANDLE phServiceHandle
);
DWORD
WINAPI
ResUtilVerifyResourceService(
IN LPCWSTR pszServiceName
);
typedef DWORD
(WINAPI * PRESUTIL_VERIFY_RESOURCE_SERVICE)(
IN LPCWSTR pszServiceName
);
DWORD
WINAPI
ResUtilStopResourceService(
IN LPCWSTR pszServiceName
);
typedef DWORD
(WINAPI * PRESUTIL_STOP_RESOURCE_SERVICE)(
IN LPCWSTR pszServiceName
);
DWORD
WINAPI
ResUtilVerifyService(
IN SC_HANDLE hServiceHandle
);
typedef DWORD
(WINAPI * PRESUTIL_VERIFY_SERVICE)(
IN SC_HANDLE hServiceHandle
);
DWORD
WINAPI
ResUtilStopService(
IN SC_HANDLE hServiceHandle
);
typedef DWORD
(WINAPI * PRESUTIL_STOP_SERVICE)(
IN SC_HANDLE hServiceHandle
);
DWORD
WINAPI
ResUtilCreateDirectoryTree(
IN LPCWSTR pszPath
);
typedef DWORD
(WINAPI * PRESUTIL_CREATE_DIRECTORY_TREE)(
IN LPCWSTR pszPath
);
BOOL
WINAPI
ResUtilIsPathValid(
IN LPCWSTR pszPath
);
typedef BOOL
(WINAPI * PRESUTIL_IS_PATH_VALID)(
IN LPCWSTR pszPath
);
DWORD
WINAPI
ResUtilEnumProperties(
__in const PRESUTIL_PROPERTY_ITEM pPropertyTable,
__out_bcount_part(cbOutPropertiesSize, *pcbBytesReturned) LPWSTR pszOutProperties,
__in DWORD cbOutPropertiesSize,
__out LPDWORD pcbBytesReturned,
__out LPDWORD pcbRequired
);
typedef DWORD
(WINAPI * PRESUTIL_ENUM_PROPERTIES)(
__in const PRESUTIL_PROPERTY_ITEM pPropertyTable,
__out_bcount_part(cbOutPropertiesSize, *pcbBytesReturned) LPWSTR pszOutProperties,
__in DWORD cbOutPropertiesSize,
__out LPDWORD pcbBytesReturned,
__out LPDWORD pcbRequired
);
DWORD
WINAPI
ResUtilEnumPrivateProperties(
__in HKEY hkeyClusterKey,
__out_bcount_part(cbOutPropertiesSize, *pcbBytesReturned) LPWSTR pszOutProperties,
__in DWORD cbOutPropertiesSize,
__out LPDWORD pcbBytesReturned,
__out LPDWORD pcbRequired
);
typedef DWORD
(WINAPI * PRESUTIL_ENUM_PRIVATE_PROPERTIES)(
__in HKEY hkeyClusterKey,
__out_bcount_part(cbOutPropertiesSize, *pcbBytesReturned) LPWSTR pszOutProperties,
__in DWORD cbOutPropertiesSize,
__out LPDWORD pcbBytesReturned,
__out LPDWORD pcbRequired
);
DWORD
WINAPI
ResUtilGetProperties(
__in HKEY hkeyClusterKey,
__in const PRESUTIL_PROPERTY_ITEM pPropertyTable,
__out_bcount_part(cbOutPropertyListSize, *pcbBytesReturned) PVOID pOutPropertyList,
__in DWORD cbOutPropertyListSize,
__out LPDWORD pcbBytesReturned,
__out LPDWORD pcbRequired
);
typedef DWORD
(WINAPI * PRESUTIL_GET_PROPERTIES)(
__in HKEY hkeyClusterKey,
__in const PRESUTIL_PROPERTY_ITEM pPropertyTable,
__out_bcount_part(cbOutPropertyListSize, *pcbBytesReturned) PVOID pOutPropertyList,
__in DWORD cbOutPropertyListSize,
__out LPDWORD pcbBytesReturned,
__out LPDWORD pcbRequired
);
DWORD
WINAPI
ResUtilGetAllProperties(
__in HKEY hkeyClusterKey,
__in const PRESUTIL_PROPERTY_ITEM pPropertyTable,
__out_bcount_part(cbOutPropertyListSize, *pcbBytesReturned) PVOID pOutPropertyList,
__in DWORD cbOutPropertyListSize,
__out LPDWORD pcbBytesReturned,
__out LPDWORD pcbRequired
);
typedef DWORD
(WINAPI * PRESUTIL_GET_ALL_PROPERTIES)(
__in HKEY hkeyClusterKey,
__in const PRESUTIL_PROPERTY_ITEM pPropertyTable,
__out_bcount_part(cbOutPropertyListSize, *pcbBytesReturned) PVOID pOutPropertyList,
__in DWORD cbOutPropertyListSize,
__out LPDWORD pcbBytesReturned,
__out LPDWORD pcbRequired
);
DWORD
WINAPI
ResUtilGetPrivateProperties(
__in HKEY hkeyClusterKey,
__out_bcount_part(cbOutPropertyListSize, *pcbBytesReturned) PVOID pOutPropertyList,
__in DWORD cbOutPropertyListSize,
__out LPDWORD pcbBytesReturned,
__out LPDWORD pcbRequired
);
typedef DWORD
(WINAPI * PRESUTIL_GET_PRIVATE_PROPERTIES)(
__in HKEY hkeyClusterKey,
__out_bcount_part(cbOutPropertyListSize, *pcbBytesReturned) 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
);
typedef DWORD
(WINAPI * PRESUTIL_GET_PROPERTY_SIZE)(
IN HKEY hkeyClusterKey,
IN const PRESUTIL_PROPERTY_ITEM pPropertyTableItem,
IN OUT LPDWORD pcbOutPropertyListSize,
IN OUT LPDWORD pnPropertyCount
);
__success( return == ERROR_SUCCESS )
DWORD
WINAPI
ResUtilGetProperty(
__in HKEY hkeyClusterKey,
__in const PRESUTIL_PROPERTY_ITEM pPropertyTableItem,
__deref_inout_bcount_part(*pcbOutPropertyItemSize, *pcbOutPropertyItemSize) PVOID *pOutPropertyItem,
__inout LPDWORD pcbOutPropertyItemSize
);
typedef
__success( return == ERROR_SUCCESS )
DWORD
(WINAPI * PRESUTIL_GET_PROPERTY)(
__in HKEY hkeyClusterKey,
__in const PRESUTIL_PROPERTY_ITEM pPropertyTableItem,
__deref_inout_bcount_part(*pcbOutPropertyItemSize, *pcbOutPropertyItemSize) PVOID *pOutPropertyItem,
__inout LPDWORD pcbOutPropertyItemSize
);
DWORD
WINAPI
ResUtilVerifyPropertyTable(
__in const PRESUTIL_PROPERTY_ITEM pPropertyTable,
__reserved PVOID Reserved,
__in BOOL bAllowUnknownProperties,
__in_bcount(cbInPropertyListSize) const PVOID pInPropertyList,
__in DWORD cbInPropertyListSize,
__out_opt LPBYTE pOutParams
);
typedef DWORD
(WINAPI * PRESUTIL_VERIFY_PROPERTY_TABLE)(
__in const PRESUTIL_PROPERTY_ITEM pPropertyTable,
__reserved PVOID Reserved,
__in BOOL bAllowUnknownProperties,
__in_bcount(cbInPropertyListSize) const PVOID pInPropertyList,
__in DWORD cbInPropertyListSize,
__out_opt LPBYTE pOutParams
);
DWORD
WINAPI
ResUtilSetPropertyTable(
__in HKEY hkeyClusterKey,
__in const PRESUTIL_PROPERTY_ITEM pPropertyTable,
__reserved PVOID Reserved,
__in BOOL bAllowUnknownProperties,
__in_bcount(cbInPropertyListSize) const PVOID pInPropertyList,
__in DWORD cbInPropertyListSize,
__out_opt LPBYTE pOutParams
);
typedef DWORD
(WINAPI * PRESUTIL_SET_PROPERTY_TABLE)(
__in HKEY hkeyClusterKey,
__in const PRESUTIL_PROPERTY_ITEM pPropertyTable,
__reserved PVOID Reserved,
__in BOOL bAllowUnknownProperties,
__in_bcount(cbInPropertyListSize) const PVOID pInPropertyList,
__in DWORD cbInPropertyListSize,
__out_opt 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
);
typedef DWORD
(WINAPI * PRESUTIL_SET_PROPERTY_TABLE_EX)(
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
);
typedef DWORD
(WINAPI * PRESUTIL_SET_PROPERTY_PARAMETER_BLOCK)(
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
);
typedef DWORD
(WINAPI * PRESUTIL_SET_PROPERTY_PARAMETER_BLOCK_EX)(
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_bcount(cbInPropertyListSize) const PVOID pInPropertyList,
__in DWORD cbInPropertyListSize
);
typedef DWORD
(WINAPI * PRESUTIL_SET_UNKNOWN_PROPERTIES)(
__in HKEY hkeyClusterKey,
__in const PRESUTIL_PROPERTY_ITEM pPropertyTable,
__in_bcount(cbInPropertyListSize) const PVOID pInPropertyList,
__in DWORD cbInPropertyListSize
);
DWORD
WINAPI
ResUtilGetPropertiesToParameterBlock(
__in HKEY hkeyClusterKey,
__in const PRESUTIL_PROPERTY_ITEM pPropertyTable,
__out LPBYTE pOutParams,
__in BOOL bCheckForRequiredProperties,
__deref_out_opt LPWSTR * pszNameOfPropInError
);
typedef DWORD
(WINAPI * PRESUTIL_GET_PROPERTIES_TO_PARAMETER_BLOCK)(
IN HKEY hkeyClusterKey,
IN const PRESUTIL_PROPERTY_ITEM pPropertyTable,
OUT LPBYTE pOutParams,
IN BOOL bCheckForRequiredProperties,
OUT OPTIONAL LPWSTR * pszNameOfPropInError
);
typedef DWORD
(WINAPI * PRESUTIL_GET_PROPERTIES_TO_PARAMETER_BLOCK)(
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_bcount_part_opt(*pcbOutPropertyListSize, *pcbBytesReturned ) PVOID pOutPropertyList,
__inout LPDWORD pcbOutPropertyListSize,
__in const LPBYTE pInParams,
__out LPDWORD pcbBytesReturned,
__out LPDWORD pcbRequired
);
typedef DWORD
(WINAPI * PRESUTIL_PROPERTY_LIST_FROM_PARAMETER_BLOCK)(
__in const PRESUTIL_PROPERTY_ITEM pPropertyTable,
__out_bcount_part_opt(*pcbOutPropertyListSize, *pcbBytesReturned ) PVOID pOutPropertyList,
__inout 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
);
typedef DWORD
(WINAPI * PRESUTIL_DUP_PARAMETER_BLOCK)(
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
);
typedef void
(WINAPI * PRESUTIL_FREE_PARAMETER_BLOCK)(
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
);
typedef DWORD
(WINAPI * PRESUTIL_ADD_UNKNOWN_PROPERTIES)(
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_bcount(cbInPropertyListSize) const PVOID pInPropertyList,
__in DWORD cbInPropertyListSize
);
typedef DWORD
(WINAPI * PRESUTIL_SET_PRIVATE_PROPERTY_LIST)(
__in HKEY hkeyClusterKey,
__in_bcount(cbInPropertyListSize) const PVOID pInPropertyList,
__in DWORD cbInPropertyListSize
);
DWORD
WINAPI
ResUtilVerifyPrivatePropertyList(
__in_bcount(cbInPropertyListSize) const PVOID pInPropertyList,
__in DWORD cbInPropertyListSize
);
typedef DWORD
(WINAPI * PRESUTIL_VERIFY_PRIVATE_PROPERTY_LIST)(
__in_bcount(cbInPropertyListSize) const PVOID pInPropertyList,
__in DWORD cbInPropertyListSize
);
PWSTR
WINAPI
ResUtilDupString(
IN LPCWSTR pszInString
);
typedef PWSTR
(WINAPI * PRESUTIL_DUP_STRING)(
IN LPCWSTR pszInString
);
DWORD
WINAPI
ResUtilGetBinaryValue(
__in HKEY hkeyClusterKey,
__in LPCWSTR pszValueName,
__deref_out_bcount_full_opt(*pcbOutValueSize) LPBYTE *ppbOutValue,
__out LPDWORD pcbOutValueSize
);
typedef DWORD
(WINAPI * PRESUTIL_GET_BINARY_VALUE)(
__in HKEY hkeyClusterKey,
__in LPCWSTR pszValueName,
__deref_out_bcount_full_opt(*pcbOutValueSize) LPBYTE *ppbOutValue,
__out LPDWORD pcbOutValueSize
);
LPWSTR
WINAPI
ResUtilGetSzValue(
IN HKEY hkeyClusterKey,
IN LPCWSTR pszValueName
);
typedef LPWSTR
(WINAPI * PRESUTIL_GET_SZ_VALUE)(
IN HKEY hkeyClusterKey,
IN LPCWSTR pszValueName
);
LPWSTR
WINAPI
ResUtilGetExpandSzValue(
IN HKEY hkeyClusterKey,
IN LPCWSTR pszValueName,
IN BOOL bExpand
);
typedef LPWSTR
(WINAPI * PRESUTIL_GET_EXPAND_SZ_VALUE)(
IN HKEY hkeyClusterKey,
IN LPCWSTR pszValueName,
IN BOOL bExpand
);
FORCEINLINE
DWORD
WINAPI_INLINE
ResUtilGetMultiSzValue(
__in HKEY hkeyClusterKey,
__in LPCWSTR pszValueName,
__deref_out_bcount_full_opt(*pcbOutValueSize) 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
);
typedef DWORD
(WINAPI * PRESUTIL_GET_DWORD_VALUE)(
__in HKEY hkeyClusterKey,
__in LPCWSTR pszValueName,
__out LPDWORD pdwOutValue,
__in DWORD dwDefaultValue
);
DWORD
WINAPI
ResUtilGetQwordValue(
__in HKEY hkeyClusterKey,
__in LPCWSTR pszValueName,
__out PULONGLONG pqwOutValue,
__in ULONGLONG qwDefaultValue
);
typedef DWORD
(WINAPI * PRESUTIL_GET_QWORD_VALUE)(
__in HKEY hkeyClusterKey,
__in LPCWSTR pszValueName,
__out PULONGLONG pqwOutValue,
__in ULONGLONG qwDefaultValue
);
DWORD
WINAPI
ResUtilSetBinaryValue(
__in HKEY hkeyClusterKey,
__in LPCWSTR pszValueName,
__in_bcount(cbNewValueSize) const LPBYTE pbNewValue,
__in DWORD cbNewValueSize,
__deref_opt_inout_bcount_full(*pcbOutValueSize) LPBYTE *ppbOutValue,
__inout LPDWORD pcbOutValueSize
);
typedef DWORD
(WINAPI * PRESUTIL_SET_BINARY_VALUE)(
__in HKEY hkeyClusterKey,
__in LPCWSTR pszValueName,
__in_bcount(cbNewValueSize) const LPBYTE pbNewValue,
__in DWORD cbNewValueSize,
__deref_opt_inout_bcount_full(*pcbOutValueSize) LPBYTE *ppbOutValue,
__inout LPDWORD pcbOutValueSize
);
DWORD
WINAPI
ResUtilSetSzValue(
__in HKEY hkeyClusterKey,
__in LPCWSTR pszValueName,
__in LPCWSTR pszNewValue,
__deref_opt_inout LPWSTR *ppszOutString
);
typedef DWORD
(WINAPI * PRESUTIL_SET_SZ_VALUE)(
__in HKEY hkeyClusterKey,
__in LPCWSTR pszValueName,
__in LPCWSTR pszNewValue,
__deref_opt_inout LPWSTR *ppszOutString
);
DWORD
WINAPI
ResUtilSetExpandSzValue(
__in HKEY hkeyClusterKey,
__in LPCWSTR pszValueName,
__in LPCWSTR pszNewValue,
__inout_opt LPWSTR *ppszOutString
);
typedef DWORD
(WINAPI * PRESUTIL_SET_EXPAND_SZ_VALUE)(
__in HKEY hkeyClusterKey,
__in LPCWSTR pszValueName,
__in LPCWSTR pszNewValue,
__inout_opt LPWSTR *ppszOutString
);
DWORD
WINAPI
ResUtilSetMultiSzValue(
__in HKEY hkeyClusterKey,
__in LPCWSTR pszValueName,
__in_bcount(cbNewValueSize) LPCWSTR pszNewValue,
__in DWORD cbNewValueSize,
__deref_opt_out_bcount_full(*pcbOutValueSize) LPWSTR *ppszOutValue,
__inout_opt LPDWORD pcbOutValueSize
);
typedef DWORD
(WINAPI * PRESUTIL_SET_MULTI_SZ_VALUE)(
__in HKEY hkeyClusterKey,
__in LPCWSTR pszValueName,
__in_bcount(cbNewValueSize) LPCWSTR pszNewValue,
__in DWORD cbNewValueSize,
__deref_opt_out_bcount_full(*pcbOutValueSize) LPWSTR *ppszOutValue,
__inout_opt LPDWORD pcbOutValueSize
);
DWORD
WINAPI
ResUtilSetDwordValue(
IN HKEY hkeyClusterKey,
IN LPCWSTR pszValueName,
IN DWORD dwNewValue,
IN OUT LPDWORD pdwOutValue
);
typedef DWORD
(WINAPI * PRESUTIL_SET_DWORD_VALUE)(
IN HKEY hkeyClusterKey,
IN LPCWSTR pszValueName,
IN DWORD dwNewValue,
IN OUT LPDWORD pdwOutValue
);
DWORD
WINAPI
ResUtilSetQwordValue(
__in HKEY hkeyClusterKey,
__in LPCWSTR pszValueName,
__in ULONGLONG qwNewValue,
__inout_opt PULONGLONG pqwOutValue
);
typedef DWORD
(WINAPI * PRESUTIL_SET_QWORD_VALUE)(
__in HKEY hkeyClusterKey,
__in LPCWSTR pszValueName,
__in ULONGLONG qwNewValue,
__inout_opt PULONGLONG pqwOutValue
);
DWORD
WINAPI
ResUtilGetBinaryProperty(
__deref_out_bcount(*pcbOutValueSize) LPBYTE *ppbOutValue,
__out LPDWORD pcbOutValueSize,
__in const PCLUSPROP_BINARY pValueStruct,
__in_bcount_opt( cbOldValueSize ) const LPBYTE pbOldValue,
__in DWORD cbOldValueSize,
__deref_inout_bcount(*pcbPropertyListSize) LPBYTE *ppPropertyList,
__inout LPDWORD pcbPropertyListSize
);
typedef DWORD
(WINAPI * PRESUTIL_GET_BINARY_PROPERTY)(
__deref_out_bcount(*pcbOutValueSize) LPBYTE *ppbOutValue,
__out LPDWORD pcbOutValueSize,
__in const PCLUSPROP_BINARY pValueStruct,
__in_bcount_opt( cbOldValueSize ) const LPBYTE pbOldValue,
__in DWORD cbOldValueSize,
__deref_inout_bcount(*pcbPropertyListSize) LPBYTE *ppPropertyList,
__inout LPDWORD pcbPropertyListSize
);
DWORD
WINAPI
ResUtilGetSzProperty(
__deref_out LPWSTR *ppszOutValue,
__in const PCLUSPROP_SZ pValueStruct,
__in_opt LPCWSTR pszOldValue,
__deref_inout_bcount(*pcbPropertyListSize) LPBYTE *ppPropertyList,
__inout LPDWORD pcbPropertyListSize
);
typedef DWORD
(WINAPI * PRESUTIL_GET_SZ_PROPERTY)(
__deref_out LPWSTR *ppszOutValue,
__in const PCLUSPROP_SZ pValueStruct,
__in_opt LPCWSTR pszOldValue,
__deref_inout_bcount(*pcbPropertyListSize) LPBYTE *ppPropertyList,
__inout LPDWORD pcbPropertyListSize
);
DWORD
WINAPI
ResUtilGetMultiSzProperty(
__deref_out_bcount(*pcbOutValueSize) LPWSTR *ppszOutValue,
__out LPDWORD pcbOutValueSize,
__in const PCLUSPROP_SZ pValueStruct,
__in_bcount_opt(cbOldValueSize) LPCWSTR pszOldValue,
__in DWORD cbOldValueSize,
__deref_inout_bcount(*pcbPropertyListSize) LPBYTE *ppPropertyList,
__inout LPDWORD pcbPropertyListSize
);
typedef DWORD
(WINAPI * PRESUTIL_GET_MULTI_SZ_PROPERTY)(
__deref_out_bcount(*pcbOutValueSize) LPWSTR *ppszOutValue,
__out LPDWORD pcbOutValueSize,
__in const PCLUSPROP_SZ pValueStruct,
__in_bcount_opt(cbOldValueSize) LPCWSTR pszOldValue,
__in DWORD cbOldValueSize,
__deref_inout_bcount(*pcbPropertyListSize) LPBYTE *ppPropertyList,
__inout 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
);
typedef DWORD
(WINAPI * PRESUTIL_GET_DWORD_PROPERTY)(
OUT LPDWORD pdwOutValue,
IN const PCLUSPROP_DWORD pValueStruct,
IN DWORD dwOldValue,
IN DWORD dwMinimum,
IN DWORD dwMaximum,
OUT LPBYTE * ppPropertyList,
OUT LPDWORD pcbPropertyListSize
);
DWORD
WINAPI
ResUtilGetLongProperty(
OUT LPLONG plOutValue,
IN const PCLUSPROP_LONG pValueStruct,
IN LONG lOldValue,
IN LONG lMinimum,
IN LONG lMaximum,
OUT LPBYTE * ppPropertyList,
OUT LPDWORD pcbPropertyListSize
);
typedef DWORD
(WINAPI * PRESUTIL_GET_LONG_PROPERTY)(
OUT LPLONG plOutValue,
IN const PCLUSPROP_LONG pValueStruct,
IN LONG lOldValue,
IN LONG lMinimum,
IN LONG lMaximum,
OUT LPBYTE * ppPropertyList,
OUT LPDWORD pcbPropertyListSize
);
DWORD
WINAPI
ResUtilGetFileTimeProperty(
OUT LPFILETIME pftOutValue,
IN const PCLUSPROP_FILETIME pValueStruct,
IN FILETIME ftOldValue,
IN FILETIME ftMinimum,
IN FILETIME ftMaximum,
OUT LPBYTE * ppPropertyList,
OUT LPDWORD pcbPropertyListSize
);
typedef DWORD
(WINAPI * PRESUTIL_GET_FILETIME_PROPERTY)(
OUT LPFILETIME pftOutValue,
IN const PCLUSPROP_FILETIME pValueStruct,
IN FILETIME ftOldValue,
IN FILETIME ftMinimum,
IN FILETIME ftMaximum,
OUT LPBYTE * ppPropertyList,
OUT LPDWORD pcbPropertyListSize
);
LPVOID
WINAPI
ResUtilGetEnvironmentWithNetName(
__in HRESOURCE hResource
);
typedef LPVOID
(WINAPI * PRESUTIL_GET_ENVIRONMENT_WITH_NET_NAME)(
__in HRESOURCE hResource
);
DWORD
WINAPI
ResUtilFreeEnvironment(
IN LPVOID lpEnvironment
);
typedef DWORD
(WINAPI * PRESUTIL_FREE_ENVIRONMENT)(
IN LPVOID lpEnvironment
);
LPWSTR
WINAPI
ResUtilExpandEnvironmentStrings(
IN LPCWSTR pszSrc
);
typedef LPWSTR
(WINAPI * PRESUTIL_EXPAND_ENVIRONMENT_STRINGS)(
IN LPCWSTR pszSrc
);
DWORD
WINAPI
ResUtilSetResourceServiceEnvironment(
IN LPCWSTR pszServiceName,
IN HRESOURCE hResource,
IN PLOG_EVENT_ROUTINE pfnLogEvent,
IN RESOURCE_HANDLE hResourceHandle
);
typedef DWORD
(WINAPI * PRESUTIL_SET_RESOURCE_SERVICE_ENVIRONMENT)(
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
);
typedef DWORD
(WINAPI * PRESUTIL_REMOVE_RESOURCE_SERVICE_ENVIRONMENT)(
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
);
typedef DWORD
(WINAPI * PRESUTIL_SET_RESOURCE_SERVICE_START_PARAMETERS)(
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_bcount(cbPropertyListSize) const PVOID pPropertyList,
__in DWORD cbPropertyListSize,
__in LPCWSTR pszPropertyName,
__deref_opt_out LPWSTR *pszPropertyValue
);
typedef DWORD
(WINAPI * PRESUTIL_FIND_SZ_PROPERTY)(
__in_bcount(cbPropertyListSize) const PVOID pPropertyList,
__in DWORD cbPropertyListSize,
__in LPCWSTR pszPropertyName,
__deref_opt_out LPWSTR *pszPropertyValue
);
DWORD
WINAPI
ResUtilFindExpandSzProperty(
__in_bcount(cbPropertyListSize) const PVOID pPropertyList,
__in DWORD cbPropertyListSize,
__in LPCWSTR pszPropertyName,
__deref_opt_out LPWSTR *pszPropertyValue
);
typedef DWORD
(WINAPI * PRESUTIL_FIND_EXPAND_SZ_PROPERTY)(
__in_bcount(cbPropertyListSize) const PVOID pPropertyList,
__in DWORD cbPropertyListSize,
__in LPCWSTR pszPropertyName,
__deref_opt_out LPWSTR *pszPropertyValue
);
DWORD
WINAPI
ResUtilFindExpandedSzProperty(
__in_bcount(cbPropertyListSize) const PVOID pPropertyList,
__in DWORD cbPropertyListSize,
__in LPCWSTR pszPropertyName,
__deref_opt_out LPWSTR *pszPropertyValue
);
typedef DWORD
(WINAPI * PRESUTIL_FIND_EXPANDED_SZ_PROPERTY)(
__in_bcount(cbPropertyListSize) const PVOID pPropertyList,
__in DWORD cbPropertyListSize,
__in LPCWSTR pszPropertyName,
__deref_opt_out LPWSTR *pszPropertyValue
);
DWORD
WINAPI
ResUtilFindDwordProperty(
__in_bcount(cbPropertyListSize) const PVOID pPropertyList,
__in DWORD cbPropertyListSize,
__in LPCWSTR pszPropertyName,
__out LPDWORD pdwPropertyValue
);
typedef DWORD
(WINAPI * PRESUTIL_FIND_DWORD_PROPERTY)(
__in_bcount(cbPropertyListSize) const PVOID pPropertyList,
__in DWORD cbPropertyListSize,
__in LPCWSTR pszPropertyName,
__out LPDWORD pdwPropertyValue
);
DWORD
WINAPI
ResUtilFindBinaryProperty(
__in_bcount(cbPropertyListSize) const PVOID pPropertyList,
__in DWORD cbPropertyListSize,
__in LPCWSTR pszPropertyName,
__deref_opt_out_bcount_full(*pcbPropertyValueSize) LPBYTE *pbPropertyValue,
__out_opt LPDWORD pcbPropertyValueSize
);
typedef DWORD
(WINAPI * PRESUTIL_FIND_BINARY_PROPERTY)(
__in_bcount(cbPropertyListSize) const PVOID pPropertyList,
__in DWORD cbPropertyListSize,
__in LPCWSTR pszPropertyName,
__deref_opt_out_bcount_full(*pcbPropertyValueSize) LPBYTE *pbPropertyValue,
__out_opt LPDWORD pcbPropertyValueSize
);
DWORD
WINAPI
ResUtilFindMultiSzProperty(
__in_bcount(cbPropertyListSize) const PVOID pPropertyList,
__in DWORD cbPropertyListSize,
__in LPCWSTR pszPropertyName,
__deref_out_bcount_full(*pcbPropertyValueSize) LPWSTR *pszPropertyValue,
__out LPDWORD pcbPropertyValueSize
);
typedef DWORD
(WINAPI * PRESUTIL_FIND_MULTI_SZ_PROPERTY)(
__in_bcount(cbPropertyListSize) const PVOID pPropertyList,
__in DWORD cbPropertyListSize,
__in LPCWSTR pszPropertyName,
__deref_out_bcount_full(*pcbPropertyValueSize) LPWSTR *pszPropertyValue,
__out LPDWORD pcbPropertyValueSize
);
DWORD
WINAPI
ResUtilFindLongProperty(
__in_bcount(cbPropertyListSize) const PVOID pPropertyList,
__in DWORD cbPropertyListSize,
__in LPCWSTR pszPropertyName,
__out LPLONG plPropertyValue
);
typedef DWORD
(WINAPI * PRESUTIL_FIND_LONG_PROPERTY)(
__in_bcount(cbPropertyListSize) const PVOID pPropertyList,
__in DWORD cbPropertyListSize,
__in LPCWSTR pszPropertyName,
__out LPLONG plPropertyValue
);
DWORD
WINAPI
ResUtilFindFileTimeProperty(
__in_bcount(cbPropertyListSize) const PVOID pPropertyList,
__in DWORD cbPropertyListSize,
__in LPCWSTR pszPropertyName,
__out LPFILETIME pftPropertyValue
);
typedef DWORD
(WINAPI * PRESUTIL_FIND_FILETIME_PROPERTY)(
__in_bcount(cbPropertyListSize) const PVOID pPropertyList,
__in DWORD cbPropertyListSize,
__in LPCWSTR pszPropertyName,
__out LPFILETIME pftPropertyValue
);
//
// 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
);
typedef DWORD
(WINAPI * PCLUSAPI_CLUS_WORKER_CREATE)(
OUT PCLUS_WORKER lpWorker,
IN PWORKER_START_ROUTINE lpStartAddress,
IN PVOID lpParameter
);
BOOL
WINAPI
ClusWorkerCheckTerminate(
IN PCLUS_WORKER lpWorker
);
typedef BOOL
(WINAPI * PCLUSAPIClusWorkerCheckTerminate)(
IN PCLUS_WORKER lpWorker
);
VOID
WINAPI
ClusWorkerTerminate(
__in PCLUS_WORKER lpWorker
);
typedef VOID
(WINAPI * PCLUSAPI_CLUS_WORKER_TERMINATE)(
__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
);
typedef BOOL
(WINAPI * PRESUTIL_RESOURCES_EQUAL)(
IN HRESOURCE hSelf,
IN HRESOURCE hResource
);
BOOL
WINAPI
ResUtilResourceTypesEqual(
IN LPCWSTR lpszResourceTypeName,
IN HRESOURCE hResource
);
typedef BOOL
(WINAPI * PRESUTIL_RESOURCE_TYPES_EQUAL)(
IN LPCWSTR lpszResourceTypeName,
IN HRESOURCE hResource
);
BOOL
WINAPI
ResUtilIsResourceClassEqual(
IN PCLUS_RESOURCE_CLASS_INFO prci,
IN HRESOURCE hResource
);
typedef BOOL
(WINAPI * PRESUTIL_IS_RESOURCE_CLASS_EQUAL)(
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
);
typedef DWORD
(WINAPI * PRESUTIL_ENUM_RESOURCES)(
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
);
typedef DWORD
(WINAPI * PRESUTIL_ENUM_RESOURCES_EX)(
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
);
typedef HRESOURCE
(WINAPI * PRESUTIL_GET_RESOURCE_DEPENDENCY)(
IN HANDLE hSelf,
IN LPCWSTR lpszResourceType
);
HRESOURCE
WINAPI
ResUtilGetResourceDependencyByName(
IN HCLUSTER hCluster,
IN HANDLE hSelf,
IN LPCWSTR lpszResourceType,
IN BOOL bRecurse
);
typedef HRESOURCE
(WINAPI * PRESUTIL_GET_RESOURCE_DEPENDENCY_BY_NAME)(
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
);
typedef HRESOURCE
(WINAPI * PRESUTIL_GET_RESOURCE_DEPENDENCY_BY_CLASS)(
IN HCLUSTER hCluster,
IN HANDLE hSelf,
IN PCLUS_RESOURCE_CLASS_INFO prci,
IN BOOL bRecurse
);
HRESOURCE
WINAPI
ResUtilGetResourceNameDependency(
IN LPCWSTR lpszResourceName,
IN LPCWSTR lpszResourceType
);
typedef HRESOURCE
(WINAPI * PRESUTIL_GET_RESOURCE_NAME_DEPENDENCY)(
IN LPCWSTR lpszResourceName,
IN LPCWSTR lpszResourceType
);
__success( return == ERROR_SUCCESS )
DWORD
WINAPI
ResUtilGetResourceDependentIPAddressProps(
__in HRESOURCE hResource,
__out_ecount_part(*pcchAddress, *pcchAddress) LPWSTR pszAddress,
__inout DWORD *pcchAddress,
__out_ecount_part(*pcchSubnetMask, *pcchSubnetMask) LPWSTR pszSubnetMask,
__inout DWORD *pcchSubnetMask,
__out_ecount_part(*pcchNetwork, *pcchNetwork) LPWSTR pszNetwork,
__inout DWORD *pcch_Network
);
typedef
__success( return == ERROR_SUCCESS )
DWORD
(WINAPI * PRESUTIL_GET_RESOURCE_DEPENDENTIP_ADDRESS_PROPS)(
__in HRESOURCE hResource,
__out_ecount_part(*pcchAddress, *pcchAddress) LPWSTR pszAddress,
__inout DWORD *pcchAddress,
__out_ecount_part(*pcchSubnetMask, *pcchSubnetMask) LPWSTR pszSubnetMask,
__inout DWORD *pcchSubnetMask,
__out_ecount_part(*pcchNetwork, *pcchNetwork) LPWSTR pszNetwork,
__inout DWORD *pcchNetwork
);
__success( return == ERROR_SUCCESS )
DWORD
WINAPI
ResUtilFindDependentDiskResourceDriveLetter(
__in HCLUSTER hCluster, // handle to cluster
__in HRESOURCE hResource, // handle to resource to query for dependencies
__out_ecount_part(*pcchDriveLetter, *pcchDriveLetter) LPWSTR pszDriveLetter, // buffer to store drive letter (ex. "X:\0")
__inout DWORD * pcchDriveLetter // IN size of the pszDriveLetter buffer, OUT size of buffer required
);
typedef
__success( return == ERROR_SUCCESS ) DWORD
(WINAPI * PRESUTIL_FIND_DEPENDENT_DISK_RESOURCE_DRIVE_LETTER)(
__in HCLUSTER hCluster, // handle to cluster
__in HRESOURCE hResource, // handle to resource to query for dependencies
__out_ecount_part(*pcchDriveLetter, *pcchDriveLetter) LPWSTR pszDriveLetter, // buffer to store drive letter (ex. "X:\0")
__inout 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
);
typedef DWORD
(WINAPI * PRESUTIL_TERMINATE_SERVICE_PROCESS_FROM_RES_DLL)(
__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_bcount_part(cbPropertyFormatListSize, *pcbBytesReturned) PVOID pOutPropertyFormatList,
__in DWORD cbPropertyFormatListSize,
__out LPDWORD pcbBytesReturned,
__out LPDWORD pcbRequired
);
typedef DWORD
(WINAPI * PRESUTIL_GET_PROPERTY_FORMATS)(
__in const PRESUTIL_PROPERTY_ITEM pPropertyTable,
__out_bcount_part(cbPropertyFormatListSize, *pcbBytesReturned) 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
);
typedef DWORD
(WINAPI * PRESUTIL_GET_CORE_CLUSTER_RESOURCES)(
__in HCLUSTER hCluster,
__out HRESOURCE *phClusterNameResource,
__out HRESOURCE *phClusterIPAddressResource,
__out HRESOURCE *phClusterQuorumResource
);
DWORD
WINAPI
ResUtilGetResourceName(
__in HRESOURCE hResource,
__out_ecount_part(*pcchResourceNameInOut, *pcchResourceNameInOut) PWSTR pszResourceName,
__inout DWORD *pcchResourceNameInOut
);
typedef DWORD
(WINAPI * PRESUTIL_GET_RESOURCE_NAME)(
__in HRESOURCE hResource,
__out_ecount_part(*pcchResourceNameInOut, *pcchResourceNameInOut) PWSTR pszResourceName,
__inout DWORD *pcchResourceNameInOut
);
typedef enum _CLUSTER_ROLE {
ClusterRoleDHCP,
ClusterRoleDTC,
ClusterRoleFileServer,
ClusterRoleGenericApplication,
ClusterRoleGenericScript,
ClusterRoleGenericService,
ClusterRoleISCSINameServer,
ClusterRoleMSMQ,
ClusterRoleNFS,
ClusterRolePrintServer,
ClusterRoleStandAloneNamespaceServer,
ClusterRoleVolumeShadowCopyServiceTask,
ClusterRoleWINS,
} CLUSTER_ROLE;
typedef enum _CLUSTER_ROLE_STATE {
ClusterRoleUnknown = -1,
ClusterRoleClustered,
ClusterRoleUnclustered
} CLUSTER_ROLE_STATE;
__success(return >= 0) // != ClusterRoleUnknown
CLUSTER_ROLE_STATE
WINAPI
ResUtilGetClusterRoleState(
__in HCLUSTER hCluster,
__in CLUSTER_ROLE eClusterRole
);
#ifdef __cplusplus
}
#endif
#endif // ifdef _RESAPI_DEFINES_