Города на Мурмане
06 Мая 2024, 10:40 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
 
   Начало   ПРАВИЛА Помощь Поиск Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Делаем Bootable CD  (Прочитано 11906 раз)
Sergeuz
молодой
*

Карма +0/-0
Offline Offline

Сообщений: 14


« : 06 Января 2003, 13:08 »

Народ, поможите! Отчего-то захотелось мне недавно сделать кайфовый загрузочный сидюк (ну там, шоб LFN, NTFS и архиваторы все держал, джепегехи всякие вьюверил... плюс успокаивающий женский голос из PC-Speaker'a и горячая подборка соблазнительных эротических картинок в псевдографике для релаксации юзеров с полуживым железом) и возникли следующие вопросы:

1. -= Сидюк с эмуляцией флоппи драйва. =-
Надобно сделать нормальную менюшку при загрузке ОС (DOS 7.0 от Виндузы) для выбора драйверов, которые тебе нужны (вариант с созданием загрузочного меню стандартными средствами DOS не катит). Ну, допустим, я напишу свою прогу с этой долбанной менюхой и пропишу её как драйвер в CONFIG.SYS. Я ещё не вникал в правила написания таких драйверов и хочу просто узнать, смогу ли я из своего драйвера повлиять на загрузку других указанных в конфиге дров и изменять переменные окружения на этапе его инициализации? Ещё предпочтительнее проделать то же самое, только если моя прога будет грузиться перед DOSом. Разумеется, всё без всяких операций записи - сидюк же ж блин.

2. -= Сидюк с эмуляцией харда =-
Проблемы те же, что и в первом пункте, только нужно ещё и сделать так, чтобы эмулировался не диск C, на который, скорее всего, придётся ставить систему, а какой-нибудь факин %LASTDRIVE%. Реально такое проделать?

3. -= Ваще без эмуляции =-
Такая петрушка используется в сидюках с WinNT: типа грузишь комп и запускается инсталляция, тока как так сделать? Куда код свой пхать? И как вообще читать инфу с этого же сидюка после загрузки, если не будет тебе даже никакого MSCDEXa?

---------------------------------------------
Короче, вопросов тьма, так что пишите все, кто хоть что-то хочет поведать по данному сабжу.
Записан
Аспирант Василий
Гость
« Ответ #1 : 06 Января 2003, 14:39 »

> (вариант с созданием загрузочного меню стандартными средствами DOS не катит).
А вот это плохо
Кстати, посмотрите, чего умудрились в реаниматорах конфиговским меню наделать. Мне как-то завидно стало.
Значит, дело вот в чем. Из конфига запустить драйвер не сложно, но сложнее его писать. Да и надо ли? Если командой INSTALL[HIGH] можно загрузить обычную программу. Сложнее будет с переменными окружения.
Изменить их в загруженной проге будет очень просто, но когда мы из нее выйдем, вроде, мы их потеряем. С другой стороны, где-то я видел программы типа DEVICE, позволяющие грузить драйверы из командной строки, т.е. и из bat-файла, и из программы тоже. С другой стороны, множество драйверов изначально идут как exe-Файлы (в т.ч. есть и драйвер cdrom, только  у меня он создавал эмулированные два глупых CD). Потом. Наверно, получится и из configа считать код выхода из программы.
> Разумеется, всё без всяких операций записи - сидюк же ж блин.
А Ramdrive?
Записан
Proud
Админ
матерый
*****

Карма +43/-7
Offline Offline

Пол: Мужской
Возраст: 47
Расположение: Мурманск
Сообщений: 3672



WWW
« Ответ #2 : 08 Января 2003, 11:48 »

Sergeuz, #1 >>
может пригодиться:
http://bootcd.narod.ru/
http://www.ixbt.com/storage/boot-cd-howto.html
Записан

Я бы с удовольствием сразился с Вами в интеллектуальной дуэли. Но Вы, как я вижу, без оружия.
Kuzya
основной
**

Карма +0/-0
Offline Offline

Сообщений: 30


« Ответ #3 : 08 Января 2003, 16:47 »

Насчет проги-"драйвера" - судя по тому что и как сказано, писАть браться не стОит... Для решения вопроса используйте то, что сами сказали, т.е. MS-DOS config menu. Если не катит, то была такая прога из Norton Utilities 7/8 называлась BE.EXE - Batch Enhancer. Она покруче будет. Насчет переменных окружения - они работают в текущем сеансе, поэтому должно прокатить. Насчет LASTDRIVE - гемор намечается, т.к. эта переменная окружения выставляется в config.sys и усе... и что с этим делать -
Записан
Neland
Гость
« Ответ #4 : 10 Января 2003, 00:36 »

Писать драйвер харда/флопа/сд/ещё чего довольно непросто, но задача выполнима (сам делал - знаю). Но вот эмулировать - очень просто. Всего-то переставить бит в области BIOS Sh. и переназначить I/O. Только зачем? Смысл в диске, если доступ к нему равнозначен доступу на nul?

Мне понравилась фраза: "Я ещё не вникал в правила написания таких (!) драйверов и хочу ...". А какие(?) драйвера писали? 8)

Могу предложить следующее: использовать метод RAM-Диска, т.е. создать диск в RAM, обеспечить его XMS/EMS памятью и отправить туды, чтоб память поменьше занимал. И заменить его букву на тот диск, который эмулируюте. Затем скидываете на вирт. диск данные (кот. нужны) а по окончании работы - обратно на носитель. Я бы так сделал, тем более что это несложно.
%LASTDRIVE% - это последний идентификатор диска, кот. можно использовать. Но его может и не быть в config.sys - тогда он равен nul.

2Аспирант Василий: грузить драйвера НЕЛЬЗЯ из командной строки (иначе это не драйвер). Есть множество тому причин, не буду объяснять.

2Kuzya: при оооочень большом желании можно изменить и даже добавить переменную lastdrive в обход config.sys: через прямое редактирование: либо PSP программы (что сложнее) либо через редактирование области переменных BIOS.
Записан
Sergeuz
молодой
*

Карма +0/-0
Offline Offline

Сообщений: 14


« Ответ #5 : 13 Января 2003, 13:26 »

Аспирант Василий, #2 >> Вся та борода, которая прописывается после INSTALL всегда грузится уже после выполнения всех DEVICE'ов - я уже пробовал.
А когда я говорил, что всё нужно сделать без операций записи, я имел в виду то, что можно сделать такой "драйвер", который осуществляет выборочную загрузку других драйверов путём простого добавления строчек в файл CONFIG.SYS. Причём тут RamDrive вообще?
Записан
Sergeuz
молодой
*

Карма +0/-0
Offline Offline

Сообщений: 14


« Ответ #6 : 13 Января 2003, 17:01 »

Neland, #5 >> Под фразой "таких драйверов" я имел ввиду драйвера ДОС вообще. Просто на тот момент я ещё не знал их структуры (т.е. формат заголовка и прочую там фигню), но суть не в этом: вообще, похоже, что все кто поспешили настрочить свои варианты решения просто не совсем поняли, чего мне собственно нужно. Объясняю ещё раз. Мне нужно прописать в конфиге свой типа драйвер, из которого можно повлиять на то, что загружать в CONFIG.SYS и AUTOEXEC.BAT, а что нет. Стандартные средства для создания загрузочного меню мне однозначно не подходят
(при достаточно большом количестве всяких параметров загрузки они просто не прокатывают: мне ж не просто выбор "boot with CD support" иль "without оного" нужно предоставить; да и вдруг чёнть с VESA захочется забомбить?).
Скажем, если бы я делал продвинутый загрузочный флоппик, я бы прописал в конфиге прогу, которая просто изменяет содержимое и самого config'a, и autoexec'a, что называется на лету (и это вполне удаётся на самом деле). Но ведь у меня-то сидюк же ж, ё маё. Поэтому, на данный момент вижу лишь пару решений, реальность и конкретные методы осуществления которых и хотел узнать:

