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.
231 lines
5.1 KiB
231 lines
5.1 KiB
/*++
|
|
|
|
Copyright (c) 1996 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
cpp.h
|
|
|
|
Abstract:
|
|
|
|
Private data structures and procedure prototypes for the
|
|
Checkpoint Manager (CP) subcomponent of the NT Cluster Service
|
|
|
|
Author:
|
|
|
|
John Vert (jvert) 1/14/1997
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
#define UNICODE 1
|
|
#include "nt.h"
|
|
#include "ntrtl.h"
|
|
#include "nturtl.h"
|
|
#include "service.h"
|
|
|
|
#define LOG_CURRENT_MODULE LOG_MODULE_CP
|
|
|
|
//global data relating to the quorum resource
|
|
#if NO_SHARED_LOCKS
|
|
extern CRITICAL_SECTION gQuoLock;
|
|
#else
|
|
extern RTL_RESOURCE gQuoLock;
|
|
#endif
|
|
|
|
//
|
|
// This macro validates whether the passed in ID is NULL terminated. This is needed for
|
|
// CP RPCs since all of those pass a string declared not as [string] but as an array of WCHARs whose
|
|
// length is declared as CLUSTER_ID_SIZE. See CpDepositCheckpoint(...) definition in clusrpc.idl
|
|
// for instance. Thus, there is no guarantee that the string will be NULL terminated by RPC runtime.
|
|
// Thus, we need to make sure hackers can't blow us away with junk data directly targetting
|
|
// the RPC endpoint (even though we make that hard with security callbacks.). Note that we
|
|
// can't change the IDL definition since we will break mixed mode clusters.
|
|
//
|
|
#define CP_VALIDATE_ID_STRING( szId ) \
|
|
{ \
|
|
if ( szId [ CLUSTER_ID_SIZE - 1 ] != UNICODE_NULL ) \
|
|
return ( ERROR_INVALID_PARAMETER ); \
|
|
}
|
|
|
|
typedef struct _CP_CALLBACK_CONTEXT {
|
|
PFM_RESOURCE Resource;
|
|
LPCWSTR lpszPathName;
|
|
BOOL IsChangeFileAttribute;
|
|
} CP_CALLBACK_CONTEXT, *PCP_CALLBACK_CONTEXT;
|
|
|
|
typedef struct _CP_RC2_W2k_KEYLEN_STRUCT
|
|
{
|
|
LPCWSTR lpszProviderName;
|
|
DWORD dwDefaultKeyLength;
|
|
DWORD dwDefaultEffectiveKeyLength;
|
|
} CP_RC2_W2k_KEYLEN_STRUCT, *PCP_RC2_W2k_KEYLEN_STRUCT;
|
|
|
|
//
|
|
// Local function prototypes
|
|
//
|
|
DWORD
|
|
CppReadCheckpoint(
|
|
IN PFM_RESOURCE Resource,
|
|
IN DWORD dwCheckpointId,
|
|
IN LPCWSTR lpszFileName,
|
|
IN BOOLEAN fCryptoCheckpoint
|
|
);
|
|
|
|
DWORD
|
|
CppWriteCheckpoint(
|
|
IN PFM_RESOURCE Resource,
|
|
IN DWORD dwCheckpointId,
|
|
IN LPCWSTR lpszFileName,
|
|
IN BOOLEAN fCryptoCheckpoint
|
|
);
|
|
|
|
DWORD
|
|
CppGetCheckpointFile(
|
|
IN PFM_RESOURCE Resource,
|
|
IN DWORD dwId,
|
|
OUT OPTIONAL LPWSTR *pDirectoryName,
|
|
OUT LPWSTR *pFileName,
|
|
IN OPTIONAL LPCWSTR lpszQuorumDir,
|
|
IN BOOLEAN fCryptoCheckpoint
|
|
);
|
|
|
|
DWORD
|
|
CppCheckpoint(
|
|
IN PFM_RESOURCE Resource,
|
|
IN HKEY hKey,
|
|
IN DWORD dwId,
|
|
IN LPCWSTR KeyName
|
|
);
|
|
|
|
//
|
|
// Crypto key checkpoint interfaces
|
|
//
|
|
DWORD
|
|
CpckReplicateCryptoKeys(
|
|
IN PFM_RESOURCE Resource
|
|
);
|
|
|
|
BOOL
|
|
CpckRemoveCheckpointFileCallback(
|
|
IN LPWSTR ValueName,
|
|
IN LPVOID ValueData,
|
|
IN DWORD ValueType,
|
|
IN DWORD ValueSize,
|
|
IN PCP_CALLBACK_CONTEXT Context
|
|
);
|
|
|
|
//
|
|
// Registry watcher interfaces
|
|
//
|
|
DWORD
|
|
CppWatchRegistry(
|
|
IN PFM_RESOURCE Resource
|
|
);
|
|
|
|
DWORD
|
|
CppUnWatchRegistry(
|
|
IN PFM_RESOURCE Resource
|
|
);
|
|
|
|
DWORD
|
|
CppRegisterNotify(
|
|
IN PFM_RESOURCE Resource,
|
|
IN LPCWSTR lpszKeyName,
|
|
IN DWORD dwId
|
|
);
|
|
|
|
DWORD
|
|
CppRundownCheckpoints(
|
|
IN PFM_RESOURCE Resource
|
|
);
|
|
|
|
DWORD
|
|
CppRundownCheckpointById(
|
|
IN PFM_RESOURCE Resource,
|
|
IN DWORD dwId
|
|
);
|
|
|
|
DWORD
|
|
CppInstallDatabase(
|
|
IN HKEY hKey,
|
|
IN LPWSTR FileName
|
|
);
|
|
|
|
|
|
BOOL
|
|
CppRemoveCheckpointFileCallback(
|
|
IN LPWSTR ValueName,
|
|
IN LPVOID ValueData,
|
|
IN DWORD ValueType,
|
|
IN DWORD ValueSize,
|
|
IN PCP_CALLBACK_CONTEXT Context
|
|
);
|
|
|
|
|
|
DWORD CppDeleteCheckpointFile(
|
|
IN PFM_RESOURCE Resource,
|
|
IN DWORD dwCheckpointId,
|
|
IN OPTIONAL LPCWSTR lpszQuorumPath
|
|
);
|
|
|
|
DWORD
|
|
CpckDeleteCheckpointFile(
|
|
IN PFM_RESOURCE Resource,
|
|
IN DWORD dwCheckpointId,
|
|
IN OPTIONAL LPCWSTR lpszQuorumPath
|
|
);
|
|
|
|
DWORD CppDeleteFile(
|
|
IN PFM_RESOURCE Resource,
|
|
IN DWORD dwCheckpointId,
|
|
IN OPTIONAL LPCWSTR lpszQuorumPath
|
|
);
|
|
|
|
DWORD CpckDeleteFile(
|
|
IN PFM_RESOURCE Resource,
|
|
IN DWORD dwCheckpointId,
|
|
IN OPTIONAL LPCWSTR lpszQuorumPath
|
|
);
|
|
|
|
DWORD
|
|
CpckDeleteCryptoFile(
|
|
IN PFM_RESOURCE Resource,
|
|
IN DWORD dwCheckpointId,
|
|
IN OPTIONAL LPCWSTR lpszQuorumPath
|
|
);
|
|
|
|
error_status_t
|
|
CppDepositCheckpoint(
|
|
handle_t IDL_handle,
|
|
LPCWSTR ResourceId,
|
|
DWORD dwCheckpointId,
|
|
BYTE_PIPE CheckpointData,
|
|
BOOLEAN fCryptoCheckpoint
|
|
);
|
|
|
|
error_status_t
|
|
CppRetrieveCheckpoint(
|
|
handle_t IDL_handle,
|
|
LPCWSTR ResourceId,
|
|
DWORD dwCheckpointId,
|
|
BOOLEAN fCryptoCheckpoint,
|
|
BYTE_PIPE CheckpointData
|
|
);
|
|
|
|
error_status_t
|
|
CppDeleteCheckpoint(
|
|
handle_t IDL_handle,
|
|
LPCWSTR ResourceId,
|
|
DWORD dwCheckpointId,
|
|
LPCWSTR lpszQuorumPath,
|
|
BOOL fCryptoCheckpoint
|
|
);
|
|
|
|
BOOL
|
|
CppIsQuorumVolumeOffline(
|
|
VOID
|
|
);
|
|
|
|
extern CRITICAL_SECTION CppNotifyLock;
|
|
extern LIST_ENTRY CpNotifyListHead;
|