Всем привет! Мне нужно получить имя (прошитый в устройстве идентификатор) физического диска. Не метку логического диска, не GUID, не "\Device\HarddiskVolume1" или т.п. А то, что выдаёт wmic diskdrive list brief в столбцах Caption и Model, например: Код (Text): Generic STORAGE DEVICE USB Device JetFlash Transcend 16GB USB Device ST2000DM006-2DM164 ST31000528AS ST2000DM001-1CH164 PLEXTOR PX-128M6Pro USB DISK 2.0 USB Device К примеру, у меня открыто устройство "\\.\PhysicalDrive0" (пишу без экранирования), наверняка же есть какой-то DeviceIoControl, через который можно это получить. PowerShell и т.п. вещи не интересуют, нужно получить программно. Вроде есть вариант через WMI. Но хочется на чистом WinAPI. p.s. Есть ещё вариант через SMART, но это не прокатит с флешками (только харды) + нужны права админа.
Jin X, погуглите на предмет IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS Я давно это юзал, уже точно не помню этот ли контрол.
Не, там ничего нужного нет. Разобрался, в общем. Нужен IOCTL_STORAGE_QUERY_PROPERTY. Запрос StorageDeviceProperty, поле ProductIdOffset.
У меня просто опыта работы с ним нет. Да и почему-то возник стереотип, что это медленнее + более громоздко. Хотя, могу быть не прав. --- Сообщение объединено, 21 июл 2020 --- Надо изучить эту тему
По-быстрому посмотреть что за инфа есть в WMI можно с помощью субд dbeaver (выбрать wmi-интерфейс при создании нового соединения). Примеров использования полный гугл, я тоже тут где-то выкладывал про фасм и WMI.