首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >RegKeyValue返回无意义数据

RegKeyValue返回无意义数据
EN

Stack Overflow用户
提问于 2013-01-20 22:51:25
回答 2查看 114关注 0票数 1
代码语言:javascript
运行
复制
char value[255];
DWORD BufferSize = 8192;

RegGetValue(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", L"ProductName", RRF_RT_ANY, NULL, &value, &BufferSize);

cout << value;

在运行RegKeyValue()之后,它的值似乎是

代码语言:javascript
运行
复制
    value   0x0034f50c "ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ...  char[255]

这里发生了什么事?

注: RegKeyValue()返回0

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-20 22:53:00

您没有检查RegGetValue的返回值。很可能调用失败了,缓冲区value从未被分配过任何东西。始终检查返回值。

从我们可以看到的代码中,我注意到您在缓冲区大小方面撒了谎。你说它是8192字节。但您只分配了255个字节。您还调用了API的Unicode版本,但传入了一个char缓冲区。如果需要字符串数据,则需要提供宽字符缓冲区。此API的Unicode版本将以UTF-16编码文本的形式返回字符串数据。

一旦对所有这些进行了排序,接下来需要检查存储在该值中的类型。类型参数的传递为NULL。传递一个指向变量的指针,并找出字符串是否真的存储在那里。您还需要读取读取的字节数,并相应地在缓冲区中设置null终止符。

票数 2
EN

Stack Overflow用户

发布于 2013-01-20 22:56:04

这里有两个问题。

  1. 确保RegGetValue的返回值为ERROR_SUCCESS。如果不是,例行公事就失败了。另外,您可以检查写入BufferSize的内容,因为RegGetValue指定写入的字节数。
  2. 您将传入一个定义为char value[255];的缓冲区,然后将其长度指定为8192。这可能导致缓冲区溢出。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14430256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档