From d64c551441de03d729a9754c7b561b7d807ca548 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=BCnther=20Deschner?= Date: Wed, 25 Feb 2015 10:10:38 +0100 Subject: [PATCH] librpc: add clusapi idl version 3.0. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Guenther Signed-off-by: Günther Deschner Reviewed-by: Stefan Metzmacher --- librpc/idl/clusapi.idl | 1877 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1877 insertions(+) create mode 100644 librpc/idl/clusapi.idl diff --git a/librpc/idl/clusapi.idl b/librpc/idl/clusapi.idl new file mode 100644 index 00000000000..4b0ad0b2f36 --- /dev/null +++ b/librpc/idl/clusapi.idl @@ -0,0 +1,1877 @@ +import "security.idl"; + +#include "idl_types.h" + +[ + uuid(b97db8b2-4c63-11cf-bff6-08002be23f2f), + version(3.0), + pointer_default(unique), + helpstring("Failover Cluster Management API (clusapi)") +] + interface clusapi +{ +#if 0 + typedef [context_handle] void *HCLUSTER_RPC; + typedef [context_handle] void *HNODE_RPC; + typedef [context_handle] void *HGROUP_RPC; + typedef [context_handle] void *HRES_RPC; + typedef [context_handle] void *HKEY_RPC; + typedef [context_handle] void *HNOTIFY_RPC; + typedef [context_handle] void *HNETWORK_RPC; + typedef [context_handle] void *HNETINTERFACE_RPC; + typedef [context_handle] void *HBATCH_PORT_RPC; +#else + #define HCLUSTER_RPC policy_handle + #define HNODE_RPC policy_handle + #define HGROUP_RPC policy_handle + #define HRES_RPC policy_handle + #define HKEY_RPC policy_handle + #define HNOTIFY_RPC policy_handle + #define HNETWORK_RPC policy_handle + #define HNETINTERFACE_RPC policy_handle + #define HBATCH_PORT_RPC policy_handle +#endif + + typedef struct { + [ size_is( cbInSecurityDescriptor ), length_is( cbOutSecurityDescriptor ) ] uint8 *lpSecurityDescriptor; + uint32 cbInSecurityDescriptor; + uint32 cbOutSecurityDescriptor; + } RPC_SECURITY_DESCRIPTOR; + + typedef struct { + uint32 nLength; + RPC_SECURITY_DESCRIPTOR RpcSecurityDescriptor; + long bInheritHandle; + } RPC_SECURITY_ATTRIBUTES; + + typedef struct { + [value(20)] uint32 dwSize; + uint32 dwClusterHighestVersion; + uint32 dwClusterLowestVersion; + uint32 dwFlags; + uint32 dwReserved; + } CLUSTER_OPERATIONAL_VERSION_INFO; + + typedef struct { + uint32 NodeId; + boolean8 SetAttempted; + uint32 ReturnStatus; + } IDL_CLUSTER_SET_PASSWORD_STATUS; + + typedef enum { + IDL_CLUSTER_SET_PASSWORD_IGNORE_DOWN_NODES = 1 + } IDL_CLUSTER_SET_PASSWORD_FLAGS; + + typedef struct { + uint32 dwVersion; + uint32 dwGroupType; + } CLUSTER_CREATE_GROUP_INFO_RPC; + + /*****************/ + /* Function 0x00 */ + + HCLUSTER_RPC + clusapi_OpenCluster( + [ out ] error_status_t *Status + ); + + /*****************/ + /* Function 0x01 */ + + error_status_t + clusapi_CloseCluster( + [ in, out ] HCLUSTER_RPC *Cluster + ); + + /*****************/ + /* Function 0x02 */ + + error_status_t + clusapi_SetClusterName( + [ in, string ] [charset(UTF16)] uint16 *NewClusterName, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x03 */ + + error_status_t + clusapi_GetClusterName( + [ out, string ] [charset(UTF16)] uint16 **ClusterName, + [ out, string ] [charset(UTF16)] uint16 **NodeName + ); + + /*****************/ + /* Function 0x04 */ + + error_status_t + clusapi_GetClusterVersion( + [ out ] uint16 *lpwMajorVersion, + [ out ] uint16 *lpwMinorVersion, + [ out ] uint16 *lpwBuildNumber, + [ out, string ] [charset(UTF16)] uint16 **lpszVendorId, + [ out, string ] [charset(UTF16)] uint16 **lpszCSDVersion + ); + + /*****************/ + /* Function 0x05 */ + + error_status_t + clusapi_GetQuorumResource( + [ out, string ] [charset(UTF16)] uint16 **lpszResourceName, + [ out, string ] [charset(UTF16)] uint16 **lpszDeviceName, + [ out ] uint32 *pdwMaxQuorumLogSize, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x06 */ + + error_status_t + clusapi_SetQuorumResource( + [ in ] HRES_RPC hResource, + [ in, string ] [charset(UTF16)] uint16 *lpszDeviceName, + [ in ] uint32 dwMaxQuorumLogSize, + [ out ] error_status_t *rpc_status + ); + + typedef struct { + uint32 Type; + [string] [charset(UTF16)] uint16 *Name; + } ENUM_ENTRY; + + typedef struct { + uint32 EntryCount; + [size_is(EntryCount)] ENUM_ENTRY Entry[*]; + } ENUM_LIST; + + typedef struct { + [string] [charset(UTF16)] uint16 *Name; + [string] [charset(UTF16)] uint16 *Id; + uint32 dwState; + [string] [charset(UTF16)] uint16 *Owner; + uint32 dwFlags; + uint32 cbProperties; + [size_is(cbProperties)] uint8* Properties; + uint32 cbRoProperties; + [size_is(cbRoProperties)] uint8* RoProperties; + } GROUP_ENUM_ENTRY; + + typedef struct { + [string] [charset(UTF16)] uint16 *Name; + [string] [charset(UTF16)] uint16 *Id; + [string] [charset(UTF16)] uint16 *OwnerName; + [string] [charset(UTF16)] uint16 *OwnerId; + uint32 cbProperties; + [size_is(cbProperties)] uint8* Properties; + uint32 cbRoProperties; + [size_is(cbRoProperties)] uint8* RoProperties; + } RESOURCE_ENUM_ENTRY; + + typedef struct { + uint32 EntryCount; + [size_is(EntryCount)] GROUP_ENUM_ENTRY Entry[*]; + } GROUP_ENUM_LIST; + + typedef struct { + uint32 EntryCount; + [size_is(EntryCount)] RESOURCE_ENUM_ENTRY Entry[*]; + } RESOURCE_ENUM_LIST; + + /*****************/ + /* Function 0x07 */ + + error_status_t + clusapi_CreateEnum( + [ in ] uint32 dwType, + [ out ] ENUM_LIST **ReturnEnum, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x08 */ + + HRES_RPC + clusapi_OpenResource( + [ in, string ] [charset(UTF16)] uint16 *lpszResourceName, + [ out ] error_status_t *Status, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x09 */ + + HRES_RPC + clusapi_CreateResource( + [ in ] HGROUP_RPC hGroup, + [ in, string ] [charset(UTF16)] uint16 *lpszResourceName, + [ in, string ] [charset(UTF16)] uint16 *lpszResourceType, + [ in ] uint32 dwFlags, + [ out ] error_status_t *Status, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x0A */ + + error_status_t + clusapi_DeleteResource( + [ in ] HRES_RPC hResource, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x0B */ + + error_status_t + clusapi_CloseResource( + [ in, out ] HRES_RPC *Resource + ); + + /*****************/ + /* Function 0x0C */ + + error_status_t + clusapi_GetResourceState( + [ in ] HRES_RPC hResource, + [ out ] uint32 *State, + [ out, string ] [charset(UTF16)] uint16 **NodeName, + [ out, string ] [charset(UTF16)] uint16 **GroupName, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x0D */ + + error_status_t + clusapi_SetResourceName( + [ in ] HRES_RPC hResource, + [ in, string ] [charset(UTF16)] uint16 *lpszResourceName, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x0E */ + + error_status_t + clusapi_GetResourceId( + [ in ] HRES_RPC hResource, + [ out, string ] [charset(UTF16)] uint16 **pGuid, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x0F */ + + error_status_t + clusapi_GetResourceType( + [ in ] HRES_RPC hResource, + [ out, string ] [charset(UTF16)] uint16 **lpszResourceType, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x10 */ + + error_status_t + clusapi_FailResource( + [ in ] HRES_RPC hResource, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x11 */ + + error_status_t + clusapi_OnlineResource( + [ in ] HRES_RPC hResource, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x12 */ + + error_status_t + clusapi_OfflineResource( + [ in ] HRES_RPC hResource, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x13 */ + + error_status_t + clusapi_AddResourceDependency( + [ in ] HRES_RPC hResource, + [ in ] HRES_RPC hDependsOn, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x14 */ + + error_status_t + clusapi_RemoveResourceDependency( + [ in ] HRES_RPC hResource, + [ in ] HRES_RPC hDependsOn, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x15 */ + + error_status_t + clusapi_CanResourceBeDependent( + [ in ] HRES_RPC hResource, + [ in ] HRES_RPC hResourceDependent, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x16 */ + + error_status_t + clusapi_CreateResEnum( + [ in ] HRES_RPC hResource, + [ in ] uint32 dwType, + [ out ] ENUM_LIST **ReturnEnum, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x17 */ + + error_status_t + clusapi_AddResourceNode( + [ in ] HRES_RPC hResource, + [ in ] HNODE_RPC hNode, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x18 */ + + error_status_t + clusapi_RemoveResourceNode( + [ in ] HRES_RPC hResource, + [ in ] HNODE_RPC hNode, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x19 */ + + error_status_t + clusapi_ChangeResourceGroup( + [ in ] HRES_RPC hResource, + [ in ] HGROUP_RPC hGroup, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x1A */ + + error_status_t + clusapi_CreateResourceType( + [ in, string ] [charset(UTF16)] uint16 *lpszTypeName, + [ in, string ] [charset(UTF16)] uint16 *lpszDisplayName, + [ in, string ] [charset(UTF16)] uint16 *lpszDllName, + [ in ] uint32 dwLooksAlive, + [ in ] uint32 dwIsAlive, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x1B */ + + error_status_t + clusapi_DeleteResourceType( + [ in, string ] [charset(UTF16)] uint16 *lpszTypeName, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x1C */ + + HKEY_RPC + clusapi_GetRootKey( + [ in ] uint32 samDesired, + [ out ] error_status_t *Status, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x1D */ + + HKEY_RPC + clusapi_CreateKey( + [ in ] HKEY_RPC hKey, + [ in, string ] [charset(UTF16)] uint16 *lpSubKey, + [ in ] uint32 dwOptions, + [ in ] uint32 samDesired, + [ in, unique ] RPC_SECURITY_ATTRIBUTES *lpSecurityAttributes, + [ out ] uint32 *lpdwDisposition, + [ out ] error_status_t *Status, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x1E */ + + HKEY_RPC + clusapi_OpenKey( + [ in ] HKEY_RPC hKey, + [ in, string ] [charset(UTF16)] uint16 *lpSubKey, + [ in ] uint32 samDesired, + [ out ] error_status_t *Status, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x1F */ + + error_status_t + clusapi_EnumKey( + [ in ] HKEY_RPC hKey, + [ in ] uint32 dwIndex, + [ out, string ] [charset(UTF16)] uint16 **KeyName, + [ out ] NTTIME *lpftLastWriteTime, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x20 */ + + error_status_t + clusapi_SetValue( + [ in ] HKEY_RPC hKey, + [ in, string ] [charset(UTF16)] uint16 *lpValueName, + [ in ] uint32 dwType, + [ in, size_is(cbData) ] uint8 *lpData, + [ in ] uint32 cbData, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x21 */ + + error_status_t + clusapi_DeleteValue( + [ in ] HKEY_RPC hKey, + [ in, string ] [charset(UTF16)] uint16 *lpValueName, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x22 */ + + error_status_t + clusapi_QueryValue( + [ in ] HKEY_RPC hKey, + [ in, string ] [charset(UTF16)] uint16 *lpValueName, + [ out ] uint32 *lpValueType, + [ out, size_is(cbData) ] uint8 *lpData, + [ in ] uint32 cbData, + [ out ] uint32 *lpcbRequired, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x23 */ + + error_status_t + clusapi_DeleteKey( + [ in ] HKEY_RPC hKey, + [ in, string ] [charset(UTF16)] uint16 *lpSubKey, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x24 */ + + error_status_t + clusapi_EnumValue( + [ in ] HKEY_RPC hKey, + [ in ] uint32 dwIndex, + [ out, string ] [charset(UTF16)] uint16 **lpValueName, + [ out ] uint32 *lpType, + [ out, size_is(*lpcbData) ] uint8 *lpData, + [ in, out ] uint32 *lpcbData, + [ out ] uint32 *TotalSize, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x25 */ + + error_status_t + clusapi_CloseKey( + [ in, out ] HKEY_RPC *pKey + ); + + /*****************/ + /* Function 0x26 */ + + error_status_t + clusapi_QueryInfoKey( + [ in ] HKEY_RPC hKey, + [ out ] uint32 *lpcSubKeys, + [ out ] uint32 *lpcbMaxSubKeyLen, + [ out ] uint32 *lpcValues, + [ out ] uint32 *lpcbMaxValueNameLen, + [ out ] uint32 *lpcbMaxValueLen, + [ out ] uint32 *lpcbSecurityDescriptor, + [ out ] NTTIME *lpftLastWriteTime, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x27 */ + + error_status_t + clusapi_SetKeySecurity( + [ in ] HKEY_RPC hKey, + [ in ] uint32 SecurityInformation, + [ in ] RPC_SECURITY_DESCRIPTOR *pRpcSecurityDescriptor, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x28 */ + + error_status_t + clusapi_GetKeySecurity( + [ in ] HKEY_RPC hKey, + [ in ] uint32 SecurityInformation, + [ in, out ] RPC_SECURITY_DESCRIPTOR *pRpcSecurityDescriptor, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x29 */ + + HGROUP_RPC + clusapi_OpenGroup( + [ in, string ] [charset(UTF16)] uint16 *lpszGroupName, + [ out ] error_status_t *Status, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x2A */ + + HGROUP_RPC + clusapi_CreateGroup( + [ in, string ] [charset(UTF16)] uint16 *lpszGroupName, + [ out ] error_status_t *Status, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x2B */ + + error_status_t + clusapi_DeleteGroup( + [ in ] HGROUP_RPC Group, + [ in ] boolean8 force, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x2C */ + + error_status_t + clusapi_CloseGroup( + [ in, out ] HGROUP_RPC *Group + ); + + /*****************/ + /* Function 0x2D */ + + error_status_t + clusapi_GetGroupState( + [ in ] HGROUP_RPC hGroup, + [ out ] uint32 *State, + [ out, string ] [charset(UTF16)] uint16 **NodeName, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x2E */ + + error_status_t + clusapi_SetGroupName( + [ in ] HGROUP_RPC hGroup, + [ in, string ] [charset(UTF16)] uint16 *lpszGroupName, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x2F */ + + error_status_t + clusapi_GetGroupId( + [ in ] HGROUP_RPC hGroup, + [ out, string ] [charset(UTF16)] uint16 **pGuid, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x30 */ + + error_status_t + clusapi_GetNodeId( + [ in ] HNODE_RPC hNode, + [ out, string ] [charset(UTF16)] uint16 **pGuid, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x31 */ + + error_status_t + clusapi_OnlineGroup( + [ in ] HGROUP_RPC hGroup, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x32 */ + + error_status_t + clusapi_OfflineGroup( + [ in ] HGROUP_RPC hGroup, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x33 */ + + error_status_t + clusapi_MoveGroup( + [ in ] HGROUP_RPC hGroup, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x34 */ + + error_status_t + clusapi_MoveGroupToNode( + [ in ] HGROUP_RPC hGroup, + [ in ] HNODE_RPC hNode, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x35 */ + + error_status_t + clusapi_CreateGroupResourceEnum( + [ in ] HGROUP_RPC hGroup, + [ in ] uint32 dwType, + [ out ] ENUM_LIST **ReturnEnum, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x36 */ + + error_status_t + clusapi_SetGroupNodeList( + [ in ] HGROUP_RPC hGroup, + [ in, unique, size_is(cchListSize) ] uint16 *multiSzNodeList, + [ in ] uint32 cchListSize, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x37 */ + + HNOTIFY_RPC + clusapi_CreateNotify( + [ out ] error_status_t *Status, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x38 */ + + error_status_t + clusapi_CloseNotify( + [ in, out ] HNOTIFY_RPC *Notify + ); + + /*****************/ + /* Function 0x39 */ + + error_status_t + clusapi_AddNotifyCluster( + [ in ] HNOTIFY_RPC hNotify, + [ in ] HCLUSTER_RPC hCluster, + [ in ] uint32 dwFilter, + [ in ] uint32 dwNotifyKey, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x3A */ + + error_status_t + clusapi_AddNotifyNode( + [ in ] HNOTIFY_RPC hNotify, + [ in ] HNODE_RPC hNode, + [ in ] uint32 dwFilter, + [ in ] uint32 dwNotifyKey, + [ out ] uint32 *dwStateSequence, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x3B */ + + error_status_t + clusapi_AddNotifyGroup( + [ in ] HNOTIFY_RPC hNotify, + [ in ] HGROUP_RPC hGroup, + [ in ] uint32 dwFilter, + [ in ] uint32 dwNotifyKey, + [ out ] uint32 *dwStateSequence, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x3C */ + + error_status_t + clusapi_AddNotifyResource( + [ in ] HNOTIFY_RPC hNotify, + [ in ] HRES_RPC hResource, + [ in ] uint32 dwFilter, + [ in ] uint32 dwNotifyKey, + [ out ] uint32 *dwStateSequence, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x3D */ + + error_status_t + clusapi_AddNotifyKey( + [ in ] HNOTIFY_RPC hNotify, + [ in ] HKEY_RPC hKey, + [ in ] uint32 dwNotifyKey, + [ in ] uint32 Filter, + [ in ] boolean8 WatchSubTree, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x3E */ + + error_status_t + clusapi_ReAddNotifyNode( + [ in ] HNOTIFY_RPC hNotify, + [ in ] HNODE_RPC hNode, + [ in ] uint32 dwFilter, + [ in ] uint32 dwNotifyKey, + [ in ] uint32 StateSequence, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x3F */ + + error_status_t + clusapi_ReAddNotifyGroup( + [ in ] HNOTIFY_RPC hNotify, + [ in ] HGROUP_RPC hGroup, + [ in ] uint32 dwFilter, + [ in ] uint32 dwNotifyKey, + [ in ] uint32 StateSequence, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x40 */ + + error_status_t + clusapi_ReAddNotifyResource( + [ in ] HNOTIFY_RPC hNotify, + [ in ] HRES_RPC hResource, + [ in ] uint32 dwFilter, + [ in ] uint32 dwNotifyKey, + [ in ] uint32 StateSequence, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x41 */ + + error_status_t + clusapi_GetNotify( + [ in ] HNOTIFY_RPC hNotify, + [ out ] uint32 *dwNotifyKey, + [ out ] uint32 *dwFilter, + [ out ] uint32 *dwStateSequence, + [ out, string ] [charset(UTF16)] uint16 **Name, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x42 */ + + HNODE_RPC + clusapi_OpenNode( + [ in, string ] [charset(UTF16)] uint16 *lpszNodeName, + [ out ] error_status_t *Status, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x43 */ + + error_status_t + clusapi_CloseNode( + [ in, out ] HNODE_RPC *Node + ); + + /*****************/ + /* Function 0x44 */ + + error_status_t + clusapi_GetNodeState( + [ in ] HNODE_RPC hNode, + [ out ] uint32 *State, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x45 */ + + error_status_t + clusapi_PauseNode( + [ in ] HNODE_RPC hNode, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x46 */ + + error_status_t + clusapi_ResumeNode( + [ in ] HNODE_RPC hNode, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x47 */ + + error_status_t + clusapi_EvictNode( + [ in ] HNODE_RPC hNode, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x48 */ + + error_status_t + clusapi_NodeResourceControl( + [ in ] HRES_RPC hResource, + [ in ] HNODE_RPC hNode, + [ in ] uint32 dwControlCode, + [ in, unique, size_is(nInBufferSize) ] uint8 *lpInBuffer, + [ in ] uint32 nInBufferSize, + [ out, size_is(nOutBufferSize), + length_is (*lpBytesReturned)] uint8 *lpOutBuffer, + [ in ] uint32 nOutBufferSize, + [ out ] uint32 *lpBytesReturned, + [ out ] uint32 *lpcbRequired, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x49 */ + + error_status_t + clusapi_ResourceControl( + [ in ] HRES_RPC hResource, + [ in ] uint32 dwControlCode, + [ in, unique, size_is(nInBufferSize) ] uint8 *lpInBuffer, + [ in ] uint32 nInBufferSize, + [ out, size_is(nOutBufferSize), + length_is (*lpBytesReturned)] uint8 *lpOutBuffer, + [ in ] uint32 nOutBufferSize, + [ out ] uint32 *lpBytesReturned, + [ out ] uint32 *lpcbRequired, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x4A */ + + error_status_t + clusapi_NodeResourceTypeControl( + [ in ] HCLUSTER_RPC hCluster, + [ in, string ] [charset(UTF16)] uint16 *lpszResourceTypeName, + [ in ] HNODE_RPC hNode, + [ in ] uint32 dwControlCode, + [ in, unique, size_is(nInBufferSize) ] uint8 *lpInBuffer, + [ in ] uint32 nInBufferSize, + [ out, size_is(nOutBufferSize), + length_is (*lpBytesReturned)] uint8 *lpOutBuffer, + [ in ] uint32 nOutBufferSize, + [ out ] uint32 *lpBytesReturned, + [ out ] uint32 *lpcbRequired, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x4B */ + + error_status_t + clusapi_ResourceTypeControl( + [ in ] HCLUSTER_RPC hCluster, + [ in, string ] [charset(UTF16)] uint16 *lpszResourceTypeName, + [ in ] uint32 dwControlCode, + [ in, unique, size_is(nInBufferSize) ] uint8 *lpInBuffer, + [ in ] uint32 nInBufferSize, + [ out, size_is(nOutBufferSize), + length_is (*lpBytesReturned)] uint8 *lpOutBuffer, + [ in ] uint32 nOutBufferSize, + [ out ] uint32 *lpBytesReturned, + [ out ] uint32 *lpcbRequired, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x4C */ + + error_status_t + clusapi_NodeGroupControl( + [ in ] HGROUP_RPC hGroup, + [ in ] HNODE_RPC hNode, + [ in ] uint32 dwControlCode, + [ in, unique, size_is(nInBufferSize) ] uint8 *lpInBuffer, + [ in ] uint32 nInBufferSize, + [ out, size_is(nOutBufferSize), + length_is (*lpBytesReturned)] uint8 *lpOutBuffer, + [ in ] uint32 nOutBufferSize, + [ out ] uint32 *lpBytesReturned, + [ out ] uint32 *lpcbRequired, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x4D */ + + error_status_t + clusapi_GroupControl( + [ in ] HGROUP_RPC hGroup, + [ in ] uint32 dwControlCode, + [ in, unique, size_is(nInBufferSize) ] uint8 *lpInBuffer, + [ in ] uint32 nInBufferSize, + [ out, size_is(nOutBufferSize), + length_is (*lpBytesReturned)] uint8 *lpOutBuffer, + [ in ] uint32 nOutBufferSize, + [ out ] uint32 *lpBytesReturned, + [ out ] uint32 *lpcbRequired, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x4E */ + + error_status_t + clusapi_NodeNodeControl( + [ in ] HNODE_RPC hNode, + [ in ] HNODE_RPC hHostNode, + [ in ] uint32 dwControlCode, + [ in, unique, size_is(nInBufferSize) ] uint8 *lpInBuffer, + [ in ] uint32 nInBufferSize, + [ out, size_is(nOutBufferSize), + length_is (*lpBytesReturned)] uint8 *lpOutBuffer, + [ in ] uint32 nOutBufferSize, + [ out ] uint32 *lpBytesReturned, + [ out ] uint32 *lpcbRequired, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x4F */ + + error_status_t + clusapi_NodeControl( + [ in ] HNODE_RPC hNode, + [ in ] uint32 dwControlCode, + [ in, unique, size_is(nInBufferSize) ] uint8 *lpInBuffer, + [ in ] uint32 nInBufferSize, + [ out, size_is(nOutBufferSize), + length_is (*lpBytesReturned)] uint8 *lpOutBuffer, + [ in ] uint32 nOutBufferSize, + [ out ] uint32 *lpBytesReturned, + [ out ] uint32 *lpcbRequired, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x50 */ + + error_status_t + Opnum80NotUsedOnWire(void); + + /*****************/ + /* Function 0x51 */ + + HNETWORK_RPC + clusapi_OpenNetwork( + [ in, string ] [charset(UTF16)] uint16 *lpszNetworkName, + [ out ] error_status_t *Status, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x52 */ + + error_status_t + clusapi_CloseNetwork( + [ in, out ] HNETWORK_RPC *Network + ); + + /*****************/ + /* Function 0x53 */ + + error_status_t + clusapi_GetNetworkState( + [ in ] HNETWORK_RPC hNetwork, + [ out ] uint32 *State, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x54 */ + + error_status_t + clusapi_SetNetworkName( + [ in ] HNETWORK_RPC hNetwork, + [ in, string ] [charset(UTF16)] uint16 *lpszNetworkName, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x55 */ + + error_status_t + clusapi_CreateNetworkEnum( + [ in ] HNETWORK_RPC hNetwork, + [ in ] uint32 dwType, + [ out ] ENUM_LIST **ReturnEnum, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x56 */ + + error_status_t + clusapi_GetNetworkId( + [ in ] HNETWORK_RPC hNetwork, + [ out, string ] [charset(UTF16)] uint16 **pGuid, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x57 */ + + error_status_t + clusapi_SetNetworkPriorityOrder( + [ in, range(0, 1000)] uint32 NetworkCount, + [ in, string, size_is(NetworkCount) ] [charset(UTF16)] uint16 NetworkIdList[*], + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x58 */ + + error_status_t + clusapi_NodeNetworkControl( + [ in ] HNETWORK_RPC hNetwork, + [ in ] HNODE_RPC hNode, + [ in ] uint32 dwControlCode, + [ in, unique, size_is(nInBufferSize) ] uint8 *lpInBuffer, + [ in ] uint32 nInBufferSize, + [ out, size_is(nOutBufferSize), + length_is (*lpBytesReturned)] uint8 *lpOutBuffer, + [ in ] uint32 nOutBufferSize, + [ out ] uint32 *lpBytesReturned, + [ out ] uint32 *lpcbRequired, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x59 */ + + error_status_t + clusapi_NetworkControl( + [ in ] HNETWORK_RPC hNetwork, + [ in ] uint32 dwControlCode, + [ in, unique, size_is(nInBufferSize) ] uint8 *lpInBuffer, + [ in ] uint32 nInBufferSize, + [ out, size_is(nOutBufferSize), + length_is (*lpBytesReturned)] uint8 *lpOutBuffer, + [ in ] uint32 nOutBufferSize, + [ out ] uint32 *lpBytesReturned, + [ out ] uint32 *lpcbRequired, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x5A */ + + error_status_t + clusapi_AddNotifyNetwork( + [ in ] HNOTIFY_RPC hNotify, + [ in ] HNETWORK_RPC hNetwork, + [ in ] uint32 dwFilter, + [ in ] uint32 dwNotifyKey, + [ out ] uint32 *dwStateSequence, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x5B */ + + error_status_t + clusapi_ReAddNotifyNetwork( + [ in ] HNOTIFY_RPC hNotify, + [ in ] HNETWORK_RPC hNetwork, + [ in ] uint32 dwFilter, + [ in ] uint32 dwNotifyKey, + [ in ] uint32 StateSequence, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x5C */ + + HNETINTERFACE_RPC + clusapi_OpenNetInterface( + [ in, string ] [charset(UTF16)] uint16 *lpszNetInterfaceName, + [ out ] error_status_t *Status, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x5D */ + + error_status_t + clusapi_CloseNetInterface( + [ in, out ] HNETINTERFACE_RPC *NetInterface + ); + + /*****************/ + /* Function 0x5E */ + + error_status_t + clusapi_GetNetInterfaceState( + [ in ] HNETINTERFACE_RPC hNetInterface, + [ out ] uint32 *State, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x5F */ + + error_status_t + clusapi_GetNetInterface( + [ in, string ] [charset(UTF16)] uint16 *lpszNodeName, + [ in, string ] [charset(UTF16)] uint16 *lpszNetworkName, + [ out, string ] [charset(UTF16)] uint16 **lppszInterfaceName, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x60 */ + + error_status_t + clusapi_GetNetInterfaceId( + [ in ] HNETINTERFACE_RPC hNetInterface, + [ out, string ] [charset(UTF16)] uint16 **pGuid, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x61 */ + + error_status_t + clusapi_NodeNetInterfaceControl( + [ in ] HNETINTERFACE_RPC hNetInterface, + [ in ] HNODE_RPC hNode, + [ in ] uint32 dwControlCode, + [ in, unique, size_is(nInBufferSize) ] uint8 *lpInBuffer, + [ in ] uint32 nInBufferSize, + [ out, size_is(nOutBufferSize), + length_is (*lpBytesReturned)] uint8 *lpOutBuffer, + [ in ] uint32 nOutBufferSize, + [ out ] uint32 *lpBytesReturned, + [ out ] uint32 *lpcbRequired, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x62 */ + + error_status_t + clusapi_NetInterfaceControl( + [ in ] HNETINTERFACE_RPC hNetInterface, + [ in ] uint32 dwControlCode, + [ in, unique, size_is(nInBufferSize) ] uint8 *lpInBuffer, + [ in ] uint32 nInBufferSize, + [ out, size_is(nOutBufferSize), + length_is (*lpBytesReturned)] uint8 *lpOutBuffer, + [ in ] uint32 nOutBufferSize, + [ out ] uint32 *lpBytesReturned, + [ out ] uint32 *lpcbRequired, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x63 */ + + error_status_t + clusapi_AddNotifyNetInterface( + [ in ] HNOTIFY_RPC hNotify, + [ in ] HNETINTERFACE_RPC hNetInterface, + [ in ] uint32 dwFilter, + [ in ] uint32 dwNotifyKey, + [ out ] uint32 *dwStateSequence, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x64 */ + + error_status_t + clusapi_ReAddNotifyNetInterface( + [ in ] HNOTIFY_RPC hNotify, + [ in ] HNETINTERFACE_RPC hNetInterface, + [ in ] uint32 dwFilter, + [ in ] uint32 dwNotifyKey, + [ in ] uint32 StateSequence, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x65 */ + + error_status_t + clusapi_CreateNodeEnum( + [ in ] HNODE_RPC hNode, + [ in ] uint32 dwType, + [ out ] ENUM_LIST **ReturnEnum, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x66 */ + + error_status_t + clusapi_GetClusterVersion2( + [ out ] uint16 *lpwMajorVersion, + [ out ] uint16 *lpwMinorVersion, + [ out ] uint16 *lpwBuildNumber, + [ out, string ] [charset(UTF16)] uint16 **lpszVendorId, + [ out, string ] [charset(UTF16)] uint16 **lpszCSDVersion, + [ out ] CLUSTER_OPERATIONAL_VERSION_INFO **ppClusterOpVerInfo, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x67 */ + + error_status_t + clusapi_CreateResTypeEnum( + [ in, string ] [charset(UTF16)] uint16 *lpszTypeName, + [ in ] uint32 dwType, + [ out ] ENUM_LIST **ReturnEnum, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x68 */ + + error_status_t + clusapi_BackupClusterDatabase( + [ in, string ] [charset(UTF16)] uint16 *lpszPathName, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x69 */ + + error_status_t + clusapi_NodeClusterControl( + [ in ] HCLUSTER_RPC hCluster, + [ in ] HNODE_RPC hHostNode, + [ in ] uint32 dwControlCode, + [ in, unique, size_is(nInBufferSize) ] uint8 *lpInBuffer, + [ in ] uint32 nInBufferSize, + [ out, size_is(nOutBufferSize), + length_is (*lpBytesReturned)] uint8 *lpOutBuffer, + [ in ] uint32 nOutBufferSize, + [ out ] uint32 *lpBytesReturned, + [ out ] uint32 *lpcbRequired, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x6A */ + + error_status_t + clusapi_ClusterControl( + [ in ] HCLUSTER_RPC hCluster, + [ in ] uint32 dwControlCode, + [ in, unique, size_is(nInBufferSize) ] uint8 *lpInBuffer, + [ in ] uint32 nInBufferSize, + [ out, size_is(nOutBufferSize), + length_is (*lpBytesReturned)] uint8 *lpOutBuffer, + [ in ] uint32 nOutBufferSize, + [ out ] uint32 *lpBytesReturned, + [ out ] uint32 *lpcbRequired, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x6B */ + + error_status_t + clusapi_UnblockGetNotifyCall( + [ in ] HNOTIFY_RPC hNotify + ); + + /*****************/ + /* Function 0x6C */ + + error_status_t + clusapi_SetServiceAccountPassword( + [ in, string ] [charset(UTF16)] uint16 *lpszNewPassword, + [ in ] IDL_CLUSTER_SET_PASSWORD_FLAGS dwFlags, + [ out, size_is(ReturnStatusBufferSize), length_is(*SizeReturned) ] + IDL_CLUSTER_SET_PASSWORD_STATUS ReturnStatusBufferPtr[*], + [ in, range(0, (64 * 1024)) ] uint32 ReturnStatusBufferSize, + [ out ] uint32 *SizeReturned, + [ out ] uint32 *ExpectedBufferSize + ); + + /*****************/ + /* Function 0x6D */ + + error_status_t + clusapi_SetResourceDependencyExpression( + [ in ] HRES_RPC hResource, + [ in, string, unique ] [charset(UTF16)] uint16 *lpszDependencyExpression, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x6E */ + + error_status_t + clusapi_GetResourceDependencyExpression( + [ in ] HRES_RPC hResource, + [ out, string ] [charset(UTF16)] uint16 **lpszDependencyExpression, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x6F */ + + error_status_t + Opnum111NotUsedOnWire(void); + + /*****************/ + /* Function 0x70 */ + + error_status_t + clusapi_GetResourceNetworkName( + [ in ] HRES_RPC hResource, + [ out, string ] [charset(UTF16)] uint16 **lpszName, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x71 */ + + error_status_t + clusapi_ExecuteBatch( + [ in ] HKEY_RPC hKey, + [ in ] uint32 cbData, + [ in, size_is(cbData)] uint8 *lpData, + [ out ] int *pdwFailedCommand, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x72 */ + + error_status_t + clusapi_CreateBatchPort( + [ in ] HKEY_RPC hKey, + [ out ] HBATCH_PORT_RPC *phBatchPort, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x73 */ + + error_status_t + clusapi_GetBatchNotification( + [ in ] HBATCH_PORT_RPC hBatchNotify, + [ out ] uint32 *cbData, + [ out, size_is(,*cbData) ] uint8 ** lpData + ); + + /*****************/ + /* Function 0x74 */ + + error_status_t + clusapi_CloseBatchPort( + [ in, out ] HBATCH_PORT_RPC *phBatchPort + ); + + /*****************/ + /* Function 0x75 */ + + HCLUSTER_RPC + clusapi_OpenClusterEx( + [ in ] uint32 dwDesiredAccess, + [ out ] uint32 *lpdwGrantedAccess, + [ out ] error_status_t *Status + ); + + /*****************/ + /* Function 0x76 */ + + HNODE_RPC + clusapi_OpenNodeEx( + [ in, string ] [charset(UTF16)] uint16 *lpszNodeName, + [ in ] uint32 dwDesiredAccess, + [ out ] uint32 *lpdwGrantedAccess, + [ out ] error_status_t *Status, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x77 */ + + HGROUP_RPC + clusapi_OpenGroupEx( + [ in, string ] [charset(UTF16)] uint16 *lpszGroupName, + [ in ] uint32 dwDesiredAccess, + [ out ] uint32 *lpdwGrantedAccess, + [ out ] error_status_t *Status, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x78 */ + + HRES_RPC + clusapi_OpenResourceEx( + [ in, string ] [charset(UTF16)] uint16 *lpszResourceName, + [ in ] uint32 dwDesiredAccess, + [ out ] uint32 *lpdwGrantedAccess, + [ out ] error_status_t *Status, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x79 */ + + HNETWORK_RPC + clusapi_OpenNetworkEx( + [ in, string ] [charset(UTF16)] uint16 *lpszNetworkName, + [ in ] uint32 dwDesiredAccess, + [ out ] uint32 *lpdwGrantedAccess, + [ out ] error_status_t *Status, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x7A */ + + HNETINTERFACE_RPC + clusapi_OpenNetInterfaceEx( + [ in, string ] [charset(UTF16)] uint16 *lpszNetInterfaceName, + [ in ] uint32 dwDesiredAccess, + [ out ] uint32 *lpdwGrantedAccess, + [ out ] error_status_t *Status, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x7B */ + + error_status_t + clusapi_ChangeCsvState( + [ in ] HRES_RPC hResource, + [ in ] uint32 dwState, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x7C */ + + error_status_t + clusapi_CreateNodeEnumEx( + [in] HNODE_RPC hNode, + [in] uint32 dwType, + [in] uint32 dwOptions, + [out] ENUM_LIST **ReturnIdEnum, + [out] ENUM_LIST **ReturnNameEnum, + [out] error_status_t* rpc_status + ); + + /*****************/ + /* Function 0x7D */ + + error_status_t + clusapi_CreateEnumEx( + [in] HCLUSTER_RPC hCluster, + [in] uint32 dwType, + [in] uint32 dwOptions, + [out] ENUM_LIST **ReturnIdEnum, + [out] ENUM_LIST **ReturnNameEnum, + [out] error_status_t* rpc_status + ); + + /*****************/ + /* Function 0x7E */ + + error_status_t + clusapi_PauseNodeEx( + [ in ] HNODE_RPC hNode, + [ in ] boolean8 bDrainNode, + [ in ] uint32 dwPauseFlags, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x7F */ + + error_status_t + clusapi_PauseNodeWithDrainTarget( + [ in ] HNODE_RPC hNode, + [ in ] uint32 dwPauseFlags, + [ in ] HNODE_RPC hNodeDrainTarget, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x80 */ + + error_status_t + clusapi_ResumeNodeEx( + [ in ] HNODE_RPC hNode, + [ in ] uint32 dwResumeFailbackType, + [ in ] uint32 dwResumeFlagsReserved, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x81 */ + + HGROUP_RPC + clusapi_CreateGroupEx( + [ in, string ] [charset(UTF16)] uint16 *lpszGroupName, + [ in, unique ] CLUSTER_CREATE_GROUP_INFO_RPC *pGroupInfo, + [ out ] error_status_t *Status, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x82 */ + + error_status_t + clusapi_OnlineGroupEx( + [ in ] HGROUP_RPC hGroup, + [ in ] uint32 dwOnlineFlags, + [ in, size_is(cbInBufferSize) ] uint8* lpInBuffer, + [ in ] uint32 cbInBufferSize, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x83 */ + + error_status_t + clusapi_OfflineGroupEx( + [ in ] HGROUP_RPC hGroup, + [ in ] uint32 dwOfflineFlags, + [ in, size_is(cbInBufferSize) ] uint8* lpInBuffer, + [ in ] uint32 cbInBufferSize, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x84 */ + + error_status_t + clusapi_MoveGroupEx( + [ in ] HGROUP_RPC hGroup, + [ in ] uint32 dwMoveFlags, + [ in, size_is(cbInBufferSize) ] uint8* lpInBuffer, + [ in ] uint32 cbInBufferSize, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x85 */ + + error_status_t + clusapi_MoveGroupToNodeEx( + [ in ] HGROUP_RPC hGroup, + [ in ] HNODE_RPC hNode, + [ in ] uint32 dwMoveFlags, + [ in, size_is(cbInBufferSize) ] uint8* lpInBuffer, + [ in ] uint32 cbInBufferSize, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x86 */ + + error_status_t + clusapi_CancelClusterGroupOperation( + [ in ] HGROUP_RPC hGroup, + [ in ] uint32 dwCancelFlags, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x87 */ + + error_status_t + clusapi_OnlineResourceEx( + [ in ] HRES_RPC hResource, + [ in ] uint32 dwOnlineFlags, + [ in, size_is(cbInBufferSize) ] uint8* lpInBuffer, + [ in ] uint32 cbInBufferSize, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x88 */ + + error_status_t + clusapi_OfflineResourceEx( + [ in ] HRES_RPC hResource, + [ in ] uint32 dwOfflineFlags, + [ in, size_is(cbInBufferSize) ] uint8* lpInBuffer, + [ in ] uint32 cbInBufferSize, + [ out ] error_status_t *rpc_status + ); + +#define HGENERIC_RPC policy_handle +#if 0 + typedef [context_handle] void *HGENERIC_RPC; +#endif + + typedef struct { + uint32 dwObjectType; // really of type CLUSTER_OBJECT_TYPE_RPC + hyper FilterFlags; + } NOTIFY_FILTER_AND_TYPE_RPC; + + typedef struct { + NOTIFY_FILTER_AND_TYPE_RPC FilterAndType; + [ size_is(dwBufferSize ) ] uint8* buffer; + uint32 dwBufferSize; + [string] [charset(UTF16)] uint16 *ObjectId; + [string] [charset(UTF16)] uint16 *ParentId; + [string] [charset(UTF16)] uint16 *Name; + [string] [charset(UTF16)] uint16 *Type; + } NOTIFICATION_DATA_RPC; + + typedef struct { + uint32 *dwNotifyKey; + NOTIFICATION_DATA_RPC NotificationData; + } NOTIFICATION_RPC; + + /*****************/ + /* Function 0x89 */ + + // + // Notify interface V2 functions + // + HNOTIFY_RPC + clusapi_CreateNotifyV2( + [ out ] error_status_t *rpc_error, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x8A */ + + error_status_t + clusapi_AddNotifyV2( + [ in ] HNOTIFY_RPC hNotify, + [ in ] HGENERIC_RPC hObject, + [ in ] NOTIFY_FILTER_AND_TYPE_RPC filter, + [ in ] uint32 dwNotifyKey, + [ in ] uint32 dwVersion, + [ in ] boolean8 isTargetedAtObject, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x8B */ + + error_status_t + clusapi_GetNotifyV2( + [ in ] HNOTIFY_RPC hNotify, + [ out, size_is(,*dwNumNotifications) ] NOTIFICATION_RPC **Notifications, + [ out ] uint32 *dwNumNotifications + ); + + /*****************/ + /* Function 0x8C */ + + error_status_t + clusapi_QueryAllValues( + [ in ] HKEY_RPC hKey, + [ out ] uint32 *pcbData, + [ out, size_is(1, *pcbData) ] uint8 ** ppData, + [ out ] error_status_t *rpc_status + ); + + typedef struct { + uint32 DiskIdType; + uint8 DiskIdBlob[16]; + } CLUSTER_DISKID; + + /*****************/ + /* Function 0x8D */ + + error_status_t + clusapi_StmFindDisk( + [ in ] HCLUSTER_RPC hCluster, + [ in ] uint32 dwFlags, + [ in, out, unique ] CLUSTER_DISKID *pDiskId, + [ in, size_is(uniqueIdSize), unique ] uint8 *pUniqueId, + [ in ] uint32 uniqueIdSize, + [ out, ref, string ] [charset(UTF16)] uint16 **ppszDeviceName, + [ out ] error_status_t *rpc_status + ); + + typedef struct{ + [string] [charset(UTF16)] uint16 *pszNodeName; + HRESULT ResultCode; + uint32 ResultSize; + [unique, size_is(ResultSize)] uint8 *pResultData; + } CLUSTER_MRR_NODE_RESPONSE; + + typedef struct { + uint32 NodeCount; + [size_is(NodeCount)] CLUSTER_MRR_NODE_RESPONSE *pNodes; + } CLUSTER_MRR_RESPONSE; + + /*****************/ + /* Function 0x8E */ + + error_status_t + clusapi_ClusterMrr( + [ in ] HCLUSTER_RPC hCluster, + [ in ] boolean8 fExcludeSelf, + [ in ] hyper nodeSet, + [ in ] uint32 dwTimeout, + [ in ] uint32 dwComponent, + [ in ] uint32 dwControlCode, + [ in ] uint32 inSize, + [ in, unique, size_is(inSize) ] uint8 *pInData, + [ out, ref, size_is(1, 1) ] CLUSTER_MRR_RESPONSE **ppInfo, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x8F */ + + error_status_t + clusapi_CreateGroupEnum( + [ in ] HCLUSTER_RPC hCluster, + [ in, unique, size_is(cbProperties)] uint8* pProperties, + [ in ] uint32 cbProperties, + [ in, unique, size_is(cbRoProperties)] uint8* pRoProperties, + [ in ] uint32 cbRoProperties, + [ out ] GROUP_ENUM_LIST **ppResultList, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x90 */ + + error_status_t + clusapi_CreateResourceEnum( + [ in ] HCLUSTER_RPC hCluster, + [ in, unique, size_is(cbProperties)] uint8* pProperties, + [ in ] uint32 cbProperties, + [ in, unique, size_is(cbRoProperties)] uint8* pRoProperties, + [ in ] uint32 cbRoProperties, + [ out ] RESOURCE_ENUM_LIST **ppResultList, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x91 */ + + error_status_t + clusapi_ExecuteReadBatch( + [ in ] HKEY_RPC hKey, + [ in ] uint32 cbInData, + [ in, size_is(cbInData)] uint8 *lpInData, + [ out ] uint32 *cbOutData, + [ out, size_is(,*cbOutData) ] uint8 ** lpOutData, + [ out ] error_status_t *rpc_status + ); + + /*****************/ + /* Function 0x92 */ + + error_status_t + clusapi_RestartResource( + [ in ] HRES_RPC hResource, + [ in ] uint32 dwFlags, + [ out ] error_status_t *rpc_status + ); + + typedef struct { + uint32 dwNotifyKey; + uint32 dwFilter; + [string] [charset(UTF16)] uint16 *Name; + } NOTIFICATION_DATA_ASYNC_RPC; + + /*****************/ + /* Function 0x93 */ + + error_status_t + clusapi_GetNotifyAsync( + [ in ] HNOTIFY_RPC hNotify, + [ out, size_is(,*dwNumNotifications) ] NOTIFICATION_DATA_ASYNC_RPC **Notifications, + [ out ] uint32 *dwNumNotifications + ); + + typedef enum { + DiskIdSignature = 0x00000001, + DiskIdGuid = 0x00000002, + DiskIdUnKnown = 0x00001388 + } CLUSDSK_DISKID_ENUM; + +#if 0 + typedef struct { + CLUSDSK_DISKID_ENUM DiskIdType; + [switch_is(DiskIdType)] union { + [case(DiskIdSignature)] uint32 DiskSignature; + [case(DiskIdGuid)] GUID DiskGuid; + }; + } CLUSDSK_DISKID; +#endif +}