You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何可靠获取USB存储驱动器的盘符与硬件序列号?

Windows下获取磁盘盘符与正确序列号的可靠方案

你之前使用的两个WMI查询存在天然缺陷:

  • ManagementObjectSearcher("SELECT * FROM win32_PnPSignedDriver")返回全量即插即用驱动数据,体量过大,不同厂商驱动返回字段标准不统一,不适合做磁盘信息采集
  • 直接查询Win32_DiskDrive没有做分区和逻辑磁盘的关联,天然缺少盘符字段,原生返回的序列号未做标准化处理,容易出现读取错误

推荐通过关联Win32_DiskDrive、Win32_DiskPartition、Win32_LogicalDisk三个WMI类的方式实现需求,可同时拿到映射后的盘符、正确的序列号信息。

实现代码示例

// 需提前添加System.Management程序集引用
using System.Management;

// 关联查询WQL语句,直接映射物理磁盘-分区-逻辑盘符的对应关系
var diskQuery = new ManagementObjectSearcher(@"
    SELECT 
        d.SerialNumber, d.Model, l.DriveLetter
    FROM Win32_DiskDrive d
    INNER JOIN Win32_DiskPartition p ON d.DeviceID = p.DiskIndex
    INNER JOIN Win32_LogicalDisk l ON p.DeviceID = l.DeviceID
");

foreach (var diskItem in diskQuery.Get())
{
    // 标准化处理序列号:去除前后冗余空格,解决90%以上厂商填充格式异常问题
    string serial = diskItem["SerialNumber"]?.ToString().Trim() ?? string.Empty;
    string driveLetter = diskItem["DriveLetter"]?.ToString() ?? string.Empty;
    string diskModel = diskItem["Model"]?.ToString() ?? string.Empty;

    // 此处自行处理业务逻辑
    Console.WriteLine($"盘符:{driveLetter},磁盘型号:{diskModel},序列号:{serial}");
}

注意事项

部分虚拟磁盘、未分区的外置物理磁盘不存在对应逻辑盘符映射,返回的DriveLetter会为空,可根据业务需求自行过滤这类结果。
如果仍遇到少量磁盘序列号读取错误的情况,可以额外查询Win32_PhysicalMedia类的SerialNumber属性做交叉校验,该属性返回的序列号标准度更高。

内容的提问来源于stack exchange,提问作者s k

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 18:36:01