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()之后,它的值似乎是
value 0x0034f50c "ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ... char[255]这里发生了什么事?
注: RegKeyValue()返回0
发布于 2013-01-20 22:53:00
您没有检查RegGetValue的返回值。很可能调用失败了,缓冲区value从未被分配过任何东西。始终检查返回值。
从我们可以看到的代码中,我注意到您在缓冲区大小方面撒了谎。你说它是8192字节。但您只分配了255个字节。您还调用了API的Unicode版本,但传入了一个char缓冲区。如果需要字符串数据,则需要提供宽字符缓冲区。此API的Unicode版本将以UTF-16编码文本的形式返回字符串数据。
一旦对所有这些进行了排序,接下来需要检查存储在该值中的类型。类型参数的传递为NULL。传递一个指向变量的指针,并找出字符串是否真的存储在那里。您还需要读取读取的字节数,并相应地在缓冲区中设置null终止符。
发布于 2013-01-20 22:56:04
这里有两个问题。
ERROR_SUCCESS。如果不是,例行公事就失败了。另外,您可以检查写入BufferSize的内容,因为RegGetValue指定写入的字节数。char value[255];的缓冲区,然后将其长度指定为8192。这可能导致缓冲区溢出。https://stackoverflow.com/questions/14430256
复制相似问题