方法一:通過修改註冊表禁用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
原理:如果隨身碟第一次在某個電腦上使用,電腦會自動安裝該隨身碟的驅動資訊,修改C:\Windows\inf\usbstor.inf和C:\Windows\inf\usbstor.PNF這兩個檔案。假如我們用C#程式以獨佔的形式開啟他們,那麼Windows便無法修改這兩個檔案,隨身碟驅動安裝不上自然無法使用。
優點:簡單易行,不容易識破。
缺點:只能禁用未在該電腦上使用過的隨身碟。
建議:一定要注意獨佔的時候檔案開啟對象要用類的成員變數(也就是模組層級變數),如果用局部變數,會自動被託管程式釋放,達不到獨佔的效果。
程式碼:
註:以下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);