问题:

问题:

问题:

大约一周前,XP 安装上的 NTVDM 出现故障。

症状:

第一个症状是,在自动运行批处理文件期间运行的 16 位可执行文件会挂起,并将 CPU 保持在 100%,直到ntvdm.exe被终止,此时批处理文件继续运行(尽管没有执行应执行的工作)。下一个症状是,作为关机批处理脚本的一部分运行的另一个 16 位可执行文件会挂起,导致脚本失败。

有趣的是,他们确实有时工作(~30%)。换句话说,如果一个程序运行(从跑步对话框)10 次,它可能会正确运行大约 2-4 次,其余时间挂起。这主要是针对打印出某些内容的简单程序,而不是具有类似或的 UI 的更复杂的程序,edit.com这些command.com程序似乎总是挂起。一些极其简单的选定程序(例如crlf.com:578 字节、ret.com:1 字节等)总是似乎运行和返回都没有问题。

测试:

一些测试表明,问题出在 NTVDM 本身,而不仅仅是特定的可执行文件(直到最近,这些文件都运行良好)。例如,运行edit.com会打开控制台并显示编辑器,但对键盘没有反应,必须将其终止。事实上,即使运行也command.com不起作用;它会打开控制台并显示提示符,然后就一直停在那里,没有反应。

我检查了所有相关的 NTVDM 文件(以及许多其他操作系统文件),它们都是正确的。我还检查了几个相关的注册表条目,它们也都检查无误。这些程序在其他 XP 安装上运行良好(这并不奇怪,因为command.com运行edit.com良好);所以是那台特定的机器。自从 NTVDM 停止工作以来,环境没有改变,但我还是检查了一下,没有什么明显的问题;temptmp指向没有 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 CPU 遇到非法指令。”另外,请不要建议使用 Dosbox 或其他 VM 软件,因为这不适用,而且有问题的程序以前可以运行,更不用说 Windows 自己的 16 位程序无法运行。)

相关内容