繁体   English   中英

如何读取 C++ 中的 REG_NONE 值?

[英]How can I read REG_NONE value in C++?

我想使用 C++ 从 regedit 中读取 REG_NONE 值。

这是我的代码:

#include <iostream>
#include <windows.h>
using namespace std;

//--- Değişkenler ---//
//DWORD
DWORD dw_Rn_Boyut = MAX_PATH;
DWORD dw_Rn_Deger;
DWORD dw_Rn_DegerTipi = REG_NONE;

//HKEY
HKEY hkey_Rn;

//LONG
LONG long_Rn_Sonuc;

int main()
{
    long_Rn_Sonuc = RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\DownloadManager\\FoldersTree\\Compressed", 0, KEY_READ | KEY_WOW64_64KEY, &hkey_Rn);

    if(long_Rn_Sonuc == ERROR_SUCCESS)
    {
        long_Rn_Sonuc = RegQueryValueEx(hkey_Rn, "pathW", 0, &dw_Rn_DegerTipi, (LPBYTE)&dw_Rn_Deger, &dw_Rn_Boyut);

        if(long_Rn_Sonuc == ERROR_SUCCESS)
        {
            cout << dw_Rn_Deger;
        }
    }

    getchar();

    return 0;
}

结果我的应用程序显示3801156 该值是该注册值的十进制版本。 它等于3A 00 44

这是我要读取的 reg 值:

在此处输入图像描述

但为什么我的应用程序不读取其他十六进制值?

我该如何解决我的问题?

没有REG_NONE值这样的东西。 成功后,您的dw_Rn_DegerTipi变量将更新为实际值类型(在本例中为REG_BINARY ),您的dw_Rn_Boyut变量将更新为读取的实际字节数。

您的问题是您为dw_Rn_Dege变量使用了错误的数据类型。 有问题的数据不是一个DWORD值,它是一个WCHAR字符串,所以你需要一个WCHAR字符缓冲区来接收它。 你告诉RegQueryValueEx()你分配了一个缓冲区来保存MAX_PATH字节,但你真的没有。 因此,当RegQueryValueEx()尝试将超过 4 个字节写入 dw_Rn_Deger 的dw_Rn_Deger地址时,代码中会出现缓冲区溢出错误。

试试这个:

#include <iostream>
#include <windows.h>
using namespace std;

//--- Değişkenler ---//
WCHAR sz_Rn_Deger[MAX_PATH+1] = {};
DWORD dw_Rn_Boyut = MAX_PATH * sizeof(WCHAR);

//HKEY
HKEY hkey_Rn;

//LONG
LONG long_Rn_Sonuc;

int main()
{
    long_Rn_Sonuc = RegOpenKeyExW(HKEY_CURRENT_USER, L"Software\\DownloadManager\\FoldersTree\\Compressed", 0, KEY_QUERY_VALUE | KEY_WOW64_64KEY, &hkey_Rn);

    if (long_Rn_Sonuc == ERROR_SUCCESS)
    {
        long_Rn_Sonuc = RegQueryValueExW(hkey_Rn, L"pathW", NULL, NULL, reinterpret_cast<LPBYTE>(&sz_Rn_Deger), &dw_Rn_Boyut);

        if (long_Rn_Sonuc == ERROR_SUCCESS)
        {
            wcout << sz_Rn_Deger;
        }

        RegCloseKey(hkey_Rn);
    }

    getchar();

    return 0;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM