Vague ntvdm-Nachricht unter XP: Das Win 16-Subsystem verfügt über unzureichende Ressourcen, um weiter ausgeführt zu werden. [...]

1673
SamB

Was bedeutet die ntvdm-Fehlermeldung "Das Win 16-Subsystem verfügt über unzureichende Ressourcen, um weiter ausgeführt zu werden. Klicken Sie auf OK, schließen Sie Ihre Anwendungen und starten Sie Ihren Computer neu." und wie kann man das verhindern?

(Interessanterweise ist das Dialogfeld, in dem die Nachricht angezeigt wird, vermutlich ohne Zusammenhang mit dem Problem, tatsächlich im Besitz des Sitzungsprozesses csrss.exe.)

1
In welchem ​​Zusammenhang erhalten Sie diese Nachricht? Bitte erläutern. vor 13 Jahren 0
Was kann ich ausmachen: Win16-Subsystem = die DOS-Emulationsschicht in WinXP Die Meldung bedeutet, dass die Ressourcen (wahrscheinlich der Speicher) oder die Komponente, die davon abhängt, dass der Speicher ausgeht. Wie kann man dies verhindern? Details zu den verwendeten Anwendungen usw Marcus vor 13 Jahren 0
@ Randolph: Ausführen einer 16-Bit-Windows-App (was meiner Meinung nach aus dem "Win 16 Subsystem" -Bit klar war). Dies geschah insbesondere mit einer von Windows 98 kopierten `freecell.exe` (zusammen mit der benötigten 16-Bit-Version von cards.dll), aber vermutlich hätte die meisten 16-Bit-Windows-Apps ausgereicht. SamB vor 13 Jahren 0
Es reichen nicht Informationen aus, um den Fehler auf meiner Seite zu replizieren. Laufen Sie Windows Vista? Windows 7? Server 2003 R2? WEIN? Mein Punkt ist, ist das Problem dasselbe für jede 16-Bit-App, die Sie ausführen? Was passiert mit dem Kompatibilitätsmodus? Ich kann mich nicht klarer machen. vor 13 Jahren 0

2 Antworten auf die Frage

2
SamB

Gemäß http://www.vttoth.com/wow32.htm tritt diese Fehlermeldung auf, wenn GDI einen Handle höher als 16383 für einen Aufruf zurückgibt, der im Auftrag eines 16-Bit-Windows-Programms ausgeführt wird. Die Griffe könnten bis zu 65535 reichen, aber offensichtlich bekommen sieRecht-Um zwei Bits nach links verschoben, bevor sie aus irgendeinem Grund an die 16-Bit-App zurückgegeben wird (vermutlich Kompatibilität mit etwas).

Vor Windows XP konnte dies nicht passieren, da in einer Sitzung nur 16384 GDI-Objekte vorhanden sein durften. Bei XP wurde der Grenzwert jedoch auf 65536 GDI-Objekte erhöht. Da GDI offensichtlich nur dann eine neue Handle-Nummer zuordnet, wenn alle niedrigeren Handle-Nummern verwendet werden, kann dies nur dann der Fall sein, wenn mehr als 16384 GDI-Objekte zur gleichen Zeit in der Sitzung vorhanden sind.

Ein Neustart würde in der Regel Abhilfe schaffen, wenn angenommen wird, dass automatisch gestartete Programme die ersten 16384-Handles nicht direkt fressen.

Wenn "schnelle Benutzerumschaltung" aktiviert ist, können Sie sich abmelden, ein anderes Konto (z. B. "guest") anmelden und sich erneut anmelden. (Das Wichtigste dabei ist, dass Sie mit einer neuen "Sitzung" enden. Wenn Sie zu Beginn nicht in "Sitzung 0" liefen, ist der Schritt "Ein anderes Konto protokollieren" irrelevant.)

