Проблема:
Около недели назад сломался 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 не будут работать.)