注册表项无法操作在Windows7环境下(Can't Open Registry by Using CRegKey::Open )遍历注册表项
来源:互联网 发布:javascript sort() 编辑:程序博客网 时间:2024/05/21 15:50
最近做一个注册表扫描的项目,遇到一些问题,现已解决,拿出来分享分享,大家见笑了!
编写一个MFC程序,用CRegKey生成的对象reg的Open()函数打开注册表居然只能用KEY_READ权限,用KEY_WRITE不能成功.只有HKEY_CURRENT_USER项的部分能用KEY_WRITE权限。以下是注册表遍历(编译环境UNICODE字符环境):
调用试例:
遍历HKEY_USERS项
EnumKKey(L"HKEY_USERS",HKEY_USERS,L"");
//递归函数
EnumKKey(const char *strAllPath, HKEY hkey, char *sKeyName)
{
CRegKey regParent;
if(ERROR_SUCCESS == regParent.Open(hkey,sKeyName,KEY_READ) )
{
TCHAR temp[1024];
DWORD dwIndex = 0;
DWORD dwSize = MAX_PATH;
TCHAR szExtension[MAX_PATH];
while(ERROR_NO_MORE_ITEMS != regParent.EnumKey(dwIndex,szExtension,&dwSize) )
{
dwIndex++;
dwSize = MAX_PATH;
wcscpy_s(temp,strAllPath);
wcscat(temp,L"//");
wcscat(temp,szExtension);
GetDlgItem(IDC_STATIC)->SetWindowTextW(temp);
EnumKKey(temp,regParent.m_hKey,szExtension);
}
}
regParent.Close();
}
当Open函数中权限值是KEY_READ时无任何问题,更改其它权限则打不开。经过测试,直接用API函数RegOpenEx()也无法在其他权限下打开。或许你会认识这是注册表项的权限问题,或者说这是因为有些注册表项是32-bit的,有些是64-bit的,用32-bit的App无法打开64-bit的注册表项。这或许是原因,但此处不是,此处的原因会给你一个surpising!
解决方法
在win7中,微软为提高系统安全引入UAC(User Account Control,用户帐户控制),你所编译的程序应以管理员的身份进行执行,右击你的可执行程序,以管理员身份运行即可。对于编写代码来说,这比叫麻烦。若你用的是Visual Studio 2010,则visual studio 应以管理员身份运行。一劳永逸的方法,右击visual studio 2010,属性,兼容性,以管理员身份执行(UAC控制配置)。意外吧!编程还得用管理员身份,想不到这还有影响。。。。
分享一个visual studio 2010的下载地址,有效期大致为今后7天内。
http://www.namipan.com/d/cn_visual_studio_2010_ultimate_x86_dvd_532347.iso/aad7886a44381bfaa5897c14a4edddfba964ffb800d818a0
- 注册表项无法操作在Windows7环境下(Can't Open Registry by Using CRegKey::Open )遍历注册表项
- CRegKey类操作注册表
- CRegKey 注册表操作
- CRegKey 注册表操作
- CRegKey操作注册表
- CRegKey 操作注册表
- CRegKey操作注册表
- 使用CRegKey类操作注册表
- 使用CRegKey进行注册表操作
- CRegKey类来操作注册表
- Unicode下用CRegKey类来操作注册表
- 如何用CRegKey类来操作注册表(转)
- Windows7下无法编辑注册表的问题
- 如何用CRegKey类来操作注册表
- 如何用CRegKey类来操作注册表
- C++使用CRegKey类对注册表操作
- vs2013 can't open .vcxproj 无法打开
- C# 操作注册表 System.UnauthorizedAccessException: 无法写入到注册表项
- 010 渐进色背景
- 从此开始
- 一个人上网的感觉
- web发展简史
- 读书笔记之编程之美 - 1.7 光影切割问题
- 注册表项无法操作在Windows7环境下(Can't Open Registry by Using CRegKey::Open )遍历注册表项
- CSDN中对下载资源的评价中如何换行?
- C++ COM实现之四 添加接口
- wince(windows mobile) 中win32 实现带透明背景的贴图按钮
- 一次项目易用性检查会议的记录
- 被风投看好的网络创业创意
- 汇编学习 NO4
- Java中的Comparable接口和Comparator
- ERP—Enterprise Resource Planning (企业资源计划)