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

为了完成一个简单的注册表删除程序,由于我本身是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,   // 所有访问权限

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值