为什么RegOpenKeyEx允许我打开注册表编辑器中不存在的密钥?
Why does RegOpenKeyEx let me open a key that doesn't exist in Registry Editor?
在Microsoft Visual C++中,我有以下代码来访问注册表中的路径。然后我用RegQueryValueEx
读取密钥Installed
的值。到目前为止,值似乎是1
,这与我的系统上存在的Visual C++2010运行时相对应。(它恰好是一段检测c++运行时存在的代码)。
现在,当我在HKEY_LOCAL_MACHINESOFTWAREMicrosoftVisualStudio10.0
检查regedit.exe
时,我在树中看不到VC
。
这怎么可能?我已经复制/粘贴了这个问题中的所有路径和代码,所以它们必须是正确的。
C++应用程序中的代码:
HKEY RegistryKey;
DWORD ErrorCode;
DWORD RegDwordValue = 0;
DWORD RegDwordValueSize = sizeof(DWORD);
if((ErrorCode = RegOpenKeyExA(HKEY_LOCAL_MACHINE,
"SOFTWARE\Microsoft\VisualStudio\10.0\VC\VCRedist\x86",
0, //Reserved
KEY_READ,
&RegistryKey)) != ERROR_SUCCESS)
{
//Either the key does not exists, or registry access is denied. Anyway, detection did not succeed
std::cout << "Could not read registry path:nt" << lpcRegistryPath << "ntError code: " << ErrorCode;
return false;
}
if((ErrorCode = RegQueryValueEx( RegistryKey,
lpcValueToQuery,
NULL,
NULL,
(LPBYTE)&RegDwordValue,
&RegDwordValueSize
)) != ERROR_SUCCESS)
{
std::cout << "Could not read registry value, error " << ErrorCode;
return false;
}
编辑:我在下面添加了注册表的导出
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftVisualStudio10.0]
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftVisualStudio10.0Debugger]
"FEQARuntimeImplDll"="C:\Program Files\Microsoft Visual Studio 10.0\Common7\Packages\Debugger\X64\Microsoft.VisualStudio.Debugger.Runtime.Impl.dll"
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftVisualStudio10.0Packages]
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftVisualStudio10.0Packages{4A0C6509-BF90-43DA-ABEE-0ABA3A8527F1}]
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftVisualStudio10.0Packages{4A0C6509-BF90-43DA-ABEE-0ABA3A8527F1}Settings]
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftVisualStudio10.0Packages{4A0C6509-BF90-43DA-ABEE-0ABA3A8527F1}SettingsTools]
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftVisualStudio10.0Packages{4A0C6509-BF90-43DA-ABEE-0ABA3A8527F1}SettingsToolsSSISScript]
"ScriptLanguage"="CSharp"
如果您所在的64位系统运行的是受注册表重定向或注册表虚拟化影响的32位应用程序,则会发生什么情况。如果您的VC++应用程序是32位的,并且您正在运行64位版本的regedit,或者您的应用程序是64位的,而您正在运行32位版本的正则表达式,那么他们将有效地查看/操作注册表的不同区域。这就解释了他们为什么看不到对方的数据。
相关文章:
- curl_easy_perform() 失败:SSL 对等证书或 SSH 远程密钥不正常
- C++密钥和文件的映射不起作用
- Nlohmann 在不知道密钥的情况下解析 JSON 文件
- 为什么 std::map 接受 std::p air 作为密钥,而 std::unordered_map 不接受?
- 为什么在打印Un_ordered Map and Map(字典)的密钥和值时存在异常
- 如何使用 AWS CPP SDK 检查 AWS S3 密钥是否存在
- 使用char*作为undered_map的密钥不会识别重复的密钥
- Xsendevent不会更改修饰符密钥状态
- 初始化静态地图,不知道密钥
- 检查最后一个项目是否通过地图密钥存在
- 使用数组作为地图密钥不使用C 11编译器命令
- Boost property_map测试密钥是否存在?
- 在不使用密钥的情况下有效地搜索哈希表
- 在不禁用其密钥的情况下注册全局热键
- 检查密钥是否已存在(RegOpenKey)
- Cocos2D X:如何检查plist文件是否存在密钥
- 了解找不到密钥时QHash的作用
- C++:在不知道密钥的情况下插入std::map
- 为什么RegOpenKeyEx允许我打开注册表编辑器中不存在的密钥?
- 如何查看地图中是否存在密钥