User32.dll of Kernel32.dll initialiseert niet

In dit artikel wordt een probleem beschreven waarbij een toepassing die wordt uitgevoerd door CreateProcess of CreateProcessAsUser kan mislukken.

Van toepassing op: Microsoft Windows
Origineel KB-nummer: 184802

Symptomen

Een toepassing die wordt uitgevoerd door CreateProcess of CreateProcessAsUser kan mislukken en u ontvangt een van de volgende foutberichten:

Initialisatie van het dynamische bibliotheeksysteem <>\system32\user32.dll mislukt. Het proces wordt abnormaal beëindigd. Initialisatie van het dynamische bibliotheeksysteem <>\system32\kernel32.dll mislukt. Het proces wordt abnormaal beëindigd.

Daarnaast retourneert het mislukte proces afsluitcode 128 of het volgende:

fout:ERROR_WAIT_NO_CHILDREN

Oorzaak

Deze fout treedt op om een van de volgende redenen:

  • Het uitgevoerde proces heeft geen juiste beveiligingstoegang tot het vensterstation en het bureaublad dat aan het proces is gekoppeld.

  • Het systeem heeft geen desktop heap meer.

Meer informatie

  • Oorzaak 1

    Het uitgevoerde proces heeft geen juiste beveiligingstoegang tot het vensterstation en het bureaublad dat aan het proces is gekoppeld.

    Het lpDesktop-lid van de STARTUPINFO-structuur die wordt doorgegeven aan CreateProcess of CreateProcessAsUser het vensterstation en het bureaublad specificeert die zijn gekoppeld aan het uitgevoerde proces. Het uitgevoerde proces moet de juiste beveiligingstoegang hebben tot het opgegeven vensterstation en het bureaublad.

  • Oorzaak 2

    Het systeem heeft geen desktop heap meer.

    Elk bureaubladobject op het systeem heeft een bureaublad-heap die eraan is gekoppeld. Het bureaubladobject gebruikt de heap om menu's, haken, tekenreeksen en vensters op te slaan. In Windows Server 2003 en Windows XP 32-bits wijst het systeem bureaublad heap toe vanuit een systeembrede buffer van 48 MB (megabytes). Naast desktop heaps maken ook printerstuurprogramma's en lettertypestuurprogramma's gebruik van deze buffer.

    Bureaubladen zijn gekoppeld aan vensterstations. Een vensterstation kan nul of meer bureaubladen bevatten. U kunt de grootte wijzigen van de bureaublad heap die is toegewezen aan een bureaublad dat is gekoppeld aan een window-station door de volgende registerwaarde te wijzigen.

    Opmerking

    We raden u af om de schakeloptie /3 GB te gebruiken. De /3GB switch is opgegeven in het Boot.ini bestand. De /3GB switch wordt alleen ondersteund voor 32-bits besturingssystemen. HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\SubSystems\Windows

In Windows Server 2003 en Windows XP 32-bits zien de standaardgegevens voor deze registerwaarde er ongeveer als volgt uit (allemaal op één regel):

%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 verschillende versies van Windows zien de standaardgegevens voor deze registerwaarde er als volgt uit:

  • Voor Windows Vista RTM (32-bits)

    SharedSection=1024,3072,512
    
  • Voor Windows Vista SP1, Windows 7, Windows 8, Windows 8.1 (32-bits) en Windows Server 2008 (32-bits)

    SharedSection=1024,12288,512
    
  • Voor Windows Vista, Windows 7, Windows 8, Windows 8.1 (64-bits), Windows Server 2008, Windows Server 2008 R2, Windows Server 2012 en Windows Server 2012 R2 (64-bits)

    SharedSection=1024,20480,768
    

De numerieke waarden die volgen SharedSection= bepalen hoe de bureaublad heap wordt toegewezen. Deze SharedSection waarden worden opgegeven in kilobytes. Er zijn afzonderlijke instellingen voor bureaubladen die zijn gekoppeld aan interactieve en niet-interactieve vensterstations.

Opmerking

Als u de SharedSection waarden in het register wijzigt, moet u het systeem opnieuw opstarten om de wijzigingen van kracht te laten worden.

Belangrijk

Deze sectie, methode of taak bevat stappen voor het bewerken van het register. Als u het register op onjuiste wijze wijzigt, kunnen er echter grote problemen optreden. Het is dan ook belangrijk dat u deze stappen zorgvuldig uitvoert. Maak een back-up van het register voordat u wijzigingen aanbrengt. Als er een probleem optreedt, kunt u het register altijd nog herstellen. Raadpleeg Een back-up maken van en het herstellen van het register in Windows voor meer informatie over het maken van een back-up en het herstellen van het register.

De eerste SharedSection waarde (1024) is de gedeelde heapgrootte die voor alle bureaubladen geldt. Dit omvat de globale ingangstabel. Deze tabel bevat ingangen voor vensters, menu's, pictogrammen, cursors, enzovoort, en gedeelde systeeminstellingen. Het is onwaarschijnlijk dat u deze waarde ooit moet wijzigen.

De tweede SharedSection waarde is de grootte van de bureaublad heap voor elk bureaublad dat is gekoppeld aan het interactieve vensterstation WinSta0. Gebruikersobjecten zoals hooks, menu's, tekenreeksen en vensters verbruiken geheugen in deze bureaublad-heap. Het is onwaarschijnlijk dat u deze waarde ooit moet wijzigen.

Elk bureaublad dat wordt gemaakt in het interactieve vensterstation gebruikt de standaard bureaublad heap van 3072 kB. Standaard maakt het systeem de volgende drie bureaubladen in Winsta0:

  • Winlogon

  • Standaard

    Het bureaublad van de standaardtoepassing wordt gebruikt door alle processen waarvoor Winsta0\default is opgegeven in het structuurlid STARTUPINFO.lpDesktop. Wanneer het structuurlid lpDesktop NULL is, worden het vensterstation en het bureaublad overgenomen van het bovenliggende proces. Alle services die worden uitgevoerd onder het LocalSystem-account met de optie Service toestaan om te communiceren met bureaublad is geselecteerd, gebruiken Winsta0\Default. Al deze processen delen de bureaublad-heap die is gekoppeld aan het bureaublad van de standaardtoepassing.

  • Schermbeveiliging

    Het bureaublad van de schermbeveiliging wordt gemaakt in het interactieve vensterstation (WinSta0) wanneer een schermbeveiliging wordt weergegeven.

De derde sharedSection-waarde is de grootte van de bureaublad heap voor elk bureaublad dat is gekoppeld aan een niet-actief vensterstation. Als deze waarde niet aanwezig is, is de grootte van de bureaublad-heap voor niet-actieve vensterstations hetzelfde als de grootte die is opgegeven voor interactieve vensterstations (dat wil gezegd, de tweede SharedSection-waarde).

Als er slechts twee SharedSection-waarden aanwezig zijn, kunt u een derde waarde toevoegen om de grootte van de bureaublad-heap op te geven voor bureaubladen die zijn gemaakt in niet-actieve vensterstations.

Elk serviceproces dat wordt uitgevoerd onder een gebruikersaccount, ontvangt een nieuw bureaublad in een niet-actief vensterstation dat is gemaakt door de Service Control Manager (SCM). Daarom verbruikt elke service die wordt uitgevoerd onder een gebruikersaccount het aantal kilobytes aan desktop heap dat is opgegeven in de derde SharedSection-waarde. Alle services die worden uitgevoerd onder het LocalSystem-account wanneer Service toestaan om te communiceren met het bureaublad niet is geselecteerd, delen de bureaublad heap van het standaard bureaublad in het niet-actieve Service Windows-station (Service-0x0-3e7$).

De totale bureaublad-heap die wordt gebruikt in de interactieve en niet-actieve vensterstations moet in de buffer passen.

Als u de tweede of derde SharedSection-waarde verlaagt, neemt het aantal bureaubladen toe dat in de bijbehorende vensterstations kan worden gemaakt. Kleinere waarden beperken het aantal hooks, menu's, tekenreeksen en vensters dat in een bureaublad kan worden gemaakt. Als u daarentegen de tweede of derde sharedSection-waarde verhoogt, wordt het aantal bureaubladen dat kan worden gemaakt, verminderd. Hierdoor neemt echter ook het aantal hooks, menu's, tekenreeksen en vensters toe dat in een bureaublad kan worden gemaakt.

Omdat de SCM een nieuw bureaublad maakt in het niet-actieve vensterstation voor elk serviceproces dat wordt uitgevoerd onder een gebruikersaccount, vermindert een grotere derde SharedSection-waarde het aantal gebruikersaccountservices dat kan worden uitgevoerd op het systeem. Het minimum dat kan worden opgegeven voor de tweede of derde SharedSection-waarde is 128. Bij elke poging om een kleinere waarde te gebruiken, wordt in plaats hiervan 128 gebruikt.

Desktop heap wordt toegewezen door User32.dll wanneer een proces gebruikersobjecten nodig heeft. Als een toepassing niet afhankelijk is van User32.dll, verbruikt deze geen desktop heap.

Opmerking

In Windows Server 2003 wordt de specifieke gebeurtenis vastgelegd in het systeemlogboek wanneer aan een van de volgende voorwaarden wordt voldaan:

  • Als de heap van het bureaublad vol raakt, wordt de volgende gebeurtenis geregistreerd:

    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.
    

    In dit geval vergroot u de heap-grootte van het bureaublad.

  • Als de totale heap van het bureaublad de buffergrootte voor het hele systeem wordt, wordt de volgende gebeurtenis geregistreerd:

    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.
    

    In dit geval verkleint u de grootte van de bureaublad heap.

In Windows Server 2003 is een systeembrede buffer 20 MB wanneer aan een van de volgende voorwaarden wordt voldaan:

  • U bevindt zich in een Terminal Services-omgeving.
  • De /3GB switch is opgegeven in het Boot.ini bestand.

Van toepassing op

  • 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 Server 8,1 Enterprise
  • Windows 8.1 Pro
  • Windows 8.1
  • Microsoft Windows Server 2003 Datacenter Edition (32-bits x86)
  • Microsoft Windows Server 2003 Datacenter x64 Edition
  • Microsoft Windows Server 2003 Enterprise Edition (32-bits x86)
  • Microsoft Windows Server 2003 Enterprise x64 Edition
  • Microsoft Windows Server 2003 Standard Edition (32-bits 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 Standaard
  • Windows Server 2012 R2 Datacenter
  • Windows Server 2012 R2 Standaard