Diskpart UniqueID - C #, как получить этот идентификатор

1

Я знаком с VolumeSerialNumber, мне нужен ID диска так же, как показано в разделе diskpart:

WD My Passport 0740 USB-устройство ID диска: 08B29B51 Тип: USB Состояние: Интернет Путь: 0 Цель: 0 Идентификатор LUN: 0 Путь местоположения: UNAVAILABLE Текущее состояние только для чтения Состояние: Нет Только для чтения: Нет Загрузочный диск: Нет Файл файла: Нет Диск гибернации: нет диска Crashdump: нет кластерного диска: нет

Я не могу найти что-либо в Интернете (WMI) или форумах, поддерживающих этот запрос. У кого-нибудь есть идея?

Теги:
disk
wmi
unique-id

2 ответа

1
Лучший ответ

Это метод i, созданный для получения DiskID из Driveletter. Наверное, это лучшие способы сделать это, но сейчас это сработало для меня. Спасибо за вашу помощь.

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

Проверьте класс WMI Win32_DiskDrive. Он имеет поле под названием Signature которое содержит этот идентификатор. Заметьте, однако, что это не строка, а число. Если вы хотите соответствовать тому, что вы видите в 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"));
    }
}
  • 0
    Это было спасибо.
  • 0
    Не могу использовать Где диск = D: на этом ...
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню