C# 实现 windows操作 禁用USB大容量存储设备

xiyanglvbb 2016-12-21 04:04:23


请问 用代码如何实现 这个右键的 禁用操作?谢谢!
...全文
629 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_42937757 2019-07-22
  • 打赏
  • 举报
回复
使用注册表可以实现禁用,但是如果禁用之前就有U盘插入,注册表方法会失效
weixin_42937757 2019-07-22
  • 打赏
  • 举报
回复
你好,你这个问题解决了没有,我最近也在做这个功能,注册表那种方法行不通
earlsen 2016-12-22
  • 打赏
  • 举报
回复
给你提供思路:方法一:通过修改注册表禁用USB 原理:只要把注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\USBSTOR路径下的Start值改成4即可禁用USB(默认为3,即允许USB)。 优点:简单易行。 缺点:地球人都知道,很容易识破。 建议:用一个timer或者创建一个线程,来锁定这个值。 程序代码: using Microsoft.Win32; /// <summary> /// 通过注册表启用USB /// </summary> /// <returns></returns> public bool RegToRunUSB() { try { RegistryKey regKey = Registry.LocalMachine; //读取注册列表HKEY_LOCAL_MACHINE string keyPath = @"SYSTEM\CurrentControlSet\Services\USBSTOR"; //USB 大容量存储驱动程序 RegistryKey openKey = regKey.OpenSubKey(keyPath, true); openKey.SetValue("Start", 3); //设置键值对(3)为开启USB(4)为关闭 openKey.Close(); //关闭注册列表读写流 return true; } catch (Exception ex) { throw ex; } } /// <summary> /// 通过注册表禁用USB /// </summary> /// <returns></returns> public bool RegToStopUSB() { try { RegistryKey regKey = Registry.LocalMachine; string keyPath = @"SYSTEM\CurrentControlSet\Services\USBSTOR"; RegistryKey openKey = regKey.OpenSubKey(keyPath, true); openKey.SetValue("Start", 4); openKey.Close(); return true; } catch (Exception ex) { throw ex; } } 方法二:通过独占USB驱动文件禁用USB 原理:如果U盘第一次在某个电脑上使用,电脑会自动安装该U盘的驱动信息,修改C:\Windows\inf\usbstor.inf和C:\Windows\inf\usbstor.PNF这两个文件。假如我们用C#程序以独占的形式打开他们,那么Windows便无法修改这两个文件,U盘驱动安装不上自然无法使用。 优点:简单易行,不容易识破。 缺点:只能禁用未在该电脑上使用过的U盘。 建议:一定要注意独占的时候文件打开对象要用类的成员变量(也就是模块级变量),如果用局部变量,会自动被托管程序释放,达不到独占的效果。 程序代码: 注:以下fs和fs1对象变量我是放在了窗体中,作为窗体类的成员变量。 using System.IO; public FileStream fs = null; public FileStream fs1 = null; //以独占方式打开文件 fs = new FileStream("C:\\Windows\\inf\\usbstor.inf", FileMode.Open, FileAccess.Read, FileShare.None); fs1 = new FileStream("C:\\Windows\\inf\\usbstor.PNF", FileMode.Open, FileAccess.Read, FileShare.None);
xiyanglvbb 2016-12-22
  • 打赏
  • 举报
回复
up...........................
xiyanglvbb 2016-12-22
  • 打赏
  • 举报
回复
引用 3 楼 earlsen 的回复:
给你提供思路:方法一:通过修改注册表禁用USB 原理:只要把注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\USBSTOR路径下的Start值改成4即可禁用USB(默认为3,即允许USB)。 优点:简单易行。 缺点:地球人都知道,很容易识破。 建议:用一个timer或者创建一个线程,来锁定这个值。 程序代码: using Microsoft.Win32; /// <summary> /// 通过注册表启用USB /// </summary> /// <returns></returns> public bool RegToRunUSB() { try { RegistryKey regKey = Registry.LocalMachine; //读取注册列表HKEY_LOCAL_MACHINE string keyPath = @"SYSTEM\CurrentControlSet\Services\USBSTOR"; //USB 大容量存储驱动程序 RegistryKey openKey = regKey.OpenSubKey(keyPath, true); openKey.SetValue("Start", 3); //设置键值对(3)为开启USB(4)为关闭 openKey.Close(); //关闭注册列表读写流 return true; } catch (Exception ex) { throw ex; } } /// <summary> /// 通过注册表禁用USB /// </summary> /// <returns></returns> public bool RegToStopUSB() { try { RegistryKey regKey = Registry.LocalMachine; string keyPath = @"SYSTEM\CurrentControlSet\Services\USBSTOR"; RegistryKey openKey = regKey.OpenSubKey(keyPath, true); openKey.SetValue("Start", 4); openKey.Close(); return true; } catch (Exception ex) { throw ex; } } 方法二:通过独占USB驱动文件禁用USB 原理:如果U盘第一次在某个电脑上使用,电脑会自动安装该U盘的驱动信息,修改C:\Windows\inf\usbstor.inf和C:\Windows\inf\usbstor.PNF这两个文件。假如我们用C#程序以独占的形式打开他们,那么Windows便无法修改这两个文件,U盘驱动安装不上自然无法使用。 优点:简单易行,不容易识破。 缺点:只能禁用未在该电脑上使用过的U盘。 建议:一定要注意独占的时候文件打开对象要用类的成员变量(也就是模块级变量),如果用局部变量,会自动被托管程序释放,达不到独占的效果。 程序代码: 注:以下fs和fs1对象变量我是放在了窗体中,作为窗体类的成员变量。 using System.IO; public FileStream fs = null; public FileStream fs1 = null; //以独占方式打开文件 fs = new FileStream("C:\\Windows\\inf\\usbstor.inf", FileMode.Open, FileAccess.Read, FileShare.None); fs1 = new FileStream("C:\\Windows\\inf\\usbstor.PNF", FileMode.Open, FileAccess.Read, FileShare.None);
第一种方法试过了,设置后需要重启才行,但是要求不能重启。。 第二种方法,不适合。。 得通过调用windows api 来实现 禁用 USB大容量存储设备 。。,还是谢谢你
xiyanglvbb 2016-12-21
  • 打赏
  • 举报
回复
up..............

110,567

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