Solved

Updating/Saving Registry Keys

Posted on 1997-11-24
4
270 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
  • 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 100 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

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
Find boost header files using gnu make (MinGW) on Win 7 11 79
ADO Memory leak with DELPHI 2007 37 171
Load and store *.pnm image file 1 76
Safe conversion? 4 58
C++ Properties One feature missing from standard C++ that you will find in many other Object Oriented Programming languages is something called a Property (http://www.experts-exchange.com/Programming/Languages/CPP/A_3912-Object-Properties-in-C.ht…
This article shows you how to optimize memory allocations in C++ using placement new. Applicable especially to usecases dealing with creation of large number of objects. A brief on problem: Lets take example problem for simplicity: - I have a G…
The goal of the tutorial is to teach the user how to use functions in C++. The video will cover how to define functions, how to call functions and how to create functions prototypes. Microsoft Visual C++ 2010 Express will be used as a text editor an…
The viewer will learn how to clear a vector as well as how to detect empty vectors in C++.

867 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

Need Help in Real-Time?

Connect with top rated Experts

16 Experts available now in Live!

Get 1:1 Help Now