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

如何获取指定磁盘(如C盘)的Serialnumber与Signature值

获取指定磁盘的SerialNumber和Signature值

Win32_LogicalDisk仅能提供卷级别的VolumeSerialNumber,要获取物理磁盘的SerialNumber和磁盘Signature,需要通过逻辑盘→分区→物理磁盘的关联关系查询WMI类,以下是具体实现方案:

核心思路

  1. 通过Win32_LogicalDisk定位目标盘符(如C:)
  2. 利用Win32_LogicalDiskToPartition关联类,找到该逻辑盘对应的磁盘分区
  3. 通过分区关联到Win32_DiskDrive,获取物理磁盘的SerialNumber
  4. 从Win32_DiskDrive或Win32_DiskPartition中读取磁盘Signature(不同磁盘格式可能存储位置不同)

C#代码示例

using System;
using System.Management;

class DiskInfoRetriever
{
    static void Main(string[] args)
    {
        GetTargetDiskInfo("C:");
        GetTargetDiskInfo("D:");
    }

    static void GetTargetDiskInfo(string driveLetter)
    {
        // 格式化盘符格式
        if (!driveLetter.EndsWith(":"))
            driveLetter += ":";

        try
        {
            // 1. 获取目标逻辑盘对象
            using var logicalDisk = new ManagementObject($"Win32_LogicalDisk.DeviceID='{driveLetter}'");
            logicalDisk.Get();

            // 2. 关联到对应的磁盘分区
            using var relatedPartitions = logicalDisk.GetRelated("Win32_DiskPartition");
            foreach (ManagementObject partition in relatedPartitions)
            {
                // 3. 关联到对应的物理磁盘
                using var relatedDisks = partition.GetRelated("Win32_DiskDrive");
                foreach (ManagementObject disk in relatedDisks)
                {
                    // 提取物理磁盘序列号(注意去除多余空格)
                    string serialNumber = disk["SerialNumber"]?.ToString().Trim();
                    // 提取磁盘签名(优先从DiskDrive取,无则从Partition取)
                    object signature = disk["Signature"] ?? partition["Signature"];

                    Console.WriteLine($"=== 盘符 {driveLetter} 信息 ===");
                    Console.WriteLine($"物理磁盘SerialNumber: {serialNumber ?? "未获取到"}");
                    Console.WriteLine($"磁盘Signature: {signature?.ToString() ?? "未获取到"}");
                    Console.WriteLine();
                }
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine($"查询盘符 {driveLetter} 出错: {ex.Message}");
        }
    }
}

关键说明

  • 权限要求:需要管理员权限才能访问完整的磁盘硬件信息,否则部分属性可能返回空值
  • 属性差异:
    • SerialNumber是物理磁盘的硬件序列号,由厂商写入,部分廉价磁盘可能未提供该值
    • Signature是磁盘的分区表签名(MBR磁盘为主引导记录签名,GPT磁盘可能需查询Win32_DiskPartition的Guid属性)
  • 资源释放:使用using语句自动释放ManagementObject资源,避免内存泄漏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 00:32:09