| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > CD-ROM |
| Автор: simsmann 3.10.2008, 15:40 |
| Как определить CD-ROM физический или виртуальный |
| Автор: Virtuals 5.10.2008, 12:46 |
| simsmann, Никак!, в виндах все устройства виртуальные во многих случаях можно попробовать по имени сдрома, но если пользователь захочет то фиг определиш |
| Автор: Alexeis 5.10.2008, 13:21 |
| На самом деле можно, не зря у Daemon Tools есть разные режимы эмуляции, однако даже его определяют. |
| Автор: Virtuals 5.10.2008, 16:56 |
| Alexeis, на каждый хитрый ..., есть ... с лабиринтом, на каждую... с лабиринтом есть ... с навигатором... на каждый ... с навигатором, есть ... с криптозащитой.! и так до бесконечности. в конечном итоге проигрывает защита, т.к. в виндах все железо виртуально |
| Автор: Virtuals 5.10.2008, 17:11 |
| вопрос только во времени и цене, старфорс тоже проиграл - вопрос только в целесообразности взлома и времени на это потраченом |
| Автор: Alexeis 5.10.2008, 17:49 |
| Все это не так важно, важно что определить можно это факт, значит вопрос переходит от категории можно-нельзя в категорию "как это сделать?" Винда же умеет определять физические устройства. Наверное можно посчитать число физических устройств и общее, если они разнятся, то есть виртуальные. Кроме того можно составить базу имен драйверов программ виртуальных приводов. И искать их. |
| Автор: Virtuals 5.10.2008, 18:07 |
| система защиты "старфорс" именно призвана защитится от виртуализации сдром, погуглим что есть старфорс, и для себя поймем чего это стоило |
| Автор: Riply 5.10.2008, 18:10 |
Как-то мне понадобилось перебрать логические диски (стандартный способ мне не подходил). Попробовала пойти таким путем: Получаем "device information" вызовом: SetupDiGetClassDevsExW(nil, nil, 0, DIGCF_ALLCLASSES or DIGCF_DEVICEINTERFACE or DIGCF_PRESENT, nil, nil, nil); Далее при помощи SetupDiEnumDeviceInfo перебираем устройства системы, отсеивая лишние. Я оставляла только: SysClassGuid_CDROM, SysClassGuid_DiskDrive, SysClassGuid_FloppyDisk (GUID этих классов есть в MSDN (имена мои - по ним не искать)) Для каждого из оставшихся устройств, перебираем его MountPoints при помощи DeviceIoControl (с кодами: IOCTL_DISK_GET_DRIVE_LAYOUT_EX, IOCTL_MOUNTMGR_QUERY_POINTS). Вот, вроде все. Так к чему это я ? Ах да ! Как я не старалась, виртуальные устойства в мой список не попадали. (убирала фильтрацию, меняла параметры запросов и т.д. и т.п). (В результате пришлось писать дополнительну процедуру, находящую и то и другое). Итого: можно получить список "настоящих устройств" способом, описанным выше, и посмотреть есть ли там подопытное устройство P.S. Тогда у меня не было цели определить "виртуальность" чего-то, просто в процессе "научного тыка" случайно натолкнулась Соответственно, данный алгоритм не проходил жесткое тестирование на безошибочность работы именно с этой точки зрения. Добавлено через 11 минут и 44 секунды На всякий случай повторюсь: целью описанного способа не было определение виртуальности. Просто я запомнила свои мучения(безрезультатные) заставить его добавлять и виртуальные Поэтому претензии типа "а вот это он пропускает" не принимаются |
| Автор: Virtuals 5.10.2008, 18:26 |
| Riply, хм странно алкоголевские виртуалки, (примонтированные) обязанны были туда попасть... ЗЫ вернемся к основам программы из юзермоде, в виндах по определению не работают с аппаратной частью, отсюда любой драйвер покажет все что хочется. а в 0кольце "кто первый влез того и тапки" ЗЫ //старфорс защита ставит целую коллекцию дров (кстати красиво роняющих систему во многих случаях) только с целью добратся до аппаратной части привода, и попытки прочесть хитрые данные с хитрого диска. |
| Автор: BaD_SeCt0R 6.10.2008, 00:00 |
| Может, каким-нибудь образом прочитать информацию из BIOS'а? |