User32.dll oder Kernel32.dll initialisiert nicht
In diesem Artikel wird ein Problem beschrieben, bei dem eine Anwendung, die von CreateProcess
oder unter Umständen ausgeführt wird, CreateProcessAsUser
fehlschlägt.
Gilt für: Microsoft Windows
Ursprüngliche KB-Nummer: 184802
Problembeschreibung
Eine Anwendung, die ausgeführt CreateProcess
wird oder CreateProcessAsUser
fehlschlägt, und Sie erhalten eine der folgenden Fehlermeldungen:
Fehler bei der Initialisierung des dynamischen Bibliothekssystems<>\system32\user32.dll. Der Vorgang wird nicht normal beendet. Fehler bei der Initialisierung des dynamischen Bibliothekssystems<>\system32\kernel32.dll. Der Vorgang wird nicht normal 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 den Desktop-Heap nicht mehr ausgeführt.
Weitere 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
CreateProcess
CreateProcessAsUser
die Fensterstation und den Desktop übergeben oder angibt, 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 den Desktop-Heap nicht mehr ausgeführt.
Jedes Desktopobjekt auf dem System verfügt über einen Desktophap, 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 desktop-Heap aus einem systemweiten 48 MB-Puffer zu. Zusätzlich zu Desktop-Heaps verwenden Druckertreiber und Schriftarttreiber auch diesen Puffer.
Desktops sind Fensterstationen zugeordnet. 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.
Notiz
Es wird nicht empfohlen, den Schalter "/3GB" zu verwenden. Der Switch "/3 GB" 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,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 numerischen Werte, die folgen SharedSection=
, steuern, wie der Desktop-Heap zugeordnet wird. Diese SharedSection
Werte werden in Kilobyte angegeben. Es gibt separate Einstellungen für Desktops, die interaktiven und nichtinteraktiven Fensterstationen zugeordnet sind.
Notiz
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 müssen Sie sicherstellen, dass Sie diese Schritte sorgfältig ausführen. Für weiteren Schutz 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 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:
Windows-Anmeldung
Standard
Der Standardanwendungsdesktop wird von allen Prozessen verwendet, für die
Winsta0\default
im MEMBER "STARTUPINFO.lpDesktop"-Struktur 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 Desktopstartoption interagieren" ausgewählt ist, wird verwendetWinsta0\Default
. 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 der Dienst mit dem Desktop interagieren darf, wird nicht ausgewählt, den Desktop heap des Standarddesktops in der nichtinteraktiven 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 von User32.dll abhängig ist, wird der Desktop-Heap nicht verwendet.
Notiz
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 Switch "/3 GB" 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