// -------------------------------------------------------------------
// 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