首页 > 代码库 > window 7 64位下可运行的递归删除注册表程序
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, // 所有访问权限
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。