C#禁用USB的两种方法(附代码)

方法一:经过修改注册表禁用USBspa

原理:只要把注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\USBSTOR路径下的Start值改为4便可禁用USB(默认为3,即容许USB)。线程

优势:简单易行。code

缺点:地球人都知道,很容易识破。对象

建议:用一个timer或者建立一个线程,来锁定这个值。string

程序代码:io

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驱动文件禁用USBclass

原理:若是U盘第一次在某个电脑上使用,电脑会自动安装该U盘的驱动信息,修改C:\Windows\inf\usbstor.inf和C:\Windows\inf\usbstor.PNF这两个文件。假如咱们用C#程序以独占的形式打开他们,那么Windows便没法修改这两个文件,U盘驱动安装不上天然没法使用。变量

优势:简单易行,不容易识破。原理

缺点:只能禁用未在该电脑上使用过的U盘。service

建议:必定要注意独占的时候文件打开对象要用类的成员变量(也就是模块级变量),若是用局部变量,会自动被托管程序释放,达不到独占的效果。

程序代码:

注:如下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);