Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2006.11.05;
Скачать: [xml.tar.bz2];

Вниз

Как отличить виртуальный привод от реального?   Найти похожие ветки 

 
r@bbit   (2006-06-15 09:26) [0]

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


 
wal ©   (2006-06-15 09:44) [1]


> какая функция ядра добавляет виртуальный диск к списку дисков
Та же самая, что и реальный добавляет.


 
r@bbit   (2006-06-15 09:59) [2]

а какая реальный добавляет? :)


 
wal ©   (2006-06-15 10:13) [3]

IoCreateSymbolicLink


 
Игорь Шевченко ©   (2006-06-15 10:50) [4]


> и к слову - какая функция ядра добавляет виртуальный диск
> к списку дисков?


IoCreateDevice


 
Ihor Osov'yak ©   (2006-06-15 11:11) [5]

как говорится, точного ответа не знаю, так как не ходил, но пару общих соображений есть..
Проанализировать драйвер на предмет какая шина его запускает, открывает ли он SymbolicLink (драйверу чесного устройства это как бы ни к чему), зависит от каких ли он драйверов (виртуальный вероятнее всего будет ну уж очень независим)...
Хотя, можно немножко и схалтурить - учитывая что этих виртуальных не такое уже и нескончаемое множество - просто посмотреть каков драйвер его облуживает - и сравнить с "черным" списком..


 
r@bbit   (2006-06-15 11:59) [6]

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


 
Игорь Шевченко ©   (2006-06-15 12:34) [7]


> а при скармливании IOCTL команд реальному приводу и виртуальному
> никаких различий не может быть в ответах функций?


Зависит от эмулятора, очевидно


 
Ihor Osov'yak ©   (2006-06-15 12:35) [8]

> а при скармливании IOCTL команд реальному приводу и виртуальному никаких различий не может быть в ответах функций?

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


 
Ihor Osov'yak ©   (2006-06-15 12:38) [9]

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


 
r@bbit   (2006-06-15 14:41) [10]

да, с черным списком идея хороша и вроде даже не очень сложна в реализации... хэндл устройства получаю а как дальше быть? как получить имя драйвера который это устройство обслуживает? извиняйте если туповатые вопросы просто раньше такого не делал.


 
Игорь Шевченко ©   (2006-06-15 14:45) [11]


> хэндл устройства получаю


Как ?


 
r@bbit   (2006-06-15 14:55) [12]

hCD = CreateFile("\\\\.\буква сидюка.... и т.д.
ну это было в примере по юзанию IoDeviceControl


 
r@bbit   (2006-06-15 14:58) [13]

т.е. DeviceIoControl :)


 
Игорь Шевченко ©   (2006-06-15 15:27) [14]

r@bbit   (15.06.06 14:55) [12]

Спроси QueryDosDevice на букву сидюка


 
r@bbit   (2006-06-15 15:47) [15]

>Игорь Шевченко
спасибо ! думаю всё получится :)


 
r@bbit   (2006-06-16 07:58) [16]

