一、關于 USB
最近對 USB 裝置做了一些學習,簡單做一下整理,希望感興趣的同學留言交流,最後會附上源碼連接配接。
簡單列一些關鍵點:
VID:Vendor ID(生産廠商 ID),PID:Product ID(産品 ID)
【USB ID 詳細介紹可以參考】【廠商裝置 ID - List of USB ID’s】
二、關于 USB 磁盤資訊
1、devcon 擷取資訊
devcon 可通過兩個指令擷取 USB 資訊:
1. devcon.exe find usb* //檢視所有的 USB 裝置資訊
2. devcon.exe status usb* //檢視所有 USB 裝置狀态
2、系統資料庫擷取 USB 裝置資訊
1. 檢視所有 USB 儲存設備清單
計算機\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\USBSTOR\Enum
2. 檢視驅動器号
計算機\HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices
3. 檢視驅動器号和 USB 裝置對照
計算機\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\STORAGE\Volume
三、主要代碼
1、process 啟動和帶權限運作
/// <summary>
/// 建立程序
/// </summary>
/// <returns></returns>
public static Process NewProcess(string exe, string args = "", string domain = "", string username = "", string password = "")
{
ProcessStartInfo startInfo = new ProcessStartInfo();
if (Str.Ok(domain)) startInfo.Domain = domain;
if (Str.Ok(username)) startInfo.UserName = username;
if (Str.Ok(password)) startInfo.Password = ConvertToSecureString(password);
startInfo.FileName = exe;
startInfo.Arguments = args;
startInfo.RedirectStandardInput = true;
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardError = true;
startInfo.UseShellExecute = false;
startInfo.CreateNoWindow = true;
startInfo.Verb = "RunAs";
Process process = new Process();
process.StartInfo = startInfo;
return process;
}
/// <summary>
/// 帶權限運作的密碼保密文本轉換
/// </summary>
/// <param name="password"></param>
/// <returns></returns>
private static SecureString ConvertToSecureString(this string password)
{
if (password == null)
throw new ArgumentNullException("password");
unsafe
{
fixed (char* passwordChars = password)
{
var securePassword = new SecureString(passwordChars, password.Length);
securePassword.MakeReadOnly();
return securePassword;
}
}
}
2、devcon 操作代碼
1. devcon.exe enable "USB\\VID_1234&PID_5678" //啟用 USB 裝置
2. devcon.exe disable "USB\\VID_1234&PID_5678" //禁用 USB 裝置
四、程式截圖