1) Делаю CD с эмуляцией флоппаря или НЖМД и управляю выполнением команд, прописанных в autoexec'e с помощью переменных DOS (типа If %FuсkinChoose_1% == "1" then <что-нибудь>, а порядком загрузки дров config'a - хрен знает как. Может удастся замутить что-нибудь со ссылками на следующий драйвер в заголовках драйверов? - Это если ДОС сразу выстраивает в памяти список их загрузки, но так ли это? Плюс никто так и не объяснил мне толком можно ли изменять и создавать новые переменные уже в на этапе выполнения инициализационного кода моего драйвера. Короче, Neland, молю и заклинаю тебя, коль ты уж такой прошаренный чел, напиши невподляк как вообще изменять/создавать эти сраные переменные без использования прерываний DOS? (они не все ещё доступны на момент загрузки драйверов)

2) Второй способ - это также выбрать неважно какой тип эмуляции для CD, но перед загрузкой DOS, подправив boot-сектор запустить свой рамдрайв, переписать на него все системные файлы, а потом передать управление загрузчику DOS уже непосредственно на созданном мною виртуальном диске. Далее изменяю содержимое autoexec'a и config.sys'a с применением ставших теперь возможными операциями записи хоть в самой извращёной их форме - короче всё так же как и для описанного выше случая с загрузочной дискетой. Тока в конце autoexec'a ещё можно вызвать прогу, которая выгрузит нафиг из памяти мой рамдрайв, не забыв переправить COMSPEC на родной и домашний сидюк, с которого, собственно и начиналась вся загрузка - но это уже по желанию.

Только ж способ N2 - это ж сущий гимор, мать его, да и некрасиво как-то... Наверняка можно и первый как-то добить...
И ещё очень хотелось бы узнать, что всё-таки делать, если создавать bootable CD без эмуляции вообще (хрен с ними с драйверами: Neland одолжит или с реаниматора сопру - наверняка злодей так же делал)
В общем, Help again...
---------------------------------------
P.S. Мужики, тока не надо больше досовской менюхой мозг парить, OK? (ну хорошая она, ладно)  А то некоторые уже BE.EXE начинают советовать.
Записан
AgentOrange
матерый
*****

Карма +19/-27
Offline Offline

Пол: Мужской
Возраст: 45
Расположение: Мурманск
Сообщений: 4153



« Ответ #7 : 15 Января 2003, 17:27 »

Neland, #5 >>
> : грузить драйвера НЕЛЬЗЯ из командной строки (иначе это не драйвер).
Резидентная программа, демон - как хотите. Но только он выполняет те же функции. Не верите? Запустите mouse.com. Кроме того, СУЩЕСТВУЮТ файлы device.exe, худо-бедно пускающие из командной строки те драйвера, которые обычно прописываются в config.sys. Сам пускал. Только теперь, наверно, не найду, с тех пор я два винта сменил.
Записан
Аспирант Василий
Гость
« Ответ #8 : 15 Января 2003, 17:42 »

Короче, всё так серьёзно, что легче будет обойтись без ДОСа . Win31, что ли загрузить! А ещё лучше - linux. С конфигурируемым ядром. А дальше, если так нужен дос, грузим Dosemu (уже после нужной нам менюшки и с подправленным в рамдрайве образом) . Или всё-таки поискать замену конфиговским драйверам обычными exeшниками. Конечно, можно создать виртуальный диск, но если это будет до начальной загрузки?! Или... Ещё идея! Подправить вручную драйвспейс - он ведь тоже делает что-то такое. Но 60 К бинарного кода... Ужас!
И всё-таки, я бы поискал device.exe. Хотя после него и повесить что-то можно, НО!
Записан
Neland
Гость
« Ответ #9 : 16 Января 2003, 21:06 »

mouse.com - TSR программа. Она перехватывает 33 прерывание и обрабатывает порт. Вот и всё.
Записан
Аспирант Василий
Гость
« Ответ #10 : 21 Января 2003, 17:58 »

А xmsmmgr?
Записан
Sergeuz
молодой
*

Карма +0/-0
Offline Offline

Сообщений: 14


« Ответ #11 : 27 Января 2003, 16:21 »

