Registry API Wrapper

 Download Source Code and Example

I personally find the Win32 Registry API to be overly complex for performing simple operations. The Win32 Registry API is very "rich". You can do a lot with it, but most of the time you just want to read or write a value. The error checking involved in doing even simple registry operations is enough to hide the meaning of the code. Most of the time you either want the operation to succeed or fail as a whole, you're not interested in handling errors at each stage and performing recovery operations...

I've seen many Win32 Registry API wrapper classes but all of them failed to actually make it easier to use the registry than the API. Most have been simple wrappers which add no value (apart from saving you the bother or having to pass the HKEY to each function...).

CRegistryKey is essentially just a very simple wrapper around a HKEY. It adds value by converting errors to exceptions, defaulting most of the rarely used parameters with sensible values and providing STL style iterators for sub keys and values. All of the Win32 Registry API  is present as member functions, but if you want to check for errors without using exceptions there's a conversion operator that will allow access to the underlying HKEY.

CRegistryKey was designed to make code like this as easy as possible...

try
{
   CRegistryKey key = CRegistryKey(HKEY_LOCAL_MACHINE, _T("SOFTWARE"));
  
   // for each sub key of this key...
  
   for (CRegistryKey::SubkeyIterator it = key.BeginSubkeyIteraton();
        it != key.EndSubkeyIteraton();
        ++it)
   {
      // Dump out the key's name

      tcout << it.GetName() << endl;

      // Then display each value
  
      CRegistryKey subKey = it.OpenKey();
  
      for (CRegistryKey::ValueIterator val = subKey.BeginValueIteration();
           val != subKey.EndValueIteration();  
           ++val)
      {
         tcout << " " << val.name() << T(" ") << val.valueAsString() << endl;
      }
   }
}
catch (CRegistryKey::Exception &e)
{
   e.MessageBox();
}

So that this article and code can be kept up to date more easily I've provided a link to where the article is located on my own web pages. Read the full article and download the source code.

Last updated: 3 July 1998




Comments

  • A little error.

    Posted by Legacy on 05/21/1999 12:00am

    Originally posted by: Laurent Kemp�

    Hi Len,

    I have found a little error in your code.

    In your CRegistryKey::Value constructor you allocate memory with
    _tcsdup that should be freed by free function because it's allocated
    with malloc (take alook into MSDN for "_strdup, _wcsdup, _mbsdup").

    CRegistryKey::Value::Value(const Value &rhs)
    : m_pName(_tcsdup(rhs.m_pName)),

    CRegistryKey::Value::~Value()
    {
    //ERROR
    // delete[] m_pName;
    free(m_pName);

    Best regards.

    Reply
Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Live Event Date: May 11, 2015 @ 1:00 p.m. ET / 10:00 a.m. PT One of the languages that have always been supported with the Intel® RealSense™ SDK (Software Developer Kit) is JavaScript, specifically so that web-enabled apps could be created. Come hear from Intel Expert Bob Duffy as he reviews his own little "space shooting" game where the orientation of your face controls the aiming reticle to help teach developers how to write apps and games in JavaScript that can use facial and gesture …

  • Live Event Date: May 6, 2015 @ 1:00 p.m. ET / 10:00 a.m. PT Where are you in your plans to adopt Disaster Recovery-as-a-Service? Are you just getting started? Fighting an uphill battle with management? At Cisco, Zerto and iland, we've seen it all – from the early adopters who excitedly rushed to implement DRaaS with us nine years ago to the IT folks dragging their business leaders into the future. With our years of experience, we've learned there are six types of DRaaS leaders – but which type …

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date