方法一:通過修改注冊表禁用USB
原理:只要把注冊表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\USBSTOR路徑下的Start值改成4即可禁用USB(默認為3,即允許USB)。
優點:簡單易行。
缺點:地球人都知道,很容易識破。
建議:用一個timer或者創建一個線程,來鎖定這個值。
程序代碼:
[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#程序以獨占的形式打開他們,那麼Windows便無法修改這兩個文件,U盤驅動安裝不上自然無法使用。
優點:簡單易行,不容易識破。
缺點:只能禁用未在該電腦上使用過的U盤。 www.2cto.com
建議:一定要注意獨占的時候文件打開對象要用類的成員變量(也就是模塊級變量),如果用局部變量,會自動被托管程序釋放,達不到獨占的效果。
程序代碼:
注:以下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);