User32.dll oder Kernel32.dll wird nicht initialisiert
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 von CreateProcess
oder CreateProcessAsUser
ausgeführt wird, schlägt möglicherweise fehl, und Sie erhalten eine der folgenden Fehlermeldungen:
Fehler bei der Initialisierung des dynamischen Bibliothekssystems <>\system32\user32.dll. Der Prozess wird nicht ordnungsgemäß beendet. Fehler bei der Initialisierung des dynamischen Bibliothekssystems <>\system32\kernel32.dll. Der Prozess wird nicht ordnungsgemäß 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 den richtigen Sicherheitszugriff auf die Fensterstation und den Desktop, die dem Prozess zugeordnet sind.
Der Desktopheap des Systems ist nicht mehr möglich.
Weitere Informationen
Ursache 1
Der ausgeführte Prozess verfügt nicht über den richtigen Sicherheitszugriff auf die Fensterstation und den Desktop, die dem Prozess zugeordnet sind.
Das lpDesktop-Element der STARTUPINFO-Struktur, das an
CreateProcess
die Fensterstation und den Desktop übergeben wird oderCreateProcessAsUser
angibt, die dem ausgeführten Prozess zugeordnet sind. Der ausgeführte Prozess muss über richtigen Sicherheitszugriff auf die angegebene Fensterstation und den Desktop verfügen.Ursache 2
Der Desktopheap des Systems ist nicht mehr möglich.
Jedem Desktopobjekt im System ist ein Desktopheap zugeordnet. Das Desktopobjekt verwendet den Heap zum Speichern von Menüs, Hooks, Zeichenfolgen und Fenstern. In Windows Server 2003 und Windows XP 32-Bit ordnet das System den Desktopheap aus einem systemweiten Puffer von 48 MB zu. Neben Desktopheaps verwenden auch Druckertreiber und Schriftarttreiber diesen Puffer.
Desktops sind Fensterstationen zugeordnet. Eine Fensterstation kann null oder mehr Desktops enthalten. Sie können die Größe des Desktopheaps ändern, der einem 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 Boot.ini-Datei angegeben. Der Schalter /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,512
Für Windows Vista SP1, Windows 7, Windows 8, Windows 8.1 (32-Bit) und Windows Server 2008 (32-Bit)
SharedSection=1024,12288,512
Fü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 folgenden SharedSection=
numerischen Werte steuern, wie der Desktopheap zugeordnet wird. Diese SharedSection
Werte werden in Kilobytes angegeben. Es gibt separate Einstellungen für Desktops, die interaktiven und nicht interaktiven 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.
Wichtig
Dieser Abschnitt, diese Methode bzw. diese Aufgabe enthält eine Beschreibung der Schritte zum Bearbeiten der Registrierung. Durch die falsche Bearbeitung der Registrierung können schwerwiegende Probleme verursacht werden. Daher ist es wichtig, bei der Ausführung der folgenden Schritte sorgfältig vorzugehen. Für zusätzlichen Schutz sichern Sie die Registrierung, bevor Sie sie ändern. Sie können 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 freigegebene Heapgröße, die für alle Desktops gilt. Dies schließt die globale Handletabelle 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 Desktopheaps für jeden Desktop, der der interaktiven Fensterstation WinSta0 zugeordnet ist. Benutzerobjekte wie Hooks, Menüs, Zeichenfolgen und Fenster verbrauchen Arbeitsspeicher in diesem Desktopheap. Es ist unwahrscheinlich, dass Sie diesen Wert jemals ändern müssen.
Jeder Desktop, der in der interaktiven Fensterstation erstellt wird, verwendet den Standard-Desktopheap von 3.072 KB. Standardmäßig erstellt das System die folgenden drei Desktops in Winsta0:
Winlogon
Standard
Der Standardanwendungsdesktop wird von allen Prozessen verwendet, für die
Winsta0\default
im Strukturelement 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, bei denen die Option Dienstinteraktionen mit Desktopstart zulassen ausgewählt ist, verwendenWinsta0\Default
. Alle diese Prozesse teilen den Desktopheap, der dem Standardanwendungsdesktop zugeordnet ist.Bildschirmschoner
Der Bildschirmschoner-Desktop wird in der interaktiven Fensterstation (WinSta0) erstellt, wenn ein Bildschirmschoner angezeigt wird.
Der dritte SharedSection-Wert ist die Größe des Desktopheaps für jeden Desktop, der einer nicht interaktiven Fensterstation zugeordnet ist. Wenn dieser Wert nicht vorhanden ist, entspricht die Größe des Desktopheaps für nicht interaktive Fensterstationen der Größe, die für interaktive Fensterstationen angegeben wird (d. b. der zweite SharedSection-Wert).
Wenn nur zwei SharedSection-Werte vorhanden sind, können Sie einen dritten Wert hinzufügen, um die Größe des Desktopheaps für Desktops anzugeben, die in nicht interaktiven Fensterstationen erstellt werden.
Jeder Dienstprozess, der unter einem Benutzerkonto ausgeführt wird, erhält einen neuen Desktop in einer nicht interaktiven Fensterstation, die vom Dienststeuerungs-Manager (SCM) erstellt wird. Daher verbraucht jeder Dienst, der unter einem Benutzerkonto ausgeführt wird, die Anzahl von Kilobytes des Desktopheaps, die im dritten SharedSection-Wert angegeben ist. Alle Dienste, die unter dem LocalSystem-Konto ausgeführt werden, wenn Dienstinteraktionen mit dem Desktop zulassen nicht ausgewählt ist, teilen den Desktopheap des Standarddesktops in der Windows-Station des nicht interaktiven Diensts (Service-0x0-3e7$).
Der gesamte Desktopheap, der in den interaktiven und nicht interaktiven Fensterstationen verwendet wird, muss in den Puffer passen.
Wenn Sie den zweiten oder dritten SharedSection-Wert verringern, erhöht sich die Anzahl der Desktops, die in den entsprechenden Fensterstationen erstellt werden können. Kleinere Werte begrenzen die Anzahl der Hooks, Menüs, Zeichenfolgen und Fenster, die auf 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 auf einem Desktop erstellt werden können.
Da der SCM einen neuen Desktop in der nicht interaktiven Fensterstation für jeden Dienstprozess erstellt, der unter einem Benutzerkonto ausgeführt wird, verringert ein größerer dritter SharedSection-Wert die Anzahl der Benutzerkontendienste, die erfolgreich auf dem System ausgeführt werden können. Der Mindestwert, der für den zweiten oder dritten SharedSection-Wert angegeben werden kann, ist 128. Jeder Versuch, einen kleineren Wert zu verwenden, verwendet stattdessen 128.
Der Desktopheap wird von User32.dll zugeordnet, wenn ein Prozess Benutzerobjekte benötigt. Wenn eine Anwendung nicht von User32.dll abhängig ist, nutzt sie keinen Desktopheap.
Hinweis
In Windows Server 2003 wird das spezifische Ereignis im Systemprotokoll protokolliert, wenn eine der folgenden Bedingungen zutrifft:
Wenn der Desktopheap 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 Größe des Desktopheaps.
Wenn der gesamte Desktopheap 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 Größe des Desktopheaps.
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 Boot.ini-Datei 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
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für