Исправление сломанного НТВДМ

2475
Synetech

Проблема:

Около недели назад сломался NTVDM на установке XP.

Симптомы:

Первым признаком было то, что 16-разрядный исполняемый файл, запускаемый во время пакетного файла с автоматическим запуском, зависал и привязывал процессор на 100% до тех пор, пока ntvdm.exeне был уничтожен, после чего пакетный файл продолжал работать (хотя и без работы, которую выполнял исполняемый файл). должен был сделать). Следующим признаком было то, что другой 16-разрядный исполняемый файл, запускаемый как часть пакетного сценария завершения работы, зависал, вызывая сбой сценария.

Интересно, что они иногда работают (~ 30%). Другими словами, если программа запускается (из диалога « Выполнить ») 10 раз, она может работать правильно примерно 2–4 раза и зависать в остальное время. Это в основном просто с более простыми программами, которые распечатывают что-то или что-то подобное, в отличие от более сложных программ с пользовательскими интерфейсами, такими как edit.comили command.comкоторые, кажется, всегда зависают. Некоторые избранные программы, которые являются чрезвычайно простыми (например crlf.com: 578 байт, ret.com1 байт и т. Д.), Всегда запускаются и возвращаются без проблем.

тесты:

Некоторые тесты показывают, что проблема связана с самим 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 или другое программное обеспечение VM, потому что это не применимо, и, кроме того, рассматриваемые программы работали до этого). не говоря уже о том, что собственные 16-битные программы Windows не будут работать.)

4
Что если вы вызовете запуск command.com на хорошей системе и на плохой системе и сравните? ckhan 11 лет назад 2
На самом деле, я уже пробовал это с самой плохой системой, чтобы посмотреть, есть ли какие-либо ссылки на файлы или реестр на несуществующие или поврежденные элементы. Я не нашел ничего особенного в этом. Сравнение звучит хорошо, хотя. ↑ Synetech 11 лет назад 0
Не могли бы вы отключить все драйверы, кроме минимального набора, загруженного в безопасном режиме, а затем включить их всех по одному? (Более быстрый способ - бинарный поиск - включите половину, проверьте, работает ли он, включите половину остатка, если нет - отключите половину из тех, которые вы только что включили.) Bob 10 лет назад 0
Список безопасного режима находится по адресу `HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ SafeBoot \ Minimal`, и вы можете [отключить драйверы] (http://mikemstech.blogspot.com.au/2011/11/how-to-disable -and-enable-windows.html), перейдя в `HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services` и изменив значения` Start` на `0`. Вероятно, это будет довольно утомительный процесс, и вы можете рассмотреть возможность его написания, если сможете. Bob 10 лет назад 0
@ Боб, ну, я не думаю, что какие-либо драйверы или службы изменились между временем, когда он работал, и когда он остановился, но, поскольку он * работает * в безопасном режиме, безусловно, стоит провести некоторые тесты (фактически, любые старые, стандартные записи, вероятно, можно пропустить). Я сделаю снимок в эти выходные, когда буду в системе XP. Synetech 10 лет назад 0

0 ответов на вопрос

Похожие вопросы