Die verlinkte Seite enthält auch einen Patch, um die Verschiebungen zu entfernen wow32.dll. Seien Sie jedoch gewarnt: Wie auf der Seite angegeben, ist das Anwenden dieses Patches möglicherweise illegal. Darüber hinaus könnte dies gefährlich sein und würde sicherlich die App (s), für die die Schicht ursprünglich hinzugefügt wurde, sicherlich brechen.

Wenn Sie sich abmelden und erneut anmelden, wird dies behoben, da die Sitzung dadurch beendet wird. Neustart nicht erforderlich. Übrigens, unter Vista und später laufen die interaktiven Benutzer NIEMALS in Sitzung 0. Eine schnelle Benutzerumschaltung würde ebenfalls funktionieren und es ist nicht erforderlich, sich von der ersten Sitzung abzumelden. Die zweite Anmeldung erhält eine neue Sitzung. Jamie Hanrahan vor 8 Jahren 0
-1
Mark Manning

Seit sich Computer von 16-Bit-Computern zu 32-Bit-Computern entwickelt haben, wird diese Fehlermeldung angezeigt. Wie von SamB festgestellt, gibt es einige Möglichkeiten, wie Sie das Programm zum Laufen bringen können, aber letztendlich - Sie werden diese Nachricht immer und immer wieder sehen. Das eigentliche Problem ist, wie SamB berichtet, dass jetzt so viele andere Programme im Hintergrund laufen, dass die Beschränkung auf 16 KB überschritten wird, wenn Sie Ihren Computer hochfahren. Unter einem 32-Bit-Betriebssystem tritt dieses Problem nicht auf, weil Sie über so viele Handles verfügen, mit denen gearbeitet werden kann. ABER! Ihre 16-Bit-Anwendung kann damit nicht umgehen. Es wurde geschrieben, um unter einem 16-Bit-Betriebssystem zu laufen. Das bedeutet, dass es unter Windows Version 3.1 oder Windows Version 95 ausgeführt werden sollte. Windows v98 (se) oder Windows vME sind beide 32-Bit-Betriebssysteme, sodass Sie auch dort auf dieses Problem stoßen könnten.

Meine Lösung ist, entweder Virtual PC von Microsoft herunterzuladen (kostenlos) oder Virtual Box von Oracle herunterzuladen (es ist ebenfalls kostenlos), eine Kopie von Windows v3.1 oder Windows v95 zu installieren und das Programm unter dem Betriebssystem auszuführen, für das es gedacht war unterlaufen.

