windows-nt/Source/XPSP1/NT/base/cluster/service/inc/nm.h
2020-09-26 16:20:57 +08:00

365 lines
6 KiB
C
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*++
Copyright (c) 1996 Microsoft Corporation
Module Name:
nm.h
Abstract:
Public interface definitions for the Node Manager component.
Author:
Mike Massa (mikemas) 12-Mar-1996
Revision History:
--*/
#ifndef _NM_INCLUDED
#define _NM_INCLUDED
//
// Types
//
typedef struct _NM_NODE *PNM_NODE;
typedef struct _NM_NETWORK *PNM_NETWORK;
typedef struct _NM_INTERFACE *PNM_INTERFACE;
//the callback registered for object notifications
typedef DWORD (WINAPI *NM_FIXUP_NOTIFYCB)(
IN DWORD dwFixupType,
OUT PVOID *ppPropertyList,
OUT LPDWORD pdwPropertyListSize,
OUT LPWSTR * szKeyName
);
//
// Data
//
#define NM_DEFAULT_NODE_LIMIT 2 // This is the default if
// MaxNodesInCluster is not set
#define NM_FORM_FIXUP 1
#define NM_JOIN_FIXUP 2
extern ULONG NmMaxNodes;
extern CL_NODE_ID NmMaxNodeId;
extern CL_NODE_ID NmLocalNodeId;
extern PNM_NODE NmLocalNode;
extern WCHAR NmLocalNodeName[];
extern WCHAR NmLocalNodeIdString[];
extern HANDLE NmClusnetHandle;
extern BOOL NmLocalNodeVersionChanged;
extern RESUTIL_PROPERTY_ITEM NmJoinFixupSDProperties[];
extern RESUTIL_PROPERTY_ITEM NmJoinFixupWINSProperties[];
extern RESUTIL_PROPERTY_ITEM NmJoinFixupDHCPProperties[];
extern RESUTIL_PROPERTY_ITEM NmJoinFixupSMTPProperties[];
extern RESUTIL_PROPERTY_ITEM NmJoinFixupNNTPProperties[];
extern RESUTIL_PROPERTY_ITEM NmJoinFixupIISProperties[];
extern RESUTIL_PROPERTY_ITEM NmJoinFixupNewMSMQProperties[];
extern RESUTIL_PROPERTY_ITEM NmJoinFixupMSDTCProperties[];
extern RESUTIL_PROPERTY_ITEM NmFixupVersionInfo[];
extern RESUTIL_PROPERTY_ITEM NmFixupClusterProperties[];
//
// Macros
//
#define NmIsValidNodeId(_id) ( ((_id) >= ClusterMinNodeId) && \
((_id) <= NmMaxNodeId) )
//
// Init/Shutdown Routines
//
DWORD
NmInitialize(
VOID
);
VOID
NmShutdown(
VOID
);
DWORD
NmFormNewCluster(
VOID
);
DWORD
NmJoinCluster(
IN RPC_BINDING_HANDLE SponsorBinding
);
DWORD
NmJoinComplete(
OUT DWORD *EndSeq
);
VOID
NmLeaveCluster(
VOID
);
DWORD
NmCreateNodeBindings(
IN LPCWSTR lpszNodeId,
IN LPCWSTR SponsorNetworkId
);
BOOL
NmCreateActiveNodeBindingsCallback(
IN PVOID Context1,
IN PVOID Context2,
IN PVOID Object,
IN LPCWSTR Name
);
DWORD
NmJoinNodeToCluster(
CL_NODE_ID JoiningNodeId
);
VOID
NmTimerTick(
IN DWORD MsTickInterval
);
DWORD
NmGetJoinSequence(
VOID
);
DWORD NmGetClusterOperationalVersion(
OUT LPDWORD pdwClusterHighestVersion,
OUT LPDWORD pdwClusterLowestVersion,
OUT LPDWORD pdwFlags
);
//
// Node Object Management Routines
//
PNM_NODE
NmReferenceNodeById(
IN DWORD NodeId
);
CLUSTER_NODE_STATE
NmGetNodeState(
IN PNM_NODE Node
);
DWORD
NmPauseNode(
IN PNM_NODE Node
);
DWORD
NmResumeNode(
IN PNM_NODE Node
);
DWORD
NmEvictNode(
IN PNM_NODE Node
);
VOID
NmAdviseNodeFailure(
IN DWORD NodeId,
IN DWORD ErrorCode
);
DWORD
NmEnumNodeInterfaces(
IN PNM_NODE Node,
OUT LPDWORD InterfaceCount,
OUT PNM_INTERFACE * InterfaceList[]
);
DWORD
NmGetNodeId(
IN PNM_NODE Node
);
DWORD
NmGetCurrentNumberOfNodes(
void
);
DWORD
NmGetMaxNodeId(
);
PNM_NODE
NmReferenceJoinerNode(
IN DWORD JoinerSequence,
IN CL_NODE_ID NodeId
);
VOID
NmDereferenceJoinerNode(
PNM_NODE JoinerNode
);
DWORD
WINAPI
NmNodeControl(
IN PNM_NODE Node,
IN PNM_NODE HostNode OPTIONAL,
IN DWORD ControlCode,
IN PUCHAR InBuffer,
IN DWORD InBufferSize,
OUT PUCHAR OutBuffer,
IN DWORD OutBufferSize,
OUT LPDWORD BytesReturned,
OUT LPDWORD Required
);
//
// Network Object Management Routines
//
CLUSTER_NETWORK_STATE
NmGetNetworkState(
IN PNM_NETWORK Network
);
DWORD
NmSetNetworkName(
IN PNM_NETWORK Network,
IN LPCWSTR Name
);
DWORD
NmSetNetworkPriorityOrder(
IN DWORD NetworkCount,
IN LPWSTR * NetworkIdList
);
DWORD
NmEnumInternalNetworks(
OUT LPDWORD NetworkCount,
OUT PNM_NETWORK * NetworkList[]
);
DWORD
NmEnumNetworkInterfaces(
IN PNM_NETWORK Network,
OUT LPDWORD InterfaceCount,
OUT PNM_INTERFACE * InterfaceList[]
);
DWORD
WINAPI
NmNetworkControl(
IN PNM_NETWORK Network,
IN PNM_NODE HostNode OPTIONAL,
IN DWORD ControlCode,
IN PUCHAR InBuffer,
IN DWORD InBufferSize,
OUT PUCHAR OutBuffer,
IN DWORD OutBufferSize,
OUT LPDWORD BytesReturned,
OUT LPDWORD Required
);
//
// Interface Object Management Routines
//
CLUSTER_NETINTERFACE_STATE
NmGetInterfaceState(
IN PNM_INTERFACE Interface
);
DWORD
NmGetInterfaceForNodeAndNetwork(
IN LPCWSTR NodeName,
IN LPCWSTR NetworkName,
OUT LPWSTR * InterfaceName
);
DWORD
WINAPI
NmInterfaceControl(
IN PNM_INTERFACE Interface,
IN PNM_NODE HostNode OPTIONAL,
IN DWORD ControlCode,
IN PUCHAR InBuffer,
IN DWORD InBufferSize,
OUT PUCHAR OutBuffer,
IN DWORD OutBufferSize,
OUT LPDWORD BytesReturned,
OUT LPDWORD Required
);
DWORD NmPerformFixups(
IN DWORD dwFixupType
);
DWORD
NmFixupNotifyCb(VOID);
//
// PnP Routines
//
VOID
NmPostPnpEvent(
IN CLUSNET_EVENT_TYPE EventType,
IN DWORD Context1,
IN DWORD Context2
);
//
// Connectoid related routines
//
VOID
NmCloseConnectoidAdviseSink(
VOID
);
DWORD
NmGetNodeHighestVersion(
IN PNM_NODE Node
);
DWORD
NmSetExtendedNodeState(
IN CLUSTER_NODE_STATE State
);
CLUSTER_NODE_STATE
NmGetExtendedNodeState(
IN PNM_NODE Node
);
//
// Intracluster RPC Monitoring and cancellation routines
//
VOID NmStartRpc(
IN DWORD NodeId
);
VOID NmEndRpc(
IN DWORD NodeId
);
// RPC ext error info dumping routine
VOID NmDumpRpcExtErrorInfo(
RPC_STATUS status
);
#endif // _NM_INCLUDED