Diskpart UniqueID - C#如何获取该ID

时间:2014-11-16 13:09:41

标签: c# wmi disk unique-id

我熟悉VolumeSerialNumber,我需要磁盘ID,如diskpart所示:

WD My Passport 0740 USB设备 磁盘ID:08B29B51 类型:USB 状态:在线 路径:0 目标:0 LUN ID:0 位置路径:无法使用 目前的只读状态:没有 只读:没有 启动盘:没有 页面文件磁盘:没有 休眠文件磁盘:没有 Crashdump磁盘:没有 集群磁盘:否

我无法在网络(WMI)或支持此请求的论坛上找到任何内容。 有人有想法吗?

2 个答案:

答案 0 :(得分:3)

查看Win32_DiskDrive WMI类。它有一个名为Signature的字段,其中包含此ID。但请注意,这是不是字符串,而是数字。如果您想匹配您在DiskPart中看到的内容,则必须将该数字显示为十六进制字符串(signature.ToString("X")

此处打印驱动器签名的代码:

public void PrintDiskDriveSignature()
{
    var searcher = new ManagementObjectSearcher
              (@"\\localhost\ROOT\CIMv2", "select * from Win32_DiskDrive");
    var drives = searcher.Get();
    foreach (var drive in drives)
    {
        string name = drive["Name"].ToString();
        uint signature = (uint) drive["Signature"];
        Console.WriteLine("{0}: {1}", name, signature.ToString("X"));
    }
}

答案 1 :(得分:1)

这是我为从Driveletter获取DiskID而创建的方法。 可能是更好的方法来做到这一点,但现在这对我有用。 谢谢你的帮助。

    public static string GetDiskID(char Drive)
    {
        uint volumeSerialNumber = 0;
        bool DriveFound = false;
        foreach (ManagementObject drive in new ManagementObjectSearcher("select DeviceID, Signature from Win32_DiskDrive").Get())
        {
            foreach (ManagementObject partition in new ManagementObjectSearcher(String.Format("associators of {{Win32_DiskDrive.DeviceID='{0}'}} where AssocClass = Win32_DiskDriveToDiskPartition", drive["DeviceID"])).Get())
            {
                if (partition != null)
                {
                    ManagementObject logical = new ManagementObjectSearcher(String.Format("associators of {{Win32_DiskPartition.DeviceID='{0}'}} where AssocClass = Win32_LogicalDiskToPartition", partition["DeviceID"])).First();
                    if (logical != null)
                    {
                        if (logical["Name"] != null)
                        {
                            string logicalName = logical["Name"].ToString();
                            if (logicalName[0] == Drive)
                            {
                                volumeSerialNumber = (uint)drive["Signature"];
                                DriveFound = true;
                                break;
                            }
                        }
                    }
                }
            }
            if (DriveFound)
                break;
        }
         var serial = volumeSerialNumber.ToString("x");
            while (serial.Length < 8)
            {
                serial = serial.Insert(0, "0");
            }
            return serial.ToUpper();
   }