Reparieren eines defekten NTVDM

2598
Synetech

Problem:

Vor einer Woche brach der NTVDM auf einer XP-Installation.

Symptome:

Das erste Symptom bestand darin, dass eine ausführbare 16-Bit-Datei, die während einer Auto-Run-Batchdatei ausgeführt wird, die CPU auf 100% hängt, bis sie abgebrochen ntvdm.exewird. Dann wird die Batchdatei weiter ausgeführt (allerdings ohne die Arbeit, die die ausführbare Datei war.) soll getan haben). Das nächste Symptom war, dass eine andere ausführbare 16-Bit-Datei, die als Teil eines Shutdown-Stapelskripts ausgeführt wird, hängen bleibt und das Skript fehlschlägt.

Interessanterweise arbeiten sie manchmal (~ 30%). Das heißt, wenn ein Programm zehnmal ausgeführt wird (über das Dialogfeld Ausführen ), wird es möglicherweise zwei bis vier Mal korrekt ausgeführt und hängt den Rest der Zeit. Dies ist meistens nur bei einfacheren Programmen, die etwas ausdrucken oder wie kompliziertere mit UIs mögen edit.comoder command.comdie immer hängen. Einige wenige Auswahlprogramme, die äußerst einfach sind (z. B. crlf.com578 Byte, ret.com1 Byte usw.), scheinen immer ohne Probleme auszuführen und zurückzukehren.

Tests:

Einige Tests zeigen, dass das Problem beim NTVDM selbst liegt und nicht nur bei den ausführbaren Dateien (die bis vor kurzem gut funktionierten). Beim Ausführen edit.comwird beispielsweise eine Konsole geöffnet und der Editor angezeigt, reagiert jedoch nicht auf die Tastatur und muss abgebrochen werden. In der Tat command.comfunktioniert auch das Laufen nicht. Es öffnet sich eine Konsole und zeigt die Eingabeaufforderung, die dann gerade dort sitzt und nicht reagiert.

Ich habe alle verwandten NTVDM-Dateien (und zahlreiche andere Betriebssystemdateien) überprüft und sie sind alle korrekt. Ich habe auch einige verwandte Registry-Einträge überprüft und sie alle auch ausgecheckt. Die Programme laufen gut auf anderen XP-Installationen (was keine Überraschung ist command.comund auch edit.comfunktionieren). So ist es diese bestimmte Maschine. Die Umgebung hat sich nicht geändert, seit das NTVDM aufgehört hat zu arbeiten, aber ich habe es trotzdem überprüft und es gibt nichts auffälliges Problem. tempund tmpverweisen auf vorhandene Verzeichnisse ohne LFN-Namen, keine defekten Variablen mit Nullen oder ähnlichem, und obwohl das pathlang ist, ist dies seit einiger Zeit der Fall .

Dateien überprüft: ntd*, ntv*, dos*, redir.exe, Mscdexnt.exe, *.sys

Registry entires verifiziert: *\Software\Microsoft\Command processor, *ControlSet*\Control\WoW,*\Software\Microsoft\Windows NT\CurrentVersion\WOW*


Die NTVDM- und 16-Bit-Apps funktionieren auf der betreffenden Maschine im abgesicherten Modus einwandfrei. Sie hängen nur im Normalmodus.

Frage:

Kann irgendjemand an etwas denken, das das NTVDM auf eine Weise bricht, die diese Symptome verursacht?


(Um es klar zu sagen: Es handelt sich NICHT um den allgemeinen Fehler „Die NTVDM-CPU hat eine ungültige Anweisung festgestellt .“ . Bitte schlagen Sie auch nicht vor, Dosbox oder andere VM-Software zu verwenden, da dies nicht anwendbar ist, und außerdem haben die betreffenden Programme zuvor funktioniert Ganz zu schweigen davon, dass Windows-eigene 16-Bit-Programme nicht funktionieren.)

4
Was ist, wenn Sie proc.com auf dem guten und schlechten System command.com ausführen und vergleichen? ckhan vor 12 Jahren 2
Eigentlich hatte ich das schon mit dem schlechten System versucht, um zu sehen, ob es Datei- oder Registrierungsverweise auf nicht vorhandene oder beschädigte Elemente gab. Ich fand auf diese Weise nichts von besonderem Nutzen. Ein Vergleich hört sich aber gut an. ↑ Synetech vor 12 Jahren 0
Könnten Sie alle Treiber außer dem im abgesicherten Modus geladenen Minimalsatz deaktivieren und sie dann alle einzeln wieder aktivieren? (Ein schnellerer Weg wäre die binäre Suche: Aktivieren Sie die Hälfte, testen Sie, wenn dies funktioniert, aktivieren Sie die Hälfte des Restes. Wenn nicht, deaktivieren Sie die Hälfte der gerade aktivierten.) Bob vor 10 Jahren 0
Die Liste des abgesicherten Modus befindet sich unter `HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ SafeBoot \ Minimal`. Sie können [Treiber deaktivieren] (http://mikemstech.blogspot.com.au/2011/11/how-to-disable) -and-enable-windows.html), indem Sie zu "HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services" gehen und die Werte für "Start" in "0" ändern. Dies wird wahrscheinlich ein langwieriger Prozess sein, und Sie sollten ein Skript in Betracht ziehen, wenn Sie dazu in der Lage sind. Bob vor 10 Jahren 0
@ Bob, naja, ich glaube nicht, dass sich Treiber oder Dienste zwischen der Zeit, in der sie funktionierten, und dem Zeitpunkt, als sie aufhörte, geändert haben, aber da * sie * im abgesicherten Modus arbeitet, lohnt es sich auf jeden Fall, einige Tests durchzuführen (tatsächlich alle alte Standardeinträge können wahrscheinlich übersprungen werden). Ich werde es dieses Wochenende versuchen, wenn ich auf dem XP-System bin. Synetech vor 10 Jahren 0

0 Antworten auf die Frage