winboard DMA на CD All Приветствуем загрузку BartPE через ntldr! Моя сборка (bsexporer, fbwf) c флэшки (jf v33) грузится всего 20 секунд!
Для начала я решил
установить винду на флэшку.
Оказалось, что если в сборку сунуть куст реестра SYSTEM от этой винды и в boot.ini вручную указать, какие ядро и хал грузить, то сборка худо-бедно загрузится. Методом деления reg-файла пополам, потом ещё и ещё пополам опытным путём было установлено, чего не хватает в setupreg.hiv для полного счастья. Пофиксено более 10 bsod'ов, и вот он - заветный
reg-файл. Внутри, помимо него, есть boot.ini и пофиксеный ntdetect.com. Выяснено, что HKLM\SYSTEM\ControlSet001\Control\CriticalDeviceDatabase - аналог секции [HardwareIdsDatabase] в txtsetup.sif и т.д. В отличии от винды на флэшке, будет грузится на разных машинах потому что я добавил HKLM\SYSTEM\ControlSet001\Control\CriticalDeviceDatabase инфу про usb как в плаге от Юркеши. В принципе, можно сделать, чтобы и установленная на флэшку винда грузилась на разных машинах.
Принцип такой: копируем setupreg.hiv в папку config. Переименовываем в "system". Подгружаем в HKLM с именем t. Выполняем reg-файл. Выгружаем куст. Для автоматизации дейстий, о которых я написал выше, я написал скрипт. Он внутри. Можно прикрутить к постобработке. На флэшку копируем сборку, в корень кидаем ntldr (я полагаю, что он у вас есть;), ntdetect.com и boot.ini из архива. I386 переименовываем в minint. А как загрузить ntldr - на ваше усмотрение. Если через grub4dos - то можно сделать выбор, как грузить - по-старинке через setupldr.bin или по-новому через ntldr.
Жаль только, что этот метод хорошо работает только на флэшках и хардах.
После ковыряния в ntbtlog.txt после загрузки через ntldr и setupldr.bin выяснено, что ntldr сначала определяет девайсы, а потом грузит дрова, а setupldr.bin делает всё через жопу - сначала грузит все дрова, а потом выгружает лишние.
Просьба: напишите пожалуйста, кто умеет, cmd скрипт конвертирования txtsetup.sif (секции [SCSI.Load] и [HardwareIdsDatabase]) в reg-файл. Он хорошо откомментирован, я думаю будет понятно. Там довольно просто, да только я не умею на cmd делать циклы.
Кто разбирается в асме, нужна ваша помощь! покопавшись в ntldr, я написал в boot.ini 'multi(0)disk(0)cdrom(0)'. Результат - ntldr пытается 840 раз загрузить винду с (sic!) флопа. А если написать 'multi(0)disk(0)fdisk(0)', то он попытается запустить винду с флопа 48 раз. В обоих случаях, если на дискету положить системные файлы, то он их загрузит. Если бы на дискету влезла винда, он бы её обязательно запустил. Но это - только при запуске ntldr с харда. Если запустить его с CD (я для этого использовал grldr как не-эмулируемый загрузочный сектор CD) или флопа, то при 'multi(0)disk(0)cdrom(0)' и 'multi(0)disk(0)fdisk(0)' ntldr ругнётся 'Не удается запустить Windows из-за аппаратных ошибок настройки диска.'
Также мне таким способом мне удалось загрузить Алкид и (y)pe. Из нормальной винды кусты реестра чужих сборок не редактируются, и я делал своё чёрное дело из-под liveCD. Со сборкой от Юркеши были небольшие проблемы - он зачем-то загрузочные файлы и драйвера запаковал. Я заменил их распакованными, и всё заработало.
Результаты:
setupldr.bin ntldr
(y)pe 2:10 1:00
Alkid 3:20 1:35
Моя 0:55 0:20
Мне удалось загрузить мою сборку с CD через ntldr. Я записал CD, используя тузлу от мелкософта - hd2iso. Она, в отличие от Nero, умеет грузить не только fat16, но ещё и fat32 и ntfs. Также я использовал eltorito.sys из Embedded. Грузится дольше обычного. Необходимо юзать fbwf для fat16/32, а для ntfs имхо fbwf недостаточно - нужно юзать ewf. Если кому интересно -
здесь eltorito.sys, hd2iso.exe, inf-файл и reg-файл.
Кстати - вот
txtsetup.sif (mcpu, acronis) 26 кб. В нём есть возможность одноядерной и многоядерной загрузки в одном флаконе. Но это только пример - нужно под себя подгонять напильником.
Пока всё - надеюсь осилите