繁体   English   中英

RegEnumValue始终为最后一个值抛出ERROR_MORE_DATA

[英]RegEnumValue always throws ERROR_MORE_DATA for last value

无论如何,我对RegEnumValue的调用总是在键的最后一个值上返回ERROR_MORE_DATA(234)。

我通过使用以下方法获取所需的缓冲区大小:

retCode = RegQueryInfoKey(hSubKey,          // key handle
                                      NULL,             // buffer for class name
                                      NULL,             // size of class string
                                      NULL,             // reserved
                                      NULL,             // number of subkeys
                                      NULL,             // longest subkey length
                                      NULL,             // longest class string 
                                      &valueCount,      // number of values for this key 
                                      &cLongestValue,   // longest value name 
                                      NULL,             // longest value data 
                                      NULL,             // security descriptor 
                                      NULL);            // last write time

然后我分配我的数组:

currentValueName = new WCHAR[(int)cLongestValue];

然后我尝试获取值:

retCode = RegEnumValue(hSubKey, j, currentValueName, &cLongestValue, NULL, NULL, NULL, NULL);

当j = 2(最后一个索引值)时,retCode始终为234。

为什么我总是收到ERROR_MORE_DATA? 对于键中的前两个值,它工作正常。

任何帮助是极大的赞赏。 我是C ++的新手,所以可能有一些很明显的事情我正在忽略。

RegEnumValue ,第三个参数( lpValueName [out] ):

指向缓冲区的指针,该缓冲区以终止的字符串形式接收值的名称。 该缓冲区必须足够大以包含终止字符。

RegQueryInfoKey仅返回以字符为单位的值大小,因此为纯数据,没有字符串终止。

指向一个变量的指针,该变量接收键的最长值名称的大小,以Unicode字符表示。 该大小不包括终止的字符。

ERROR_MORE_DATA告诉您缓冲区太小。

在那里,您可以:增加缓冲区的字符数,以腾出空间来附加终止符。

暂无
暂无

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

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