Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > CD-ROM


Автор: simsmann 3.10.2008, 15:40
Как определить CD-ROM физический или виртуальный

Автор: Virtuals 5.10.2008, 12:46
simsmann, Никак!, в виндах все устройства виртуальные
во многих случаях можно попробовать по имени сдрома, но если пользователь захочет то фиг определиш smile 

Автор: Alexeis 5.10.2008, 13:21
На самом деле можно, не зря у Daemon Tools есть разные режимы эмуляции, однако даже его определяют.

Автор: Virtuals 5.10.2008, 16:56
Alexeis, на каждый хитрый ..., есть ... с лабиринтом, на каждую... с лабиринтом есть ... с навигатором... на каждый ... с навигатором, есть ... с криптозащитой.!
и так до бесконечности.
в конечном итоге проигрывает защита, т.к. в виндах все железо виртуально smile 

Автор: Virtuals 5.10.2008, 17:11
вопрос только во времени и цене, старфорс тоже проиграл - вопрос только в целесообразности взлома и времени на это потраченом

Автор: Alexeis 5.10.2008, 17:49
  Все это не так важно, важно что определить можно это факт, значит вопрос переходит от категории можно-нельзя в категорию "как это сделать?"
  Винда же умеет определять физические устройства. Наверное можно посчитать число физических устройств и общее, если они разнятся, то есть виртуальные. Кроме того можно составить базу имен драйверов программ виртуальных приводов. И искать их.

Автор: Virtuals 5.10.2008, 18:07
система защиты "старфорс" именно призвана защитится от виртуализации сдром, погуглим что есть старфорс, и для себя поймем чего это стоило smile . имхо "игра не стоит свеч"

Автор: Riply 5.10.2008, 18:10
Цитата(simsmann @  3.10.2008,  15:40 Найти цитируемый пост)
Как определить CD-ROM физический или виртуальный 


Как-то мне понадобилось перебрать логические диски (стандартный способ мне не подходил).
Попробовала пойти таким путем:
Получаем "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).
Вот, вроде все.
Так к чему это я ? Ах да !
Как я не старалась, виртуальные устойства в мой список не попадали. smile
(убирала фильтрацию, меняла параметры запросов и т.д. и т.п).
(В результате пришлось писать дополнительну процедуру, находящую и то и другое).

Итого: можно получить список "настоящих устройств" способом, описанным выше, и посмотреть
есть ли там подопытное устройство smile

P.S.
 Тогда у меня не было цели определить "виртуальность" чего-то,
 просто в процессе "научного тыка" случайно натолкнулась smile
 Соответственно, данный алгоритм не проходил жесткое тестирование
 на безошибочность работы именно с этой точки зрения.

Добавлено через 11 минут и 44 секунды
Цитата(Riply @  5.10.2008,  18:10 Найти цитируемый пост)
не проходил жесткое тестирование


На всякий случай повторюсь: целью описанного способа не было определение виртуальности.
Просто я запомнила свои мучения(безрезультатные) заставить его добавлять и виртуальные smile
Поэтому претензии типа "а вот это он пропускает" не принимаются smile

Автор: Virtuals 5.10.2008, 18:26
Riply, хм странно алкоголевские виртуалки, (примонтированные) обязанны были туда попасть...

ЗЫ
вернемся к основам
программы из юзермоде, в виндах по определению не работают с аппаратной частью, отсюда любой драйвер покажет все что хочется.
а в 0кольце "кто первый влез того и тапки" smile 

ЗЫ //старфорс защита ставит целую коллекцию дров (кстати красиво роняющих систему во многих случаях) только с целью добратся до аппаратной части привода, и попытки прочесть хитрые данные с хитрого диска. smile и их спасает только постоянное обновление софта....

Автор: Riply 5.10.2008, 22:25
Цитата(Virtuals @  5.10.2008,  18:26 Найти цитируемый пост)
Riply, хм странно алкоголевские виртуалки, (примонтированные) обязанны были туда попасть...


Да я и не спорю ибо не проверяла smile
Я описала с чем столкнулась, только для того чтобы дать информацию к размышлению.
Т.е. может попробовать начинать танцевать с "уровня" физических устройств (драйверов или их классов)
и уже оттуда спускаться к логическим, попути фильтруя лишнее ?

Автор: BaD_SeCt0R 6.10.2008, 00:00
Может, каким-нибудь образом прочитать информацию из BIOS'а?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)