![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Виртуальный CD-ROM [D6, Win95/98, Win2k]
Чайник2 © (2002-07-09 04:48:00)Здравствуйте, а как из папки «состряпать» виртуальный CD-ROM?
Victor_Cr (2002-11-21 10:25:00) [1]Ну может быть стоит попробовать утилиту subst. Может это и не то что нужно на покрайней мере работает стабильно. Входит в стандартную поставку винды. Можно запускать с командной строки:
subst <NEW Disk LETTER>: <Folder path>
cdadmitriy (2002-11-21 10:23:00) [2]
Как сопоставить каталог букве диска (так-же, как это делает subst.exe)
// За пример благодарим Ворническу Владимира
procedure addSubst(Drv: string; Path: string);
begin
if (Length(Path) = 0) then Exit;
if (DefineDosDevice(0, PChar(Drv), PChar(Path)) = False) then RaiseLastWin32Error;
end;
procedure KillSubst(Drv: string);
begin
if (DefineDosDevice(DDD_REMOVE_DEFINITION, PChar(Drv), nil) = False)
then RaiseLastWin32Error;
end;
Илайдж (2002-11-21 09:20:00) [3]Romualdy (21.08.02 17:54)
> if DefineDosDevice(DDD_RAW_TARGET_PATH, "P:", "F:\Backup\Music\Modules")
> then
здорово!, только в 2к не совсем работает :(
диск создаёт, но сделать с ним ничего нельзя :)
Угу;) дает P: без описания и ниче не сделаешь =)
Хоть написали бы как ремувить )
Chlavik (2002-10-07 01:45:00) [4]Помойму крутой Paragon cd Emulator Даже если его не загружать то созданные диски (Сd-rom)всё равно почемуто остаются при чём с влодеными имиджами!! Так это ж круто! :)
Romualdy (2002-08-21 17:54:00) [5]
> if DefineDosDevice(DDD_RAW_TARGET_PATH, "P:", "F:\Backup\Music\Modules")
> then
здорово!, только в 2к не совсем работает :(
диск создаёт, но сделать с ним ничего нельзя :)
frum (2002-08-21 10:35:00) [6]ED_209 - вот это Дельфер. А остальных попрошу прямым редиректом на zadnitsa.com.
frum (2002-08-21 10:14:00) [7]ED_209 - вот внатуре Дельфер, а остальных на zadnitsa.com редиректом прямым.
Dabus (2002-08-21 01:49:00) [8]To ED_209: СНИМАЮ ШАПКУ - ТЫ КРУТОЙ !!!
Всех остальных с Fake и Virtual CD а так же label, на свой счёт прошу это не принимать.
dr.keshman (2002-07-24 18:48:00) [9]sniknik прав. У Nero есть такая штука как Drive Image. Если
ей указать файл образа (например, созданный Nero), то из него
получится CD-ROM в любой Win32. Некоторым программам хочется
чтобы их CD имел вполне конкретный label - он указывается при
создании образа диска.
sniknik (2002-07-19 14:13:00) [10]есть такая прога с пошлым названием FackCD, именно делает папку сдромом, а не с образом как некоторые работают. под 2000ми не пойдет а с 98 милое дело. не найдеш до завтра пиши из дому притащу.
а для преобразований в образы и работы с ними я например Hero использую (он не только cd прожигает!)
Proton (2002-07-18 22:47:00) [11]вообще то можно обойтись и без драйвера
большенство игр (и программ) не задаются сложной
проверкой а лиш проверяют учтройство на
a) наличие нужных файлов
б) GetDriveType - который должен вернут CDROM
1) воздаем для папки диск (субстом или по примеру ed_209).
но вот проблемма GetDriveType для такого диска вернет что это не CD а винтик и игра (прогграмма) не запустится - по этому идем к пункту 2
2) перехватываем все вызовы в системе функции GetDriveType из Kernel32, и проверяем если запрашивается для нашего устройства то возвращаем что это CD
но к сожелению этот пункт самый сложный - и реализовать его тяжело поскольку перехват нужно делать не для одного процесаа а для всех - на воруме не раз обсуждалась тема ререхвата вызова API функций - рекомендую воспользоваться поиском.
да к стати пункт 2 можно решить и с помощью изменения kernel32 (дизасемблирования и т.п.)
PS > тем не менее считаю этот подход более простым чем написание драйвера
PPs > если кто напишет оную прогу смело кидайте в кладовку - среди знающих людей успех ей обеспечен.
ed_209 (2002-07-18 03:12:00) [12]я ж написал уже...
{ ... }
if DefineDosDevice(DDD_RAW_TARGET_PATH, "P:", "F:\Backup\Music\Modules") then
ShowMessage("Drive was created successfully")
else
ShowMessage("Error creating drive");
{ ... }
вроде оно и есть - из папки виртуальный диск
VinRom (2002-07-16 23:10:00) [13]Да, если своего не надо писать, есть готовая прога Virtual CD, у меня 3 версия (ворованная ;-)) - позволяет создавать образы из CD, каталогов, отдельных аудио треков, работает с образами по сети...
Производитель http://www.virtualcd-online.com/
Последняя версия 4.3
VinRom (2002-07-16 23:02:00) [14]Как работает тот же Virtual CD? Пишется драйвер...
угол (2002-07-11 04:59:00) [15]2Proton
... не изуродовать, а модернизировать
Proton (2002-07-11 02:34:00) [16]если речь идет о софте то настоятельно рекомендую daemon-tools
http://www.daemon-tools.com/
там же куча полезного софта есть
Proton (2002-07-11 02:34:00) [17]только для этого надо систему изуродовать (поправть Kernel32.dll).
вот отрывочек из hlp файлика (если надо пульну весь по почте)
Пишем Fake-CD для OS Windows 95
Для DOS существовала прекрасная утилита - FakeCD, которая подменяла MSСDEX и эмулировала таким образом CD-диск который, на самом деле, был каталогом на винчестере. Для Win95 такую программу найти не просто, поэтому необходимо ее сделать самим. Этим мы и займемся, тем более, что это будет прекрасная практика по копанию в недрах 95"ого.
Посмотрим на проблему, обсуждавшуюся раннее, с другой стороны. Заменим не использование функции, а саму функцию. Если в DOS для замены функций необходимо только было изменить обработчик прерываний, то в Windows такой финт уже не поможет. Выясним, где "живет" GetDriveType(). И - о ужас - это главная библиотека Win95 KERNEL32.DLL. Что делать? Как всегда, запастись кофе и напуcтить на KERNEL32.DLL дизассемблер. OK, ждем окончания процесса и смотрим список экспортируемых функций. Вот нужная нам:
Exported fn(): GetDriveTypeA - Ord:013Fh
:BFF777C4 57 push edi
:BFF777C5 6A21 push 00000021
...
...
...
:BFF777E1 F2 repnz
:BFF777E2 AE scasb
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:BFF777DA(C)
|
:BFF777E3 648F02 pop dword ptr fs:[edx]
:BFF777E6 83C408 add esp, 00000008
:BFF777E9 5F pop edi
:BFF777EA E9E5D4FFFF jmp BFF74CD4
Делаем переход в конце(кнопка Jump to на панели W32Dasm) и видим продолжение. Функция, оказывается-то, длинная! Не будем в ней разбираться, а лучше вспомним как происходит возврат значения из функции. Т.о. ищем строку типа
mov eax,03000000
Нашли? Далее, как и при любом взломе, запомним последовательность HEX кодов нужной команды (а лучше нескольких следующих, так как загрузка в аккумулятор числа 3 не самая редкая операция) и найдем этот блок в копии библиотеки (в копии - потому что файл используется системой и не может быть изменен). Все, осталось лишь в режиме DOS подменить KERNEL32.DLL. Перезагрузимся и в Проводнике насла
димся результатом - все ваши жесткие диски представленны в виде кругленьких пластинок ранее обозначавших CD.
А теперь - для ленивых - кусок кода, который возвращает 3:
* Possible Reference to String Resource ID=00003: "....."
| :BFF74E0F B803000000 mov eax, 00000003 //Возвращаемое значение
:BFF74E14 EB05 jmp BFF74E1B //Переход на возврат
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:BFF74DEB(C), :BFF74DFC(C), :BFF74E0D(C)
|
* Possible Reference to String Resource ID=00006: "..."
Да - лучше сохранить старый KERNEL32, так как некоторые программы могут не оценить ваш юмор, и решить, что несколько CD и ни одного винчестера - это слишком. А вообще идеально было бы изменить функцию коренным образом. Скажем сделать CD дисками все, начиная с T. Тогда можно было бы подключать subst"ом каталоги, которые были бы CD, а винчестеры остануться винчестерами. Но это уже задание на дом. Удачи!
угол (2002-07-10 11:19:00) [18]2Dmitry W. Polschanoff
Сам ты д.-р.
2 Чайник2
Конкретный ответ тут:
http://www.reversing.net/articles/Fox/filem003.html
... но, врятли он тебя поможет
direqtor (2002-07-10 07:00:00) [19]На самом деле диск получаемый коммандой SUBST CD-ROMом не пахнет и в помине - он наследует свойства того раздела диска на котором создан... Где-то в API должна быть какая-нибудь команда
nejest (2002-07-10 01:52:00) [20]етсь такая команда командной строки Subst имя диска путь, торая создаёт диск с указанным именем из каталога с указанным путём