Diskpart UniqueID - C# 如何获取该 ID

本文关键字:获取 ID 何获取 UniqueID Diskpart | 更新日期: 2023-09-27 18:30:31

我熟悉 VolumeSerialNumber,我需要与 diskpart 中所示相同的磁盘 ID:

WD 我的护照 0740 USB 设备磁盘 ID: 08B29B51类型 : USB状态 : 在线路径 : 0目标 : 0LUN ID : 0位置路径 : 不可用当前只读状态:否只读 : 否启动盘 : 否页面文件磁盘:否休眠文件盘:否故障转储磁盘:否群集磁盘 : 否

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

Diskpart UniqueID - C# 如何获取该 ID

查看 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"));
    }
}
这是我

为从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();
   }