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

986 lines
23 KiB

/*++
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
//SS: add a range to prevent DOS attacks - batching in eventlog service restricts this to 256K so 512K should be a safe limit for now
error_status_t
ApiEvPropEvents(
[in, range(0, (512 * 1024))] 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, range(0, 1000)] 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
);
}