标签: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
标签:style blog color os 文件 2014 ar 问题
原文地址:http://blog.csdn.net/szq123456123/article/details/38496397