似乎顺序对从注册表中读取一些键很重要,这让我感到惊讶。
我通过 Regedit
创建了如下所示的 fake_entry
。
当我在调用 RegOpenKeyEx()
后立即读取 fake_entry
时,它起作用了。如果我在 fake_entry
之前读取任何其他内容,则读取 fake_entry
会失败。
失败的例子:
openResult=RegOpenKeyEx( HKEY_LOCAL_MACHINE, _TEXT("SOFTWARE\\Microsoft\\NET Framework Setup\\NDP\\v4\\Full"), 0, KEY_READ|KEY_WOW64_64KEY, &root);
readResult1=RegQueryValueEx(root, _TEXT("InstallPath"), NULL, NULL, data1, &size);
readResult2=RegQueryValueEx(root, _TEXT("fake_entry"), NULL, NULL, data2, &size);
在上面,InstallPath
读取有效,fake_entry
读取失败,出现“错误 2,ERROR_FILE_NOT_FOUND
”。
有效的例子:
openResult=RegOpenKeyEx( HKEY_LOCAL_MACHINE, _TEXT("SOFTWARE\\Microsoft\\NET Framework Setup\\NDP\\v4\\Full"), 0, KEY_READ|KEY_WOW64_64KEY, &root);
readResult2=RegQueryValueEx(root, _TEXT("fake_entry"), NULL, NULL, data2, &size);
readResult1=RegQueryValueEx(root, _TEXT("InstallPath"), NULL, NULL, data1, &size);
在上面,两种读取都有效。
为什么一个工作,另一个失败?真的可以订吗?每次调用 ReqQueryValueEx()
时都必须调用 RegOpenKeyEx()
吗?我在互联网上四处搜寻似乎显示并非如此。
是的,我知道这不是我应该更改的注册表位置。我在 was learning about 时偶然发现了这个KEY_WOW64_64KEY
并且很好奇为什么顺序似乎很重要。
在 Visual Studio 2010 中运行 Windows 7,64 位,C++,使用 ASCII 字符编码。
最佳答案
将一个变量 size
重复用作两次连续调用的 in-out 参数有些奇怪。这可能会导致接收到 ERROR_MORE_DATA
。
关于c++ - 读取 Windows 注册表时顺序是否重要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19637006/