天天看點

C# USB裝置的管理(Devcon和系統資料庫的USB操作)

一、關于 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 裝置      

四、程式截圖

C# USB裝置的管理(Devcon和系統資料庫的USB操作)

五、代碼