/******************************************************************************* * * (C) COPYRIGHT MICROSOFT CORPORATION, 1998 * * TITLE: SIMREG.H * * VERSION: 1.0 * * AUTHOR: ShaunIv * * DATE: 5/12/1998 * * DESCRIPTION: Simple registry access class * *******************************************************************************/ #ifndef __SIMREG_H_INCLUDED #define __SIMREG_H_INCLUDED #include #include "simstr.h" class CSimpleReg { private: CSimpleString m_strKeyName; HKEY m_hRootKey; HKEY m_hKey; bool m_bCreate; LPSECURITY_ATTRIBUTES m_lpsaSecurityAttributes; REGSAM m_samDesiredAccess; public: // Process current node-->recurse // or // recurse-->Process current node enum { PreOrder=0, PostOrder=1 }; // structure passed to key enumeration proc struct CKeyEnumInfo { CSimpleString strName; HKEY hkRoot; int nLevel; LPARAM lParam; }; // structure passed to value enumeration proc class CValueEnumInfo { private: // No implementation CValueEnumInfo(void); CValueEnumInfo &operator=( const CValueEnumInfo & ); CValueEnumInfo( const CValueEnumInfo & ); public: CValueEnumInfo( CSimpleReg &_reg, const CSimpleString &_strName, DWORD _nType, DWORD _nSize, LPARAM _lParam ) : reg(_reg), strName(_strName), nType(_nType), nSize(_nSize), lParam(_lParam) { } CSimpleReg ® CSimpleString strName; DWORD nType; DWORD nSize; LPARAM lParam; }; // Enumeration procs typedef bool (*SimRegKeyEnumProc)( CKeyEnumInfo &enumInfo ); typedef bool (*SimRegValueEnumProc)( CValueEnumInfo &enumInfo ); // Constructors, destructor and assignment operator CSimpleReg( HKEY hkRoot, const CSimpleString &strSubKey, bool bCreate=false, REGSAM samDesired=KEY_ALL_ACCESS, LPSECURITY_ATTRIBUTES lpsa=NULL ); CSimpleReg(void); CSimpleReg(const CSimpleReg &other); virtual ~CSimpleReg(void); CSimpleReg &operator=(const CSimpleReg &other ); // Open and close bool Open(void); bool Close(void); bool Flush(void); // Key and value information DWORD Size( const CSimpleString &key ) const; DWORD Type( const CSimpleString &key ) const; DWORD SubKeyCount(void) const; // Query functions CSimpleString Query( const CSimpleString &strValueName, const CSimpleString &strDef ) const; LPTSTR Query( const CSimpleString &strValueName, const CSimpleString &strDef, LPTSTR pszBuffer, DWORD nLen ) const; DWORD Query( const CSimpleString &strValueName, DWORD nDef ) const; DWORD QueryBin( const CSimpleString &strValueName, PBYTE pData, DWORD nMaxLen ) const; // Set functions bool Set( const CSimpleString &strValueName, const CSimpleString &strValue, DWORD nType=REG_SZ ) const; bool Set( const CSimpleString &strValueName, DWORD nValue ) const; bool SetBin( const CSimpleString &strValueName, const PBYTE pValue, DWORD nLen, DWORD dwType = REG_BINARY ) const; // Delete a value bool Delete( const CSimpleString &strValue ); // Some static helpers static bool IsStringValue( DWORD nType ); static HKEY GetHkeyFromName( const CSimpleString &strName ); static bool Delete( HKEY hkRoot, const CSimpleString &stKeyName ); static bool DeleteRecursively( HKEY hkRoot, const CSimpleString &strKeyName ); // Inline accessor functions const LPSECURITY_ATTRIBUTES GetSecurityAttributes(void) const { return(m_lpsaSecurityAttributes); } CSimpleString GetSubKeyName(void) const { return(m_strKeyName); } bool GetCreate(void) const { return(m_bCreate); } HKEY GetRootKey(void) const { return(m_hRootKey); } HKEY GetKey(void) const { return(m_hKey); } REGSAM DesiredAccess(void) const { return m_samDesiredAccess; } // Status bool OK(void) const { return(m_hRootKey && m_hKey); } operator bool(void) const { return(OK()); } operator HKEY(void) const { return(GetKey()); } // Enumeration and recursion bool EnumValues( SimRegValueEnumProc enumProc, LPARAM lParam = 0 ); bool RecurseKeys( SimRegKeyEnumProc enumProc, LPARAM lParam = 0, int recurseOrder = CSimpleReg::PostOrder, bool bFailOnOpenError = true ) const; bool EnumKeys( SimRegKeyEnumProc enumProc, LPARAM lParam = 0, bool bFailOnOpenError = true ) const; protected: // Recursion and enumeration implementation static bool DoRecurseKeys( HKEY hkKey, const CSimpleString &root, SimRegKeyEnumProc enumProc, LPARAM lParam, int nLevel, int recurseOrder, bool bFailOnOpenError ); static bool DoEnumKeys( HKEY hkKey, const CSimpleString &root, SimRegKeyEnumProc enumProc, LPARAM lParam, bool bFailOnOpenError ); // Recursion proc that allows us to recursively nuke a registry tree static bool DeleteEnumKeyProc( CSimpleReg::CKeyEnumInfo &enumInfo ); }; #endif