QQ登录

只需一步,快速开始

381上位机VC MFC通过注册表禁用与使用注册表程序1

[ 复制链接 ]

382上位机VC MFC通过注册表限制指定程序运行

382上位机VC MFC通过注册表限制指定程序运行

禁用与使用注册表程序
功能展示
注册表程序即regedit.exe是系统自带的存放在C:\\Windows目录下的程序,主要用来对注册表的手工修改,很多时候我们在工控机上并不想让用户手工胡乱修改影响系统的正常运行,那么我们就想通过代码禁止用户使用注册表程序,我们当前例程就实现了这一功能,效果如图。点击<禁止使用注册表程序>再次打开注册表时就会提示无法打开。点击<允许使用注册表程序>就可再次使用注册表程序

要点提示
例程主要是通过修改注册表指定键下的键值项来实现禁止注册表程序的。原理为在HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System下创建一类型为DWORD的键值项,名称可随意,例程为DisableRegistryTools。,修改其值为0表示允许使用,改为1表示禁止使用注册表程序;

有时键System并不存在,所以我们例程使用了函数RegCreateKeyEx(),函数用于创建一子键,子键存在就打开子键,不存在就创建。注册表键不区分大小写。
函数原型ONG RegCreateKeyEx( HKEY hKey, LPCTSTR lpSubKey, DWORD Reserved,LPTSTR lpClass, DWORD dwOptions,REGSAM samDesired, LPSECURITY_ATTRIBUTES lpSecurityAttributes,PHKEY phkResult,LPDWORD lpdwDisposition);
hKey?:入参,一个打开键的句柄。调用该函数的进程必须拥有KEY_CREATE_SUB_KEY的权力。该句柄可以是RegCreateKeyEx或者RegOpenKeyEx的返回值,也可以是以下预定义的值?HKEY_CLASSES_ROOT ,HKEY_CURRENT_CONFIG,??HKEY_CURRENT_USER,?HKEY_LOCAL_MACHINE,?HKEY_USERS;
lpSubKey?:入参,标识子键名称。该参数不能为空。参数中不能存在(/);
Reserved?保留值,必须为0;
lpClass:入参,指向一个字符串,该字符串定义了该键的类型。可以为空。该参数可以在操作本地和远程注册表时使用;
dwOptions?:入参,该参数可以是以下值 ??REG_OPTION_BACKUP_RESTORE,0x00000004L? ??REG_OPTION_NON_VOLATILE,0x00000000L ,一般使用该值 ??REG_OPTION_VOLATILE,0x00000001L?;
samDesired?:入参,定义访问权限;
lpSecurityAttributes?:入参,定义返回的句柄是否可以被子进程继承,为NULL时不能继承; phkResult? 出参,保存返回的句柄;
lpdwDisposition?:出参,可以是以下值。如果为空,则不返回。
REG_CREATED_NEW_KEY,0x00000001L 该键是新创建的键.
REG_OPENED_EXISTING_KEY,0x00000002L
该键是已经存在的键; R
eturn Values成功则返回 ERROR_SUCCESS.; Remarks该函数创建的键没有键值。
应用程序不能创建HKEY_USERS 或者 HKEY_LOCAL_MACHINE的直接子键;

最后要注意的是程序对注册表目录的访问在WIN7系统中得获得管理员权限,具体可鼠标右键以管理员运行,也可加载例程根目录文件gkbc8_com.manifest到工程,类型为24 ,ID修改为1,重新编译,双击生成的程序运行就可;

实现功能
1.新建基于对话框的应用程序
2.添加按钮<禁止使用注册表程序><允许使用注册表程序>关联点击函数

void CGkbc8Dlg::OnAllow()
{
CString sDebugText;
DWORD dwData = 0;
HKEY key;
int nResult;
nResult = RegCreateKeyEx(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System",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);
if(!SetRegPrivilege("CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System") )
return;
}
if(RegSetValueEx(key,"DisableRegistryTools",0,REG_DWORD,(const unsigned char *)&dwData,4)!=ERROR_SUCCESS)//注意数据长度应该设为4
MessageBox("取消失败");
RegCloseKey(key);
MessageBox("取消成功");
}
void CGkbc8Dlg::OnForbid()
{
CString sDebugText;
DWORD dwData = 1;
HKEY key;
int nResult;
nResult = RegCreateKeyEx(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System",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);
if(!SetRegPrivilege("CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System") )
return;

}
if(RegSetValueEx(key,"DisableRegistryTools",0,REG_DWORD,(const unsigned char *)&dwData,4)!=ERROR_SUCCESS)//注意数据长度应该设为4
MessageBox("禁止失败");
RegCloseKey(key);
MessageBox("禁止成功");
}
其中函数SetRegPrivilege()为自定义的获取权限的函数,函数可屏蔽不使用;

我们来演示下功能实现的整个过程
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:381.上位机VC MFC通过注册表禁用与使用注册表程序.zip 
文件大小:138.92 KB  售价:1金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我

  

如果您认可,可联系功能定制!

  

如果您着急,充值会员可直接联系发您资料!

  

QQ联系我

微信扫扫联系我

  

  

您的支持是我们创作的动力!  

  

您可花点闲钱积分自助任意充值

  

成为VIP会员 全站资源任意下载永久更新!




回复

使用道具 举报

快速回复 返回列表 客服中心 搜索