RegEnumValue函数读取注册表中的REG_BINARY和REG_DWORD类型数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RegEnumValue函数读取注册表中的REG_BINARY和REG_DWORD类型数据相关的知识,希望对你有一定的参考价值。
我用RegEnumValue这个函数可以正确读取出注册表中的REG_SZ类型文件,但是却不能正确读取REG_BINARY和REG_DWORD类型的数据。代码如下
ret2=RegEnumValue(hkey,j,ValueName,&cbValueName,NULL,&ValueType,ValueData,&cbValueData);
其中
char ValueName[255];
BYTE ValueData[255];
DWORD cbValueName=255,cbValueData=255;
如何在 C++ 中使用 RegQueryValueEx(..) 从注册表中读取 REG_MULTI_SZ 类型值
【中文标题】如何在 C++ 中使用 RegQueryValueEx(..) 从注册表中读取 REG_MULTI_SZ 类型值【英文标题】:How to read a REG_MULTI_SZ type value from the registry using RegQueryValueEx(..) in c++ 【发布时间】:2010-01-18 18:03:01 【问题描述】:在我们的 vc++ win32 应用程序中,我们正在读取类型为 reg_multi_sz 的注册表值,它在 32 位上运行良好,但当我在 64 位上运行时提供空缓冲区。如何从我的 32 位应用程序中读取 64 位注册表的值?
【问题讨论】:
【参考方案1】:你能说得更具体点吗?通常,当您尝试以 32 位代码读取 64 位注册表配置单元时,您必须使用 KEY_WOW64_64KEY 打开 HKLM\Software。希望对您有所帮助。
【讨论】:
非常感谢您使用此 KEY_WOW64_64KEY 访问权限,它在 32 位和 64 位注册表上工作正常。 但是想知道更多关于这方面的信息,你能不能给出它之前失败的原因? 在 64 位版本的 Windows 上,注册表的一部分分别存储用于 32 位应用程序和 64 位应用程序。 KEY_WOW64_64KEY 将启用对 64 位视图的显式访问。除非我查看更多您的代码,否则我将无法准确说出它首先失败的原因。但这有希望为您提供足够的信息来解决这个问题。 好的,谢谢。我知道为什么它之前失败了。我观察到如果我们使用 RegOpenEx() 打开注册表,那么默认情况下它会打开 32 位注册表视图。【参考方案2】:尝试以下帮助文章中列出的示例代码。它是专门为读取REG_MULTI_SZ
值而编写的。
【讨论】:
不幸的是,该示例适用于 Visual FoxPro以上是关于RegEnumValue函数读取注册表中的REG_BINARY和REG_DWORD类型数据的主要内容,如果未能解决你的问题,请参考以下文章
如何在 C++ 中使用 RegQueryValueEx(..) 从注册表中读取 REG_MULTI_SZ 类型值
从 VB.NET 中的注册表获取实际 REG_DWORD 十进制数的另一种方法?