Всем хай! Вот и прошла первая неделя моих первых в жизни студенческих каникул... Жаль, что за всё время, что я не появлялся в этом форуме, так никто и не подкинул свежих идей. Хотя, может это и хорошо, а то я уже начал было подумывать о том, чтобы сменить тему на "Половые  извращения с применением DOS". Ладно, перейдём к главному, ибо проблема решена, гопода! И естественно всё оказалось проще простого. На днях, решив пошарить по сидюку с абсолютно несортированным сборищем асмовских исходников, наткнулся на док с руководством по написанию драйверов для DOS, написанным неким Михаилом Тихоновым. Оттуда, помимо непосредственно формата этих драйверов, я узнал каким образом DOS передаёт строку параметров вызова драйвера функции его инициализации. Она содержит всё, что написано после  "DEVICE ="  в строке конфига, где девайсится ваш драйвер, и заканчивается символом 0Ah (конец строки). Оказалось, что если прописать драйвер первым в конфиге, то за этим символом в памяти будет содержиться весь остальной CONFIG.SYS записанный, правда, в несколько иной форме. Например, пусть конфиг содержит следующие строки:

Device = himem.sys
Files = 40
Set Path = "C:\Windows\System\Porn"
rem Device = ramdrive.sys /E 16384

Тогда строка, адрес которой сообщит вашему драйверу DOS, при декрементированном смещении будет содержать примерно следующее:

Dhimem.sys  F40  VPath = C:\Windows\System\Porn  0Device = ramdrive.sys /E 16384 ...

Т.е. перед содержимым каждой строки  DOS устанавливает некий управляющий символ, раскрывающий её назначение. Для "DEVICE" - это "D", для "BUFFERS" - "B" и так далее. Самым важным для решения нашей задачи является то, что для строки, начинающейся с "REM", управляющий символ - это "0" (символ нуля). Вот и всё, нетрудно догадаться, что для отключения обработки какой-либо строки конфига нужно просто заменить её управляющий символ на "0".
Ниже представлен исходник драйвера, единственной функцией которого является отключение следующей за ним строки в CONFIG.SYS. Тут нет почти никаких комментариев, потому как для того, чтоб понять логику работы драйвера нужно всё же почитать какой-нибудь док, а принцип действия инициализационной части драйвера был объяснён выше.

;заголовок драйвера
dw   0FFFFh, 0FFFFh
dw   8000h
dw   offset @Strategy_Proc
dw   offset @Interrupt_Proc
db   'Disabler'                        ;название

dw   0FFFFh, 0FFFFh

@Strategy_Proc:
  mov   word ptr cs: [0012h], bx
  mov   word ptr cs: [0014h], es
  retf

@Interrupt_Proc:
  push  ax; push bx; push di; push es; pushf
  les   di, dword ptr cs: [0012h]
  mov   bl, es: [di 02h]
  mov   ax, 8003h
  or    bl, bl
  jnz   @Exit
  call  @Init_Proc
  @Exit:
  or    ax, 0100h
  mov   es: [di 03h], ax
  popf; pop es; pop di; pop bx; pop ax
  retf

@Init_Proc:                          ;подпрограмма инициализации (вся маза здесь)
  push  ds; push si
  mov   si, es: [di 12h]          ;в DS:SI помещаем адрес строки параметров
  mov   ax, es: [di 14h]
  mov   ds, ax
  @NextByte:
  mov   al, ds: [si]
  inc   si
  cmp   al, 0Ah                      ;проверка на символ конца строки
  jne   @NextByte
  mov   al, 30h                      ;ASCII код нуля
  mov   ds: [si], al
  pop   si; pop ds
  mov   word ptr es: [di 0Eh], offset @Init_Proc
  mov   word ptr es: [di 10h], cs
  xor   ax, ax
  ret

Понятия не имею как вы это будете компилировать (если будете), но если в TASM'e или MASM'e, то нужно помнить, что драйвер в памяти будет располагаться с начала сегмента (org 00h). Ещё она не выгружается из памяти. Ну всё, всем пакеда!

P.S. Да, сей док с руководством по написанию драйверов для DOS я слил на МГТУшный сервак. Могу скинуть персонально.

P.P.S. Neland, а что плохого в том, что mouse.com читает порт и перехватывает 33h? Допустим, ты спаял какую-нибудь адскую машину, подключаемую к тачке через COM-порт, и программную часть работы с ней осуществил через какое-нибудь прерывание. Так что теперь твоя прога станет драйвером только если загружать её через CONFIG.SYS? Глупо.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006, Simple Machines
Wap | PDA | Обратная связь
Valid XHTML 1.0! Valid CSS!