Преобразование из '\Device\Ide\IdeDeviceP1T0L0-17' в читабельное 'E:'

Тема в разделе "WASM.WIN32", создана пользователем vasalvit, 16 дек 2008.

  1. vasalvit

    vasalvit New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2008
    Сообщения:
    53
    Здравствуйте.

    В программе нужно получить список доступных приводов. Пользователь может выбрать один из них и к выбранному диску цепляется фильтр-драйвер, отслеживающий запись.

    Приводы получаю при помощи SetupAPI (SetupDiEnumDeviceInfo, SetupDiGetDeviceRegistryProperty). Но могу получить только '\Device\Ide\IdeDeviceP1T0L0-17' или 'Optiarc DVD RW AD-7170A'.

    Как мне получить читабельное имя 'E:'?
    Тот же Nero отображает 'E: Optiarc DVD RW AD-7170A'.

    ps. Вешать драйвер на устройство '\Device\CdRom0' не получается. Через некоторое время через него перестают идти пакеты.
     
  2. onSide

    onSide New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    476
    Дальше разбираться мне лень :) Но помоему это то что ты ищешь, хотя я не проверял...
     
  3. vasalvit

    vasalvit New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2008
    Сообщения:
    53
    Пробовал этот способ. Функция 'SetupDiGetDeviceInterfaceDetail' к сожалению возвращает совсем уж нечитабельное имя '\\?\ide#cdromoptiarc_dvd_rw_ad-7170a_________________1.02____#5&61bbb0d&0&0.0.0#{53f56308-b6bf-11d0-94f2-00a0c91efb8b}'.

    Сейчас копаюсь в WMI. Может там что получится.
     
  4. vasalvit

    vasalvit New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2008
    Сообщения:
    53
    Вроде нашёл способ. Приведу здесь - может кому-нибудь понадобится. А если кто найдёт другой способ - буду признателен.

    1. Через SetupAPI получаю следующую информацию:
    * имя устройства SPDRP_PHYSICAL_DEVICE_OBJECT_NAME ('\Device\Ide\IdeDeviceP1T0L0-17')
    * HardwareId SPDRP_HARDWAREID ('IDE\CdRomOptiarc_DVD_RW_AD-7170A_________________1.02____')
    * модель SPDRP_PHYSICAL_DEVICE_OBJECT_NAME ('Optiarc DVD RW AD-7170A')

    2. Через WMI получаю следующее:
    * DeviceID ('IDE\CDROMOPTIARC_DVD_RW_AD-7170A_________________1.02____\5&61BBB0D&0&0.0.0')
    * Caption ('Optiarc DVD RW AD-7170A')
    * Drive ('E:')

    3. Первый пробег по массивам:
    * сравниваю DeviceID и HardwareID. если похожи - запоминаю отображение имени устройства ('\Device\Ide\IdeDeviceP1T0L0-17') и ('E:')

    4. Второй пробег:
    * сравниваю модели и запоминаю.

    Второй пробег нужен для Nero ImageDrive'а. У него DeviceID 'SCSI\CDROM&VEN_NERO&PROD_IMAGEDRIVE2&REV_2.26\2&2CA3B2A6&0&000', а HardwareId 'SCSI\CdRomNERO____IMAGEDRIVE2_____2.26'.

    Если у кого будут замечания/предложения - буду признателен :)
     
  5. 4VR

    4VR New Member

    Публикаций:
    0
    Регистрация:
    21 ноя 2008
    Сообщения:
    25