Freigeben über


User32.dll oder Kernel32.dll initialisiert nicht

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 CreateProcess oder CreateProcessAsUser ü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,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 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\default im 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, werden Winsta0\Default verwenden. 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