首页
社区
课程
招聘
[求助]关于枚举注册表键值的问题
发表于: 2008-6-1 13:09 4984

[求助]关于枚举注册表键值的问题

2008-6-1 13:09
4984
#include <windows.h>
#include <stdio.h>
#include <tchar.h>

#define MAX_KEY_LENGTH 255
#define MAX_VALUE_NAME 16383

void QueryKey(HKEY hKey)
{

    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];
TCHAR  ValueInfo[MAX_VALUE_NAME];
DWORD  ValueSize;
    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 key values.

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

        for (i=0, retCode=ERROR_SUCCESS; i <cValues; i++)
        {
            cchValue = MAX_VALUE_NAME;
            achValue[0] = '\0';
            retCode = RegEnumValue(hKey, i,
                achValue,
                &cchValue,
                NULL,
                NULL,
                NULL,
                NULL);

            if (retCode == ERROR_SUCCESS )
            {

                _tprintf(TEXT("(%d) %s\n"), i+1, achValue);
            }
            if(RegQueryValueEx(hKey,achValue,NULL,NULL,(LPBYTE)ValueInfo,&ValueSize)==ERROR_SUCCESS) //问题就出在这,为什么好多键值读不出来呢?
_tprintf(TEXT("%s\n"), ValueInfo);
        }
    }
}

void _tmain(void)
{
  HKEY hTestKey;

  if( RegOpenKeyEx( HKEY_LOCAL_MACHINE,
        TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"),
        0,
        KEY_READ,
        &hTestKey) == ERROR_SUCCESS
      )
  {
      QueryKey(hTestKey);
  }
}

上面的代码为什么键名都能读出来,键值却好多读不出,搞了好久都没解决

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 268
活跃值: (55)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
2
问题已经解决,只要在RegQueryValueEx(hKey,achValue,NULL,NULL,(LPBYTE)ValueInfo,&ValueSize)==ERROR_SUCCESS)前加上valuesize=MAX_VALUE_NAME
就搞定了。
2008-6-1 17:10
0
游客
登录 | 注册 方可回帖
返回