首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Diskpart UniqueID - C#如何获得id

Diskpart UniqueID - C#如何获得id
EN

Stack Overflow用户
提问于 2014-11-16 13:09:40
回答 2查看 3K关注 0票数 1

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

WD我的护照0740 USB设备磁盘ID: 08B29B51类型: USB状态:联机路径:0目标:0 LUN ID :0位置路径:不可用当前只读状态:无只读:无启动磁盘:无休眠文件磁盘:无Crashdump磁盘:无群集磁盘:无群集磁盘

我在网上(WMI)或论坛上找不到任何支持这个请求的东西。有人有主意吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-16 16:21:07

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

票数 1
EN

Stack Overflow用户

发布于 2014-11-16 13:17:46

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

下面是打印驱动器签名的代码:

代码语言:javascript
复制
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"));
    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26957264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档