工控编程吧
标题:
380上位机VC MFC通过注册表禁用与使用U盘
[打印本页]
作者:
qq263946146
时间:
2016-9-16 11:31
标题:
380上位机VC MFC通过注册表禁用与使用U盘
(, 下载次数: 0)
上传
点击文件名下载附件
禁用与使用U盘
功能展示
U盘是传播病毒的常见途径,如果设备的核心控制部分-工控机被病毒感染,那就会引起经济上的损失同时也给我们程序工程师造成工作上的麻烦,所以在工控机投入生产后,封死U盘等病毒传播途径就是我们程序员要解决的事。我们当前例程通过注册实现U盘的禁用与使用功能,效果如图,点击<禁止使用U盘>例程会修改注册表禁用U盘,U盘插入电脑都不能操作,点击<允许使用U盘>u盘插入后可以正常使用
要点提示
当前例程主要是通过悠注册表三个指定键下的Start键值项实现U盘的禁用与使用的。分别修改HKEY_LOCAL_MACHINE下 SYSTEM\\CurrentControlSet\\services\\USBSTOR的键值项“Start”的值为4
HKEY_LOCAL_MACHINE下 SYSTEM\\ControlSet001\\services\\USBSTOR的键值项“Start”的值为4
HKEY_LOCAL_MACHINE下 SYSTEM\\ControlSet002\\services\\USBSTOR的键值项“Start”的值为4
就可以禁用U般,同时将三个位置的Start值修改为3表示可以使用U盘;
在修改时会遇到访问权限及修改权限的困扰,例程也一一解决:访问权限可以通过载入例程根目录文件gkbc8_com.manifest到工程中,类型修改为24,ID修改为1;修改权限可调用例程的函数SetRegPrivilege()修改指定SAM主键的DACL ;
另外要更完美的实现禁用,可以禁止U盘驱动的安装,也就是删除或重命名系统文件夹C:?\\windows\\inf下usbstor . inf和usbstor . pnf两个文件(有的电脑可能是usbstor和usbstor . pnf)
实现功能
1.新建基于对话框的应用程序
2.添加两个按钮<禁止使用U盘><允许使用U盘>关联按钮的点击函数,实现U盘的禁用与使用
void CGkbc8Dlg::OnDisallow()
{
if(!SetRegValue(HKEY_LOCAL_MACHINE,"SYSTEM\\CurrentControlSet\\services\\USBSTOR","Start",4) )
{
MessageBox("关闭CurrentControlSet 过程出错");
return;
}
if(!SetRegValue(HKEY_LOCAL_MACHINE,"SYSTEM\\ControlSet001\\services\\USBSTOR","Start",4) )
{
MessageBox("关闭ControlSet001 过程出错");
return;
}
if(!SetRegValue(HKEY_LOCAL_MACHINE,"SYSTEM\\ControlSet002\\services\\USBSTOR","Start",4) )
{
MessageBox("关闭ControlSet002 过程出错");
return;
}
MessageBox("已成功禁用U盘");
}
void CGkbc8Dlg::OnAllow()
{
if(!SetRegValue(HKEY_LOCAL_MACHINE,"SYSTEM\\CurrentControlSet\\services\\USBSTOR","Start",3) )
MessageBox("打开 CurrentControlSet 过程出错");
if(!SetRegValue(HKEY_LOCAL_MACHINE,"SYSTEM\\ControlSet001\\services\\USBSTOR","Start",3 ) )
MessageBox("打开 ControlSet001 过程出错");
if(!SetRegValue(HKEY_LOCAL_MACHINE,"SYSTEM\\ControlSet002\\services\\USBSTOR","Start",3) )
MessageBox("打开 ControlSet002 过程出错");
}
3.按钮中调用了自定义函数BOOL SetRegValue(HKEY hRootKey,CString sSubKey,CString sValueName,DWORD dwData);,这一自定义函数又调用了另一提权函数,所以再添加这两函数,及添加函数所需要的头文件#include <Aclapi.h> #pragma comment (lib,"Advapi32.lib")
BOOL CGkbc8Dlg::SetRegValue(HKEY hRootKey,CString sSubKey,CString sValueName, DWORD dwData)
{
//<>
HKEY hSubKey;
int nResult;
nResult = RegOpenKeyEx(hRootKey,sSubKey,0,KEY_ALL_ACCESS,&hSubKey);
if(nResult != ERROR_SUCCESS)
return FALSE;
DWORD dwDataSize = 4;
nResult = RegSetValueEx(hSubKey,sValueName,0,REG_DWORD,(const unsigned char *)&dwData,dwDataSize);
if(nResult != ERROR_SUCCESS)
{
CString sSAMPath;
if(hRootKey == HKEY_LOCAL_MACHINE)
sSAMPath = "MACHINE\\"+sSubKey;
if(SetRegPrivilege(sSAMPath) )//设置操作子键全权限成功后再写一次
{
nResult = RegSetValueEx(hSubKey,sValueName,0,REG_DWORD,(const unsigned char *)&dwData,dwDataSize);
if(nResult != ERROR_SUCCESS)
{
RegCloseKey(hSubKey);
return FALSE;
}
RegCloseKey(hSubKey);
return TRUE;
}
else
{
RegCloseKey(hSubKey);
return FALSE;
}
}
RegCloseKey(hSubKey);
return TRUE;
}
在打开注册表会出现拒绝访问问题,将例程以管理员身份运行就可,或按例程载入gkbc8_com.manifest获权
我们来演示下功能实现的整个过程
[iqiyi]http://player.video.qiyi.com/e10ee2ca5e500ed914c6734420f054d2/0/0/w_19rswmy0cx.swf-albumId=6292859709-tvId=6292859709-isPurchase=0-cnId=12[/iqiyi]
(, 下载次数: 1)
上传
点击文件名下载附件 [weixinlianxi]1[/weixinlianxi]
[note]1[/note]
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4