码迷,mamicode.com
首页 > Windows程序 > 详细

window 7 64位下可运行的递归删除注册表程序

时间:2014-08-11 21:38:12      阅读:353      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   os   文件   2014   ar   问题   

为了完成一个简单的注册表删除程序,由于我本身是win7 64位的OS,写了以下代码来递归删除注册表键值,程序代码如下:

#include <tchar.h>
#include <afx.h>

#define KEY_WOW64_64KEY 256

long DeleteSubKeyTree(HKEY hKey, LPCTSTR lpSubKey)
{
	LONG lResult;
	HKEY hSubKey;
	DWORD dwIndex, cbName; 
	char szSubKey[512]; 
	FILETIME ft; 
	lResult = RegOpenKeyEx(hKey,lpSubKey,0,KEY_ALL_ACCESS | KEY_WOW64_64KEY,&hSubKey);
	if (lResult != ERROR_SUCCESS)
	{
		RegCloseKey(hSubKey);
		return 0;
	}
	dwIndex = 0;
	cbName = sizeof(szSubKey)/sizeof(szSubKey[0]);
	while (ERROR_SUCCESS == (lResult = RegEnumKeyEx(hSubKey, dwIndex, szSubKey, &cbName, NULL, NULL, NULL, &ft)))
	{
		DeleteSubKeyTree(hSubKey, szSubKey);
	}
	RegCloseKey(hSubKey);
	lResult = RegDeleteKey(hKey, lpSubKey); 
	return lResult;
}

int main()
{
	LPCTSTR DeleteText = _T("Software\\Bentley\\Licensing");
    DeleteSubKeyTree(HKEY_LOCAL_MACHINE,DeleteText);
	::MessageBox(NULL, _T("破解成功!"), "", MB_OK);
    return 0;
}

发现键值存在,在调用RegQueryValueEx的时候总是查询失败,返回了0,一直以为是权限的问题,将其提升到debug还是不行,网络上也有朋友说创建.mainfest的文件提升权限,后面在MSDN网上也找到相关说明。不过还是失败。把这个程序放到xp下和win7 32下均能正常得到读取出来的值.于是就想会不会是64位OS的问题呢?最后还是在微软最新MSDN在线找到了答案。原来是在64位OS下操作注册表必须注意设置一个值。首先在文件头定义:

#define KEY_WOW64_64KEY 256    // 兼容64位主机

然后将RegOpenKeyEx的参数加上

KEY_ALL_ACCESS|KEY_WOW64_64KEY,   // 所有访问权限

window 7 64位下可运行的递归删除注册表程序,布布扣,bubuko.com

window 7 64位下可运行的递归删除注册表程序

标签:style   blog   color   os   文件   2014   ar   问题   

原文地址:http://blog.csdn.net/szq123456123/article/details/38496397

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!