Bob Moore's Coding Tips

12. How do I put new entries in the registry?

This code puts a new string entry in the registry, under HKEY_CURRENT_USER. It is designed to make the registry look like an INI file, with sections and entries.

static REGSAM PrimarySecAccMask = KEY_QUERY_VALUE |
   KEY_SET_VALUE |
   KEY_CREATE_SUB_KEY |
   KEY_ENUMERATE_SUB_KEYS |
   KEY_NOTIFY ;


LONG WINAPI MyRegSetString (const char * szSection,
                            const char * szEntry,
                            const char * szValue)
{
   char szTreeBranch [120] ;
   HKEY hMasterKey = 0 ;
   DWORD dwDisposition = 0 ;
   HKEY hTopKey = 0 ;
   LONG lReturn = 0 ;

   // Thou shalt not pass cack.

   if (szSection == NULL ||
       szEntry   == NULL ||
       szValue   == NULL)
   {
      return ERROR_INVALID_PARAMETER ;
   }

   // Select the appropriate tree.

   strcpy (szTreeBranch, "Software\\MyCompany\\MyProgram\\");
   strcat (szTreeBranch, szSection) ;
   hTopKey = HKEY_CURRENT_USER ;

   lReturn = RegCreateKeyEx (hTopKey,
                             szTreeBranch,
                             0,
                             szPNC_CLASS,
                             REG_OPTION_NON_VOLATILE,
                             PrimarySecAccMask,
                             NULL,
                             &hMasterKey,
                             &dwDisposition);

   if (lReturn == ERROR_SUCCESS)
   {
      // section exists : set the value.

      lReturn = RegSetValueEx (hMasterKey,
                               szEntry,
                               0,
                               REG_SZ,
                               (CONST BYTE *) szValue,
                               strlen (szValue)+1);
   }
   else
   {
      < do some debug >
   }

   if (hMasterKey)
      RegCloseKey (hMasterKey);

   return lReturn ;
}