[2 days left] What’s wrong with your cloud strategy? Learn why multicloud solutions matter with Nimble Storage.Register Now

x
?
Solved

Updating/Saving Registry Keys

Posted on 1997-11-24
4
Medium Priority
?
326 Views
Last Modified: 2012-08-13
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
Comment
Question by:ossentoo
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
4 Comments
 
LVL 15

Expert Comment

by:Tommy Hui
ID: 1174005
Can you post the relevant code? That way we can see if there's something wrong in your code.
0
 
LVL 7

Accepted Solution

by:
faster earned 200 total points
ID: 1174006
Did you try to use REG_BINARY as type parameter?  I did the same in a project and all was OK.
0
 

Author Comment

by:ossentoo
ID: 1174007
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
 

Author Comment

by:ossentoo
ID: 1174008
How exactly do you set a type REG_BINARY,

IS IT 0x000000f5 for example??
0

Featured Post

Enroll in October's Free Course of the Month

Do you work with and analyze data? Enroll in October's Course of the Month for 7+ hours of SQL training, allowing you to quickly and efficiently store or retrieve data. It's free for Premium Members, Team Accounts, and Qualified Experts!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

In days of old, returning something by value from a function in C++ was necessarily avoided because it would, invariably, involve one or even two copies of the object being created and potentially costly calls to a copy-constructor and destructor. A…
Templates For Beginners Or How To Encourage The Compiler To Work For You Introduction This tutorial is targeted at the reader who is, perhaps, familiar with the basics of C++ but would prefer a little slower introduction to the more ad…
The goal of the video will be to teach the user the concept of local variables and scope. An example of a locally defined variable will be given as well as an explanation of what scope is in C++. The local variable and concept of scope will be relat…
The viewer will learn how to clear a vector as well as how to detect empty vectors in C++.
Suggested Courses

649 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question