//  -------------------------------------------------------------------

//  Filename        :   registry.cpp

//  Description     :   registry manipulation class

//  By              :   John Cruise

//  Date            :   1996 Mar 25

//  Last Modified   :   1997 Jul 14

//  Notes           :   tabstop = 4

//  -------------------------------------------------------------------

//  Modifications   :   1996 Mar 25     John Cruise

//                  :       none as of now

//                  :

//                  :   1997 Jul 14     John Cruise

//                  :       modified to support exception handling

//  -------------------------------------------------------------------



//#include <stdafx.h>

#include "registry.h"


CRegistry::CRegistry()
{
    m_bIsOpen   = FALSE;
}

CRegistry::CRegistry( HKEY hKey, LPCTSTR cSubKey, DWORD nOptions/*=0*/, REGSAM samDesired/*=KEY_ALL_ACCESS*/ )
{
    m_nLastError=RegOpenKeyEx( hKey, cSubKey, nOptions, samDesired, &m_hKey );

    m_bIsOpen       = TRUE;
}

CRegistry::~CRegistry()
{
    //  if the registry is still open ... then close it

    if( m_bIsOpen )
        Close();
}

void CRegistry::Open( HKEY hKey, LPCTSTR cSubKey, DWORD nOptions/*=0*/, REGSAM samDesired/*=KEY_ALL_ACCESS*/ )
{
    //  if has previously open something, close it

    if( m_bIsOpen )
        Close();

    //  open the key

    m_nLastError=RegOpenKeyEx( hKey, cSubKey, nOptions, samDesired, &m_hKey );

    m_bIsOpen       = TRUE;
}

void CRegistry::Close()
{
    if( m_bIsOpen ) {
        RegFlushKey( m_hKey );
        m_nLastError = RegCloseKey( m_hKey );
        m_bIsOpen = FALSE;
    }

    else
        m_nLastError = ERROR_SUCCESS;
}

void CRegistry::Write( LPSTR cValueName, CONST BYTE *pData, DWORD nSize, DWORD nType/*=REG_SZ*/ )
{
    m_nLastError=RegSetValueEx( m_hKey, cValueName, NULL, nType, pData, nSize );
}

void CRegistry::Read( LPBYTE pDest, DWORD *nSize, DWORD *nType, LPSTR cValueName )
{
    m_nLastError=RegQueryValueEx( m_hKey, cValueName, NULL, nType, pDest, nSize );
}

LONG CRegistry::GetLastError()
{
    return( m_nLastError );
}

BOOL CRegistry::EnumValue( DWORD nIndex, LPSTR szValueName, LPDWORD nValueNameLen, LPDWORD nType/*=NULL*/, LPBYTE lpValue/*=NULL*/, LPDWORD nValueSize/*=NULL*/ )
{
    //  enumerate the values

    m_nLastError    = RegEnumValue( m_hKey, nIndex, szValueName, nValueNameLen, NULL, nType, lpValue, nValueSize );

    //  check the return value

    if( m_nLastError==ERROR_NO_MORE_ITEMS )
        return( FALSE );

    return( TRUE );
}

BOOL CRegistry::EnumKey( DWORD nIndex, LPSTR szKeyName, LPDWORD nKeyNameLen, PFILETIME stTimeWrite, LPSTR szClass/*=NULL*/, LPDWORD nClassLen/*=NULL*/ )
{
    //  enumerate the keys

    m_nLastError    = RegEnumKeyEx( m_hKey, nIndex, szKeyName, nKeyNameLen, NULL, szClass, nClassLen, stTimeWrite );

    //  check the return value

    if( m_nLastError==ERROR_NO_MORE_ITEMS )
        return( FALSE );

    return( TRUE );
}


syntax highlighted by Code2HTML, v. 0.8.11