142 lines
5 KiB
C
142 lines
5 KiB
C
|
//+-------------------------------------------------------------------------
|
||
|
//
|
||
|
// Copyright (C) Silicon Prairie Software, 1996
|
||
|
//
|
||
|
// File: simreg.h
|
||
|
//
|
||
|
// Contents: CRegFile
|
||
|
//
|
||
|
// Simple Win32/Win16 registry manipulation class
|
||
|
// Copyright (c)1996, Shaun Ivory
|
||
|
// All rights reserved
|
||
|
// Used with permission
|
||
|
//
|
||
|
// History: Sep-26-96 Davepl Created
|
||
|
//
|
||
|
//--------------------------------------------------------------------------
|
||
|
|
||
|
#pragma once
|
||
|
#include "shtl.h"
|
||
|
#include "tstring.h"
|
||
|
#include <winreg.h>
|
||
|
|
||
|
#if defined(WIN32) || defined(_WIN32)
|
||
|
#define SIMREG_WIN32
|
||
|
#else
|
||
|
#define SIMREG_WIN16
|
||
|
#endif
|
||
|
|
||
|
#define INVALID_HKEY ((HKEY)-1)
|
||
|
|
||
|
class CSimpleReg
|
||
|
{
|
||
|
private:
|
||
|
tstring m_SubKeyName;
|
||
|
HKEY m_hKeyRoot;
|
||
|
HKEY m_hSubKey;
|
||
|
unsigned char m_bOpenSuccess;
|
||
|
unsigned char m_bCreate;
|
||
|
#if defined(SIMREG_WIN32)
|
||
|
LPSECURITY_ATTRIBUTES m_lpsaSecurityAttributes;
|
||
|
#endif
|
||
|
private:
|
||
|
// Some of the Reg... functions inexplicably require non const strings
|
||
|
static LPTSTR Totstring( const tstring &s ) { return (LPTSTR)(LPCTSTR)s; }
|
||
|
unsigned char Assign( const CSimpleReg &other );
|
||
|
public:
|
||
|
enum
|
||
|
{
|
||
|
PreOrder=0,
|
||
|
PostOrder=1
|
||
|
};
|
||
|
struct CKeyEnumInfo
|
||
|
{
|
||
|
tstring Name;
|
||
|
HKEY Root;
|
||
|
int Level;
|
||
|
void *ExtraData;
|
||
|
};
|
||
|
struct CValueEnumInfo
|
||
|
{
|
||
|
tstring Name;
|
||
|
DWORD Type;
|
||
|
DWORD Size;
|
||
|
void *ExtraData;
|
||
|
};
|
||
|
|
||
|
typedef int (*SimRegKeyEnumProc)( CKeyEnumInfo &enumInfo );
|
||
|
typedef int (*SimRegValueEnumProc)( CValueEnumInfo &enumInfo );
|
||
|
|
||
|
// Constructors, destructor
|
||
|
#if defined(SIMREG_WIN32)
|
||
|
CSimpleReg( HKEY, const tstring&, unsigned char forceCreate=0, LPSECURITY_ATTRIBUTES lpsa=NULL );
|
||
|
#else
|
||
|
CSimpleReg( HKEY, const tstring&, unsigned char forceCreate=0 );
|
||
|
#endif
|
||
|
CSimpleReg(void);
|
||
|
CSimpleReg(const CSimpleReg &other);
|
||
|
~CSimpleReg(void);
|
||
|
CSimpleReg &operator=(const CSimpleReg& );
|
||
|
|
||
|
// Query functions
|
||
|
unsigned long Size( const tstring &key );
|
||
|
unsigned long Type( const tstring &key );
|
||
|
unsigned char Query( const tstring &key, LPTSTR szValue, unsigned short maxLen );
|
||
|
unsigned char Query( const tstring &key, tstring &value, unsigned short maxLen=0 );
|
||
|
unsigned char Query( const tstring &key, DWORD &value );
|
||
|
unsigned char Query( const tstring &key, int &value );
|
||
|
unsigned char Query( const tstring &key, LONG &value );
|
||
|
unsigned char Query( const tstring &key, BYTE &value );
|
||
|
unsigned char Query( const tstring &key, WORD &value );
|
||
|
unsigned char QueryBin( const tstring &key, void *value, DWORD size );
|
||
|
|
||
|
void Query( const tstring &key, DWORD &value, const DWORD &defaultvalue );
|
||
|
|
||
|
template<class _TYPE> _TYPE Query( const tstring &key, const _TYPE &defaultvalue )
|
||
|
{
|
||
|
_TYPE result;
|
||
|
if (Query(key, result))
|
||
|
return result;
|
||
|
else
|
||
|
return defaultvalue;
|
||
|
}
|
||
|
|
||
|
// Set functions
|
||
|
unsigned char SetBin( const tstring &key, void *value, DWORD size );
|
||
|
unsigned char Set( const tstring &key, const tstring &value );
|
||
|
unsigned char Set( const tstring &key, DWORD value );
|
||
|
|
||
|
unsigned char Open(void);
|
||
|
unsigned char Close(void);
|
||
|
unsigned char ForceCreate( unsigned char create = TRUE );
|
||
|
unsigned char SetRoot( HKEY keyClass, const tstring &newRoot );
|
||
|
|
||
|
#if defined(SIMREG_WIN32)
|
||
|
void SecurityAttributes( const LPSECURITY_ATTRIBUTES lpsa ) { m_lpsaSecurityAttributes = lpsa; }
|
||
|
const LPSECURITY_ATTRIBUTES SecurityAttributes(void) const { return m_lpsaSecurityAttributes; }
|
||
|
#endif
|
||
|
|
||
|
DWORD CountKeys(void);
|
||
|
static HKEY GetHkeyFromName( const tstring &Name );
|
||
|
static unsigned char Delete( HKEY, const tstring &key );
|
||
|
static int DeleteRecursively( HKEY root, const tstring &name );
|
||
|
|
||
|
// Inlines
|
||
|
tstring SubKeyName(void) const {return (m_SubKeyName);}
|
||
|
unsigned char ForceCreate(void) const {return (m_bCreate);}
|
||
|
unsigned char OK(void) const {return (m_bOpenSuccess);}
|
||
|
HKEY GetRootKey(void) const {return (m_hKeyRoot);}
|
||
|
HKEY GetSubKey(void) const {return (m_hSubKey);}
|
||
|
int operator!(void) const {return (!m_bOpenSuccess);}
|
||
|
|
||
|
static HKEY GetWin16HKey( HKEY key );
|
||
|
int EnumValues( SimRegValueEnumProc enumProc, void *extraInfo = NULL );
|
||
|
int RecurseKeys( SimRegKeyEnumProc enumProc, void *extraInfo = NULL, int recurseOrder = CSimpleReg::PostOrder, int failOnOpenError = 1 );
|
||
|
int EnumKeys( SimRegKeyEnumProc enumProc, void *extraInfo = NULL, int failOnOpenError = 1 );
|
||
|
private:
|
||
|
static int DoRecurseKeys( HKEY key, const tstring &root, SimRegKeyEnumProc enumProc, void *extraInfo, int level, int recurseOrder, int failOnOpenError );
|
||
|
static int DoEnumKeys( HKEY key, const tstring &root, SimRegKeyEnumProc enumProc, void *extraInfo, int failOnOpenError );
|
||
|
static int DeleteEnumKeyProc( CSimpleReg::CKeyEnumInfo &enumInfo );
|
||
|
};
|
||
|
|