Wenn Sie Ihre Windows v3.1- oder Windows v95-Disketten (oder CD im Fall von Windows v95) nicht behalten, müssen Sie sie leider finden und kaufen. Oder Sie können bei Microsoft eine Kopie beantragen, aber ich glaube nicht, dass sie diese aufbewahrt haben oder freigeben werden. (Im Gegensatz zu Apple Computer Inc., das DOS 3.3, ProDos, ProDos für // Gs und Mac OS bis Version 9.x kostenlos zur Verfügung gestellt hat)

Das ist also mein Vorschlag / Antwort. Für Windows v3.1 und Windows v95 lehne ich mich eher in Richtung Virtual PC, da es unter Windows XP sehr gut läuft und auch auf DOS, DR DOS und sogar IBM PC DOS oder BDOS zurückgeht.

Update: 27.01.2016

Um SamBs Frage nach der Inkompatibilität besser zu beantworten (was ich nicht gesagt habe). Schauen wir uns ein 8-Bit-Betriebssystem an. Das 8-Bit-Betriebssystem erwartete, dass alle verschiedenen Stapel (Aufrufstack, Handles, was auch immer) eine bestimmte Größe haben und diese Größe nicht überschreiten würden. Wenn Sie es überschritten haben, erhalten Sie einen blauen Bildschirm des Todes oder vielleicht würde Ihr System einfach neu starten. Als 16-Bit-Betriebssysteme kamen, verhielten sich die 8-Bit-Programme immer noch so, als würden sie auf einem 8-Bit-Betriebssystem laufen. Dies bedeutet, dass Sie bei einem Überschreiten der 8-Bit-Zuweisungsgröße wahrscheinlich immer noch einen blauen Bildschirm des Todes erhalten oder Ihr System immer noch neu startet. VIELE Firmen haben sich nie darum gekümmert, ob sie Computer zum Absturz gebracht haben oder nicht, solange sich die Kunden nicht darüber beschwert haben. (Allgemein als Quietschrad-Syndrom bezeichnet). ) Microsoft hat versucht, diese Probleme zu beheben, indem er so viele Programme wie möglich für jedes Betriebssystem testete, aber die Sache ist - einige Programme würden unter einem neueren Betriebssystem einfach nicht funktionieren. Mein Verdacht (und NICHT FAKT) ist, dass einige dieser frühen Stapel gegen einen anderen Stapel gestoßen wurden. Wenn Sie also einen Stapel überlaufen, kann dies einen anderen Stapel beeinträchtigen. Denken Sie daran, dass das Gedächtnis nicht so billig war wie heute, also haben Sie versucht, so viel Speicher wie möglich in den Speicher zu stopfen. Ich selbst habe es oft geschafft, meinen Apple] [+ sowie meinen IBM PC XT einfach zum Absturz zu bringen, einfach weil ich den Stack überlaufen ließ. Eines der anderen Probleme ist (wie gesagt), dass es viele schlechte Programmierer gab, denen es egal war, ob sie ihre Programme bereinigen wollten. Sie würden also Speicher zuweisen, Speicher, Handles und andere Dinge stapeln und nicht freigeben. Der einzige Hinweis, dass dies passiert ist, ist, dass Ihr Computer langsamer und langsamer läuft, bis Sie ihn neu starten. Durch einen Neustart wird alles aus dem Speicher gelöscht, das gesamte Betriebssystem wird zurückgegeben, und das Betriebssystem läuft dann wieder schneller. Wie gesagt - es ist ähnlich wie TSR oder Terminate and Stay Resident-Programme. In heutigen Betriebssystemen werden Prozesse häufig von anderen Prozessen isoliert, und das Betriebssystem selbst sorgt dafür, dass Speicherplatz wieder in den Pool freigegeben wird (und der Stack wird geleert oder sogar jedem Prozess ein neuer Stack zugewiesen, damit jeder Prozess seinen eigenen Prozess nutzen kann Stack, aber nicht der Stack des Betriebssystems). Das Problem jedoch - ältere Programme aus dem 16-Bit-OS-Zeitalter waren statisch ausgerichtet. So wurden die Bibliotheken ua in das Programm aufgenommen. Dies bedeutet, dass möglicherweise versucht wird, die Informationen des aktuellen Betriebssystems außer Kraft zu setzen. Ein 16-Bit-Programm könnte also sagen: "Schreibe an Ort XYZ", aber "XYZ" ist Teil des neueren Betriebssystems. Sie haben also überschrieben, wer weiß was, und Ihr System kann deshalb hängen bleiben oder abstürzen. Wenn Sie auch über Administratorrechte verfügen, können Sie wirklich Dinge vermasseln. Daher mein Vorschlag, Virtual PC zu verwenden, das frühere Betriebssystem erneut zu installieren - und das Programm unter dem Betriebssystem auszuführen, unter dem es ausgeführt werden sollte. Erstens haben Sie eine bessere Chance, das Programm dort ausführen zu können, und zweitens: Wenn es abstürzt, verlieren Sie nur das virtuelle System und nicht Ihr gesamtes Computersystem. Sie haben überschrieben, wer weiß was, und Ihr System kann deshalb hängen bleiben oder abstürzen. Wenn Sie auch über Administratorrechte verfügen, können Sie wirklich Dinge vermasseln. Daher mein Vorschlag, Virtual PC zu verwenden, das frühere Betriebssystem erneut zu installieren - und das Programm unter dem Betriebssystem auszuführen, unter dem es ausgeführt werden sollte. Erstens haben Sie eine bessere Chance, das Programm dort ausführen zu können, und zweitens: Wenn es abstürzt, verlieren Sie nur das virtuelle System und nicht Ihr gesamtes Computersystem. Sie haben überschrieben, wer weiß was, und Ihr System kann deshalb hängen bleiben oder abstürzen. Wenn Sie auch über Administratorrechte verfügen, können Sie wirklich Dinge vermasseln. Daher mein Vorschlag, Virtual PC zu verwenden, das frühere Betriebssystem erneut zu installieren - und das Programm unter dem Betriebssystem auszuführen, unter dem es ausgeführt werden sollte. Erstens haben Sie eine bessere Chance, das Programm dort ausführen zu können, und zweitens: Wenn es abstürzt, verlieren Sie nur das virtuelle System und nicht Ihr gesamtes Computersystem.

Aber es ist nicht so "inkompatibel" wie es "archaisch" ist. Um es wirklich zu vereinfachen, können Sie es sich so vorstellen: 8Bits = 8K-Stacks, 16Bit = 16K-Stacks, 32Bit = 32K-Stacks und so weiter. Es ist nicht genau, aber es wird deutlich, dass die verschiedenen Betriebssysteme unterschiedliche Größen für alles verwendeten. Deshalb haben Sie Probleme, wenn Sie etwas von einem Betriebssystem zum anderen bringen.

Ist das sinnvoll?

Haben Sie irgendwelche Quellen für die Idee, dass frühere Windows-Versionen möglicherweise Win16-inkompatible Handles zuweisen? SamB vor 8 Jahren 0
Ich sagte nicht "inkompatibel". Ich sagte, "32-Bit-Betriebssysteme verbrauchen die ersten 16 KB für Handles." Dieses spezielle Problem wurde für mich unter Windows 98se angezeigt. Früher gab es eine Beschreibung dazu und eines der dort genannten Dinge ist - wenn sie einmal zugewiesen sind, werden die Handles für 16-Bit-Programme nicht richtig freigegeben. Fast wie ein TSR-Programm. So lief zum Beispiel das alte Microsoft 16bit-Spiel Tetris. Ich habe es laufen lassen, ein paar Sachen gemacht, nochmal ausgeführt, ein paar Sachen gemacht und dann lief es nicht. Mein System wurde auch langsamer und langsamer. Ich verwende XP. Beim Neustart wurden die Dinge wieder gelöscht. Mark Manning vor 8 Jahren 0
Dies ist die gleiche Art von Problemen, die 8-Bit-Betriebssysteme hatten, sobald alle zu 16-Bit-Betriebssystemen gegangen waren. Die 8-Bit-Betriebssysteme erwarteten einen gewissen Weg, aber 16-Bit-Betriebssysteme erwarteten, dass alles auf eine andere Art und Weise erledigt würde. Wenn Sie also 8-Bit-Programme laufen lassen, die auf 8-Bit-Betriebssystemen laufen sollten, könnte dies zu Problemen bei der Einrichtung eines 16-Bit-Betriebssystems führen. Dasselbe gilt für 16 und 32 sowie 32 und 64. Aus diesem Grund funktionieren einige 32-Bit-Programme auf 64-Bit-Betriebssystemen nicht. Mark Manning vor 8 Jahren 0
Ich muss meinen letzten Satz korrigieren. Es ist einer der Gründe, warum einige 32-Bit-Programme auf 64-Bit-Betriebssystemen nicht funktionieren. Es gibt auch andere Gründe wie inkompatible Bibliotheken, unterschiedliche / aktualisierte Methoden zum Aufruf von Routinen, neue Bibliotheken, die unter dem früheren Betriebssystem nicht verfügbar waren (wie Windows XP keine direkten 2D-Funktionen) und so weiter. Mark Manning vor 8 Jahren 0
Entschuldigung, aber deine Erklärung macht keinen Sinn. NTVDM wird in einem 32-Bit-Prozess ausgeführt und stellt einer 16-Bit-App eine vollständige 16-Bit-Umgebung zur Verfügung. Es ist völlig egal, wie viel anderes in Ihrem 32-Bit-Windows-System ausgeführt wird, da sich alles andere in anderen Prozessen befindet, dh ganz andere Adressräume. Und Ihre Vorstellung, dass 32 Bits 32K-Stapel bedeuten ... oh mein Gott. (Benutzermodusstapel in der NT-Familie sind standardmäßig bis zu 1 MB groß, können aber größer oder kleiner sein.) Jamie Hanrahan vor 8 Jahren 0
@JamieHanrahan: Erstens - wie gesagt - nur ein Beispiel, nicht das Echte. Zweitens - das 32-Bit-Betriebssystem ist, wie gesagt, viel fortschrittlicher als das 16-Bit-Betriebssystem, aber das 16-Bit-Programm kann die Einschränkungen des 32-Bit-Betriebssystems außer Kraft setzen, wenn alles statisch und nicht dynamisch / gemeinsam genutzt wird. Weil es direkt auf einen Speicherplatz schreiben kann. Alte 16bit-Programme haben das oft gemacht. "NTVDM ... bietet eine vollständige 16-Bit-Umgebung" - nicht. Sogar Microsoft hat das gesagt. Es versucht so gut es geht zu emulieren, aber es gibt eine Reihe von 16bit-Programmen, die bei Microsoft aufgeführt sind und die unter dem 32bit-Betriebssystem nicht funktionieren würden. Mark Manning vor 8 Jahren 0
@JamieHanrahan: Um fortzufahren: Wenn Sie jetzt die Website von Microsoft besuchen, sagen sie jetzt, dass viele der älteren 32-Bit-Programme nicht mit Windows10 funktionieren. Das liegt daran, dass es jetzt nur ein 64-Bit-Betriebssystem ist und Sie jetzt Virtual Box verwenden müssen (selbst Virtual PC soll nicht mehr funktionieren, was ich Ihnen gesagt habe - aber noch nicht von mir selbst verifiziert, da ich Windows 10 nicht verwende). Mark Manning vor 8 Jahren 0
Das meinte ich nicht mit "voller 16-Bit-Umgebung". Ja, es gibt Einschränkungen, was der 16-Bit-Code tun kann - alles, was einen Benutzermoduszugriff auf Betriebssystemdatenstrukturen erfordert, ist verboten. (Statisch vs. dynamisch / geteilt ist nicht wie es verboten ist oder warum, aber egal.) Ihre Theorie beruhte jedoch auf der Annahme, dass 16-Bit-Code irgendwie dadurch beeinträchtigt wurde, dass dieselben Ressourcen mit allen anderen laufenden Programmen gemeinsam genutzt wurden ". Es tut nicht Ich würde mich über einen Link zu dieser Behauptung freuen, dass "viele 32-Bit-Programme nicht mit Windows 10 funktionieren", b / c. Das ist sicherlich nicht meine Erfahrung. Jamie Hanrahan vor 8 Jahren 0
Übrigens ist Windows 10 NICHT "nur ein 64-Bit-Betriebssystem" - die 32-Bit-Version ist verfügbar, und die 32-Bit-Kompatibilitätsebene ist in der 64-Bit-Version immer noch vorhanden. Heck, sogar Office 2016 gibt es in beiden Versionen, und MS installiert sogar standardmäßig die 32-Bit-Version auf 64-Bit-Systemen ... Jamie Hanrahan vor 8 Jahren 0
Lassen Sie uns [diese Diskussion im Chat fortsetzen] (http://chat.stackexchange.com/rooms/34976/discussion-between-mark-manning-and-jamie-hanrahan). Mark Manning vor 8 Jahren 0