Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Виртуальный CD-ROM [D6, Win95/98, Win2k]


Страницы:   1 2

Чайник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 имя диска путь, торая создаёт диск с указанным именем из каталога с указанным путём


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо