📄 resapi.h
字号:
/*++
Copyright (c) 1995-1997 Microsoft Corporation
Module Name:
resapi.h
Abstract:
This module defines the interface exported by Windows Clusters resources.
Revision History:
--*/
#ifndef _RESAPI_DEFINES_
#define _RESAPI_DEFINES_
#ifdef __cplusplus
extern "C" {
#endif
#include "windows.h"
#include "clusapi.h"
#include "stdio.h"
#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
VOID
(_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
);
//***************************************************************
//
// 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
//
#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;
#pragma warning( default : 4201 ) // nonstandard extension used : nameless struct/union
//
// 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
//
// 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.
DWORD Default; // Default value
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
} 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 LPCTSTR ServiceName,
OUT LPHANDLE ServiceHandle
);
DWORD
WINAPI
ResUtilVerifyResourceService(
IN LPCTSTR ServiceName
);
DWORD
WINAPI
ResUtilStopResourceService(
IN LPCTSTR ServiceName
);
DWORD
WINAPI
ResUtilVerifyService(
IN HANDLE ServiceHandle
);
DWORD
WINAPI
ResUtilStopService(
IN HANDLE ServiceHandle
);
BOOL
WINAPI
ResUtilIsPathValid(
IN LPCWSTR Path
);
DWORD
WINAPI
ResUtilEnumProperties(
IN const PRESUTIL_PROPERTY_ITEM PropertyTable,
OUT LPWSTR OutBuffer,
IN DWORD OutBufferSize,
OUT LPDWORD BytesReturned,
OUT LPDWORD Required
);
DWORD
WINAPI
ResUtilEnumPrivateProperties(
IN PVOID ClusterKey,
OUT LPWSTR OutBuffer,
IN DWORD OutBufferSize,
OUT LPDWORD BytesReturned,
OUT LPDWORD Required
);
DWORD
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -