Віртуальний cd-rom

Привіт, а як з папки «сфабрикувати» віртуальний CD-ROM?

Я свого часу користувався програмою Virtual CD Extension. Лінка немає. Пошукай в Мережі.

Шановний Д.-Р. Кут!
є один персонаж, який на будь-яке питання розорявся тирадою, сенс якої зводився до того, що якийсь Артур мав звичай виходити на берег моря, попередньо підкріпившись чашкою гарячого шоколаду. Впізнається? Якщо немає, перечитайте Стругацьких.

Було поставлено конкретне питання. Людина хотів отримати конкретну відповідь. Якщо Ви його не знаєте, можна промовчати.
Якщо знаєте, - говорите і так Бог Вам суддя.

а ти команду SUBST не пробував, або не підходить?
Якщо треба можу надіслати на мило FAKECD (тільки для win9x)
Він важить близько 10 kb.

етсь така команда командного рядка Subst ім'я диска шлях, торая створює диск із зазначеним ім'ям з каталогу з зазначеним шляхом

Насправді диск отримується коммандой SUBST CD-ROMом не пахне і в помині - він успадковує властивості того розділу диска на якому створено. Десь в API повинна бути якась команда

2Dmitry W. Polschanoff
Сам ти Д.-Р.

тільки для цього треба систему спотворити (поправте 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) і бачимо продовження. Функція, виявляється-то, довга! Не будемо в ній розбиратися, а краще згадаємо як відбувається повернення значення з функції. Т.ч. шукаємо рядок типу

Знайшли? Далі, як і при будь-якому зломі, запам'ятаємо послідовність 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, а вінчестери залишаться вінчестерами. Але це вже завдання додому. Удачі!

2Proton
. НЕ спотворити, а модернізувати

Як працює той же Virtual CD? Пишеться драйвер.

я ж написав уже.


if DefineDosDevice (DDD_RAW_TARGET_PATH, "P:", "F: \ Backup \ Music \ Modules") then
ShowMessage ( "Drive was created successfully")
else
ShowMessage ( "Error creating drive");


зразок воно і є - з папки віртуальний диск

взагалі то можна обійтися і без драйвера
большенство ігор (і програм) не задаються складної
перевіркою а лиш перевіряють учтройство на
a) наявність потрібних файлів
б) GetDriveType - який повинен повернуть CDROM
1) віддаємо для папки диск (субстанція або за прикладом ed_209).
але ось проблемма GetDriveType для такого диска поверне що це не CD а гвинтик і гра (прогграмму) не запуститься - з цього йдемо до пункту 2
2) перехоплюємо всі виклики в системі функції GetDriveType з Kernel32, і перевіряємо якщо запитується для нашого пристрою то повертаємо що це CD

але нажаль цей пункт найскладніший - і реалізувати його важко оскільки перехоплення потрібно робити не для одного процесаа а для всіх - на воруме не раз обговорювалася тема ререхвата виклику API функцій - рекомендую скористатися пошуком.

да до речі пункт 2 можна вирішити і за допомогою зміни kernel32 (дізасемблірованія і т.п.)

PS> проте вважаю цей підхід більш простим ніж написання драйвера
PPs> якщо хто напише ону прогу сміливо кидайте в комору - серед знаючих людей успіх їй забезпечений.

sniknik прав. У Nero є така штука як Drive Image. якщо
їй вказати файл образу (наприклад, створений Nero), то з нього
вийде CD-ROM в будь-який Win32. Деяким програмам хочеться
щоб їх CD мав цілком конкретний label - він вказується при
створенні образу диска.

To ED_209: скидали шапки - ТИ КРУТИЙ.

Всіх інших з Fake і Virtual CD а так же label, на свій рахунок прошу це не приймати.

ED_209 - ось внатуре Дельфер, а інших на zadnitsa.com перенаправленням прямим.

ED_209 - ось це Дельфер. А інших попрошу прямим перенаправленням на zadnitsa.com.


> If DefineDosDevice (DDD_RAW_TARGET_PATH, "P:", "F: \ Backup \ Music \ Modules")
> then

здорово. тільки в 2к не зовсім працює :(
диск створює, але зробити з ним нічого не можна :)

Помойму крутий Paragon cd Emulator Навіть якщо його не завантажувати то створені диски (СD-rom) все одно чомусь залишаються при чому з влоденимі іміджами. Так це ж круто. )

Romualdy (21.08.02 17:54)

> If DefineDosDevice (DDD_RAW_TARGET_PATH, "P:", "F: \ Backup \ Music \ Modules")
> then

здорово. тільки в 2к не зовсім працює :(
диск створює, але зробити з ним нічого не можна :)


Угу;) дає P: без опису і нічо не зробиш =)
Хоч написали б як ремувіть)


Як зіставити каталог букві диска (так-же, як це робить 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;

Ну може бути варто спробувати утиліту subst. Може це і не те що потрібно на крайнього заходу працює стабільно. Входить в стандартну поставку вінди. Можна запускати з командного рядка:

subst :

Схожі статті