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 oder CreateProcessAsUser 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, verwenden Winsta0\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