問題:

問題:

問題:

大約一週前,XP 安裝上的 NTVDM 故障。

症狀:

第一個症狀是,在自動執行批次檔期間執行的 16 位元可執行檔會掛起並將 CPU 固定在 100%,直到ntvdm.exe被終止,此時批次檔會繼續運作(儘管沒有可執行檔所執行的工作)應該已經完成了)。下一個症狀是作為關閉批次腳本的一部分運行的另一個 16 位元可執行檔將掛起,導致腳本失敗。

有趣的是,他們確實有時工作(~30%)。換句話說,如果一個程式運行(從跑步對話框)10 次,它可能會正確運行大約 2-4 次,其餘時間掛起。這主要是用更簡單的程式來列印一些東西,而不是更複雜的使用者介面,例如edit.comcommand.com看起來總是懸掛。一些非常簡單的選擇程式(例如crlf.com:578字節,ret.com:1位元組等)總是似乎運行和返回沒有問題。

測試:

一些測試表明問題出在 NTVDM 本身,而不僅僅是特定的可執行檔(無論如何,直到最近它都運作得很好)。例如,運行edit.com會開啟控制台並顯示編輯器,但對鍵盤沒有回應,必須終止。事實上,連跑步command.com都不管用;它會打開一個控制台並顯示提示,然後就坐在那裡,沒有回應。

我檢查了所有相關的 NTVDM 檔案(以及許多其他作業系統檔案),它們都是正確的。我還檢查了幾個相關的註冊表項,它們也全部檢查完畢。這些程式在其他 XP 安裝上運作良好(這並不奇怪,command.com而且edit.com也能正常運作);所以它是那台特定的機器。自從 NTVDM 停止工作以來,環境沒有改變,但我還是檢查了它,沒有什麼明顯的問題;temptmp指向沒有 LFN 名稱、沒有帶有 null 等的損壞變數的現有目錄,雖然很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位元程式也不能運行。

相關內容