Капризы NT VDM

Признайтесь, давно у вас стоит Windows 2000/XP/2003? А как часто возникает необходимость запускать старые 16-битные программы? Игрушку там древнюю под DOS прогнать лишний раз али какую программу года 1998-го?

Большинство пользователей хоть раз да сталкивались с упрямым нежеланием полностью 32-битных ОС исполнять 16-битный код. Как правило, это выскакивающий MessageBox с сообщением: "CONFIG.NT не предназначен для исполнения команд DOS. Закрыть/Пропустить?"

Если у вас такая беда приключилась, вашему горю можно помочь. Разберемся с тем, как ваша Windows исполняет 16-битный код.

Роль командного процессора вместо привычного нам COMMAND.COM теперь исполняет 32-битный %SYSTEMROOT%\NTVDM.EXE. Сам же товарищ command.com находится в %systemroot% только ради эмуляции. Настройки программной среды теперь берутся из файлов config.nt и autoexec.nt, которые расположены в этом же каталоге. Обратите внимание, что их копия находится в каталоге RESTORE, дабы при первом рестарте Windows с включенной System File Protection опцией восстановила все на круги своя.

Смешное сообщение выбрасывает ваша Windows, не правда ли? Файл для эмуляции не предназначен для эмуляции...;) Руки поотрывать таким переводчикам. Будем копать сами.

Первым делом - самое очевидное решение проблемы. Командный процессор NTVDM.EXE подменяется НЕРАБОТОСПОСОБНЫМ файлом... самой "Майкрософт"! Как оказалось, в октябрьском обновлении безопасности Windows из Knowledge Base 840987 был выпущен в обращение неработоспособный процессор. Вот теперь и ругай дядю Билли... Если вы проводите ручное или автоматическое обновление Windows, деинсталлируйте обновление через "Установку/Удаление программ", отключите автообновление системы и переходите к следующему шагу.

Сейчас мы будем брутально копаться в системе. Поэтому необходимо отключить System File Protection. Посмотреть, как это делается, можно в любом руководстве по тонкой настройке Windows 2000.

Далее лезем "Блокнотом" в файлы config.nt и autoexec.nt. Их содержимое не должно включать ничего, кроме

****** autoexec.nt *****
@echo off
path %path%;%SystemRoot%\system32
lh mscdexnt
lh redir
lh dosx

***** config.nt *****
dos=high, umb
device=%SystemRoot%\system32\ himem.sys
files=40

Если у вас есть что-то лишнее, удалите его. Если параметры эмуляции в DOS вашей звуковой карты отличаются от стандартных (приведенных), переправьте. Возможно, ваша программа будет требовать бОльшего числа открытых файлов - увеличьте величину FILES.

Если после перезагрузки 16-битная программа по-прежнему не желает загружаться - ну что ж, вам не повезло. Дело пахнет кер... Ой, переустановкой операционной системы.

Проблема заключается в том, что для корректной поддержки 16-битного кода при своей инсталляции Windows должна увидеть в дистрибутиве стандартные файлы config.nt_ и autoexec.nt_. А их там может тривиально не оказаться. Известно, что эти файлы 100% отрезаются, если дистрибутив Windows пересобирался из оригинального при помощи программы nLite. Эта программа, кстати, сама об этом предупреждает в Readme. Так что, если у вас не оригинальный дистрибутив, а переписанный неизвестно где - ждите подвоха.

Точно так же можно ждать подвоха со стороны аппаратного обеспечения. Предположим, вы ради ускорения загрузки решили переписать дистрибутив на винчестер. Если для загрузки перед инсталляцией Windows2000 с компакт-диска вы пользовались не оригинальным загрузочным диском, а любым другим (самодельной дискетой от Windows98 или, еще хуже, мультизагрузочным "реаниматорским"), есть небольшой шанс, что драйвер CDROM на вашем загрузчике не слишком хорошо совместим с приводом. Поскольку в каталоге \I386 очень, ну ОЧЕНЬ много файлов, то сразу получить к некоторым доступ затруднительно (таймаут устройства). Самолично наблюдал, как на трех совершенно различных материнских платах повторялась одна и та же ситуация: драйвер CDROM от Samsung (sscdrom.sys), привод от TEAC (CD-540E) - и... hasta la vista, baby! Чтобы увидеть искомые файлы config.nt и autoexec.nt, приходится по 4-5 раз жать на кнопку "Обновить".

Дополнительно свою лепту может внести (если он загружается) Smartdrive. В результате ошибки кэширования некоторые файлы не переписываются с компакт-диска, и Windows Setup их не видит. Оригинальный же, майкрософтовский драйвер CDROM с релизного диска корректно кэширует любое количество файлов. В силу отсутствия необходимости файлы можно при инсталляции пропустить, но тогда придется попрощаться с поддержкой 16-битных приложений.

Итак, резюме: на данный момент времени полная поддержка 16-битного кода в Microsoft Windows 2000/XP/2003 возможна при:

  1. отсутствии обновления KB840987;
  2. корректно сконфигурированных файлах config.nt и autoexec.nt;
  3. наличии в момент инсталляции системы в дистрибутиве config.nt_ и autoexec.nt_.

Всегда ваш,

Mexicanetz Express,
[email protected]

Версия для печатиВерсия для печати

Номер: 

03 за 2005 год

Рубрика: 

Software
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!

Комментарии

Аватар пользователя Борис
Привет писатель сам ты наверно не сильно разбираешься в программах. операционных системах. Их написание и установка - это не просто процесс нажимания клавишь и использование нелицензионного софта - это самое настоящие исскуство. А вот твоя проблема с 16-битными приложениями решена на все сто процентов во втором сервис паке от компании майкрософт правда при правильной установке - так что не говори то чего не знаешь и не путай людей читающих твои статьи
Аватар пользователя Космополит
Дейсьвителдьно, такую чушь написал...
Аватар пользователя читатель
У меня такой глюк - не работают 16битные - я прочитал статью, удалил заплатку, про которую речь идет, так у меня винда потеряла все драйвера, хотя сама сразу их и нашла, но драйвер от принтера глючит - каждый раз при загрузке пишет, что найден принтер, хотя он уже давно установлен, и если его установить опять тут же повторяется все заново. Надо было просто эти файлики (ntvdm.*) списать из дистрибутива винды... Зато 16бит работает
Аватар пользователя Mexicanetz Express
Уважаемый Борис, о каком втором сервиспаке идёт речь? для WinXP? Так речь же о Win2K. И том обновлении, которое ставится поверх 4-го сервиспака! внимательнее надо быть, а потом обвинять в том, что я чушь несу