
Проблема:
Около недели назад NTVDM на установке XP сломался.
Симптомы:
Первым симптомом было то, что 16-битный исполняемый файл, запущенный во время автоматического запуска пакетного файла, зависал и нагружал ЦП на 100%, пока не ntvdm.exe
был убит, после чего пакетный файл продолжал работать (хотя и без работы, которую должен был выполнить исполняемый файл). Следующим симптомом было то, что другой 16-битный исполняемый файл, запущенный как часть пакетного скрипта выключения, зависал, что приводило к сбою скрипта.
Интересно, что они делаютиногдаработа (~30%). Другими словами, если программа запущена (изБегатьдиалог) 10 раз, он может работать правильно около 2-4 раз и зависать в остальное время. Это в основном только с более простыми программами, которые что-то печатают или типа того, в отличие от более сложных с пользовательским интерфейсом, например edit.com
или command.com
которые, кажется,всегдазависание. Несколько избранных программ, которые чрезвычайно просты (например, crlf.com
: 578 байт, ret.com
: 1 байт и т. д.)всегдапохоже, что все работает и возвращается без проблем.
Тесты:
Некоторые тесты показывают, что проблема в самом NTVDM, а не только в конкретных исполняемых файлах (которые работали нормально до недавнего времени). Например, запуск edit.com
открывает консоль и отображает редактор, но не реагирует на клавиатуру и должен быть завершен. Фактически, даже запуск command.com
не будет работать; он открывает консоль и показывает приглашение, а затем просто сидит там, не отвечая.
Я проверил все связанные файлы NTVDM (и множество других файлов ОС), и все они верны. Я также проверил несколько связанных записей реестра, и все они также верны. Программы отлично работают на других установках XP (что неудивительно, поскольку они также command.com
работают edit.com
); так что это та конкретная машина. Окружение не изменилось с тех пор, как NTVDM перестал работать, но я все равно проверил его, и ничего явно проблемного нет; temp
и tmp
указывают на существующие каталоги без имен LFN, без сломанных переменных с нулями или тому подобного, и хотя длинный path
, он был таким уже некоторое время.
Файлы проверены:ntd*, ntv*, dos*, redir.exe, Mscdexnt.exe, *.sys
Реестр полностью проверен: *\Software\Microsoft\Command processor, *ControlSet*\Control\WoW
,*\Software\Microsoft\Windows NT\CurrentVersion\WOW*
Приложения NTVDM и 16-битные приложения прекрасно работают в безопасном режиме на рассматриваемом компьютере; зависают они только в обычном режиме.
Вопрос:
Может ли кто-нибудь придумать что-то, что могло бы разрушить NTVDM таким образом, чтобы вызвать эти симптомы?
(Чтобы было ясно: это НЕ распространённая ошибка«Процессор NTVDM обнаружил недопустимую инструкцию».(Кроме того, пожалуйста, не предлагайте использовать Dosbox или другое программное обеспечение для виртуальных машин, поскольку оно здесь неприменимо, и, более того, рассматриваемые программы работали раньше, не говоря уже о том, что собственные 16-битные программы Windows работать не будут.)