?
Solved

Updating/Saving Registry Keys

Posted on 1997-11-24
4
Medium Priority
?
320 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

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

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

This article will show you some of the more useful Standard Template Library (STL) algorithms through the use of working examples.  You will learn about how these algorithms fit into the STL architecture, how they work with STL containers, and why t…
Basic understanding on "OO- Object Orientation" is needed for designing a logical solution to solve a problem. Basic OOAD is a prerequisite for a coder to ensure that they follow the basic design of OO. This would help developers to understand the b…
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 be introduced to the member functions push_back and pop_back of the vector class. The video will teach the difference between the two as well as how to use each one along with its functionality.
Suggested Courses

771 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