1

似乎顺序对从注册表中读取一些键很重要,这让我感到惊讶。我fake_entry通过创建如下所示Regedit

在此处输入图像描述

当我fake_entry在致电后立即阅读时RegOpenKeyEx(),它可以工作。如果我在 my 之前阅读任何其他内容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);

在上面,两种读取都有效。

为什么一个工作,另一个失败?真的可以订吗?RegOpenKeyEx()每次打电话都要打电话ReqQueryValueEx()吗?我在互联网上四处寻找似乎并非如此。

是的,我知道这不是我应该更改的注册表位置。我在学习 KEY_WOW64_64KEY时偶然发现了这一点,并且很好奇为什么秩序似乎很重要。

在 Visual Studio 2010 中运行 Windows 7、64 位、C++,使用 ASCII 字符编码。

4

1 回答 1

2

size在连续两次调用中重复使用一个变量作为输入输出参数的方式有些奇怪。这可能会导致接收ERROR_MORE_DATA

于 2013-10-28T15:13:18.067 回答