/*++ Copyright (c) 1996 Microsoft Corporation Module Name: api_rpc.idl Abstract: Interface Description for Cluster API RPC interface Author: John Vert (jvert) 11-Jan-1996 --*/ // // Interface Attributes // [ uuid(b97db8b2-4c63-11cf-bff6-08002be23f2f), version(2.0) ] interface clusapi { import "wtypes.idl"; // // Types // typedef [context_handle] void *HCLUSTER_RPC; typedef [context_handle] void *HNOTIFY_RPC; typedef [context_handle] void *HNODE_RPC; typedef [context_handle] void *HGROUP_RPC; typedef [context_handle] void *HNETWORK_RPC; typedef [context_handle] void *HNETINTERFACE_RPC; typedef [context_handle] void *HRES_RPC; typedef [context_handle] void *HKEY_RPC; // // RPCable security structures (see winbase.h). // typedef struct _RPC_SECURITY_DESCRIPTOR { [ size_is( cbInSecurityDescriptor ), length_is( cbOutSecurityDescriptor ) ] UCHAR *lpSecurityDescriptor; DWORD cbInSecurityDescriptor; DWORD cbOutSecurityDescriptor; } RPC_SECURITY_DESCRIPTOR, *PRPC_SECURITY_DESCRIPTOR; typedef struct _RPC_SECURITY_ATTRIBUTES { DWORD nLength; RPC_SECURITY_DESCRIPTOR RpcSecurityDescriptor; BOOL bInheritHandle; } RPC_SECURITY_ATTRIBUTES, *PRPC_SECURITY_ATTRIBUTES; typedef struct _CLUSTER_OPERATIONAL_VERSION_INFO { DWORD dwSize; DWORD dwClusterHighestVersion; DWORD dwClusterLowestVersion; DWORD dwFlags; DWORD dwReserved; }CLUSTER_OPERATIONAL_VERSION_INFO, *PCLUSTER_OPERATIONAL_VERSION_INFO; // // Routines and structures for dealing with the cluster // HCLUSTER_RPC ApiOpenCluster( [ out ] error_status_t *Status ); error_status_t ApiCloseCluster( [ in, out ] HCLUSTER_RPC *Cluster ); error_status_t ApiSetClusterName( [ in ] LPCWSTR NewClusterName ); error_status_t ApiGetClusterName( [ out ] LPWSTR *ClusterName, [ out ] LPWSTR *NodeName ); error_status_t ApiGetClusterVersion( [ out ] WORD *lpwMajorVersion, [ out ] WORD *lpwMinorVersion, [ out ] WORD *lpwBuildNumber, [ out, string ] LPWSTR *lpszVendorId, [ out, string ] LPWSTR *lpszCSDVersion ); error_status_t ApiGetQuorumResource( [ out, string ] LPWSTR *lpszResourceName, [ out, string ] LPWSTR *lpszDeviceName, [ out ] DWORD *pdwMaxQuorumLogSize ); error_status_t ApiSetQuorumResource( [ in ] HRES_RPC hResource, [ in ] LPCWSTR lpszDeviceName, [ in ] DWORD dwMaxQuorumLogSize ); // // Enumeration interface // typedef struct _ENUM_ENTRY { DWORD Type; [string] LPWSTR Name; } ENUM_ENTRY, *PENUM_ENTRY; typedef struct _ENUM_LIST { DWORD EntryCount; [size_is(EntryCount)] ENUM_ENTRY Entry[*]; } ENUM_LIST, *PENUM_LIST; error_status_t ApiCreateEnum( [ in ] DWORD dwType, [ out ] PENUM_LIST *ReturnEnum ); // // Resource interface // HRES_RPC ApiOpenResource( [ in, string ] LPCWSTR lpszResourceName, [ out ] error_status_t *Status ); HRES_RPC ApiCreateResource( [ in ] HGROUP_RPC hGroup, [ in, string ] LPCWSTR lpszResourceName, [ in, string ] LPCWSTR lpszResourceType, [ in ] DWORD dwFlags, [ out ] error_status_t *Status ); error_status_t ApiDeleteResource( [ in ] HRES_RPC hResource ); error_status_t ApiCloseResource( [ in, out ] HRES_RPC *Resource ); error_status_t ApiGetResourceState( [ in ] HRES_RPC hResource, [ out ] DWORD *State, [ out, string ] LPWSTR *NodeName, [ out, string ] LPWSTR *GroupName ); error_status_t ApiSetResourceName( [ in ] HRES_RPC hResource, [ in, string ] LPCWSTR lpszResourceName ); error_status_t ApiGetResourceId( [ in ] HRES_RPC hResource, [ out, string ] LPWSTR *pGuid ); error_status_t ApiGetResourceType( [ in ] HRES_RPC hResource, [ out, string ] LPWSTR *lpszResourceType ); error_status_t ApiFailResource( [ in ] HRES_RPC hResource ); error_status_t ApiOnlineResource( [ in ] HRES_RPC hResource ); error_status_t ApiOfflineResource( [ in ] HRES_RPC hResource ); error_status_t ApiAddResourceDependency( [ in ] HRES_RPC hResource, [ in ] HRES_RPC hDependsOn ); error_status_t ApiRemoveResourceDependency( [ in ] HRES_RPC hResource, [ in ] HRES_RPC hDependsOn ); error_status_t ApiCanResourceBeDependent( [ in ] HRES_RPC hResource, [ in ] HRES_RPC hResourceDependent ); error_status_t ApiCreateResEnum( [ in ] HRES_RPC hResource, [ in ] DWORD dwType, [ out ] PENUM_LIST *ReturnEnum ); error_status_t ApiAddResourceNode( [ in ] HRES_RPC hResource, [ in ] HNODE_RPC hNode ); error_status_t ApiRemoveResourceNode( [ in ] HRES_RPC hResource, [ in ] HNODE_RPC hNode ); error_status_t ApiChangeResourceGroup( [ in ] HRES_RPC hResource, [ in ] HGROUP_RPC hGroup ); error_status_t ApiCreateResourceType( [ in, string ] LPCWSTR lpszTypeName, [ in, string ] LPCWSTR lpszDisplayName, [ in, string ] LPCWSTR lpszDllName, [ in ] DWORD dwLooksAlive, [ in ] DWORD dwIsAlive ); error_status_t ApiDeleteResourceType( [ in, string ] LPCWSTR lpszTypeName ); // // Registry interfaces // HKEY_RPC ApiGetRootKey( [ in ] DWORD samDesired, [ out ] error_status_t *Status ); HKEY_RPC ApiCreateKey( [ in ] HKEY_RPC hKey, [ in, string ] LPCWSTR lpSubKey, [ in ] DWORD dwOptions, [ in ] DWORD samDesired, [ in, unique ] PRPC_SECURITY_ATTRIBUTES lpSecurityAttributes, [ out ] LPDWORD lpdwDisposition, [ out ] error_status_t *Status ); HKEY_RPC ApiOpenKey( [ in ] HKEY_RPC hKey, [ in, string ] LPCWSTR lpSubKey, [ in ] DWORD samDesired, [ out ] error_status_t *Status ); error_status_t ApiEnumKey( [ in ] HKEY_RPC hKey, [ in ] DWORD dwIndex, [ out, string ] LPWSTR *KeyName, [ out ] FILETIME *lpftLastWriteTime ); error_status_t ApiSetValue( [ in ] HKEY_RPC hKey, [ in, string ] LPCWSTR lpValueName, [ in ] DWORD dwType, [ in, size_is(cbData) ] const UCHAR *lpData, [ in ] DWORD cbData ); error_status_t ApiDeleteValue( [ in ] HKEY_RPC hKey, [ in, string ] LPCWSTR lpValueName ); error_status_t ApiQueryValue( [ in ] HKEY_RPC hKey, [ in, string ] LPCWSTR lpValueName, [ out ] DWORD *lpValueType, [ out, size_is(cbData) ] UCHAR *lpData, [ in ] DWORD cbData, [ out ] LPDWORD lpcbRequired ); error_status_t ApiDeleteKey( [ in ] HKEY_RPC hKey, [ in, string ] LPCWSTR lpSubKey ); error_status_t ApiEnumValue( [ in ] HKEY_RPC hKey, [ in ] DWORD dwIndex, [ out, string ] LPWSTR *lpValueName, [ out ] LPDWORD lpType, [ out, size_is(*lpcbData) ] UCHAR *lpData, [ in, out ] LPDWORD lpcbData, [ out ] LPDWORD TotalSize ); error_status_t ApiCloseKey( [ in, out ] HKEY_RPC *pKey ); error_status_t ApiQueryInfoKey( [ in ] HKEY_RPC hKey, [ out ] LPDWORD lpcSubKeys, [ out ] LPDWORD lpcbMaxSubKeyLen, [ out ] LPDWORD lpcValues, [ out ] LPDWORD lpcbMaxValueNameLen, [ out ] LPDWORD lpcbMaxValueLen, [ out ] LPDWORD lpcbSecurityDescriptor, [ out ] PFILETIME lpftLastWriteTime ); error_status_t ApiSetKeySecurity( [ in ] HKEY_RPC hKey, [ in ] DWORD SecurityInformation, [ in ] PRPC_SECURITY_DESCRIPTOR pRpcSecurityDescriptor ); error_status_t ApiGetKeySecurity( [ in ] HKEY_RPC hKey, [ in ] DWORD SecurityInformation, [ in, out ] PRPC_SECURITY_DESCRIPTOR pRpcSecurityDescriptor ); // // Group interface // HGROUP_RPC ApiOpenGroup( [ in, string ] LPCWSTR lpszGroupName, [ out ] error_status_t *Status ); HGROUP_RPC ApiCreateGroup( [ in, string ] LPCWSTR lpszGroupName, [ out ] error_status_t *Status ); error_status_t ApiDeleteGroup( [ in ] HGROUP_RPC Group ); error_status_t ApiCloseGroup( [ in, out ] HGROUP_RPC *Group ); error_status_t ApiGetGroupState( [ in ] HGROUP_RPC hGroup, [ out ] DWORD *State, [ out, string ] LPWSTR *NodeName ); error_status_t ApiSetGroupName( [ in ] HGROUP_RPC hGroup, [ in, string ] LPCWSTR lpszGroupName ); error_status_t ApiGetGroupId( [ in ] HGROUP_RPC hGroup, [ out, string ] LPWSTR *pGuid ); error_status_t ApiGetNodeId( [ in ] HNODE_RPC hNode, [ out, string ] LPWSTR *pGuid ); error_status_t ApiOnlineGroup( [ in ] HGROUP_RPC hGroup ); error_status_t ApiOfflineGroup( [ in ] HGROUP_RPC hGroup ); error_status_t ApiMoveGroup( [ in ] HGROUP_RPC hGroup ); error_status_t ApiMoveGroupToNode( [ in ] HGROUP_RPC hGroup, [ in ] HNODE_RPC hNode ); error_status_t ApiCreateGroupResourceEnum( [ in ] HGROUP_RPC hGroup, [ in ] DWORD dwType, [ out ] PENUM_LIST *ReturnEnum ); error_status_t ApiSetGroupNodeList( [ in ] HGROUP_RPC hGroup, [ in, unique, size_is(cbListSize) ] UCHAR *lpNodeList, [ in ] DWORD cbListSize ); // // Notify interface // HNOTIFY_RPC ApiCreateNotify( [ out ] error_status_t *rpc_error ); error_status_t ApiCloseNotify( [ in, out ] HNOTIFY_RPC *Notify ); error_status_t ApiAddNotifyCluster( [ in ] HNOTIFY_RPC hNotify, [ in ] HCLUSTER_RPC hCluster, [ in ] DWORD dwFilter, [ in ] DWORD dwNotifyKey ); error_status_t ApiAddNotifyNode( [ in ] HNOTIFY_RPC hNotify, [ in ] HNODE_RPC hNode, [ in ] DWORD dwFilter, [ in ] DWORD dwNotifyKey, [ out ] DWORD *dwStateSequence ); error_status_t ApiAddNotifyGroup( [ in ] HNOTIFY_RPC hNotify, [ in ] HGROUP_RPC hGroup, [ in ] DWORD dwFilter, [ in ] DWORD dwNotifyKey, [ out ] DWORD *dwStateSequence ); error_status_t ApiAddNotifyResource( [ in ] HNOTIFY_RPC hNotify, [ in ] HRES_RPC hResource, [ in ] DWORD dwFilter, [ in ] DWORD dwNotifyKey, [ out ] DWORD *dwStateSequence ); error_status_t ApiAddNotifyKey( [ in ] HNOTIFY_RPC hNotify, [ in ] HKEY_RPC hKey, [ in ] DWORD dwNotifyKey, [ in ] DWORD Filter, [ in ] BOOL WatchSubTree ); error_status_t ApiReAddNotifyNode( [ in ] HNOTIFY_RPC hNotify, [ in ] HNODE_RPC hNode, [ in ] DWORD dwFilter, [ in ] DWORD dwNotifyKey, [ in ] DWORD StateSequence ); error_status_t ApiReAddNotifyGroup( [ in ] HNOTIFY_RPC hNotify, [ in ] HGROUP_RPC hGroup, [ in ] DWORD dwFilter, [ in ] DWORD dwNotifyKey, [ in ] DWORD StateSequence ); error_status_t ApiReAddNotifyResource( [ in ] HNOTIFY_RPC hNotify, [ in ] HRES_RPC hResource, [ in ] DWORD dwFilter, [ in ] DWORD dwNotifyKey, [ in ] DWORD StateSequence ); error_status_t ApiGetNotify( [ in ] HNOTIFY_RPC hNotify, [ in ] DWORD Timeout, [ out ] DWORD *dwNotifyKey, [ out ] DWORD *dwFilter, [ out ] DWORD *dwStateSequence, [ out, string ] LPWSTR *Name ); HNODE_RPC ApiOpenNode( [ in, string ] LPCWSTR lpszNodeName, [ out ] error_status_t *Status ); error_status_t ApiCloseNode( [ in, out ] HNODE_RPC *Node ); error_status_t ApiGetNodeState( [ in ] HNODE_RPC hNode, [ out ] DWORD *State ); error_status_t ApiPauseNode( [ in ] HNODE_RPC hNode ); error_status_t ApiResumeNode( [ in ] HNODE_RPC hNode ); error_status_t ApiEvictNode( [ in ] HNODE_RPC hNode ); // // Resource/ResourceType IOCTL interface // error_status_t ApiNodeResourceControl( [ in ] HRES_RPC hResource, [ in ] HNODE_RPC hNode, [ in ] DWORD dwControlCode, [ in, unique, size_is(nInBufferSize) ] UCHAR *lpInBuffer, [ in ] DWORD nInBufferSize, [ out, size_is(nOutBufferSize), length_is (*lpBytesReturned)] UCHAR *lpOutBuffer, [ in ] DWORD nOutBufferSize, [ out ] DWORD *lpBytesReturned, [ out ] DWORD *lpcbRequired ); error_status_t ApiResourceControl( [ in ] HRES_RPC hResource, [ in ] DWORD dwControlCode, [ in, unique, size_is(nInBufferSize) ] UCHAR *lpInBuffer, [ in ] DWORD nInBufferSize, [ out, size_is(nOutBufferSize), length_is (*lpBytesReturned)] UCHAR *lpOutBuffer, [ in ] DWORD nOutBufferSize, [ out ] DWORD *lpBytesReturned, [ out ] DWORD *lpcbRequired ); error_status_t ApiNodeResourceTypeControl( [ in ] HCLUSTER_RPC hCluster, [ in, string ] LPCWSTR lpszResourceTypeName, [ in ] HNODE_RPC hNode, [ in ] DWORD dwControlCode, [ in, unique, size_is(nInBufferSize) ] UCHAR *lpInBuffer, [ in ] DWORD nInBufferSize, [ out, size_is(nOutBufferSize), length_is (*lpBytesReturned)] UCHAR *lpOutBuffer, [ in ] DWORD nOutBufferSize, [ out ] DWORD *lpBytesReturned, [ out ] DWORD *lpcbRequired ); error_status_t ApiResourceTypeControl( [ in ] HCLUSTER_RPC hCluster, [ in, string ] LPCWSTR lpszResourceTypeName, [ in ] DWORD dwControlCode, [ in, unique, size_is(nInBufferSize) ] UCHAR *lpInBuffer, [ in ] DWORD nInBufferSize, [ out, size_is(nOutBufferSize), length_is (*lpBytesReturned)] UCHAR *lpOutBuffer, [ in ] DWORD nOutBufferSize, [ out ] DWORD *lpBytesReturned, [ out ] DWORD *lpcbRequired ); // // Group IOCTL interface // error_status_t ApiNodeGroupControl( [ in ] HGROUP_RPC hGroup, [ in ] HNODE_RPC hNode, [ in ] DWORD dwControlCode, [ in, unique, size_is(nInBufferSize) ] UCHAR *lpInBuffer, [ in ] DWORD nInBufferSize, [ out, size_is(nOutBufferSize), length_is (*lpBytesReturned)] UCHAR *lpOutBuffer, [ in ] DWORD nOutBufferSize, [ out ] DWORD *lpBytesReturned, [ out ] DWORD *lpcbRequired ); error_status_t ApiGroupControl( [ in ] HGROUP_RPC hGroup, [ in ] DWORD dwControlCode, [ in, unique, size_is(nInBufferSize) ] UCHAR *lpInBuffer, [ in ] DWORD nInBufferSize, [ out, size_is(nOutBufferSize), length_is (*lpBytesReturned)] UCHAR *lpOutBuffer, [ in ] DWORD nOutBufferSize, [ out ] DWORD *lpBytesReturned, [ out ] DWORD *lpcbRequired ); // // Node IOCTL interface // error_status_t ApiNodeNodeControl( [ in ] HNODE_RPC hNode, [ in ] HNODE_RPC hHostNode, [ in ] DWORD dwControlCode, [ in, unique, size_is(nInBufferSize) ] UCHAR *lpInBuffer, [ in ] DWORD nInBufferSize, [ out, size_is(nOutBufferSize), length_is (*lpBytesReturned)] UCHAR *lpOutBuffer, [ in ] DWORD nOutBufferSize, [ out ] DWORD *lpBytesReturned, [ out ] DWORD *lpcbRequired ); error_status_t ApiNodeControl( [ in ] HNODE_RPC hNode, [ in ] DWORD dwControlCode, [ in, unique, size_is(nInBufferSize) ] UCHAR *lpInBuffer, [ in ] DWORD nInBufferSize, [ out, size_is(nOutBufferSize), length_is (*lpBytesReturned)] UCHAR *lpOutBuffer, [ in ] DWORD nOutBufferSize, [ out ] DWORD *lpBytesReturned, [ out ] DWORD *lpcbRequired ); //For eventlogging..this is only published in the idl interface for the eventlog //service. clusapi.dll doesnt export this functionality error_status_t ApiEvPropEvents( [in] DWORD dwEventInfoSize, [in , size_is(dwEventInfoSize)] UCHAR *pPackedEventInfo ); // // Network interfaces // HNETWORK_RPC ApiOpenNetwork( [ in, string ] LPCWSTR lpszNetworkName, [ out ] error_status_t *Status ); error_status_t ApiCloseNetwork( [ in, out ] HNETWORK_RPC *Network ); error_status_t ApiGetNetworkState( [ in ] HNETWORK_RPC hNetwork, [ out ] DWORD *State ); error_status_t ApiSetNetworkName( [ in ] HNETWORK_RPC hNetwork, [ in, string ] LPCWSTR lpszNetworkName ); error_status_t ApiCreateNetworkEnum( [ in ] HNETWORK_RPC hNetwork, [ in ] DWORD dwType, [ out ] PENUM_LIST *ReturnEnum ); error_status_t ApiGetNetworkId( [ in ] HNETWORK_RPC hNetwork, [ out, string ] LPWSTR *pGuid ); error_status_t ApiSetNetworkPriorityOrder( [ in ] DWORD NetworkCount, [ in, size_is(NetworkCount) ] LPWSTR NetworkIdList[*] ); // // Network IOCTL interface // error_status_t ApiNodeNetworkControl( [ in ] HNETWORK_RPC hNetwork, [ in ] HNODE_RPC hNode, [ in ] DWORD dwControlCode, [ in, unique, size_is(nInBufferSize) ] UCHAR *lpInBuffer, [ in ] DWORD nInBufferSize, [ out, size_is(nOutBufferSize), length_is (*lpBytesReturned)] UCHAR *lpOutBuffer, [ in ] DWORD nOutBufferSize, [ out ] DWORD *lpBytesReturned, [ out ] DWORD *lpcbRequired ); error_status_t ApiNetworkControl( [ in ] HNETWORK_RPC hNetwork, [ in ] DWORD dwControlCode, [ in, unique, size_is(nInBufferSize) ] UCHAR *lpInBuffer, [ in ] DWORD nInBufferSize, [ out, size_is(nOutBufferSize), length_is (*lpBytesReturned)] UCHAR *lpOutBuffer, [ in ] DWORD nOutBufferSize, [ out ] DWORD *lpBytesReturned, [ out ] DWORD *lpcbRequired ); error_status_t ApiAddNotifyNetwork( [ in ] HNOTIFY_RPC hNotify, [ in ] HNETWORK_RPC hNetwork, [ in ] DWORD dwFilter, [ in ] DWORD dwNotifyKey, [ out ] DWORD *dwStateSequence ); error_status_t ApiReAddNotifyNetwork( [ in ] HNOTIFY_RPC hNotify, [ in ] HNETWORK_RPC hNetwork, [ in ] DWORD dwFilter, [ in ] DWORD dwNotifyKey, [ in ] DWORD StateSequence ); // // NetInterface interfaces // HNETWORK_RPC ApiOpenNetInterface( [ in, string ] LPCWSTR lpszNetInterfaceName, [ out ] error_status_t *Status ); error_status_t ApiCloseNetInterface( [ in, out ] HNETINTERFACE_RPC *NetInterface ); error_status_t ApiGetNetInterfaceState( [ in ] HNETINTERFACE_RPC hNetInterface, [ out ] DWORD *State ); error_status_t ApiGetNetInterface( [ in, string ] LPCWSTR lpszNodeName, [ in, string ] LPCWSTR lpszNetworkName, [ out, string ] LPWSTR *lppszInterfaceName ); error_status_t ApiGetNetInterfaceId( [ in ] HNETINTERFACE_RPC hNetInterface, [ out, string ] LPWSTR *pGuid ); // // NetInterface IOCTL interface // error_status_t ApiNodeNetInterfaceControl( [ in ] HNETINTERFACE_RPC hNetInterface, [ in ] HNODE_RPC hNode, [ in ] DWORD dwControlCode, [ in, unique, size_is(nInBufferSize) ] UCHAR *lpInBuffer, [ in ] DWORD nInBufferSize, [ out, size_is(nOutBufferSize), length_is (*lpBytesReturned)] UCHAR *lpOutBuffer, [ in ] DWORD nOutBufferSize, [ out ] DWORD *lpBytesReturned, [ out ] DWORD *lpcbRequired ); error_status_t ApiNetInterfaceControl( [ in ] HNETINTERFACE_RPC hNetInterface, [ in ] DWORD dwControlCode, [ in, unique, size_is(nInBufferSize) ] UCHAR *lpInBuffer, [ in ] DWORD nInBufferSize, [ out, size_is(nOutBufferSize), length_is (*lpBytesReturned)] UCHAR *lpOutBuffer, [ in ] DWORD nOutBufferSize, [ out ] DWORD *lpBytesReturned, [ out ] DWORD *lpcbRequired ); error_status_t ApiAddNotifyNetInterface( [ in ] HNOTIFY_RPC hNotify, [ in ] HNETINTERFACE_RPC hNetInterface, [ in ] DWORD dwFilter, [ in ] DWORD dwNotifyKey, [ out ] DWORD *dwStateSequence ); error_status_t ApiReAddNotifyNetInterface( [ in ] HNOTIFY_RPC hNotify, [ in ] HNETINTERFACE_RPC hNetInterface, [ in ] DWORD dwFilter, [ in ] DWORD dwNotifyKey, [ in ] DWORD StateSequence ); error_status_t ApiCreateNodeEnum( [ in ] HNODE_RPC hNode, [ in ] DWORD dwType, [ out ] PENUM_LIST *ReturnEnum ); //added for nt 5 //added for providing more complete cluster version error_status_t ApiGetClusterVersion2( [ out ] WORD *lpwMajorVersion, [ out ] WORD *lpwMinorVersion, [ out ] WORD *lpwBuildNumber, [ out, string ] LPWSTR *lpszVendorId, [ out, string ] LPWSTR *lpszCSDVersion, [ out ] PCLUSTER_OPERATIONAL_VERSION_INFO *ppClusterOpVerInfo ); // Added for enumerating nodes that supports a certain resource type error_status_t ApiCreateResTypeEnum( [ in, string ] LPCWSTR lpszTypeName, [ in ] DWORD dwType, [ out ] PENUM_LIST *ReturnEnum ); // Added for backing up the quorum log and checkpoint file to the specified directory error_status_t ApiBackupClusterDatabase( [ in, string ] LPCWSTR lpszPathName ); // // Cluster ioctls // error_status_t ApiNodeClusterControl( [ in ] HCLUSTER_RPC hCluster, [ in ] HNODE_RPC hHostNode, [ in ] DWORD dwControlCode, [ in, unique, size_is(nInBufferSize) ] UCHAR *lpInBuffer, [ in ] DWORD nInBufferSize, [ out, size_is(nOutBufferSize), length_is (*lpBytesReturned)] UCHAR *lpOutBuffer, [ in ] DWORD nOutBufferSize, [ out ] DWORD *lpBytesReturned, [ out ] DWORD *lpcbRequired ); error_status_t ApiClusterControl( [ in ] HCLUSTER_RPC hCluster, [ in ] DWORD dwControlCode, [ in, unique, size_is(nInBufferSize) ] UCHAR *lpInBuffer, [ in ] DWORD nInBufferSize, [ out, size_is(nOutBufferSize), length_is (*lpBytesReturned)] UCHAR *lpOutBuffer, [ in ] DWORD nOutBufferSize, [ out ] DWORD *lpBytesReturned, [ out ] DWORD *lpcbRequired ); // // Added for unblocking the get notify thread without freeing the context handles // error_status_t ApiUnblockGetNotifyCall( [ in ] HNOTIFY_RPC hNotify ); // // Added to enable change of the cluster service account password // // Structures IDL_CLUSTER_SET_PASSWORD_STATUS and IDL_CLUSTER_SET_PASSWORD_FLAGS // are also defined in clusapi.h. The duplication is necessary since the two // header files are completely independent. But the definitions of the two // data structures must remain in sync. typedef struct IDL_CLUSTER_SET_PASSWORD_STATUS { DWORD NodeId; BOOLEAN SetAttempted; DWORD ReturnStatus; } IDL_CLUSTER_SET_PASSWORD_STATUS, *PIDL_CLUSTER_SET_PASSWORD_STATUS; typedef enum IDL_CLUSTER_SET_PASSWORD_FLAGS { IDL_CLUSTER_SET_PASSWORD_IGNORE_DOWN_NODES = 1 } IDL_CLUSTER_SET_PASSWORD_FLAGS; error_status_t ApiSetServiceAccountPassword( [ in, string ] LPWSTR lpszNewPassword, [ in ] IDL_CLUSTER_SET_PASSWORD_FLAGS dwFlags, [ out, size_is(ReturnStatusBufferSize), length_is(*SizeReturned) ] IDL_CLUSTER_SET_PASSWORD_STATUS ReturnStatusBufferPtr[*], [ in ] DWORD ReturnStatusBufferSize, [ out ] DWORD *SizeReturned, [ out ] DWORD *ExpectedBufferSize ); }