На реальный привод в буфер получил Device\CdRom0
на виртуальник такое Device\CdRom1
и что с этим делать не знаю... :(


 
r@bbit   (2006-06-16 09:13) [17]

В принципе различия есть - судя по статейке из книги К.Касперски - например через утилиту objdir.exe. С ее помощью получаем список устройств и шины на которых они "висят". С реальными приводами всё нормально возвращается ...\Ide0 или Ide1, а вот виртуальники естественно никаких физических шин не имеют! Какой функцией можно узнать с какой именно шиной связано устройство и есть ли она вообще (шина у устройства)? От устройства имеем дескриптор. Или хотя бы получить имя драйвера с которым устройство связано... в общем сплошная головная боль. помогите кто может, плиз.


 
Игорь Шевченко ©   (2006-06-16 10:46) [18]


> через утилиту objdir.exe. С ее помощью получаем список устройств
> и шины на которых они "висят".


Winobj.exe от SysInternals вроде показывает только список устройств, без шин. Сдается мне, что проще искать по списку аппаратных устройств реестре - HKLM\HARDWARE\DESCRIPTION


 
r@bbit   (2006-06-19 12:33) [19]

покопавшись? выяснил следующее:
1. QueryDosDevices с именем диска возвращает \Device\CdRom(n)

2. QueryDosDevices с именем виртуального SCSI (например SCSI1:) возвращает:
\Device\Ide\IdePort(n) - для реального привода
\Device\Scsi\sojuscsi(n) - для виртуальника
т.е. различие есть

вопрос возник такой - можно ли по имени из пункта 1 получить виртуальный SCSI порт, к которому это устройство подключено? какой функцией, если она есть конечно? в пункте 2 как я понял возвращается имя драйвера устройства, встречалось либо IdeChnDr(n) либо IdePort(n). Подскажите плз, чую что рядом с решением топчусь да всё никак


 
Игорь Шевченко ©   (2006-06-19 13:19) [20]

Я бы обратил внимание на реестр :) Виртуальных CD-ROM у меня нет, так что направлений определеннее подсказать не могу. Список драйверов - он в реестре.


 
evvcom ©   (2006-06-19 14:24) [21]

> \Device\Ide\IdePort(n) - для реального привода
> \Device\Scsi\sojuscsi(n) - для виртуальника

Если реальный SCSI повесишь, наверняка разочаруешься в своих выводах. Ищи драйвера, тебе говорят.


 
Belorus ©   (2006-06-19 20:44) [22]

Хехе. Вопрос на 10 баллов.
Как отличить виртуальный привод от реального.

Ты у создателей старфорс спроси. Они много лет бьются и на данный момент только FrontLine что-то делает. А родимый StarForce 3.x и тот ломается.
А товарищ захотел пару строчек кода чтобы привод отличить.
Молодец.

В орехи.


 
r@bbit   (2006-06-20 18:34) [23]

Агроменное СПАСИБО всем за советы, не бросившим меня в беде! Защита получилась, не старфорс конечно, но чтобы сломать придётся малость попыхтеть, и этого для институтских админов вполне достаточно.
>Игорь Шевченко
отдельно спасибо, работает, именно сканируя реестровые ключи... жаль что обращения к реестру отлавливаются куда проще, чем к портам, но пока сойдёт и так. проверял - защита успешно ругается на все доступные мне виртуальщики. что и требовалось :)


 
Дмитрий Белькевич ©   (2006-06-21 02:14) [24]

Самое главное, что бы на реальные сидюки как на виртуальные не ругалась, т.к. это гораздо хуже. Я на месте юзера очень долго бы ругался на такую "защиту".


 
tesseract ©   (2006-06-21 16:30) [25]


> r@bbit   (20.06.06 18:34) [23]

Просто внёс ID "виртуальщиков" в чёрный список?


 
r@bbit   (2006-06-21 21:10) [26]

Нет. У виртуальных (любых) отсутствует DriverName :)


 
tesseract ©   (2006-06-22 09:10) [27]


> Нет. У виртуальных (любых) отсутствует DriverName :)

хм. Странно.  Хотя я видел некоторые вещи с отсутсвующим.


 
r@bbit   (2006-06-22 17:26) [28]

ёлки блин - DeviceName. перепутал малость :)



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2006.11.05;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.061 c
15-1161120053
Ученик чародея
2006-10-18 01:20
2006.11.05
Защитить исходный код - сделать его как можно более запутанным.


15-1160980134
IMHO
2006-10-16 10:28
2006.11.05
Какой ценой строились египетские пирамиды?


2-1161162997
viper7
2006-10-18 13:16
2006.11.05
Создание компонента


2-1161268969
LBP
2006-10-19 18:42
2006.11.05
DBGRID и удаленные записи


2-1161456604
simona4
2006-10-21 22:50
2006.11.05
база глючит на других компах





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский