373上位机VC MFC获取注册表全部读写权限
获取注册表全部读写权限
功能展示
在对注册表进行读写操作时会出现无权操作的现象,主要是我们编写的程序未获取读写权限,我们当前例程就实现读写权限的获取功能,效果如图。点击创建会在HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies创建设置的键及项。点击<获取权限>可以获取指定键的全部权限
要点提示
在WIN7等系统上对某些注册表键的操作得获得管理员的权限,也就是日常所用的操作:程序上鼠标右键-以管理员身份运行;我们当前例程操作的注册表键是HKEY_CURRENT_USER下的Software\\Microsoft\\Windows\\CurrentVersion\\Policies,所以也得以管理员身份运行,不然出现错误代码5,也就是拒绝访问,管理员的身份也可以通过代码获取
加载例程根目录文件gkbc8_com.manifest,到工程根目录,资源类型名为24,资源ID设置为1;
实现功能
1.新建基于对话框的应用程序
2.添加编辑框IDC_EDIT1, IDC_EDIT2,及按钮<创建写入数据>用于注册权限用,再添加按钮<获取权限>用于获取权限用,关联按钮的点击函数
void CGkbc8Dlg::OnSet()
{
CString sKeyName,sValueName;
GetDlgItemText(IDC_EDIT1,sKeyName);
GetDlgItemText(IDC_EDIT2,sValueName);
if(sValueName.IsEmpty()||sKeyName.IsEmpty())
return;
//<>
CString sDebugText,sSubKey="Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\";
char cData[] = "工控编程吧(gkbc8.com)";
DWORD dwSize = _MAX_PATH;
HKEY key;
int nResult;
nResult = RegCreateKeyEx(HKEY_CURRENT_USER,sSubKey+sKeyName,0,REG_NONE,REG_OPTION_NON_VOLATILE, KEY_WRITE|KEY_READ, NULL, &key, NULL);
if(nResult!=ERROR_SUCCESS)
{
sDebugText.Format("RegCreateKeyEx()错误代码:%d",nResult);
MessageBox(sDebugText);
return;
}
nResult = RegSetValueEx(key,sValueName,0,REG_SZ,(const unsigned char *)cData,dwSize);
if(nResult!=ERROR_SUCCESS)
{
sDebugText.Format("RegSetValueEx()错误代码:%d",nResult);
MessageBox(sDebugText);
RegCloseKey(key);
return;
}
RegCloseKey(key);
MessageBox("创建写入数据 成功");
}
void CGkbc8Dlg::OnGetprivilige()
{
CString sKeyName;
GetDlgItemText(IDC_EDIT1,sKeyName);
if(sKeyName.IsEmpty())
return;
CString sSubKey="CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\+sKeyName";//注册表内需存在
SetRegPrivilege(sSubKey);
}
再实现自定义函数BOOL SetRegPrivilege(CString sSAMPath,BOOL bGet =TRUE);
添加头文件
#include <Aclapi.h>
#pragma comment (lib,"Advapi32.lib")
我们来演示下功能实现的整个过程
如果您认可,可联系功能定制! 如果您着急,充值会员可直接联系发您资料!
|