Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel wird ein Problem beschrieben, bei dem eine Anwendung, die von CreateProcess oder CreateProcessAsUser ausgeführt wird, fehlschlagen kann.
Gilt für: Microsoft Windows
Ursprüngliche KB-Nummer: 184802
Symptome
Eine Anwendung, die durch CreateProcess oder CreateProcessAsUser ausgeführt wird, kann fehlschlagen, und Sie erhalten eine der folgenden Fehlermeldungen:
Fehler bei der Initialisierung der dynamischen Bibliothek <System>\system32\user32.dll. Der Vorgang wird auf abnormale Weise beendet. Fehler bei der Initialisierung der dynamischen Bibliothek <System>\system32\kernel32.dll. Der Vorgang wird auf abnormale Weise beendet.
Darüber hinaus gibt der fehlgeschlagene Prozess den Exitcode 128 oder folgendes zurück:
error:ERROR_WAIT_NO_CHILDREN
Ursache
Dieser Fehler tritt aus einem der folgenden Gründe auf:
Der ausgeführte Prozess verfügt nicht über korrekten Sicherheitszugriff auf die Fensterstation und den Desktop, die dem Prozess zugeordnet sind.
Das System hat keinen Speicherplatz mehr im Desktop-Heap.
Mehr Informationen
Ursache 1
Der ausgeführte Prozess verfügt nicht über korrekten Sicherheitszugriff auf die Fensterstation und den Desktop, die dem Prozess zugeordnet sind.
Das lpDesktop-Element der STARTUPINFO-Struktur, das an
CreateProcessoderCreateProcessAsUserübergeben wird, gibt die Fensterstation und den Desktop an, die dem ausgeführten Prozess zugeordnet sind. Der ausgeführte Prozess muss über korrekten Sicherheitszugriff auf die angegebene Fensterstation und den Desktop verfügen.Ursache 2
Das System hat keinen Speicherplatz mehr im Desktop-Heap.
Jedes Desktopobjekt auf dem System verfügt über einen Desktop-Heap, der ihm zugeordnet ist. Das Desktopobjekt verwendet den Heap zum Speichern von Menüs, Hooks, Zeichenfolgen und Fenstern. In Windows Server 2003 und Windows XP 32-Bit weist das System den Desktop-Heap aus einem systemweiten 48 MB-Puffer zu. Zusätzlich zu Desktop-Heaps verwenden Druckertreiber und Schriftarttreiber auch diesen Puffer.
Desktops sind mit Fensterstationen verbunden. Eine Fensterstation kann null oder mehr Desktops enthalten. Sie können die Größe des Desktop-Heaps ändern, der für einen Desktop zugeordnet ist, der einer Fensterstation zugeordnet ist, indem Sie den folgenden Registrierungswert ändern.
Hinweis
Es wird nicht empfohlen, den Schalter "/3GB" zu verwenden. Der Schalter "/3GB" wird in der Datei Boot.ini angegeben. Der Switch /3GB wird nur für 32-Bit-Betriebssysteme unterstützt.
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\SubSystems\Windows
In Windows Server 2003 und Windows XP 32-Bit ähneln die Standarddaten für diesen Registrierungswert den folgenden (alle in einer Zeile):
%SystemRoot%\system32\csrss.exe ObjectDirectory=\Windows
SharedSection=1024,3072,512 Windows=On SubSystemType=Windows
ServerDll=basesrv,1 ServerDll=winsrv:UserServerDllInitialization,3
ServerDll=winsrv:ConServerDllInitialization,2 ProfileControl=Off
MaxRequestThreads=16
In verschiedenen Versionen von Windows sehen die Standarddaten für diesen Registrierungswert wie folgt aus:
Für Windows Vista RTM (32-Bit)
SharedSection=1024,3072,512Für Windows Vista SP1, Windows 7, Windows 8, Windows 8.1 (32-Bit) und Windows Server 2008 (32-Bit)
SharedSection=1024,12288,512Für Windows Vista, Windows 7, Windows 8, Windows 8.1 (64-Bit), Windows Server 2008, Windows Server 2008 R2, Windows Server 2012 und Windows Server 2012 R2 (64-Bit)
SharedSection=1024,20480,768
Die numerischen Werte, die SharedSection= folgen, steuern, wie der Desktop-Heap zugewiesen wird. Diese SharedSection Werte werden in Kilobyte angegeben. Es gibt separate Einstellungen für Desktops, die interaktiven und nichtinteraktiven Fensterstationen zugeordnet sind.
Hinweis
Wenn Sie die SharedSection Werte in der Registrierung ändern, müssen Sie das System neu starten, damit die Änderungen wirksam werden.
Von Bedeutung
Dieser Abschnitt, die Methode oder die Aufgabe enthält Schritte, mit denen Sie erfahren, wie Sie die Registrierung ändern. Es können jedoch schwerwiegende Probleme auftreten, wenn Sie die Registrierung falsch ändern. Stellen Sie daher sicher, dass Sie diese Schritte sorgfältig ausführen. Zur zusätzlichen Sicherheit sichern Sie die Registrierung, bevor Sie sie ändern. Anschließend können Sie die Registrierung wiederherstellen, wenn ein Problem auftritt. Weitere Informationen zum Sichern und Wiederherstellen der Registrierung finden Sie unter Sichern und Wiederherstellen der Registrierung in Windows.
Der erste SharedSection Wert (1024) ist die gemeinsame Heapgröße, die für alle Desktops gemeinsam verwendet wird. Dies schließt die globale Handle-Tabelle ein. Diese Tabelle enthält Handles für Fenster, Menüs, Symbole, Cursor usw. und freigegebene Systemeinstellungen. Es ist unwahrscheinlich, dass Sie diesen Wert jemals ändern müssen.
Der zweite SharedSection Wert ist die Größe des Desktop-Heaps für jeden Desktop, der der interaktiven Fensterstation WinSta0 zugeordnet ist. Benutzerobjekte wie Hooks, Menüs, Zeichenfolgen und Fenster verbrauchen Arbeitsspeicher in diesem Desktop-Heap. Es ist unwahrscheinlich, dass Sie diesen Wert jemals ändern müssen.
Jeder Desktop, der in der interaktiven Fensterstation erstellt wird, verwendet den Standardmäßigen Desktop-Heap von 3.072 KB. Standardmäßig erstellt das System die folgenden drei Desktops in Winsta0:
Winlogon
Standard
Der Standardanwendungs-Desktop wird von allen Prozessen verwendet, für die
Winsta0\defaultim Strukturmitglied STARTUPINFO.lpDesktop angegeben ist. Wenn der lpDesktop-Strukturmember NULL ist, werden die Fensterstation und der Desktop vom übergeordneten Prozess geerbt. Alle Dienste, die unter dem LocalSystem-Konto ausgeführt werden, wobei die Option "Dienst zulassen, mit dem Desktop zu interagieren, Startoption" ausgewählt ist, werdenWinsta0\Defaultverwenden. Alle diese Prozesse teilen den Desktop heap, der dem Standardanwendungsdesktop zugeordnet ist.Bildschirmschoner
Der Bildschirmschonerdesktop wird in der interaktiven Fensterstation (WinSta0) erstellt, wenn ein Bildschirmschoner angezeigt wird.
Der dritte SharedSection-Wert ist die Größe des Desktop-Heaps für jeden Desktop, der einer nichtinteraktiven Fensterstation zugeordnet ist. Wenn dieser Wert nicht vorhanden ist, entspricht die Größe des Desktop-Heaps für nichtinteraktive Fensterstationen der Größe, die für interaktive Fensterstationen angegeben ist (d. r. den zweiten SharedSection-Wert).
Wenn nur zwei SharedSection-Werte vorhanden sind, können Sie einen dritten Wert hinzufügen, um die Größe des Desktop-Heaps für Desktops anzugeben, die in nichtinteraktiven Fensterstationen erstellt werden.
Jeder Dienstprozess, der unter einem Benutzerkonto ausgeführt wird, erhält einen neuen Desktop in einer nichtinteraktiven Fensterstation, die vom Dienststeuerungs-Manager (Service Control Manager, SCM) erstellt wird. Daher verbraucht jeder Dienst, der unter einem Benutzerkonto ausgeführt wird, die Anzahl der Kilobyte-Desktop-Heaps, die im dritten SharedSection-Wert angegeben ist. Alle Dienste, die unter dem LocalSystem-Konto ausgeführt werden, wenn die Option "Dienst darf mit dem Desktop interagieren" nicht ausgewählt ist, teilen den Desktop-Heap des Standarddesktops in der nicht interaktiven Dienst-Windows-Station (Service-0x0-3e7$).
Der gesamte Desktop-Heap, der in den interaktiven und nichtinteraktiven Fensterstationen verwendet wird, muss in den Puffer passen.
Durch Verringern des zweiten oder dritten SharedSection-Werts wird die Anzahl der Desktops erhöht, die in den entsprechenden Fensterstationen erstellt werden können. Kleinere Werte beschränken die Anzahl der Hooks, Menüs, Zeichenfolgen und Fenster, die in einem Desktop erstellt werden können. Andererseits verringert das Erhöhen des zweiten oder dritten SharedSection-Werts die Anzahl der Desktops, die erstellt werden können. Dies erhöht jedoch auch die Anzahl der Hooks, Menüs, Zeichenfolgen und Fenster, die in einem Desktop erstellt werden können.
Da SCM einen neuen Desktop in der nichtinteraktiven Fensterstation für jeden Dienstprozess erstellt, der unter einem Benutzerkonto ausgeführt wird, reduziert ein größerer dritter SharedSection-Wert die Anzahl der Benutzerkontendienste, die erfolgreich auf dem System ausgeführt werden können. Das Minimum, das für den zweiten oder dritten SharedSection-Wert angegeben werden kann, beträgt 128. Jeder Versuch, einen kleineren Wert zu verwenden, verwendet stattdessen 128.
Der Desktop-Heap wird von User32.dll zugewiesen, wenn ein Prozess Benutzerobjekte benötigt. Wenn eine Anwendung nicht auf User32.dllangewiesen ist, wird sie keinen Desktop-Heap nutzen.
Hinweis
In Windows Server 2003 wird das spezifische Ereignis im Systemprotokoll protokolliert, wenn eine der folgenden Bedingungen zutrifft:
Wenn der Desktop-Heap voll wird, wird das folgende Ereignis protokolliert:
Event Type: Warning Event Source: Win32k Event Category: None Event ID: 243 Date: Date Time: Time User: N/A Computer: ServerName Description: A desktop heap allocation failed.Erhöhen Sie in diesem Fall die Desktop-Heapgröße.
Wenn der gesamte Desktop-Heap zur systemweiten Puffergröße wird, wird das folgende Ereignis protokolliert:
Event Type: Warning Event Source: Win32k Event Category: None Event ID: 244 Date: Date Time: Time User: N/A Computer: ServerName Description: Failed to create a desktop due to desktop heap exhaustion.Verringern Sie in diesem Fall die Desktop-Heapgröße.
In Windows Server 2003 beträgt ein systemweiter Puffer 20 MB, wenn eine der folgenden Bedingungen zutrifft:
- Sie befinden sich in einer Terminaldienste-Umgebung.
- Der Schalter "/3GB" wird in der Datei Boot.ini angegeben.
Gilt für:
- Microsoft Windows XP Professional
- Microsoft Windows XP Home Edition
- Windows Vista Ultimate
- Windows Vista Enterprise
- Windows Vista Business
- Windows Vista Home Premium
- Windows 7 Ultimate
- Windows 7 Enterprise
- Windows 7 Professional
- Windows 7 Home Premium
- Windows 8 Enterprise
- Windows 8 Pro, Windows 8
- Windows 8.1 Enterprise
- Windows 8.1 Pro
- Windows 8.1
- Microsoft Windows Server 2003 Datacenter Edition (32-Bit x86)
- Microsoft Windows Server 2003 Datacenter x64 Edition
- Microsoft Windows Server 2003 Enterprise Edition (32-Bit x86)
- Microsoft Windows Server 2003 Enterprise x64 Edition
- Microsoft Windows Server 2003 Standard Edition (32-Bit x86)
- Microsoft Windows Server 2003 Standard x64 Edition
- Windows Server 2008 Datacenter
- Windows Server 2008 Enterprise
- Windows Server 2008 R2 Datacenter
- Windows Server 2008 R2 Enterprise
- Windows Server 2008 Standard
- Windows Server 2012 Datacenter
- Windows Server 2012 Standard
- Windows Server 2012 R2 Datacenter
- Windows Server 2012 R2 Standard