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.
 
 
 
 
 
 

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