无法通过系统注册表中的递归打印子项的子项

拉姆等级

我正在尝试寻找HIVE中某个键的子键的子键。下面是我的代码,我能够在注册表中获取所有子键。但是,我无法获取该键的子键。注册表中的子项。我编写了一个递归代码来做到这一点!但是,它没有给我任何输出!任何帮助将不胜感激!

#include <stdio.h>
#include <windows.h>
#include <tchar.h>

#define MAX_KEY_LENGTH 255
#define MAX_VALUE_NAME 16383

void QueryKey(HKEY hkey)
{
    TCHAR achKey[MAX_KEY_LENGTH]; 
    DWORD cbName; 
    TCHAR achClass[MAX_PATH] = TEXT("");
    DWORD cchClassName = MAX_PATH; 
    LPBYTE data = (LPBYTE)malloc(512);
    DWORD cSubKeys=0; 
    DWORD dataType,cbMaxSubKey,cchMaxClass,cValues,retcode2,valueType,dataSize;
    long lResult;
    DWORD cchMaxValue,cbMaxValueData; 
    int y;
    DWORD cbSecurityDescriptor;
    char buffer[255]= {0};
    DWORD dwbuffersize = sizeof(buffer);
    FILETIME ftLastWriteTime; 
    DWORD i, retCode,retCode2;
    TCHAR achValue[MAX_VALUE_NAME];
    DWORD cchValue = MAX_VALUE_NAME;

    retCode = RegQueryInfoKey(hkey, 
        (LPWSTR)achClass, &cchClassName,NULL, &cSubKeys,&cbMaxSubKey, &cchMaxClass,  
        &cValues,&cchMaxValue, &cbMaxValueData, &cbSecurityDescriptor,
        &ftLastWriteTime);           
    if(cSubKeys)
    {
        printf("\n Subkey Names:");
        for(i=0; i<cSubKeys; i++)
        {
            cbName = MAX_KEY_LENGTH;
            retCode = RegEnumKeyEx(hkey, i,(LPWSTR)achKey,&cbName,          
                                   NULL,NULL,NULL,&ftLastWriteTime);
            if(retCode == ERROR_SUCCESS)
            {
                printf("\n(%d) %S", i+1, achKey);
                QueryKey((HKEY)subkey);
            }
        }
        printf("\n Number of subkeys: %d\n\n", cSubKeys);
    }
    else
        printf("\n there is no subkey");

    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'; 
            retCode2 = RegEnumValue(hkey, i, achValue, &cchValue, NULL, 
                                    &dataType, data, &dataSize);
            if(retCode2==ERROR_SUCCESS)
                printf("\n%u",&dataType);
            else
                printf("no");

            if (retCode == ERROR_SUCCESS ) 
                _tprintf(TEXT("\n(%d) %s"), i+1,achValue); 
        }
    }
    else
        printf("bye");
}

int main(int argc , char *argv[])
{
    HKEY hTestKey;
    TCHAR buffer[260];
    DWORD bufferSize = sizeof(buffer);

    if(RegOpenKeyEx( HKEY_LOCAL_MACHINE, NULL, 0, KEY_READ, &hTestKey) == ERROR_SUCCESS)
    {
        printf("\n-------Registry Information----------");
        printf("\n HIVE_NAME :  HKEY_LOCAL_MACHINE"); 
        QueryKey(hTestKey);
    }
    else
        printf("bye");

    RegCloseKey(hTestKey);

    return 0;
}
大河

您不能只是将子键的字符串名称传递HKEYQueryKey您需要传递一个real HKEY,您可以通过打开密钥来获得:

            HKEY subkey;
            LONG r = RegOpenKeyEx(hkey, achKey, 0, KEY_ALL_ACCESS, &subkey);
            if (r == ERROR_SUCCESS) {
                QueryKey(subkey);
                RegCloseKey(subkey);
            }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法在注册表中查看certian子项

来自分类Dev

无法打开注册表子项

来自分类Dev

在注册表子项中搜索值

来自分类Dev

列出和删除C#中的注册表子项

来自分类Dev

递归复制注册表子树,其中某些子项名称包含斜杠

来自分类Dev

在C ++中枚举HKEY_LOCAL_MACHINE \ SOFTWARE中的注册表子项

来自分类Dev

遍历注册表并获取所有子项和C#中RegistryKey中的值

来自分类Dev

C#获取注册表子项的值

来自分类Dev

注册表子项不可见?C#

来自分类Dev

什么是注册表中的“枚举子项”和“通知”权限?

来自分类Dev

在SQL中获取递归表的子项

来自分类Dev

在SQL中获取递归表的子项

来自分类Dev

尽管具有 C# 管理员权限,但无法为注册表子项创建/写入值

来自分类Dev

vb.net检查注册表子项值是否存在

来自分类Dev

如何从注册表子项中提取数据并将其分配给适当的类属性

来自分类Dev

无法删除注册表中的值

来自分类Dev

通过PowerShell在注册表中设置打印机安全二进制密钥

来自分类Dev

无法在Visual Studio中的WIX安装项目中找到文件系统,注册表图标

来自分类Dev

在DOM表中追加子项

来自分类Dev

通过python更改注册表无法正常工作

来自分类Dev

无法通过注册表安装Firefox扩展

来自分类Dev

在GDB中打印,如何检查注册表?

来自分类Dev

如何通过子项本身中的删除按钮删除子项组件

来自分类Dev

通过Windows注册表更改Windows中的声音方案

来自分类Dev

无法查询注册表中已安装的msi文件

来自分类Dev

总注册表无法在Julia中更新

来自分类Dev

我的网页无法识别注册表中填写的数据

来自分类Dev

通过注册表将目录添加到系统路径变量

来自分类Dev

无法在 React 组件中渲染子项

Related 相关文章

热门标签

归档