[英]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.