
問題:
大約一週前,XP 安裝上的 NTVDM 故障。
症狀:
第一個症狀是,在自動執行批次檔期間執行的 16 位元可執行檔會掛起並將 CPU 固定在 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 名稱、沒有帶有 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位元程式也不能運行。