|
|
/*++
Copyright (c) 1992 Microsoft Corporation
Module Name:
registry.hxx
Abstract:
This module contains the declarations for the REGISTRY class. REGISTRY is class that provides methods for an application to access the registry of a particular machine.
Author:
Jaime Sasson (jaimes) 01-Mar-1992
Environment:
Ulib, User Mode
--*/
#if !defined( _REGISTRY_ )
#define _REGISTRY_
#include "ulib.hxx"
#include "array.hxx"
#include "regkey.hxx"
#include "regvalue.hxx"
#include "sortlit.hxx"
#if !defined( _AUTOCHECK_ )
#include "winreg.h"
#endif
//
// The enumeration below is used to access the array of open handles
// of the registry
//
typedef enum _PREDEFINED_KEY { PREDEFINED_KEY_CLASSES_ROOT, PREDEFINED_KEY_CURRENT_USER, PREDEFINED_KEY_LOCAL_MACHINE, PREDEFINED_KEY_USERS, PREDEFINED_KEY_CURRENT_CONFIG } PREDEFINED_KEY;
#define NUMBER_OF_PREDEFINED_KEYS 5
//
// The enumeration below contains the error codes that the methods in
// the REGISTRY class can return
//
typedef enum _REGISTRY_ERROR { #if !defined( _AUTOCHECK_ )
REGISTRY_ERROR_BADDB, // Maps ERROR_BADDB
REGISTRY_ERROR_ACCESS_DENIED, // Maps ERROR_ACCESS_DENIED
REGISTRY_ERROR_CANTOPEN, // Maps ERROR_CANT_OPEN
REGISTRY_ERROR_CANTREAD, // Maps ERROR_CANT_READ
REGISTRY_ERROR_INVALID_PARAMETER, // Maps ERROR_INVALID_PARAMETER
REGISTRY_ERROR_OUTOFMEMORY, // Maps ERROR_OUT_OF_MEMORY
#endif
REGISTRY_ERROR_INITIALIZATION_FAILURE, REGISTRY_ERROR_KEY_DOESNT_EXIST, REGISTRY_ERROR_VALUE_EXISTS, REGISTRY_ERROR_VALUE_DOESNT_EXIST, REGISTRY_ERROR_KEY_INFO_NOT_UPDATED, REGISTRY_ERROR_UNKNOWN_ERROR, REGISTRY_ERROR_PRIVILEGE_NOT_HELD, // Maps ERROR_PRIVILEGE_NOT_HELD
REGISTRY_RPC_S_SERVER_UNAVAILABLE, // Maps RPC_S_SERVER_UNAVAILABLE
REGISTRY_ERROR_KEY_DELETED, // Maps ERROR_KEY_DELETED
REGISTRY_ERROR_KEY_NOT_FOUND, // Maps ERROR_FILE_NOT_FOUND
REGISTRY_ERROR_CHILD_MUST_BE_VOLATILE // Maps ERROR_CHILD_MUST_BE_VOLATILE
} REGISTRY_ERROR;
DECLARE_CLASS( REGISTRY );
class REGISTRY : public OBJECT {
public:
DECLARE_CONSTRUCTOR( REGISTRY );
DECLARE_CAST_MEMBER_FUNCTION( REGISTRY );
VIRTUAL ~REGISTRY( );
NONVIRTUAL BOOLEAN Initialize( IN PCWSTRING MachineName DEFAULT NULL, OUT PULONG ErrorCode DEFAULT NULL );
NONVIRTUAL BOOLEAN AddValueEntry( IN PREDEFINED_KEY Predefinedkey, IN PCWSTRING ParentKeyName, IN PCWSTRING KeyName, IN PCREGISTRY_VALUE_ENTRY Value, IN BOOLEAN FailIfExists DEFAULT FALSE, OUT PULONG ErrorCode DEFAULT NULL );
NONVIRTUAL BOOLEAN AddValueEntry( IN PREDEFINED_KEY Predefinedkey, IN OUT PREGISTRY_KEY_INFO KeyInfo, IN PCREGISTRY_VALUE_ENTRY Value, IN BOOLEAN FailIfExists DEFAULT FALSE, OUT PULONG ErrorCode DEFAULT NULL );
#if 0 // NOT_IMPLEMENTED
NONVIRTUAL BOOLEAN // The key copied will be a subkey
CopyKey( // of ToParentName
IN PREDEFINED_KEY FromPredefinedKey, IN PCWSTRING FromParentName, IN PCWSTRING FromKeyName, IN PREDEFINED_KEY ToPredefinedKey, IN PCWSTRING ToParentName, OUT PULONG ErrorCode DEFAULT NULL );
NONVIRTUAL BOOLEAN // The key copied will be a subkey
CopyKey( // of ToParentKey
IN PREDEFINED_KEY FromPredefinedKey, IN PCWSTRING FromParentName, IN PCWSTRING FromKeyName, IN PREDEFINED_KEY ToPredefinedKey, IN OUT PREGISTRY_KEY_INFO ToParentKeyInfo, OUT PULONG ErrorCode DEFAULT NULL );
NONVIRTUAL BOOLEAN CopyAllValueEntries( IN PREDEFINED_KEY FromPredefinedKey, IN PCWSTRING FromParentName, IN PCWSTRING FromKeyName, IN PREDEFINED_KEY ToPredefinedKey, IN PCWSTRING ToParentName, IN PCWSTRING ToKeyName, OUT PULONG ErrorCode DEFAULT NULL );
NONVIRTUAL BOOLEAN CopyAllValueEntries( IN PREDEFINED_KEY FromPredefinedKey, IN PCWSTRING FromParentName, IN PCWSTRING FromKeyName, IN PREDEFINED_KEY ToPredefinedKey, IN OUT PREGISTRY_KEY_INFO ToKeyInfo, OUT PULONG ErrorCode DEFAULT NULL );
NONVIRTUAL BOOLEAN CopyOneValueEntry( IN PREDEFINED_KEY FromPredefinedKey, IN PCWSTRING FromParentName, IN PCWSTRING FromKeyName, IN PCWSTRING FromValueName, IN PREDEFINED_KEY ToPredefinedKey, IN PCWSTRING ToParentName, IN PCWSTRING ToKeyName, OUT PULONG ErrorCode DEFAULT NULL );
NONVIRTUAL BOOLEAN CopyOneValueEntry( IN PREDEFINED_KEY FromPredefinedKey, IN PCWSTRING FromParentName, IN PCWSTRING FromKeyName, IN PCWSTRING FromValueName, IN PREDEFINED_KEY ToPredefinedKey, IN OUT PREGISTRY_KEY_INFO ToKeyInfo, OUT PULONG ErrorCode DEFAULT NULL );
#endif // NOT_IMPLEMENTED
NONVIRTUAL BOOLEAN CreateKey( IN OUT PREGISTRY_KEY_INFO NewSubKeyInfo, IN PREDEFINED_KEY PredefinedKey, OUT PULONG ErrorCode DEFAULT NULL, IN BOOLEAN Volatile DEFAULT FALSE );
NONVIRTUAL BOOLEAN CreateKey( IN PREDEFINED_KEY Predefinedkey, IN OUT PREGISTRY_KEY_INFO ParentKeyInfo, IN OUT PREGISTRY_KEY_INFO NewSubKeyInfo, OUT PULONG ErrorCode DEFAULT NULL, IN BOOLEAN Volatile DEFAULT FALSE );
NONVIRTUAL BOOLEAN DeleteKey( IN PREDEFINED_KEY PredefinedKey, IN PCWSTRING ParentKeyName, IN PCWSTRING KeyName, OUT PULONG ErrorCode DEFAULT NULL );
NONVIRTUAL BOOLEAN DeleteKey( IN PREDEFINED_KEY PredefinedKey, IN OUT PREGISTRY_KEY_INFO ParentKeyInfo, IN PCWSTRING KeyName, OUT PULONG ErrorCode DEFAULT NULL );
NONVIRTUAL BOOLEAN DeleteValueEntry( IN PREDEFINED_KEY PredefinedKey, IN PCWSTRING ParentKeyName, IN PCWSTRING KeyName, IN PCWSTRING ValueName, OUT PULONG ErrorCode DEFAULT NULL );
NONVIRTUAL BOOLEAN DeleteValueEntry( IN PREDEFINED_KEY PredefinedKey, IN OUT PREGISTRY_KEY_INFO KeyInfo, IN PCWSTRING ValueName, OUT PULONG ErrorCode DEFAULT NULL );
NONVIRTUAL BOOLEAN DoesKeyExist( IN PREDEFINED_KEY PredefinedKey, IN PCWSTRING ParentName, IN PCWSTRING KeyName, OUT PULONG ErrorCode DEFAULT NULL );
NONVIRTUAL BOOLEAN DoesValueExist( IN PREDEFINED_KEY PredefinedKey, IN PCWSTRING ParentName, IN PCWSTRING KeyName, IN PCWSTRING ValueName, OUT PULONG ErrorCode DEFAULT NULL );
#if !defined( _AUTOCHECK_ )
NONVIRTUAL BOOLEAN EnableRootNotification( IN PREDEFINED_KEY PredefinedKey, IN HANDLE Event, IN DWORD Filter, IN BOOLEAN WatchTree DEFAULT TRUE );
#endif
NONVIRTUAL PCWSTRING GetMachineName( ) CONST;
NONVIRTUAL BOOLEAN IsAccessAllowed( IN PREDEFINED_KEY PredefinedKey, IN PREGISTRY_KEY_INFO KeyInfo, IN REGSAM SamDesired, OUT PULONG ErrorCode );
NONVIRTUAL BOOLEAN IsRemoteRegistry( ) CONST;
#if !defined( _AUTOCHECK_ )
NONVIRTUAL BOOLEAN LoadHive( IN PREDEFINED_KEY PredefinedKey, IN PREGISTRY_KEY_INFO KeyInfo, IN PCWSTRING FileName, OUT PULONG ErrorCode DEFAULT NULL );
#endif
#if 0 // NOT_IMPLEMENTED
NONVIRTUAL // Subkey moved becomes
BOOLEAN // a subkey of ToParentKeyName
MoveKey( IN PREDEFINED_KEY FromPredefinedKey, IN PCWSTRING FromParentKeyName, IN PCWSTRING FromKeyName, IN PREDEFINED_KEY ToPredefinedKey, IN PCWSTRING ToParentKeyName, OUT PULONG ErrorCode DEFAULT NULL );
NONVIRTUAL BOOLEAN // Subkey moved becomes
MoveKey( // a subkey of FromParentKey
IN PREDEFINED_KEY FromPredefinedKey, IN OUT PREGISTRY_KEY_INFO FromParentKeyInfo, IN PCWSTRING FromKeyName, IN PREDEFINED_KEY ToPredefinedKey, IN OUT PREGISTRY_KEY_INFO ToParentKeyInfo, OUT PULONG ErrorCode DEFAULT NULL );
NONVIRTUAL BOOLEAN MoveAllValueEntries( IN PREDEFINED_KEY FromPredefinedKey, IN PCWSTRING FromParentName, IN PCWSTRING FromKeyName, IN PREDEFINED_KEY ToPredefinedKey, IN PCWSTRING ToParentName, IN PCWSTRING ToKeyName, OUT PULONG ErrorCode DEFAULT NULL );
NONVIRTUAL BOOLEAN MoveAllValueEntries( IN PREDEFINED_KEY FromPredefinedKey, IN OUT PREGISTRY_KEY_INFO FromKeyInfo, IN PREDEFINED_KEY ToPredefinedKey, IN OUT PREGISTRY_KEY_INFO ToKeyInfo, OUT PULONG ErrorCode DEFAULT NULL );
NONVIRTUAL BOOLEAN MoveOneValueEntry( IN PREDEFINED_KEY FromPredefinedKey, IN PCWSTRING FromParentName, IN PCWSTRING FromKeyName, IN PCWSTRING FromValueName, IN PREDEFINED_KEY ToPredefinedKey, IN PCWSTRING ToParentKeyName, IN PCWSTRING ToKeyName, OUT PULONG ErrorCode DEFAULT NULL );
NONVIRTUAL BOOLEAN MoveOneValueEntry( IN PREDEFINED_KEY FromPredefinedKey, IN OUT PREGISTRY_KEY_INFO FromKeyInfo, IN PCWSTRING FromValueName, IN PREDEFINED_KEY ToPredefinedKey, IN OUT PREGISTRY_KEY_INFO ToKeyInfo, OUT PULONG ErrorCode DEFAULT NULL );
#endif // NOT_IMPLEMENTED
NONVIRTUAL BOOLEAN QueryKeyInfo( IN PREDEFINED_KEY PredefinedKey, IN PCWSTRING ParentKeyName, IN PCWSTRING KeyName, OUT PREGISTRY_KEY_INFO KeyInfo, OUT PULONG ErrorCode DEFAULT NULL );
NONVIRTUAL BOOLEAN QueryKeySecurity( IN PREDEFINED_KEY PredefinedKey, IN PCREGISTRY_KEY_INFO KeyInfo, IN SECURITY_INFORMATION SecurityInformation, IN PSECURITY_DESCRIPTOR* SecurityDescriptor, IN PULONG ErrorCode DEFAULT NULL );
NONVIRTUAL BOOLEAN QuerySubKeysInfo( IN PREDEFINED_KEY PredefinedKey, IN PCWSTRING ParentKey, IN PCWSTRING KeyName, IN OUT PARRAY SubKeysInfo, OUT PULONG ErrorCode DEFAULT NULL );
NONVIRTUAL BOOLEAN QueryValue( IN PREDEFINED_KEY PredefinedKey, IN PCWSTRING ParentKeyName, IN PCWSTRING KeyName, IN PCWSTRING ValueName, IN OUT PREGISTRY_VALUE_ENTRY Values, OUT PULONG ErrorCode DEFAULT NULL );
NONVIRTUAL BOOLEAN QueryValues( IN PREDEFINED_KEY PredefinedKey, IN PCWSTRING ParentKeyName, IN PCWSTRING KeyName, IN OUT PARRAY Values, OUT PULONG ErrorCode DEFAULT NULL );
NONVIRTUAL BOOLEAN SetKeySecurity( IN PREDEFINED_KEY PredefinedKey, IN OUT PREGISTRY_KEY_INFO KeyInfo, IN SECURITY_INFORMATION SecurityInformation, IN PSECURITY_DESCRIPTOR SecurityDescriptor, IN PULONG ErrorCode DEFAULT NULL, IN BOOLEAN Recurse DEFAULT FALSE );
#if !defined( _AUTOCHECK_ )
NONVIRTUAL BOOLEAN UnLoadHive( IN PREDEFINED_KEY PredefinedKey, IN PREGISTRY_KEY_INFO KeyInfo, OUT PULONG ErrorCode DEFAULT NULL );
NONVIRTUAL BOOLEAN SaveKeyToFile( IN PREDEFINED_KEY PredefinedKey, IN PREGISTRY_KEY_INFO KeyInfo, IN PCWSTRING FileName, OUT PULONG ErrorCode DEFAULT NULL );
NONVIRTUAL BOOLEAN RestoreKeyFromFile( IN PREDEFINED_KEY PredefinedKey, IN PREGISTRY_KEY_INFO KeyInfo, IN PCWSTRING FileName, IN BOOLEAN Volatile DEFAULT FALSE, OUT PULONG ErrorCode DEFAULT NULL );
#endif
NONVIRTUAL BOOLEAN UpdateKeyInfo( IN PREDEFINED_KEY PredefinedKey, IN OUT PREGISTRY_KEY_INFO KeyInfo, OUT PULONG ErrorCode DEFAULT NULL );
private:
NONVIRTUAL VOID Construct( );
NONVIRTUAL VOID Destroy( );
NONVIRTUAL PWSTRING BuildCompleteName( IN PCWSTRING ParentName, IN PCWSTRING KeyName );
#if !defined( _AUTOCHECK_ )
NONVIRTUAL ULONG DeleteTree( IN HKEY KeyHandle );
#endif
NONVIRTUAL BOOLEAN InitializeMachineName( IN PCWSTRING MachineName );
#if !defined( _AUTOCHECK_ )
NONVIRTUAL BOOLEAN SetSubKeysSecurity( IN HKEY KeyHandle, IN SECURITY_INFORMATION SecurityInformation, IN PSECURITY_DESCRIPTOR SecurityDescriptor, IN PULONG ErrorCode ); #endif
#if !defined( _AUTOCHECK_ )
NONVIRTUAL ULONG MapWin32RegApiToRegistryError( IN ULONG ErrorCode ) CONST;
#endif
#if defined( _AUTOCHECK_ )
NONVIRTUAL BOOLEAN OpenKey( IN PCWSTRING ParentKeyName, IN PCWSTRING KeyName, IN ULONG Flags, OUT PHANDLE Handle, OUT PULONG ErrorCode );
#endif
#if !defined( _AUTOCHECK_ )
NONVIRTUAL BOOLEAN OpenKey( IN PREDEFINED_KEY PredefinedKey, IN PCWSTRING ParentKeyName, IN PCWSTRING KeyName, IN DWORD Permission, OUT PHKEY Key, OUT PULONG ErrorCode DEFAULT NULL );
#endif
DSTRING _MachineName;
BOOLEAN _RemoteRegistry;
#if !defined( _AUTOCHECK_ )
HKEY _PredefinedKey[ NUMBER_OF_PREDEFINED_KEYS ]; #endif
STATIC PWSTRING _Separator;
};
INLINE PCWSTRING REGISTRY::GetMachineName( ) CONST
/*++
Routine Description:
Return the name of the machine associated with this REGISTRY object.
Arguments:
None.
Return Value:
PCWSTRING - Pointer to a WSTRING object that contains the machine name.
--*/
{ return( &_MachineName ); }
INLINE BOOLEAN REGISTRY::IsRemoteRegistry( ) CONST
/*++
Routine Description:
Inform the client whether this object represnts a remote registry.
Arguments:
None.
Return Value:
BOOLEAN - Returns TRUE if this object represents a remote registry. Returns FALSE otherwise.
--*/
{ return( _RemoteRegistry ); }
#endif // _REGISTRY_
|