Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 328
  • Last Modified:

Updating/Saving Registry Keys

I'm saving or modifying registry keys using 'RegOpenKeyEx' and
'RegSetValueEx'
Win32 functions.

- I can save String values to the registry e.g.:

[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\MSTCP]
"EnableDNS"="1"
"HostName"="joebloggs"
"Domain"=""

But I'm having problems with hex values e.g.:
[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\MSTCP\ServiceProvi
der]
"LocalPriority"=hex:f3,01,00,00
"HostsPriority"=hex:f4,01,00,00


What type do I use in VC++ and how do I set it in hexadecimal freeform
(registry style).

- Alternatively I was thinking that there is an equivalent set of functions
in MFC??


Thanks a lot

OscarI'm saving or modifying registry keys using 'RegOpenKeyEx' and
'RegSetValueEx'
Win32 functions.

- I can save String values to the registry e.g.:

[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\MSTCP]
"EnableDNS"="1"
"HostName"="joebloggs"
"Domain"=""

But I'm having problems with hex values e.g.:
[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\MSTCP\ServiceProvi
der]
"LocalPriority"=hex:f3,01,00,00
"HostsPriority"=hex:f4,01,00,00


What type do I use in VC++ and how do I set it in hexadecimal freeform
(registry style).

- Alternatively I was thinking that there is an equivalent set of functions
in MFC??


Thanks a lot

Oscar
0
ossentoo
Asked:
ossentoo
  • 2
1 Solution
 
Tommy HuiEngineerCommented:
Can you post the relevant code? That way we can see if there's something wrong in your code.
0
 
fasterCommented:
Did you try to use REG_BINARY as type parameter?  I did the same in a project and all was OK.
0
 
