编程解除注册表和IE主页的锁定 摘要:利用Visual C++编程来解除注册表的锁定和IE主页不能修改的问题 关键词:注册表 API函数 一、提出问题 你是否有过这样的痛苦经历:不知什么时候IE主页被修改,想该回去的时候可是发现地址栏已经被锁定,该不了!于是想通过注册表来恢复,可是输入”regedit”回车后,却弹出“注册表已被管理员停用”!是不是很郁闷? 其实,这都是上网的时候中了病毒而造成了。恢复注册表有很多方法,这里我介绍如何用Visual C++编程来解决。 二、分析问题: 注册表被锁定是由于 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System下的DWORD值“DisableRegistryTools”被修改为“ IE首页被锁定则是由于在注册表编辑器中 三、解决问题 首先要介绍将要甬道的几个操作注册表的API函数。(只给出函数的功能,具体参数和用法可参考MSDN或相关的书籍) RegOpenKeyEx() 打开一个指定键 RegDeleteValue() 在注册表中从一个键中删除一个值 RegSetValueEx() 向一个打开的注册表的键中存储数据 RegCloseKey() 关闭打开的注册表句柄 打开Visual C++,建立一个对话框程序Reg. 添加四个按扭控件:
双击ID为IDC_UNLOCKREG的按扭,添加消息处理函数: void CRegDlg::OnUnlockReg() { HKEY hkey; LPCTSTR strSubKey="Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\system", if(::RegOpenKeyEx(HKEY_CURRENT_USER, strSubKey, 0, KEY_READ|KEY_WRITE, &hkey) !=ERROR_SUCCESS) return; if(::RegDeleteValue(hkey,"DisableRegistryTools") !=ERROR_SUCCESS) return ; else MessageBox(“你已经成功解除了注册表的锁定”,”恭喜你”,MB_OK | MB_ICONINFORMATION); ::RegCloseKey(hkey); } 同样,双击ID为IDC_UNLOCKHOMEPAGE的按扭添加消息处理函数: void CRegDlg:: OnUnlockhomepage() { HKEY hkey; LPCTSTR strSubKey="Software\\Policies\\Microsoft\\Internet Explorer\\Control Panel",, if(::RegOpenKeyEx(HKEY_CURRENT_USER, strSubKey, 0, KEY_READ|KEY_WRITE, &hkey) !=ERROR_SUCCESS) return; DWORD dwValue=0; if(::RegSetValueEx(hkey, "HomePage", NULL, REG_DWORD, (LPBYTE)&dwValue, //LPBYTE即unsigned char* sizeof(DWORD) ) !=ERROR_SUCCESS) { MessageBox("设置注册表相关键值失败","错误", MB_OK|MB_ICONEXCLAMATION); return; } else MessageBox("你已经成功地解除了IE主页的锁定","恭喜你", MB_OK|MB_ICONINFORMATION); ::RegCloseKey(hkey); } 为了简化编程,“锁定注册表”和“锁定IE主页”的功能不通过用API函数操作注册表来完成,而是编写两个注册表文件,然后导入注册表实现。 建立DisableRegistryTools.reg文件,内容如下: REGEDIT4 [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System\] "DisableRegistryTools"=dword:00000001 建立LockHomePage.reg文件,内容如下: REGEDIT4 [HKEY_CURRENT_USER\Software\Policies\Microsoft\Internet Explorer\Control Panel] "HomePage"=dword:00000001 然后添加消息处理函数: void CRegDlg::OnLock() { ::ShellExecute(GetSafeHwnd(),"open",” DisableRegistryTools.reg”,NULL,"",SW_SHOW); } void CRegDlg::OnLockHomepage() { ::ShellExecute(GetSafeHwnd(),"open","LockHomePage.reg",NULL,"",SW_SHOW); } 四、经验总结 好了,现在编译链接便可运行了,有了这个小程序,你从此就不用再害怕这些雕虫小技了。本程序在Windows XP, Visual C++ 6.0环境下调试通过 |
文章来源于领测软件测试网 https://www.ltesting.net/