C and C++

Moderators: None (Apply to moderate this forum)
Number of threads: 28629
Number of posts: 94611

This Forum Only
Post New Thread
Single Post View       Linear View       Threaded View      f

Report
windows registry access help Posted by franbm on 19 Apr 2012 at 5:18 PM
i have this code to list registry key values and subkeys
#include <windows.h>
#include <stdio.h>
#include <tchar.h>

#define MAX_KEY_LENGTH 255
#define MAX_VALUE_NAME 16383
 
void QueryKey(HKEY hKey) 
{ 
    TCHAR    achKey[MAX_KEY_LENGTH];   // buffer for subkey name
    DWORD    cbName;                   // size of name string 
    TCHAR    achClass[MAX_PATH] = TEXT("");  // buffer for class name 
    DWORD    cchClassName = MAX_PATH;  // size of class string 
    DWORD    cSubKeys=0;               // number of subkeys 
    DWORD    cbMaxSubKey;              // longest subkey size 
    DWORD    cchMaxClass;              // longest class string 
    DWORD    cValues;              // number of values for key 
    DWORD    cchMaxValue;          // longest value name 
    DWORD    cbMaxValueData;       // longest value data 
    DWORD    cbSecurityDescriptor; // size of security descriptor 
    FILETIME ftLastWriteTime;      // last write time 
 
    DWORD i, retCode; 
 
    TCHAR  achValue[MAX_VALUE_NAME]; 
    DWORD cchValue = MAX_VALUE_NAME; 
 
    // Get the class name and the value count. 
    retCode = RegQueryInfoKey(
        hKey,                    // key handle 
        achClass,                // buffer for class name 
        &cchClassName,           // size of class string 
        NULL,                    // reserved 
        &cSubKeys,               // number of subkeys 
        &cbMaxSubKey,            // longest subkey size 
        &cchMaxClass,            // longest class string 
        &cValues,                // number of values for this key 
        &cchMaxValue,            // longest value name 
        &cbMaxValueData,         // longest value data 
        &cbSecurityDescriptor,   // security descriptor 
        &ftLastWriteTime);       // last write time 
 
    // Enumerate the subkeys, until RegEnumKeyEx fails.
    
    if (cSubKeys)
    {
        printf( "\nNumber of subkeys: %d\n", cSubKeys);

        for (i=0; i<cSubKeys; i++) 
        { 
            cbName = MAX_KEY_LENGTH;
            retCode = RegEnumKeyEx(hKey, i,
                     achKey, 
                     &cbName, 
                     NULL, 
                     NULL, 
                     NULL, 
                     &ftLastWriteTime); 
            if (retCode == ERROR_SUCCESS) 
            {
                _tprintf(TEXT("(%d) %s\n"), i+1, achKey);
            }
        }
    } 
    // Enumerate the key values. 

    if (cValues) 
    {
        printf( "\nNumber of values: %d\n", cValues);

        for (i=0, retCode=ERROR_SUCCESS; i<cValues; i++) 
        { 
       
	const DWORD maxValueBytes=300;
        BYTE valueBytes[maxValueBytes];
        DWORD valueSize=maxValueBytes;
        DWORD valueType=0;
        cchValue = MAX_VALUE_NAME;  
        achValue[0] = '\0';  
        retCode = RegEnumValue(hKey, i,  
            achValue,  
            &cchValue,  
            NULL,  
            &valueType, 
            valueBytes, 
            &valueSize); 

        if (retCode == ERROR_SUCCESS )  
        {  
            _tprintf(TEXT("(%d) %s (%d - %d bytes)\n"), i+1, achValue,valueType,valueSize);  
            switch (valueType) {
                case REG_BINARY:
                    _tprintf(TEXT("   The value is binary (0x%X, 0x%X, 0x%X ...)\n"),valueBytes[0],valueBytes[1],valueBytes[2]);
                    break;
                case REG_DWORD:
                //case REG_DWORD_LITTLE_ENDIAN:
                    _tprintf(TEXT("   The value is a DWORD (%d)\n"),*(DWORD *)valueBytes);
                    break;
                case REG_DWORD_BIG_ENDIAN:
                    _tprintf(TEXT("   The value is a DWORD (big endian) (%d)\n"),(valueBytes[0]<<24)|(valueBytes[1]<<16)|(valueBytes[2]<<8)|valueBytes[3]);
                    break;
                case REG_EXPAND_SZ:
                case REG_SZ:
                    _tprintf(TEXT("   The value is a string\n"));
                  break;
                case REG_LINK:
                    _tprintf(TEXT("   The value is a link\n"));
                  break;
                case REG_MULTI_SZ:
                    _tprintf(TEXT("   The value is a multi-string\n"));
                  break;
                case REG_NONE:
                    _tprintf(TEXT("   There is no spoon... sorry, value\n"));
                  break;
                case REG_RESOURCE_LIST:
                    _tprintf(TEXT("   The value is a resource list\n"));
                  break;
                default:
                    _tprintf(TEXT("   Unknown value type\n"));
                  break;
            }
        }
        else
        {
            _tprintf(TEXT("error reading value %d - %d\n"),i+1,retCode);
        }

        }
    }
}

void __cdecl _tmain(void)
{
   HKEY hTestKey;

 //  if( RegOpenKeyEx( HKEY_CURRENT_USER,
  //      TEXT("SOFTWARE\\Microsoft"),
     if( RegOpenKeyEx( HKEY_LOCAL_MACHINE,
        TEXT("SYSTEM\\Setup"),
        0,
        KEY_READ,
        &hTestKey) == ERROR_SUCCESS
      )
   {
      QueryKey(hTestKey);
   }
   
   RegCloseKey(hTestKey);
   system("pause");
}

how can i modify the function void QueryKey(HKEY hKey) to return registry key values and subvalues and list/print them in void __cdecl _tmain(void) function
thanks a lot



 

Recent Jobs

Official Programmer's Heaven Blogs
Web Hosting | Browser and Social Games | Gadgets

Popular resources on Programmersheaven.com
Assembly | Basic | C | C# | C++ | Delphi | Flash | Java | JavaScript | Pascal | Perl | PHP | Python | Ruby | Visual Basic
© Copyright 2011 Programmersheaven.com - All rights reserved.
Reproduction in whole or in part, in any form or medium without express written permission is prohibited.
Violators of this policy may be subject to legal action. Please read our Terms Of Use and Privacy Statement for more information.
Operated by CommunityHeaven, a BootstrapLabs company.