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.
596 lines
11 KiB
596 lines
11 KiB
/*++
|
|
|
|
Copyright (c) 1996 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
dm.h
|
|
|
|
Abstract:
|
|
|
|
Public data structures and procedure prototypes for the
|
|
Config Database Manager (DM) subcomponent of the NT Cluster Service
|
|
|
|
Author:
|
|
|
|
John Vert (jvert) 24-Apr-1996
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
#ifndef _DM_H
|
|
#define _DM_H
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
//
|
|
// Define public structures and types
|
|
//
|
|
typedef struct _HDMKEY *HDMKEY;
|
|
|
|
//
|
|
// Definitions for GUM update types
|
|
//
|
|
// The first entries in this list are auto-marshalled through Gum...Ex.
|
|
// Any updates that are not auto-marshalled must come after DmUpdateMaxAuto
|
|
//
|
|
typedef enum {
|
|
DmUpdateCreateKey = 0,
|
|
DmUpdateSetSecurity,
|
|
DmUpdateMaxAuto = 0x1000,
|
|
DmUpdateDeleteKey,
|
|
DmUpdateSetValue,
|
|
DmUpdateDeleteValue,
|
|
DmUpdateJoin
|
|
} DM_UPDATE_TYPE;
|
|
|
|
|
|
extern HDMKEY DmClusterParametersKey;
|
|
extern HDMKEY DmResourcesKey;
|
|
extern HDMKEY DmResourceTypesKey;
|
|
extern HDMKEY DmQuorumKey;
|
|
extern HDMKEY DmGroupsKey;
|
|
extern HDMKEY DmNodesKey;
|
|
extern HDMKEY DmNetworksKey;
|
|
extern HDMKEY DmNetInterfacesKey;
|
|
|
|
extern WCHAR DmpResourceListKeyName[];
|
|
extern WCHAR DmpResourceTypeListKeyName[];
|
|
extern WCHAR DmpGroupListKeyName[];
|
|
extern WCHAR DmpNodeListKeyName[];
|
|
extern WCHAR DmpTransportListKeyName[];
|
|
extern WCHAR DmpInterconnectListKeyName[];
|
|
extern const WCHAR DmpClusterParametersKeyName[];
|
|
|
|
extern DWORD gbIsQuoResEnoughSpace;
|
|
|
|
//define public cluster key value names
|
|
extern const WCHAR cszPath[];
|
|
extern const WCHAR cszMaxQuorumLogSize[];
|
|
extern const WCHAR cszParameters[];
|
|
|
|
//other const strings
|
|
extern const WCHAR cszClusFilePath[];
|
|
extern const WCHAR cszQuoFileName[];
|
|
extern const WCHAR cszQuoTombStoneFile[];
|
|
extern const WCHAR cszTmpQuoTombStoneFile[];
|
|
|
|
//local transaction handle
|
|
typedef HANDLE HLOCALXSACTION;
|
|
|
|
//
|
|
// Define Macros
|
|
//
|
|
|
|
|
|
#define DmQuerySz(Key, ValueName, StringBuffer, StringBufferSize, StringSize) \
|
|
DmQueryString( Key, \
|
|
ValueName, \
|
|
REG_SZ, \
|
|
StringBuffer, \
|
|
StringBufferSize, \
|
|
StringSize )
|
|
|
|
#define DmQueryMultiSz(Key,ValueName,StringBuffer,StringBufferSize,StringSize) \
|
|
DmQueryString( Key, \
|
|
ValueName, \
|
|
REG_MULTI_SZ, \
|
|
StringBuffer, \
|
|
StringBufferSize, \
|
|
StringSize )
|
|
|
|
//
|
|
// Define public interfaces
|
|
//
|
|
|
|
DWORD
|
|
DmInitialize(
|
|
VOID
|
|
);
|
|
|
|
DWORD
|
|
DmShutdown(
|
|
VOID
|
|
);
|
|
|
|
VOID DmShutdownUpdates(
|
|
VOID
|
|
);
|
|
|
|
DWORD
|
|
DmFormNewCluster(
|
|
VOID
|
|
);
|
|
|
|
DWORD
|
|
DmJoin(
|
|
IN RPC_BINDING_HANDLE RpcBinding,
|
|
OUT DWORD *StartSequence
|
|
);
|
|
|
|
DWORD
|
|
DmUpdateFormNewCluster(
|
|
VOID
|
|
);
|
|
|
|
DWORD
|
|
DmCompleteFormNewCluster(
|
|
VOID
|
|
);
|
|
|
|
DWORD
|
|
DmUpdateJoinCluster(
|
|
VOID
|
|
);
|
|
|
|
DWORD
|
|
DmWaitQuorumResOnline(
|
|
VOID
|
|
);
|
|
|
|
DWORD DmRollChanges(VOID);
|
|
|
|
DWORD DmPauseDiskManTimer(VOID);
|
|
|
|
DWORD DmRestartDiskManTimer(VOID);
|
|
|
|
DWORD DmPrepareQuorumResChange(
|
|
IN PVOID pResource,
|
|
IN LPCWSTR lpszQuorumLogPath,
|
|
IN DWORD dwMaxQuoLogSize
|
|
);
|
|
|
|
DWORD DmCompleteQuorumResChange(
|
|
IN LPCWSTR lpszOldQuoResId,
|
|
IN LPCWSTR lpszOldQuoLogPath
|
|
);
|
|
|
|
void DmSwitchToNewQuorumLog(
|
|
IN LPCWSTR lpszQuorumLogPath,
|
|
IN DWORD dwNewQuorumResourceCharacteristics
|
|
);
|
|
|
|
DWORD DmReinstallTombStone(
|
|
IN LPCWSTR lpszQuoLogPath
|
|
);
|
|
|
|
DWORD DmGetQuorumLogPath(
|
|
IN LPWSTR lpszQuorumLogPath,
|
|
IN DWORD dwSize
|
|
);
|
|
|
|
DWORD DmGetQuorumLogMaxSize(
|
|
OUT LPDWORD pdwLogSize
|
|
);
|
|
|
|
DWORD DmBackupClusterDatabase(
|
|
IN LPCWSTR lpszPathName
|
|
);
|
|
|
|
|
|
HDMKEY
|
|
DmGetRootKey(
|
|
IN DWORD samDesired
|
|
);
|
|
|
|
HDMKEY
|
|
DmCreateKey(
|
|
IN HDMKEY hKey,
|
|
IN LPCWSTR lpSubKey,
|
|
IN DWORD dwOptions,
|
|
IN DWORD samDesired,
|
|
IN OPTIONAL LPVOID lpSecurityDescriptor,
|
|
OUT LPDWORD lpDisposition
|
|
);
|
|
|
|
HDMKEY
|
|
DmOpenKey(
|
|
IN HDMKEY hKey,
|
|
IN LPCWSTR lpSubKey,
|
|
IN DWORD samDesired
|
|
);
|
|
|
|
DWORD
|
|
DmCloseKey(
|
|
IN HDMKEY hKey
|
|
);
|
|
|
|
DWORD
|
|
DmEnumKey(
|
|
IN HDMKEY hKey,
|
|
IN DWORD dwIndex,
|
|
OUT LPWSTR lpName,
|
|
IN OUT LPDWORD lpcbName,
|
|
OUT OPTIONAL PFILETIME lpLastWriteTime
|
|
);
|
|
|
|
DWORD
|
|
DmSetValue(
|
|
IN HDMKEY hKey,
|
|
IN LPCWSTR lpValueName,
|
|
IN DWORD dwType,
|
|
IN CONST BYTE *lpData,
|
|
IN DWORD cbData
|
|
);
|
|
|
|
DWORD
|
|
DmDeleteValue(
|
|
IN HDMKEY hKey,
|
|
IN LPCWSTR lpValueName
|
|
);
|
|
|
|
DWORD
|
|
DmQueryValue(
|
|
IN HDMKEY hKey,
|
|
IN LPCWSTR lpValueName,
|
|
OUT LPDWORD lpType,
|
|
OUT LPBYTE lpData,
|
|
IN OUT LPDWORD lpcbData
|
|
);
|
|
|
|
DWORD
|
|
DmDeleteKey(
|
|
IN HDMKEY hKey,
|
|
IN LPCWSTR lpSubKey
|
|
);
|
|
|
|
DWORD
|
|
DmGetKeySecurity(
|
|
IN HDMKEY hKey,
|
|
IN SECURITY_INFORMATION RequestedInformation,
|
|
OUT PSECURITY_DESCRIPTOR pSecurityDescriptor,
|
|
IN LPDWORD lpcbSecurityDescriptor
|
|
);
|
|
|
|
DWORD
|
|
DmSetKeySecurity(
|
|
IN HDMKEY hKey,
|
|
IN SECURITY_INFORMATION SecurityInformation,
|
|
IN PSECURITY_DESCRIPTOR pSecurityDescriptor
|
|
);
|
|
|
|
|
|
DWORD
|
|
DmDeleteTree(
|
|
IN HDMKEY hKey,
|
|
IN LPCWSTR lpSubKey
|
|
);
|
|
|
|
DWORD
|
|
DmEnumValue(
|
|
IN HDMKEY hKey,
|
|
IN DWORD dwIndex,
|
|
OUT LPWSTR lpValueName,
|
|
IN OUT LPDWORD lpcbValueName,
|
|
OUT LPDWORD lpType,
|
|
OUT LPBYTE lpData,
|
|
IN OUT LPDWORD lpcbData
|
|
);
|
|
|
|
DWORD
|
|
DmQueryDword(
|
|
IN HDMKEY hKey,
|
|
IN LPCWSTR lpValueName,
|
|
OUT LPDWORD lpValue,
|
|
IN LPDWORD lpDefaultValue OPTIONAL
|
|
);
|
|
|
|
DWORD
|
|
DmQueryString(
|
|
IN HDMKEY Key,
|
|
IN LPCWSTR ValueName,
|
|
IN DWORD ValueType,
|
|
IN LPWSTR *StringBuffer,
|
|
IN OUT LPDWORD StringBufferSize,
|
|
OUT LPDWORD StringSize
|
|
);
|
|
|
|
LPWSTR
|
|
DmEnumMultiSz(
|
|
IN LPWSTR MszString,
|
|
IN DWORD MszStringLength,
|
|
IN DWORD StringIndex
|
|
);
|
|
|
|
typedef
|
|
VOID
|
|
(WINAPI *PENUM_KEY_CALLBACK) (
|
|
IN HDMKEY Key,
|
|
IN PWSTR KeyName,
|
|
IN PVOID Context
|
|
);
|
|
|
|
VOID
|
|
DmEnumKeys(
|
|
IN HDMKEY RootKey,
|
|
IN PENUM_KEY_CALLBACK Callback,
|
|
IN PVOID Context
|
|
);
|
|
|
|
typedef
|
|
BOOL
|
|
(WINAPI *PENUM_VALUE_CALLBACK) (
|
|
IN LPWSTR ValueName,
|
|
IN LPVOID ValueData,
|
|
IN DWORD ValueType,
|
|
IN DWORD ValueSize,
|
|
IN PVOID Context
|
|
);
|
|
|
|
VOID
|
|
DmEnumValues(
|
|
IN HDMKEY RootKey,
|
|
IN PENUM_VALUE_CALLBACK Callback,
|
|
IN PVOID Context
|
|
);
|
|
|
|
DWORD
|
|
DmQueryInfoKey(
|
|
IN HDMKEY hKey,
|
|
OUT LPDWORD SubKeys,
|
|
OUT LPDWORD MaxSubKeyLen,
|
|
OUT LPDWORD Values,
|
|
OUT LPDWORD MaxValueNameLen,
|
|
OUT LPDWORD MaxValueLen,
|
|
OUT LPDWORD lpcbSecurityDescriptor,
|
|
OUT PFILETIME FileTime
|
|
);
|
|
|
|
//
|
|
// Local registry modification routines for use in a GUM update handler.
|
|
//
|
|
HDMKEY
|
|
DmLocalCreateKey(
|
|
IN HLOCALXSACTION hLocalXsaction,
|
|
IN HDMKEY hKey,
|
|
IN LPCWSTR lpSubKey,
|
|
IN DWORD dwOptions,
|
|
IN DWORD samDesired,
|
|
IN OPTIONAL LPVOID lpSecurityDescriptor,
|
|
OUT LPDWORD lpDisposition
|
|
);
|
|
|
|
DWORD
|
|
DmLocalSetValue(
|
|
IN HLOCALXSACTION hLocalXsaction,
|
|
IN HDMKEY hKey,
|
|
IN LPCWSTR lpValueName,
|
|
IN DWORD dwType,
|
|
IN CONST BYTE *lpData,
|
|
IN DWORD cbData
|
|
);
|
|
|
|
DWORD
|
|
DmLocalDeleteValue(
|
|
IN HLOCALXSACTION hLocalXsaction,
|
|
IN HDMKEY hKey,
|
|
IN LPCWSTR lpValueName
|
|
);
|
|
|
|
DWORD
|
|
DmLocalDeleteKey(
|
|
IN HLOCALXSACTION hLocalXsaction,
|
|
IN HDMKEY hKey,
|
|
IN LPCWSTR lpSubKey
|
|
);
|
|
|
|
DWORD
|
|
DmLocalRemoveFromMultiSz(
|
|
IN HLOCALXSACTION hLocalXsaction,
|
|
IN HDMKEY hKey,
|
|
IN LPCWSTR lpValueName,
|
|
IN LPCWSTR lpString
|
|
);
|
|
|
|
DWORD
|
|
DmLocalAppendToMultiSz(
|
|
IN HLOCALXSACTION hLocalXsaction,
|
|
IN HDMKEY hKey,
|
|
IN LPCWSTR lpValueName,
|
|
IN LPCWSTR lpString
|
|
);
|
|
|
|
DWORD
|
|
DmLocalDeleteTree(
|
|
IN HLOCALXSACTION hLocalXsaction,
|
|
IN HDMKEY hKey,
|
|
IN LPCWSTR lpSubKey
|
|
);
|
|
|
|
HLOCALXSACTION
|
|
DmBeginLocalUpdate();
|
|
|
|
DWORD
|
|
DmCommitLocalUpdate(
|
|
IN HLOCALXSACTION hLocalXsaction
|
|
);
|
|
|
|
DWORD
|
|
DmAbortLocalUpdate(
|
|
IN HLOCALXSACTION hLocalXsaction);
|
|
|
|
|
|
|
|
//
|
|
// Notification support.
|
|
//
|
|
// Supported completion filters are
|
|
//
|
|
// CLUSTER_CHANGE_REGISTRY_NAME - applies to changes in the namespace. (key creation and deletion).
|
|
// CLUSTER_CHANGE_REGISTRY_ATTRIBUTES - applies to key attributes. The only key attribute is the
|
|
// security descriptor.
|
|
// CLUSTER_CHANGE_REGISTRY_VALUE - applies to creation, modification, or deletion of values.
|
|
//
|
|
|
|
//
|
|
// Notification callback routine
|
|
//
|
|
typedef VOID (*DM_NOTIFY_CALLBACK)(
|
|
IN DWORD_PTR Context1,
|
|
IN DWORD_PTR Context2,
|
|
IN DWORD CompletionFilter,
|
|
IN LPCWSTR RelativeName
|
|
);
|
|
|
|
DWORD
|
|
DmNotifyChangeKey(
|
|
IN HDMKEY hKey,
|
|
IN ULONG CompletionFilter,
|
|
IN BOOL WatchTree,
|
|
IN OPTIONAL PLIST_ENTRY ListHead,
|
|
IN DM_NOTIFY_CALLBACK NotifyCallback,
|
|
IN DWORD_PTR Context1,
|
|
IN DWORD_PTR Context2
|
|
);
|
|
|
|
VOID
|
|
DmRundownList(
|
|
IN PLIST_ENTRY ListHead
|
|
);
|
|
|
|
//
|
|
// A few helper routines.
|
|
//
|
|
DWORD
|
|
DmAppendToMultiSz(
|
|
IN HDMKEY hKey,
|
|
IN LPCWSTR lpValueName,
|
|
IN LPCWSTR lpString
|
|
);
|
|
|
|
DWORD
|
|
DmRemoveFromMultiSz(
|
|
IN HDMKEY hKey,
|
|
IN LPCWSTR lpValueName,
|
|
IN LPCWSTR lpString
|
|
);
|
|
|
|
//
|
|
// Some routines for saving and restoring registry trees
|
|
//
|
|
DWORD
|
|
DmInstallDatabase(
|
|
IN LPWSTR FileName,
|
|
IN OPTIONAL LPCWSTR Directory,
|
|
IN BOOL bDeleteSrcFile
|
|
);
|
|
|
|
DWORD
|
|
DmGetDatabase(
|
|
IN HKEY hKey,
|
|
IN LPWSTR FileName
|
|
);
|
|
|
|
DWORD
|
|
DmCreateTempFileName(
|
|
OUT LPWSTR FileName
|
|
);
|
|
|
|
typedef struct _FILE_PIPE_STATE {
|
|
unsigned long BufferSize;
|
|
char __RPC_FAR *pBuffer;
|
|
QfsHANDLE hFile;
|
|
NM_CRYPTOR Cryptor;
|
|
} FILE_PIPE_STATE;
|
|
|
|
typedef struct _FILE_PIPE {
|
|
BYTE_PIPE Pipe;
|
|
FILE_PIPE_STATE State;
|
|
} FILE_PIPE, *PFILE_PIPE;
|
|
|
|
VOID
|
|
DmInitFilePipe(
|
|
IN PFILE_PIPE FilePipe,
|
|
IN QfsHANDLE hFile
|
|
);
|
|
|
|
VOID
|
|
DmFreeFilePipe(
|
|
IN PFILE_PIPE FilePipe
|
|
);
|
|
|
|
DWORD
|
|
DmPushFile(
|
|
IN LPCWSTR FileName,
|
|
IN BYTE_PIPE Pipe,
|
|
IN BOOL Encrypt
|
|
);
|
|
|
|
DWORD
|
|
DmPullFile(
|
|
IN LPCWSTR FileName,
|
|
IN BYTE_PIPE Pipe
|
|
);
|
|
|
|
DWORD
|
|
DmCommitRegistry(
|
|
VOID
|
|
);
|
|
|
|
DWORD
|
|
DmRollbackRegistry(
|
|
VOID
|
|
);
|
|
|
|
|
|
DWORD
|
|
DmRtlCreateKey(
|
|
IN HDMKEY hKey,
|
|
IN LPCWSTR lpSubKey,
|
|
IN DWORD dwOptions,
|
|
IN DWORD samDesired,
|
|
IN OPTIONAL LPVOID lpSecurityDescriptor,
|
|
OUT HDMKEY * phkResult,
|
|
OUT LPDWORD lpDisposition
|
|
);
|
|
|
|
DWORD
|
|
DmRtlOpenKey(
|
|
IN HDMKEY hKey,
|
|
IN LPCWSTR lpSubKey,
|
|
IN DWORD samDesired,
|
|
OUT HDMKEY * phkResult
|
|
);
|
|
|
|
DWORD
|
|
DmRtlLocalCreateKey(
|
|
IN HLOCALXSACTION hLocalXsaction,
|
|
IN HDMKEY hKey,
|
|
IN LPCWSTR lpSubKey,
|
|
IN DWORD dwOptions,
|
|
IN DWORD samDesired,
|
|
IN OPTIONAL LPVOID lpSecurityDescriptor,
|
|
OUT HDMKEY * phkResult,
|
|
OUT LPDWORD lpDisposition
|
|
);
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif //_DM_H
|