天天看点

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操作)

五、代码