Здравствуйте. В программе нужно получить список доступных приводов. Пользователь может выбрать один из них и к выбранному диску цепляется фильтр-драйвер, отслеживающий запись. Приводы получаю при помощи SetupAPI (SetupDiEnumDeviceInfo, SetupDiGetDeviceRegistryProperty). Но могу получить только '\Device\Ide\IdeDeviceP1T0L0-17' или 'Optiarc DVD RW AD-7170A'. Как мне получить читабельное имя 'E:'? Тот же Nero отображает 'E: Optiarc DVD RW AD-7170A'. ps. Вешать драйвер на устройство '\Device\CdRom0' не получается. Через некоторое время через него перестают идти пакеты.
Пробовал этот способ. Функция 'SetupDiGetDeviceInterfaceDetail' к сожалению возвращает совсем уж нечитабельное имя '\\?\ide#cdromoptiarc_dvd_rw_ad-7170a_________________1.02____#5&61bbb0d&0&0.0.0#{53f56308-b6bf-11d0-94f2-00a0c91efb8b}'. Сейчас копаюсь в WMI. Может там что получится.
Вроде нашёл способ. Приведу здесь - может кому-нибудь понадобится. А если кто найдёт другой способ - буду признателен. 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'. Если у кого будут замечания/предложения - буду признателен