Получить имя физического диска

Тема в разделе "WASM.WIN32", создана пользователем Jin X, 21 июл 2020.

  1. Jin X

    Jin X Active Member

    Публикаций:
    0
    Регистрация:
    15 янв 2009
    Сообщения:
    369
    Адрес:
    Кольца Сатурна
    Всем привет!
    Мне нужно получить имя (прошитый в устройстве идентификатор) физического диска.
    Не метку логического диска, не GUID, не "\Device\HarddiskVolume1" или т.п.
    А то, что выдаёт wmic diskdrive list brief в столбцах Caption и Model, например:
    Код (Text):
    1. Generic STORAGE DEVICE USB Device
    2. JetFlash Transcend 16GB USB Device
    3. ST2000DM006-2DM164
    4. ST31000528AS
    5. ST2000DM001-1CH164
    6. PLEXTOR PX-128M6Pro
    7. USB DISK 2.0 USB Device
    К примеру, у меня открыто устройство "\\.\PhysicalDrive0" (пишу без экранирования), наверняка же есть какой-то DeviceIoControl, через который можно это получить.

    PowerShell и т.п. вещи не интересуют, нужно получить программно. Вроде есть вариант через WMI. Но хочется на чистом WinAPI.
    p.s. Есть ещё вариант через SMART, но это не прокатит с флешками (только харды) + нужны права админа.
     
  2. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Jin X, погуглите на предмет IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS
    Я давно это юзал, уже точно не помню этот ли контрол.
     
  3. Jin X

    Jin X Active Member

    Публикаций:
    0
    Регистрация:
    15 янв 2009
    Сообщения:
    369
    Адрес:
    Кольца Сатурна
    Не, там ничего нужного нет.

    Разобрался, в общем.
    Нужен IOCTL_STORAGE_QUERY_PROPERTY.
    Запрос StorageDeviceProperty, поле ProductIdOffset.
     
  4. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Да точно. Там было IOCTL_STORAGE.
    Не забудьте чекнуть на разных версиях ОС.
     
  5. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    Меня всегда интересовало, почему в таких случаях не использовать WMI? Это самый простой вариант.
     
  6. Jin X

    Jin X Active Member

    Публикаций:
    0
    Регистрация:
    15 янв 2009
    Сообщения:
    369
    Адрес:
    Кольца Сатурна
    У меня просто опыта работы с ним нет.
    Да и почему-то возник стереотип, что это медленнее + более громоздко.
    Хотя, могу быть не прав.
    --- Сообщение объединено, 21 июл 2020 ---
    Надо изучить эту тему :)
     
  7. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.995
    По-быстрому посмотреть что за инфа есть в WMI можно с помощью субд dbeaver (выбрать wmi-интерфейс при создании нового соединения). Примеров использования полный гугл, я тоже тут где-то выкладывал про фасм и WMI.
     
  8. rk2019

    rk2019 Member

    Публикаций:
    0
    Регистрация:
    11 фев 2019
    Сообщения:
    2
    в 2020 году эти вопросы программистов уже не волнуют
     
  9. Jin X

    Jin X Active Member

    Публикаций:
    0
    Регистрация:
    15 янв 2009
    Сообщения:
    369
    Адрес:
    Кольца Сатурна
    ...к сожалению...
     
    M0rg0t нравится это.