简体   繁体   English

Diskpart UniqueID-C#如何获取该ID

[英]Diskpart UniqueID - C# how to get that id

I'm familiar with VolumeSerialNumber, i need the Disk ID same as shown in diskpart: 我熟悉VolumeSerialNumber,我需要与diskpart中所示相同的磁盘ID:

WD My Passport 0740 USB Device Disk ID: 08B29B51 Type : USB Status : Online Path : 0 Target : 0 LUN ID : 0 Location Path : UNAVAILABLE Current Read-only State : No Read-only : No Boot Disk : No Pagefile Disk : No Hibernation File Disk : No Crashdump Disk : No Clustered Disk : No WD My Passport 0740 USB设备磁盘ID:08B29B51类型:USB状态:联机路径:0目标:0 LUN ID:0位置路径:不可用当前只读状态:否只读:否引导盘:否Pagefile磁盘:否休眠文件磁盘:否故障转储磁盘:否群集磁盘:否

I can't find anything on the web (WMI) or forums that supports this request. 我在网络(WMI)或论坛上找不到支持此请求的任何内容。 Anybody has an idea? 有人有主意吗?

Check out the Win32_DiskDrive WMI Class. Win32_DiskDrive WMI类。 It has a field called Signature which contains this ID. 它有一个名为Signature的字段,其中包含此ID。 Note, though, that this is not a string , but a number. 但是请注意,这不是string ,而是数字。 If you want to match what you see in DiskPart, you'll have to display that number as a hexadecimal string ( signature.ToString("X") ) 如果要匹配在DiskPart中看到的内容,则必须将该数字显示为十六进制字符串( signature.ToString("X")

Here's code to print out drive signatures: 这是打印驱动器签名的代码:

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"));
    }
}

This is the Method i created for getting DiskID from Driveletter. 这是我创建的用于从Driveletter获取DiskID的方法。 Probably are better ways to do this, but this worked for me for now. 可能是执行此操作的更好方法,但这目前对我有用。 Thanks for all your help. 感谢你的帮助。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM