首页 > Asp.net开发 > C#禁用USB接口

C#禁用USB接口

做考试系统的时候,防作弊首先要做的就是禁用USB。我们一般采用两种方式禁用

 

USB。一种是修改注册表,一种是通过独占USB驱动文件禁用USB。

下面我们来分别介绍一下这两种方式:(源码来自于网络)

 

一:修改注册表

 

原理:

只要把注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\USBSTOR

 

路径下的Start值改成4即可禁用USB(默认为3,即允许USB)。

 

分析:

这种方式简单易行,但是容易被破解,一般了解点电脑知识的人都可以破解。

代码:

 

[csharp][/csharp] view plaincopyprint?

  1. [csharp][/csharp]
  2. using Microsoft.Win32;
  3. /// <summary>
  4. /// 通过注册表启用USB
  5. /// </summary>
  6. /// <returns></returns>
  7. public bool RegToRunUSB()
  8. {
  9.     try
  10.     {
  11.         RegistryKey regKey = Registry.LocalMachine; //读取注册列表HKEY_LOCAL_MACHINE
  12.         string keyPath = @"SYSTEM\CurrentControlSet\Services\USBSTOR"; //USB 大容量存储驱动程序
  13.         RegistryKey openKey = regKey.OpenSubKey(keyPath, true);
  14.         openKey.SetValue("Start", 3); //设置键值对(3)为开启USB(4)为关闭
  15.         openKey.Close(); //关闭注册列表读写流
  16.         return true;
  17.     }
  18.     catch (Exception ex)
  19.     {
  20.         throw ex;
  21.     }
  22. }
  23. /// <summary>
  24. /// 通过注册表禁用USB
  25. /// </summary>
  26. /// <returns></returns>
  27. public bool RegToStopUSB()
  28. {
  29.     try
  30.     {
  31.         RegistryKey regKey = Registry.LocalMachine;
  32.         string keyPath = @"SYSTEM\CurrentControlSet\Services\USBSTOR";
  33.         RegistryKey openKey = regKey.OpenSubKey(keyPath, true);
  34.         openKey.SetValue("Start", 4);
  35.         openKey.Close();
  36.         return true;
  37.     }
  38.     catch (Exception ex)
  39.     {
  40.         throw ex;
  41.     }
  42. }


二:通过独占USB驱动文件禁用USB。

 

原理:

我们的U盘第一次在某个电脑使用时,电脑会自动安装U盘的驱动信息,修改

 

C:\Windows\inf\usbstor.inf和C:\Windows\inf\usbstor.PNF这两个文件。我们用C#程

 

序以独占的方式打开它们,使得U盘驱动安装不上,达到禁用USB的效果。

 

分析:

这个方法不容易被识破,但是只能禁用未在该电脑使用过的U盘。(这点比较适用于

我们的机房)。

 

建议:

一定要注意独占的时候文件打开对象要用类的成员变量(也就是模块级变量),如

 

果用局部变量,会自动被托管程序释放,达不到独占的效果。

 

代码:

 

注:以下fs和fs1对象变量我是放在了窗体中,作为窗体类的成员变量。

 

[csharp][/csharp] view plaincopyprint?

  1. [csharp][/csharp]
  2. using System.IO;
  3. public FileStream fs = null;
  4. public FileStream fs1 = null;
  5. //以独占方式打开文件
  6. fs = new FileStream("C:\\Windows\\inf\\usbstor.inf", FileMode.Open, FileAccess.Read, FileShare.None);
  7. fs1 = new FileStream("C:\\Windows\\inf\\usbstor.PNF", FileMode.Open, FileAccess.Read, FileShare.None);

 

独占方式:

只有调用它的程序进程独自享有读取写入,其他程序无权访问,这可以防止其他程

 

序修改文件,引起错误。要访问它必须要结束调用它的进程。

 

以上两种方式,第二种更适合考试系统。我的思考是做一个插件,当电脑开启时就

 

加载上,这样可以达到禁用USB的效果。

 

大家如果有什么好的方法,可以随时交流!


本文固定链接: http://www.devba.com/index.php/archives/3053.html | 开发吧

报歉!评论已关闭.