751 lines
15 KiB
C
751 lines
15 KiB
C
|
#ifndef _FM_H
|
||
|
#define _FM_H
|
||
|
|
||
|
/*++
|
||
|
|
||
|
Copyright (c) 1996 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
fm.h
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
Public data structures and procedure prototypes for
|
||
|
the Failover Manager subcomponent of the NT Cluster Service
|
||
|
|
||
|
Author:
|
||
|
|
||
|
John Vert (jvert) 7-Feb-1996
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
--*/
|
||
|
|
||
|
//
|
||
|
// Public structure definitions
|
||
|
//
|
||
|
|
||
|
//
|
||
|
// FM notifications
|
||
|
// The FM supports the following notifications to allow other
|
||
|
// cluster components to prepare and cleanup state.
|
||
|
//
|
||
|
//SS: for now add it here..but if this is needed externally
|
||
|
//move it to appropriate place
|
||
|
// these notifications are generated only on the node where the
|
||
|
// resource resides
|
||
|
#define NOTIFY_RESOURCE_PREONLINE 0x00000001
|
||
|
#define NOTIFY_RESOURCE_POSTONLINE 0x00000002
|
||
|
#define NOTIFY_RESOURCE_PREOFFLINE 0x00000004
|
||
|
#define NOTIFY_RESOURCE_POSTOFFLINE 0x00000008 //this is the same as offline
|
||
|
#define NOTIFY_RESOURCE_FAILED 0x00000010
|
||
|
#define NOTIFY_RESOURCE_OFFLINEPENDING 0x00000020
|
||
|
#define NOTIFY_RESOURCE_ONLINEPENDING 0x00000040
|
||
|
|
||
|
//
|
||
|
// Resource type structure definition
|
||
|
//
|
||
|
|
||
|
// Define Flags
|
||
|
#define RESTYPE_DEBUG_CONTROL_FUNC 1
|
||
|
|
||
|
#define RESTYPE_STATE_LOADS 0x00000001
|
||
|
|
||
|
typedef struct FM_RESTYPE {
|
||
|
LPWSTR DllName;
|
||
|
DWORD LooksAlivePollInterval;
|
||
|
DWORD IsAlivePollInterval;
|
||
|
LPWSTR DebugPrefix;
|
||
|
DWORD Flags;
|
||
|
DWORD State;
|
||
|
DWORD Class;
|
||
|
LIST_ENTRY PossibleNodeList;
|
||
|
} FM_RESTYPE, *PFM_RESTYPE;
|
||
|
|
||
|
|
||
|
//
|
||
|
// Resource Possible Owners structure
|
||
|
//
|
||
|
|
||
|
typedef struct RESTYPE_POSSIBLE_ENTRY {
|
||
|
LIST_ENTRY PossibleLinkage;
|
||
|
PNM_NODE PossibleNode;
|
||
|
} RESTYPE_POSSIBLE_ENTRY, *PRESTYPE_POSSIBLE_ENTRY;
|
||
|
|
||
|
#if CLUSTER_BETA
|
||
|
#define FM_MAX_LOCK_ENTRIES 8
|
||
|
#else
|
||
|
#define FM_MAX_LOCK_ENTRIES 4
|
||
|
#endif
|
||
|
|
||
|
//
|
||
|
// Group structure
|
||
|
//
|
||
|
|
||
|
typedef struct _LOCK_INFO {
|
||
|
DWORD Module: 5;
|
||
|
DWORD ThreadId: 11;
|
||
|
DWORD LineNumber: 16;
|
||
|
} LOCK_INFO, *PLOCK_INFO;
|
||
|
|
||
|
typedef struct FM_GROUP {
|
||
|
DWORD dwStructState;
|
||
|
LIST_ENTRY Contains; // List of root resources in this Group
|
||
|
LIST_ENTRY PreferredOwners; // Ordered list of preferred owners
|
||
|
LIST_ENTRY DmRundownList; // DM rundown list
|
||
|
DWORD OrderedOwners; // # of ordered owners in above list
|
||
|
CRITICAL_SECTION Lock; // Critical section for this Group
|
||
|
DWORD LockIndex;
|
||
|
DWORD UnlockIndex;
|
||
|
LOCK_INFO LockTable[FM_MAX_LOCK_ENTRIES];
|
||
|
LOCK_INFO UnlockTable[FM_MAX_LOCK_ENTRIES];
|
||
|
CLUSTER_GROUP_STATE State; // State of the Group
|
||
|
PRESOURCE_ENUM MovingList; // Ptr to List of moving resources
|
||
|
BOOL Initialized; // TRUE if registry parameters read
|
||
|
BOOL InitFailed; // TRUE if a resource fails to init
|
||
|
PNM_NODE OwnerNode; // Ptr to owner node. NULL if not known
|
||
|
UCHAR FailbackType; // See AutoFailbackTypes
|
||
|
UCHAR FailbackWindowStart; // 0-24 hours
|
||
|
UCHAR FailbackWindowEnd; // 0-24 hours (0 is immediate)
|
||
|
UCHAR FailoverPeriod; // 1-24 hours (0 is infinite)
|
||
|
DWORD FailoverThreshold; // 1-N failovers (0 is infinite)
|
||
|
CLUSTER_GROUP_STATE PersistentState; // Preferred state of this group
|
||
|
DWORD FailureTime; // Time of first failure
|
||
|
DWORD NumberOfFailures; // Number of failures.
|
||
|
HDMKEY RegistryKey;
|
||
|
LIST_ENTRY WaitQueue; // chained FM_WAIT_BLOCK structures
|
||
|
DWORD StateSequence;
|
||
|
HANDLE hPendingEvent;
|
||
|
PNM_NODE pIntendedOwner;
|
||
|
LPWSTR lpszAntiAffinityClassName; // Anti-affinity property
|
||
|
} FM_GROUP, *PFM_GROUP;
|
||
|
|
||
|
|
||
|
#define FM_GROUP_STRUCT_CREATED 0x00000001
|
||
|
#define FM_GROUP_STRUCT_INITIALIZED 0x00000002
|
||
|
#define FM_GROUP_STRUCT_MARKED_FOR_DELETE 0x00000004
|
||
|
#define FM_GROUP_STRUCT_MARKED_FOR_MOVE_ON_FAIL 0x00000008
|
||
|
#define FM_GROUP_STRUCT_MARKED_FOR_REGULAR_MOVE 0x00000010
|
||
|
#define FM_GROUP_STRUCT_MARKED_FOR_PENDING_ACTION 0x00000020
|
||
|
|
||
|
#define IS_VALID_FM_GROUP(pFmGroup) \
|
||
|
(!(pFmGroup->dwStructState & FM_GROUP_STRUCT_MARKED_FOR_DELETE))
|
||
|
|
||
|
//
|
||
|
#define IS_PENDING_FM_GROUP(pFmGroup) \
|
||
|
(pFmGroup->dwStructState & FM_GROUP_STRUCT_MARKED_FOR_PENDING_ACTION)
|
||
|
|
||
|
// Resource structure and types
|
||
|
//
|
||
|
//
|
||
|
// Resource structure
|
||
|
//
|
||
|
|
||
|
// Define Flags
|
||
|
#define RESOURCE_SEPARATE_MONITOR 1
|
||
|
#define RESOURCE_CREATED 2
|
||
|
#define RESOURCE_WAITING 4
|
||
|
|
||
|
|
||
|
typedef struct FM_RESOURCE {
|
||
|
DWORD dwStructState;
|
||
|
LIST_ENTRY DependsOn;
|
||
|
LIST_ENTRY ProvidesFor;
|
||
|
LIST_ENTRY PossibleOwners; // List of possible owners
|
||
|
LIST_ENTRY ContainsLinkage; // Linkage onto FM_GROUP.Contains
|
||
|
LIST_ENTRY DmRundownList; // DM rundown list
|
||
|
//SS: for now we dont use resource locks, so dont create it and leak it !
|
||
|
//CRITICAL_SECTION Lock;
|
||
|
RESID Id;
|
||
|
CLUSTER_RESOURCE_STATE State;
|
||
|
BOOL QuorumResource;
|
||
|
LPWSTR Dependencies;
|
||
|
LPWSTR DebugPrefix;
|
||
|
DWORD DependenciesSize;
|
||
|
struct RESMON *Monitor;
|
||
|
PFM_RESTYPE Type;
|
||
|
PFM_GROUP Group;
|
||
|
ULONG Flags;
|
||
|
DWORD LooksAlivePollInterval;
|
||
|
DWORD IsAlivePollInterval;
|
||
|
CLUSTER_RESOURCE_STATE PersistentState;
|
||
|
DWORD RestartAction;
|
||
|
DWORD RestartThreshold;
|
||
|
DWORD RestartPeriod;
|
||
|
DWORD NumberOfFailures;
|
||
|
DWORD PendingTimeout;
|
||
|
HANDLE PendingEvent;
|
||
|
HDMKEY RegistryKey;
|
||
|
DWORD FailureTime;
|
||
|
PVOID CheckpointState; // for use by checkpoint manager
|
||
|
DWORD ExFlags; // Extrinsic flags
|
||
|
DWORD Characteristic;
|
||
|
DWORD StateSequence;
|
||
|
BOOL PossibleList; // TRUE if possible list entries specified
|
||
|
DWORD BlockingQuorum; // 1 if shared lock held, blocking quorum
|
||
|
HANDLE hTimer; // handle to timer used for delayed restart
|
||
|
DWORD RetryPeriodOnFailure; //Time,in milliseconds, after which a restart will be attempted
|
||
|
} FM_RESOURCE, *PFM_RESOURCE;
|
||
|
|
||
|
|
||
|
#define FM_RESOURCE_STRUCT_CREATED 0x00000001
|
||
|
#define FM_RESOURCE_STRUCT_INITIALIZED 0x00000002
|
||
|
#define FM_RESOURCE_STRUCT_MARKED_FOR_DELETE 0x00000004
|
||
|
|
||
|
#define IS_VALID_FM_RESOURCE(pFmResource) \
|
||
|
(!(pFmResource->dwStructState & FM_RESOURCE_STRUCT_MARKED_FOR_DELETE))
|
||
|
|
||
|
|
||
|
//
|
||
|
// Dependency structure
|
||
|
//
|
||
|
typedef struct dependency {
|
||
|
LIST_ENTRY DependentLinkage;
|
||
|
PFM_RESOURCE DependentResource;
|
||
|
LIST_ENTRY ProviderLinkage;
|
||
|
PFM_RESOURCE ProviderResource;
|
||
|
} DEPENDENCY, *PDEPENDENCY;
|
||
|
|
||
|
//
|
||
|
// AutoFailbackType
|
||
|
//
|
||
|
|
||
|
typedef enum {
|
||
|
GroupNoFailback,
|
||
|
GroupFailback
|
||
|
} GROUP_FAILBACK_TYPE;
|
||
|
|
||
|
|
||
|
//
|
||
|
// Group Preferred Owners structure
|
||
|
//
|
||
|
|
||
|
typedef struct PREFERRED_ENTRY {
|
||
|
LIST_ENTRY PreferredLinkage;
|
||
|
PNM_NODE PreferredNode;
|
||
|
} PREFERRED_ENTRY, *PPREFERRED_ENTRY;
|
||
|
|
||
|
|
||
|
//
|
||
|
// Resource Possible Owners structure
|
||
|
//
|
||
|
|
||
|
typedef struct POSSIBLE_ENTRY {
|
||
|
LIST_ENTRY PossibleLinkage;
|
||
|
PNM_NODE PossibleNode;
|
||
|
} POSSIBLE_ENTRY, *PPOSSIBLE_ENTRY;
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
// Public function interfaces
|
||
|
//
|
||
|
|
||
|
//
|
||
|
// Startup, online and shutdown
|
||
|
//
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
FmInitialize(
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
BOOL
|
||
|
FmArbitrateQuorumResource(
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
|
||
|
VOID
|
||
|
FmHoldIO(
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
|
||
|
VOID
|
||
|
FmResumeIO(
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
FmFindQuorumResource(
|
||
|
OUT PFM_RESOURCE *ppResource
|
||
|
);
|
||
|
|
||
|
DWORD FmBringQuorumOnline();
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
FmFindQuorumOwnerNodeId(
|
||
|
IN PFM_RESOURCE pResource
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
FmGetQuorumResource(
|
||
|
OUT PFM_GROUP *ppQuoGroup,
|
||
|
OUT LPDWORD lpdwSignature OPTIONAL
|
||
|
);
|
||
|
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
FmSetQuorumResource(
|
||
|
IN PFM_RESOURCE Resource,
|
||
|
IN LPCWSTR lpszLogPathName,
|
||
|
IN DWORD dwMaxQuorumLogSize
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
FmBackupClusterDatabase(
|
||
|
IN LPCWSTR lpszPathName
|
||
|
);
|
||
|
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
FmFormNewClusterPhase1(
|
||
|
IN PFM_GROUP pQuoGroup
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
FmFormNewClusterPhase2(
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
FmJoinPhase1(
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
FmJoinPhase2(
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
FmJoinPhase3(
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
|
||
|
VOID
|
||
|
FmShutdownGroups(
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
FmShutdown(
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
|
||
|
//
|
||
|
// Management APIs for groups
|
||
|
//
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
FmOnlineGroup(
|
||
|
IN PFM_GROUP Group
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
FmOfflineGroup(
|
||
|
IN PFM_GROUP Group
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
FmMoveGroup(
|
||
|
IN PFM_GROUP Group,
|
||
|
IN PNM_NODE DestinationNode OPTIONAL
|
||
|
);
|
||
|
|
||
|
PFM_GROUP
|
||
|
WINAPI
|
||
|
FmCreateGroup(
|
||
|
IN LPWSTR GroupId,
|
||
|
IN LPCWSTR GroupName
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
FmDeleteGroup(
|
||
|
IN PFM_GROUP Group
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
FmSetGroupName(
|
||
|
IN PFM_GROUP Group,
|
||
|
IN LPCWSTR FriendlyName
|
||
|
);
|
||
|
|
||
|
CLUSTER_GROUP_STATE
|
||
|
WINAPI
|
||
|
FmGetGroupState(
|
||
|
IN PFM_GROUP Group,
|
||
|
OUT LPWSTR NodeName,
|
||
|
IN OUT PDWORD NameLength
|
||
|
);
|
||
|
|
||
|
|
||
|
//
|
||
|
// Check if a cluster partition exists
|
||
|
//
|
||
|
|
||
|
BOOL
|
||
|
WINAPI
|
||
|
FmVerifyNodeDown(
|
||
|
IN PNM_NODE Node,
|
||
|
OUT LPBOOL IsDown
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
FmEvictNode(
|
||
|
IN PNM_NODE Node
|
||
|
);
|
||
|
|
||
|
|
||
|
//
|
||
|
// enumeration callback routine definitions
|
||
|
//
|
||
|
typedef BOOL (*FM_ENUM_GROUP_RESOURCE_ROUTINE)(
|
||
|
IN PVOID Context1,
|
||
|
IN PVOID Context2,
|
||
|
IN PVOID Resource,
|
||
|
IN LPCWSTR Name
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
FmEnumerateGroupResources(
|
||
|
IN PFM_GROUP Group,
|
||
|
IN FM_ENUM_GROUP_RESOURCE_ROUTINE EnumerationRoutine,
|
||
|
IN PVOID Context1,
|
||
|
IN PVOID Context2
|
||
|
);
|
||
|
|
||
|
|
||
|
//
|
||
|
// Management APIs for resources
|
||
|
//
|
||
|
|
||
|
PFM_RESOURCE
|
||
|
WINAPI
|
||
|
FmCreateResource(
|
||
|
IN PFM_GROUP Group,
|
||
|
IN LPWSTR ResourceId,
|
||
|
IN LPCWSTR ResourceName,
|
||
|
IN LPCWSTR ResourceType,
|
||
|
IN DWORD dwFlags
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
FmOnlineResource(
|
||
|
IN PFM_RESOURCE Resource
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
FmOfflineResource(
|
||
|
IN PFM_RESOURCE Resource
|
||
|
);
|
||
|
|
||
|
CLUSTER_RESOURCE_STATE
|
||
|
WINAPI
|
||
|
FmGetResourceState(
|
||
|
IN PFM_RESOURCE Resource,
|
||
|
OUT LPWSTR NodeName,
|
||
|
IN OUT PDWORD NameLength
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
FmFailResource(
|
||
|
IN PFM_RESOURCE Resource
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
FmDeleteResource(
|
||
|
IN PFM_RESOURCE Resource
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
FmSetResourceName(
|
||
|
IN PFM_RESOURCE Resource,
|
||
|
IN LPCWSTR FriendlyName
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
FmAddResourceDependency(
|
||
|
IN PFM_RESOURCE Resource,
|
||
|
IN PFM_RESOURCE DependentResource
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
FmRemoveResourceDependency(
|
||
|
IN PFM_RESOURCE Resource,
|
||
|
IN PFM_RESOURCE DependentResource
|
||
|
);
|
||
|
|
||
|
BOOL
|
||
|
FmDependentResource(
|
||
|
IN PFM_RESOURCE Resource,
|
||
|
IN PFM_RESOURCE DependentResource,
|
||
|
IN BOOL ImmediateOnly
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
FmEnumResourceDependent(
|
||
|
IN PFM_RESOURCE Resource,
|
||
|
IN DWORD Index,
|
||
|
OUT PFM_RESOURCE *DependentResource
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
FmEnumResourceProvider(
|
||
|
IN PFM_RESOURCE Resource,
|
||
|
IN DWORD Index,
|
||
|
OUT PFM_RESOURCE *ProviderResource
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
FmEnumResourceNode(
|
||
|
IN PFM_RESOURCE Resource,
|
||
|
IN DWORD Index,
|
||
|
OUT PNM_NODE *ProviderResource
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
FmChangeResourceNode(
|
||
|
IN PFM_RESOURCE Resource,
|
||
|
IN PNM_NODE Node,
|
||
|
IN BOOL Add
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
FmCreateResourceType(
|
||
|
IN LPCWSTR lpszTypeName,
|
||
|
IN LPCWSTR lpszDisplayName,
|
||
|
IN LPCWSTR lpszDllName,
|
||
|
IN DWORD dwLooksAlive,
|
||
|
IN DWORD dwIsAlive
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
FmDeleteResourceType(
|
||
|
IN LPCWSTR TypeName
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
FmEnumResourceTypeNode(
|
||
|
IN PFM_RESTYPE pResType,
|
||
|
IN DWORD dwIndex,
|
||
|
OUT PNM_NODE *pPossibleNode
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
FmChangeResourceGroup(
|
||
|
IN PFM_RESOURCE Resource,
|
||
|
IN PFM_GROUP Group
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
FmChangeClusterName(
|
||
|
IN LPCWSTR NewName
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
FmNetNameParseProperties(
|
||
|
IN PUCHAR InBuffer,
|
||
|
IN DWORD InBufferSize,
|
||
|
OUT LPWSTR *ppszClusterName
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
FmResourceControl(
|
||
|
IN PFM_RESOURCE Resource,
|
||
|
IN PNM_NODE Node OPTIONAL,
|
||
|
IN DWORD ControlCode,
|
||
|
IN PUCHAR InBuffer,
|
||
|
IN DWORD InBufferSize,
|
||
|
OUT PUCHAR OutBuffer,
|
||
|
IN DWORD OutBufferSize,
|
||
|
OUT LPDWORD BytesReturned,
|
||
|
OUT LPDWORD Required
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
FmResourceTypeControl(
|
||
|
IN LPCWSTR ResourceTypeName,
|
||
|
IN PNM_NODE Node OPTIONAL,
|
||
|
IN DWORD ControlCode,
|
||
|
IN PUCHAR InBuffer,
|
||
|
IN DWORD InBufferSize,
|
||
|
OUT PUCHAR OutBuffer,
|
||
|
IN DWORD OutBufferSize,
|
||
|
OUT LPDWORD BytesReturned,
|
||
|
OUT LPDWORD Required
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
FmGroupControl(
|
||
|
IN PFM_GROUP Group,
|
||
|
IN PNM_NODE Node OPTIONAL,
|
||
|
IN DWORD ControlCode,
|
||
|
IN PUCHAR InBuffer,
|
||
|
IN DWORD InBufferSize,
|
||
|
OUT PUCHAR OutBuffer,
|
||
|
IN DWORD OutBufferSize,
|
||
|
OUT LPDWORD BytesReturned,
|
||
|
OUT LPDWORD Required
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// Routines for manipulating dependency trees
|
||
|
//
|
||
|
typedef struct FM_DEPENDENCY_TREE {
|
||
|
LIST_ENTRY ListHead;
|
||
|
} FM_DEPENDENCY_TREE, *PFM_DEPENDENCY_TREE;
|
||
|
|
||
|
typedef struct FM_DEPENDTREE_ENTRY {
|
||
|
LIST_ENTRY ListEntry;
|
||
|
PFM_RESOURCE Resource;
|
||
|
} FM_DEPENDTREE_ENTRY, *PFM_DEPENDTREE_ENTRY;
|
||
|
|
||
|
PFM_DEPENDENCY_TREE
|
||
|
FmCreateFullDependencyTree(
|
||
|
IN PFM_RESOURCE Resource
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
FmDestroyFullDependencyTree(
|
||
|
IN PFM_DEPENDENCY_TREE Tree
|
||
|
);
|
||
|
|
||
|
|
||
|
BOOL
|
||
|
FmCheckNetworkDependency(
|
||
|
IN LPCWSTR DependentNetwork
|
||
|
);
|
||
|
|
||
|
|
||
|
DWORD
|
||
|
FmBuildWINS(
|
||
|
IN DWORD dwFixUpType,
|
||
|
OUT PVOID *ppPropertyList,
|
||
|
OUT LPDWORD pdwPropertyListSize,
|
||
|
OUT LPWSTR *pszKeyName
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
FmBuildDHCP(
|
||
|
IN DWORD dwFixUpType,
|
||
|
OUT PVOID *ppPropertyList,
|
||
|
OUT LPDWORD pdwPropertyListSize,
|
||
|
OUT LPWSTR * pszKeyName
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
FmBuildIIS(
|
||
|
IN DWORD dwFixUpType,
|
||
|
OUT PVOID *ppPropertyList,
|
||
|
OUT LPDWORD pdwPropertyListSize,
|
||
|
OUT LPWSTR * pszKeyName
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
FmBuildSMTP(
|
||
|
IN DWORD dwFixUpType,
|
||
|
OUT PVOID *ppPropertyList,
|
||
|
OUT LPDWORD pdwPropertyListSize,
|
||
|
OUT LPWSTR * pszKeyName
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
FmBuildNNTP(
|
||
|
IN DWORD dwFixUpType,
|
||
|
OUT PVOID *ppPropertyList,
|
||
|
OUT LPDWORD pdwPropertyListSize,
|
||
|
OUT LPWSTR * pszKeyName
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
FmBuildMSDTC(
|
||
|
IN DWORD dwFixUpType,
|
||
|
OUT PVOID * ppPropertyList,
|
||
|
OUT LPDWORD pdwPropertyListSize,
|
||
|
OUT LPWSTR * pszKeyName
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
FmBuildNewMSMQ(
|
||
|
IN DWORD dwFixUpType,
|
||
|
OUT PVOID * ppPropertyList,
|
||
|
OUT LPDWORD pdwPropertyListSize,
|
||
|
OUT LPWSTR * pszKeyName
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
FmBuildClusterProp(
|
||
|
IN DWORD dwFixUpType,
|
||
|
OUT PVOID * ppPropertyList,
|
||
|
OUT LPDWORD pdwPropertyListSize,
|
||
|
OUT LPWSTR * pszKeyName
|
||
|
);
|
||
|
|
||
|
|
||
|
DWORD
|
||
|
FmCreateRpcBindings(
|
||
|
PNM_NODE Node
|
||
|
);
|
||
|
|
||
|
|
||
|
//callback for registry fixups (resource type addition)
|
||
|
DWORD
|
||
|
FmFixupNotifyCb(VOID);
|
||
|
|
||
|
|
||
|
//the callback registered for object notifications
|
||
|
typedef void (WINAPI *FM_ONLINE_ONTHISNODE_CB)(
|
||
|
);
|
||
|
|
||
|
void FmCheckQuorumState(
|
||
|
IN FM_ONLINE_ONTHISNODE_CB OnLineOnThisNodeCb,
|
||
|
OUT PBOOL pbQuorumOfflineOnThisNode
|
||
|
);
|
||
|
|
||
|
DWORD FmDoesQuorumAllowJoin();
|
||
|
|
||
|
DWORD FmDoesQuorumAllowLogging();
|
||
|
|
||
|
//Fixup function for AdminExt value
|
||
|
DWORD
|
||
|
FmFixupAdminExt(VOID);
|
||
|
|
||
|
#endif //_FM_H
|