获取特定驱动器的驱动器序列号

问题描述 投票:0回答:2

我想获取AppData文件夹所在的驱动器序列号。

我使用此代码:

SELECT SerialNumber FROM Win32_DiskDrive

但这会返回每个序列号(USB、所有驱动器等)。

如何只获取AppData文件夹所在的驱动器?

winapi wmi drive
2个回答
0
投票

假设您正在谈论物理磁盘驱动器序列号。一种实现方法如下,您可以参考:

  1. 使用PathGetDriveNumber
    从路径
    获取驱动器号。例如,从
    C:
    路径获取
    AppData
  2. 使用 Win32_DiskDriveToDiskPartition
    Win32_LogicalDiskToPartition
     检索与给定物理磁盘
    关联的逻辑磁盘。

如上面的快照所示,您可以获得与

C:
关联的
PHYSICALDRIVE0

  1. 使用 Win32_DiskDrive
    获取物理磁盘
    的序列号。


0
投票
public static string Mtd_GetDriveLetterWithLabel(string DriveLabel)
{
    ManagementObjectSearcher DriveLabelQuery = new ManagementObjectSearcher(" SELECT * FROM Win32_Volume WHERE Label = '" + DriveLabel + "' ");

    string DriveLetter = "";
    foreach (ManagementObject DriveLabels in DriveLabelQuery.Get())
    {
        DriveLetter = DriveLabels["DriveLetter"].ToString();
    }
    return DriveLetter;
}




public static int Mtd_GetDiskNumberWithLetter(string DriveLetter)
{
    ManagementObjectSearcher DriveLetterGeneralQuery = new ManagementObjectSearcher("SELECT * FROM Win32_LogicalDiskToPartition");
    ManagementObjectCollection DriveLetterCollection = DriveLetterGeneralQuery.Get();

    string Dependent = @"\\" + Environment.MachineName + "\\root\\cimv2:Win32_LogicalDisk.DeviceID=\"" + DriveLetter + "\"";
    String DiskNumberTxt = "";
    foreach (ManagementObject DiskNumbers in DriveLetterCollection)
    {
        if ((DiskNumbers["Dependent"].ToString()) == Dependent)
        {
            DiskNumberTxt = DiskNumbers["Antecedent"].ToString();
        }
    }

    int From = DiskNumberTxt.IndexOf("Disk #") + "Disk #".Length;
    int To = DiskNumberTxt.IndexOf(",");
    String DiskNumberTrim = DiskNumberTxt.Substring(From, To - From);

    int DiskNumber = Int32.Parse(DiskNumberTrim);
    return DiskNumber;
}




public static string Mtd_GetSerialNumberWithDiskNumber(int DiskNumber)
{
    ManagementObjectSearcher SerialNumberQuery = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");
    ManagementObjectCollection SerialNumberCollection = SerialNumberQuery.Get();

    string Tag = @"\\.\PHYSICALDRIVE" + DiskNumber;
    String SerialNumberTxt = "";

    foreach (ManagementObject SerialNumbers in SerialNumberCollection)
    {
        if ((SerialNumbers["Tag"].ToString()) == Tag)
        {
            SerialNumberTxt = SerialNumbers["SerialNumber"].ToString();
        }
    }
    return SerialNumberTxt;
}



string DriveLabel = "DATA";
 
string DriveLetter = Mtd_GetDriveLetterWithLabel(DriveLabel);
            Console.WriteLine(DriveLetter);
                       
int DiskNumber = Mtd_GetDiskNumberWithLetter(DriveLetter);
Console.WriteLine(DiskNumber);

string DiskSerialNumber = Mtd_GetSerialNumberWithDiskNumber(DiskNumber);
Console.WriteLine(DiskSerialNumber);
© www.soinside.com 2019 - 2024. All rights reserved.