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
答案 0 :(得分:3)
这里有两个问题。
确保RegGetValue的返回值为ERROR_SUCCESS
。如果不是,则例程失败。此外,您可以查看写入BufferSize
的内容,因为RegGetValue
指定了写入的字节数。
您传入定义为char value[255];
的缓冲区,然后将其长度指定为8192
。这可能会导致缓冲区溢出。
答案 1 :(得分:2)
您没有检查RegGetValue
的返回值。最有可能的是调用失败,缓冲区value
从未被分配任何东西。始终检查返回值。
从我们可以看到的代码中,我注意到你在说缓冲区大小。你说它是8192字节。但是你只分配了255个字节。您也在调用API的Unicode版本,但是传入char
缓冲区。如果您需要字符串数据,则需要提供宽字符的缓冲区。此API的Unicode版本将字符串数据作为UTF-16编码文本返回。
一旦你完成所有排序,接下来需要检查该值中存储的类型。您正在为type参数传递NULL。传递指向变量的指针,并找出是否确实存储了一个字符串 那里。您还需要读取读取的字节数,并相应地设置缓冲区中的空终止符。