Как выполнить свой программный код до запуска Windows, если нет возможности разместить его в BIOS.

для раздела Блоги




Как выполнить свой программный код до запуска Windows,
если нет возможности разместить его в BIOS
,

или

Волшебная антистарфорсовская дискета для SiliconImage SiI0680A.


Вступление


В жизни пользователя, особенно продвинутого, иногда возникает необходимость выполнить некоторый программный код до запуска операционной системы (обычно Windows).

Часто в таком случае предлагают интегрировать этот самый код в биос материнской платы непосредственно (если хватит умения) или в виде дополнительного ISA/PCI Expansion Rom модуля.

Благо, для биосов некоторых производителей существуют специальные утилиты, позволяющие манипулировать различными модулями внутри образа биос. Например, утилита CB-ROM для AWARD-овских биосов, либо программа AmiBCP для биосов от AMI.

Иногда, если изменить биос материнской платы нет возможности или слишком рискованно, можно модифицировать биос (если он есть) какого-нибудь PCI-контроллера (сетевухи, RAID-контроллера). Но опять же, далеко не для всех PCI-контроллеров этот вариант подходит, т.к.:

1) не для всех контроллеров можно найти утилиты-прошивальщики биоса; (например, для контроллеров на VIA6421 я такой утилиты не нашел )

2) как известно, биос содержится в микросхеме ПЗУ. Но экономные производители зачастую ставят на свои изделия вместо флэшек (многократно перезаписываемых ПЗУ) однократки (OTP), которые перезаписать невозможно.

Конечно, в первом случае можно флэшку отпаять и перезаписать на стороннем программаторе, а во втором -- перепаять и заменить однократку настоящей флэшкой (причем, можно даже большего объема ). Но простому смертному все эти способы не подходят для домашнего использования.

Особенно, если учесть, что есть другой, более простой способ, о котором и пойдет речь в этой статье.



Собственно, описываемый здесь способ основан на методе, изложенном участником форума CDRU.TK в этом сообщении. Настоятельно рекомендую ознакомиться.

Ознакомились ? Не знаю, как Вы, а я с первого раза не осилил. Только после второго или третьего прочтения уловил суть этого метода и осознал всю его достоинства и недостатки.

Достоинство:

не надо модифицировать биос, рискуя привести его в неработоспособное состояние.

Недостатки:

Основным, на мой взгляд, недостатком предложенного CDRU.TK метода является необходимость внесения серьезных изменений в существующую конфигурацию операционной системы Windows и дисковой подсистемы:

  • Тем, у кого нет FAT32 партиции, необходимо ее создать.

  • Тем, у кого она есть, необходимо редактировать boot.ini и временно заменять XP-шный загрузчик ДОС-овским, рискуя потерять доступ к винде.

    Далеко не каждый продвинутый пользователь решится на проведение подобных модификаций. Что уж говорить об обычных юзерах, которые привыкли жить на всем готовеньком.

    Что же делать, как же быть ?

    Как оказалось, чтобы избавиться от указанных недостатков, достаточно перенести загрузку с жесткого диска на загрузочную дискету ! (сидиром, флэшку)

    Теперь вообще не надо лезть и что-то там изменять в настройках операционной системы и дисковой подсистемы. Скачал образ дискеты, записал его и пользуйся на здоровье!

    Из недостатков этого метода можно отметить то, что загрузка в случае использования дискеты будет происходить хоть и ненамного, но дольше. В принципе, никто не мешает перенести этот метод на загрузочный CD или флэшку, тогда загрузка ускорится. Но я пока еще не опробовал этот вариант.

    Суть метода


    Дискета, позволяющая выполнять программы до запуска Windows -- это не что иное, как модифицированная системная дискета с двумя вариантами загрузки.

    Да-да! Оказывается, многовариантная загрузка (выбор из нескольких операционных систем) доступна при использовании загрузочной дискеты!

    Порядок действий.

    I. Во время загрузки в меню выбора операционных систем пользователь выбирает первый вариант. В этом случае фактически происходит:

    1. Запуск доисторической операционной системы MS-DOS (версия непринципиальна).

    2. Запуск досовской программы (условно назовем ее myprogram.exe), реализующей желаемые функции. Т.е. будет выполнен программный код, который не удалось запихнуть в биос материнской платы.

      Обычно этот программный код производит некоторые манипуляции с "железом" ПК. В частности, таким образом можно настраивать некоторые регистры нужных PCI устройств, что в дальнейшем нам очень пригодится.

    3. Запуск программы INT19.com, которая особым образом производит перезагрузку компьютера.


    II. После перезагрузки опять попадаем в то же самое меню выбора операционных систем. Теперь нужно выбрать второй вариант -- загрузку операционной системы Windows NT/XP. В принципе, вручную можно ничего не выбирать, т.к. соответствующий пункт меню по истечении определенного интервала времени будет выбран автоматически и процесс загрузки операционной системы продолжится.

    Причем, винда даже не догадается, что перед ее запуском выполнялся какой-то посторонний код!

    Пример готовой к использованию дискеты


    Готовую дискету я выложил здесь: SiI0680A_antiSF_floppy.rar (320.5 Кбайт).

    Это простейший узкоспециализированный вариант.

    Порядок действий при записи дискеты:

    1. Скачиваете архив (320.5 Кбайт).
    2. Распаковываете его.
    3. Устанавливаете пустую дискету в дисковод A:. Не забудьте убрать с дискеты защиту от записи.
    4. Запускаете INSTALL.BAT и жмете <ENTER>.


    Вот и все.
    ...Точнее, почти все.

    Дело в том, что если Ваша операционная система WindowsXP установлена

    * не на первый логический диск Вашего жесткого диска
    * не в папку Windows (которую установщик винды предлагает по-умолчанию)

    то Вам потребуется внести небольшие изменения в файл boot.ini, расположенный на дискете.

    Необходимо исправить в нем строки:

    default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS

    multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Boot Windows NT/XP"

    * вместо Windows указать имя Вашей папки с виндой;
    * вместо partition(1) указать номер раздела, на который установлена винда;

    В очень и очень редких случаях придется поиграться с другими параметрами строки. Но я не буду объяснять, как это делать, т.к. если параметры вашей системы нестандартны, то это значит вы сами их такими установили захотели и сможете сами справиться с задачей указания адреса загрузочной партиции. ;)

    В простейшем варианте готовая дискета содержит следующие файлы.

    ntldr
    
    ntdetect.com
    boot.ini
    bootsect.dos

    io.sys
    msdos.sys
    command.com
    autoexec.bat

    ChngReg.exe
    SiImage.cfg

    keypress.com
    int19.exe


    Дискета предназначена для смены идентификационных регистров (DeviceID) контроллера SiliconImage SiI0680A. Если Вы читали мою предыдущую статейку SiliconImage vs. StarForce, то наверняка уже догадались, зачем нужны все эти манипуляции.

    Пользовательский код (который я хотел бы запихнуть в биос материнки или самого контроллера SiI0680A, но не смог) содержится в программе ChngReg.exe.
    Т.е. эта программа выполняет роль myprogram.exe о которой я заикнулся выше.

    ChngReg.exe меняет идентификационные регистры DeviceID и SubSystemID контроллера SiI0680A. Таким образом отпадает необходимость изменять эти регистры вручную в WPCREDIT или при помощи WPCRSET.

    Если раньше у стрфорса еще был шанс влезть впереди WPCRSET и других драйверов, чтобы воспрепятствовать или засечь факт смены идентификационных регистров, то в случае использования специальной дискеты старфорс остается не у дел.

    После смены регистров для контроллера SiI0680 потребуются новые драйвера. Они присутствуют на той же дискете в папке DRIVERS.687.

    Как самому создать такую дискету ?


    По образу и подобию рассмотренной выше загрузочной дискеты любой сможет создать свой собственный вариант.

    Алгоритм создания дискеты с многовариантной загрузкой:

    1. Берем дискету. Форматируем ее в Windows XP/NT.

    2. Сохраняем нулевой сектор (512 байт) в файл BootSect.WXP.
      Эту операцию я обычно произвожу в Norton DiskEditor'е.

    3. Загружаемся в ДОС и форматируем дискету в нем.
      При помощи досовской команды sys.com (или format.exe /S) переносим на дискету системные досовские файлы io.sys, msdos.sys, command.com.

    4. Снова сохраняем нулевой сектор (512 байт), на этот раз в файл BootSect.DOS.

    5. Записываем обратно на дискету нулевой сектор из файла BootSect.WXP

    6. Копируем на дискету в любом файловом менеджере (хоть в проводнике)

      * системные файлы: NTLDR, NTDETECT.COM, BOOT.INI ;

      * BOOTSECT.DOS , созданный ранее;

      * вспомогательные файлы: keypress.com, int19.exe ;

      * файлы, ответственные за выполнение желаемых дествий (в моем случае это были: ChngReg.exe, SiImage.cfg);

    7. При необходимости корректируем BOOT.INI и AUTOEXEC.BAT.

    8. При необходимости можно организовать многоуровневые меню при помощи файла CONFIG.SYS.




    Надеюсь, приведенная в этой статье информация поможет Вам не только в борьбе с ненавистным многим старморсом, но и в достижении более мирных целей.

    Еще раз выражаю участнику форума CDRU.TK искреннюю благодарность за воскрешенную со времен TweakBios идею использования int19.com.



    Обсудить эту и другие статьи/записи с моей персональной страницы можно в соответствующей ветке конференции.

    Telegram-канал @overclockers_news - это удобный способ следить за новыми материалами на сайте. С картинками, расширенными описаниями и без рекламы.
  • Оценитe материал

    Возможно вас заинтересует

    Популярные новости

    Сейчас обсуждают