是否可以确定环境、特殊文件夹、系统驱动器的Win32_DiskDrive序列号?



我已经兜圈子了一段时间了,似乎也无法在谷歌上找到答案。

正如标题所说,如果我得到当前的驱动器号窗口正在运行,让我们这样说:Path.GetPathRoot(Environment.GetFolderPath(Environment.SpecialFolder.System));然后,我可以确定其Win32_DiskDrive序列号吗?我找不到链接它们的方法。

这是制造商的 S/N,而不是 VolumeSerialNumber。

提前致谢

您可以将 ManagmentObjectSearch 与 ASSOCIATORS OF 语句结合使用:

public static string GetSerialNumber(string logicalDrive)
{
using (var partitionsQuery = new ManagementObjectSearcher(string.Format("ASSOCIATORS OF {{Win32_LogicalDisk.DeviceID='{0}'}} WHERE ResultClass = Win32_DiskPartition", logicalDrive)))            
{
foreach (var results in partitionsQuery.Get())
{
using (var diskDrives = new ManagementObjectSearcher(string.Format("ASSOCIATORS OF {{Win32_DiskPartition.DeviceID='{0}'}} WHERE ResultClass=Win32_DiskDrive", results["DeviceID"])))
{
foreach (var d in diskDrives.Get())
{
Console.WriteLine("Serial: " + d["SerialNumber"]);
return d["SerialNumber"].ToString();
}
}
}
}
return null;
} 

用法:

var num = GetSerialNumber(Path.GetPathRoot(Environment.SystemDirectory).TrimEnd(new [] {'\'}));

注意:不要忘记从Path.GetPathRoot返回的路径中删除反斜杠。

您可以使用 System.Management 中的 ManagementObjectSearcher 类,然后遍历属性以查找序列号。

我认为沿着这些思路的东西会让你接近你想要的东西......

var search = new ManagementObjectSearcher("select * from Win32_DiskDrive");
foreach (var mo in search.Get())
{
if (mo["SerialNumber"] != null)
{
return mo["SerialNumber"].ToString();
}
}

https://learn.microsoft.com/en-us/windows/win32/cimwin32prov/win32-diskdrive

^ 应该包含您可以获得的所有各种属性

希望有帮助。

最新更新