ossentooAuthor Commented:
void CMainDlg::OnOK()
{
      // if our modeless child isn't already up, create it and display it
      // otherwise, just set focus to it

      CString strReg_SubKey[14];
 
      CString strKeyData[14];
      CEdit* pEdit;
      LONG lSucess=0;
      HKEY  hValue;      // handle of open key
      CHAR *msg="\0";
      CHAR  ValueName[MAX_VALUE_NAME];
      DWORD dwcValueName = MAX_VALUE_NAME;
      DWORD dwType[14];
      DWORD dwData[14];
      CHAR *byData;
      int i;
      LPCSTR lpcData[14];

      // Set up subkeys array
      lpcData[0]="ComputerName\0";
      lpcData[1]="EnableDNS\0";
      lpcData[2]="HostName\0";
      lpcData[3]="Domain\0";
      lpcData[4]="SearchList\0";
      lpcData[5]="NameServer\0";
      lpcData[6]="MaxSockAddrLength\0";
      lpcData[7]="MinSockAddrLength\0";
      lpcData[8]="LocalPriority\0";
      lpcData[9]="HostsPriority\0";
      lpcData[10]="DnsPriority\0";
      lpcData[11]="NetbtPriority\0";
      lpcData[12]="Class\0";
      lpcData[13]="ComputerName\0";

      // Save key types array
      dwType[0]=REG_SZ;
      dwType[1]=REG_SZ;
      dwType[2]=REG_SZ;
      dwType[3]=REG_SZ;
      dwType[4]=REG_SZ;
      dwType[5]=REG_SZ;
      dwType[6]=REG_BINARY;
      dwType[7]=REG_BINARY;
      dwType[8]=REG_BINARY;
      dwType[9]=REG_BINARY;
      dwType[10]=REG_BINARY;
      dwType[11]=REG_BINARY;
      dwType[12]=REG_BINARY;
      dwType[13]=REG_SZ;


      // lpcData[2]="ComputerName\0";
      //Set up keys array
      strReg_SubKey[0]="System\\CurrentControlSet\\control\\ComputerName\\ComputerName";
      strReg_SubKey[1]="System\\CurrentControlSet\\Services\\VxD\\MSTCP";
      strReg_SubKey[2]="System\\CurrentControlSet\\Services\\VxD\\MSTCP";
      strReg_SubKey[3]="System\\CurrentControlSet\\Services\\VxD\\MSTCP";
      strReg_SubKey[4]="System\\CurrentControlSet\\Services\\VxD\\MSTCP";
      strReg_SubKey[5]="System\\CurrentControlSet\\Services\\VxD\\MSTCP";
      strReg_SubKey[6]="System\\CurrentControlSet\\Services\\VxD\\MSTCP\\Parameters\\Winsock";
      strReg_SubKey[7]="System\\CurrentControlSet\\Services\\VxD\\MSTCP\\Parameters\\Winsock";
      strReg_SubKey[8]="System\\CurrentControlSet\\Services\\VxD\\MSTCP\\ServiceProvider";
      strReg_SubKey[9]="System\\CurrentControlSet\\Services\\VxD\\MSTCP\\ServiceProvider";
      strReg_SubKey[10]="System\\CurrentControlSet\\Services\\VxD\\MSTCP\\ServiceProvider";
      strReg_SubKey[11]="System\\CurrentControlSet\\Services\\VxD\\MSTCP\\ServiceProvider";
      strReg_SubKey[12]="System\\CurrentControlSet\\Services\\VxD\\MSTCP\\ServiceProvider";
      strReg_SubKey[13]="System\\CurrentControlSet\\Services\\VxD\\VNETSUP";
      
      
      //regkey data      
      dwData[6]=268435456;
      dwData[7]=268435456;
      dwData[8]=268435456;
      dwData[9]=268435456;
      dwData[10]=268435456;
      dwData[11]=268435456;
      dwData[12]=268435456;

      // check we have allocated correctly on memory heap                  
      pEdit = (CEdit*) GetDlgItem(IDC_HOSTNAME);

      ASSERT(pEdit != NULL);

      if (pEdit != NULL)
            pEdit->GetWindowText(strKeyData[0]);
      
      byData=new CHAR [strKeyData->GetLength()+1];
      

      //Registry key data to set
      strKeyData[1]="1";
      strKeyData[2]=strKeyData[0];
      strKeyData[3]="";
      strKeyData[4]="europe.ra.rockwell.com,bel.ra.rockwell.com,mke.ra.rockwell.com";
      strKeyData[5]="199.33.71.34,205.175.200.11,130.151.82.121";
      strKeyData[13]=strKeyData[0];

      for (i=6;i<NUM_REG_KEYS;i++)
      {

            lSucess=RegOpenKeyEx(HKEY_LOCAL_MACHINE, (LPCTSTR)strReg_SubKey[i],0,KEY_QUERY_VALUE,&hValue);
            if (lSucess!=ERROR_SUCCESS)
            {
                  // Message box the error
                  strcpy(msg,(LPCSTR)strReg_SubKey[i]);
                  strcat(msg,": Replace failed!!");
                  AfxMessageBox(msg);

            }
            else
            {
                  switch(dwType[i])
                  {
                  case REG_BINARY:
                        // Replace the registry string                        
                        lSucess=RegSetValueEx(hValue,lpcData[i],0,dwType[i],
                                          (BYTE*)&dwData[i],sizeof(dwData[i]));                        
                        break;
                  case REG_SZ:
                        // Replace the registry string
                        strcpy(byData, (LPCSTR)strKeyData[i]);
                        strcpy(ValueName,lpcData[i]);
                        lSucess=RegSetValueEx(hValue,ValueName,0,dwType[i],
                                          (BYTE*)byData,strKeyData[i].GetLength()+1);
                        break;
                  default:
                        AfxMessageBox("Didn't evaluate switch");

                  }
                  RegCloseKey(hValue);
            }
      }
      delete byData;
      AfxMessageBox ("Finished changing keys.", MB_OK);

      EndDialog(0);
 
}

0
 
ossentooAuthor Commented:
How exactly do you set a type REG_BINARY,

IS IT 0x000000f5 for example??
0

Featured Post

Become an Android App Developer

Ready to kick start your career in 2018? Learn how to build an Android app in January’s Course of the Month and open the door to new opportunities.

  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now