C#禁用USB接口

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

 

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

  

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

 

一:修改注册表

 

原理:

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

 

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

 

分析:

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

代码:

 

[csharp] 
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#

 

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

 

分析:

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

我们的机房)。     

 

建议:

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

 

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

 

代码:

 

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

 

[csharp] 
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); 

 

独占方式:

  

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

 

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

 

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

 

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

 

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

你可能感兴趣的:(C#禁用USB接口)