User32.dll ou Kernel32.dll ne s’initialise pas

Cet article décrit un problème dans lequel une application exécutée par CreateProcess ou CreateProcessAsUser peut échouer.

S’applique à : Microsoft Windows
Numéro de la base de connaissances d’origine : 184802

Symptômes

Une application qui est exécutée par CreateProcess ou CreateProcessAsUser peut échouer, et vous recevez l’un des messages d’erreur suivants :

Échec de l’initialisation du système> de bibliothèque <dynamique\system32\user32.dll. Le processus se termine anormalement. Échec de l’initialisation du système> de bibliothèque <dynamique\system32\kernel32.dll. Le processus se termine anormalement.

En outre, le processus ayant échoué retourne le code de sortie 128 ou le code suivant :

error :ERROR_WAIT_NO_CHILDREN

Cause

Cet échec se produit pour l’une des raisons suivantes :

  • Le processus exécuté ne dispose pas d’un accès de sécurité correct à la station de fenêtre et au bureau associés au processus.

  • Le système n’a plus de tas de bureau.

Plus d’informations

  • Cause 1

    Le processus exécuté ne dispose pas d’un accès de sécurité correct à la station de fenêtre et au bureau associés au processus.

    Le membre lpDesktop de la structure STARTUPINFO qui est passé à CreateProcess ou CreateProcessAsUser spécifie la station de fenêtre et le bureau associés au processus exécuté. Le processus exécuté doit disposer d’un accès de sécurité correct à la station de fenêtre et au bureau spécifiés.

  • Cause 2

    Le système n’a plus de tas de bureau.

    Chaque objet de bureau sur le système a un tas de bureau qui lui est associé. L’objet de bureau utilise le tas pour stocker les menus, les hooks, les chaînes et les fenêtres. Dans Windows Server 2003 et Windows XP 32 bits, le système alloue un tas de bureau à partir d’une mémoire tampon de 48 mégaoctets (Mo) à l’échelle du système. En plus des tas de bureau, les pilotes d’imprimante et les pilotes de police utilisent également cette mémoire tampon.

    Les bureaux sont associés à des stations de fenêtre. Une station de fenêtre peut contenir zéro ou plusieurs bureaux. Vous pouvez modifier la taille du tas de bureau alloué à un bureau associé à une station de fenêtre en modifiant la valeur de Registre suivante.

    Remarque

    Nous vous déconseillons d’utiliser le commutateur /3GB. Le commutateur /3GB est spécifié dans le fichier Boot.ini. Le commutateur /3GB est pris en charge uniquement pour les systèmes d’exploitation 32 bits. HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\SubSystems\Windows

Dans Windows Server 2003 et Windows XP 32 bits, les données par défaut de cette valeur de Registre ressemblent à ce qui suit (le tout sur une seule ligne) :

%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

Dans différentes versions de Windows, les données par défaut de cette valeur de Registre ressemblent à ce qui suit :

  • Pour Windows Vista RTM (32 bits)

    SharedSection=1024,3072,512
    
  • Pour Windows Vista SP1, Windows 7, Windows 8, Windows 8.1 (32 bits) et Windows Server 2008 (32 bits)

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

    SharedSection=1024,20480,768
    

Les valeurs numériques qui suivent SharedSection= contrôlent la façon dont le tas de bureau est alloué. Ces SharedSection valeurs sont spécifiées en kilo-octets. Il existe des paramètres distincts pour les bureaux associés à des stations de fenêtre interactives et non interactives.

Remarque

Si vous modifiez les SharedSection valeurs dans le Registre, vous devez redémarrer le système pour que les modifications prennent effet.

Importante

Cette section, méthode ou tâche contient des étapes vous indiquant comment modifier le Registre. Toutefois, des problèmes graves peuvent se produire si vous modifiez le Registre de façon incorrecte. Par conséquent, veillez à suivre ces étapes scrupuleusement. Pour une meilleure protection, sauvegardez le registre avant de le modifier. Vous pouvez alors le restaurer en cas de problème. Pour plus d’informations sur la procédure de sauvegarde et de restauration du Registre, consultez l’article Comment sauvegarder et restaurer le Registre dans Windows.

La première SharedSection valeur (1024) est la taille de tas partagée commune à tous les ordinateurs de bureau. Cela inclut la table de handle globale. Ce tableau contient les handles des fenêtres, des menus, des icônes, des curseurs, etc., ainsi que des paramètres système partagés. Il est peu probable que vous ayez jamais à modifier cette valeur.

La deuxième SharedSection valeur est la taille du tas de bureau pour chaque bureau associé à la station de fenêtre interactive WinSta0. Les objets utilisateur tels que les hooks, les menus, les chaînes et les fenêtres consomment de la mémoire dans ce tas de bureau. Il est peu probable que vous ayez jamais à modifier cette valeur.

Chaque bureau créé dans la station de fenêtre interactive utilise le tas de bureau par défaut de 3 072 Ko. Par défaut, le système crée les trois bureaux suivants dans Winsta0 :

  • Winlogon

  • Par défaut

    Le bureau de l’application par défaut sera utilisé par tous les processus pour lesquels Winsta0\default est spécifié dans le membre de structure STARTUPINFO.lpDesktop. Lorsque le membre de structure lpDesktop a la valeur NULL, la station de fenêtre et le bureau sont hérités du processus parent. Tous les services exécutés sous le compte LocalSystem avec l’option Autoriser le service à interagir avec le bureau de démarrage sélectionnée utilisent Winsta0\Default. Tous ces processus partageront le tas de bureau associé au bureau d’application par défaut.

  • Écran de veille

    Le bureau de l’économiseur d’écran est créé dans la station de fenêtre interactive (WinSta0) lorsqu’un économiseur d’écran est affiché.

La troisième valeur SharedSection correspond à la taille du tas de bureau pour chaque bureau associé à une station de fenêtre non interactive. Si cette valeur n’est pas présente, la taille du tas de bureau pour les stations de fenêtre non interactives sera identique à la taille spécifiée pour les stations de fenêtre interactives (autrement dit, la deuxième valeur SharedSection).

Si seules deux valeurs SharedSection sont présentes, vous pouvez ajouter une troisième valeur pour spécifier la taille du tas de bureau pour les bureaux créés dans des stations de fenêtre non interactives.

Chaque processus de service exécuté sous un compte d’utilisateur reçoit un nouveau bureau dans une station de fenêtre non interactive créée par le Gestionnaire de contrôle de service (SCM). Par conséquent, chaque service exécuté sous un compte d’utilisateur consomme le nombre de kilo-octets de tas de bureau spécifié dans la troisième valeur SharedSection. Tous les services exécutés sous le compte LocalSystem lorsque l’option Autoriser le service à interagir avec le bureau n’est pas sélectionnée partagent le segment de bureau du Bureau par défaut dans la station windows de service non interactive (Service-0x0-3e7$).

Le tas de bureau total utilisé dans les stations de fenêtres interactives et non interactives doit tenir dans la mémoire tampon.

La diminution de la deuxième ou troisième valeur SharedSection augmente le nombre de bureaux qui peuvent être créés dans les stations de fenêtre correspondantes. Des valeurs plus petites limitent le nombre de hooks, de menus, de chaînes et de fenêtres qui peuvent être créés dans un bureau. En revanche, l’augmentation de la deuxième ou troisième valeur SharedSection réduit le nombre de bureaux qui peuvent être créés. Toutefois, cela augmente également le nombre de hooks, de menus, de chaînes et de fenêtres qui peuvent être créés dans un bureau.

Étant donné que le SCM crée un bureau dans la station de fenêtre non interactive pour chaque processus de service qui s’exécute sous un compte d’utilisateur, une troisième valeur SharedSection supérieure réduit le nombre de services de compte d’utilisateur qui peuvent s’exécuter correctement sur le système. La valeur minimale pouvant être spécifiée pour la deuxième ou troisième valeur SharedSection est 128. Toute tentative d’utilisation d’une valeur plus petite utilise à la place 128.

Le tas de bureau est alloué par User32.dll lorsqu’un processus a besoin d’objets utilisateur. Si une application n’est pas dépendante de User32.dll, elle ne consomme pas le tas de bureau.

Remarque

Dans Windows Server 2003, l’événement spécifique est enregistré dans le journal système lorsque l’une des conditions suivantes est remplie :

  • Si le tas du bureau devient plein, l’événement suivant est journalisé :

    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.
    

    Dans ce cas, augmentez la taille du tas du bureau.

  • Si le tas de bureau total devient la taille de mémoire tampon à l’échelle du système, l’événement suivant est journalisé :

    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.
    

    Dans ce cas, diminuez la taille du tas du bureau.

Dans Windows Server 2003, une mémoire tampon à l’échelle du système est de 20 Mo lorsque l’une des conditions suivantes est remplie :

  • Vous êtes dans un environnement des services Terminal Server.
  • Le commutateur /3GB est spécifié dans le fichier Boot.ini.

S’applique à

  • Microsoft Windows XP Professionnel
  • Microsoft Windows XP Édition familiale
  • Windows Vista Édition Intégrale
  • Windows Vista Entreprise
  • Windows Vista Professionnel
  • Windows Vista Édition Familiale Premium
  • Windows 7 Ultimate
  • Windows 7 Entreprise
  • Windows 7 Professionnel
  • Windows 7 Édition Familiale Premium
  • Windows 8 Entreprise
  • Windows 8 Professionnel, Windows 8
  • Windows 8.1 Entreprise
  • Windows 8.1 Professionnel
  • Windows 8.1
  • Microsoft Windows Server 2003 Datacenter Edition (32 bits x86)
  • Microsoft Windows Server 2003 Datacenter x64 Edition
  • Microsoft Windows Server 2003 Êdition Entreprise (x86 32 bits)
  • Microsoft Windows Server 2003 Enterprise x64 Edition
  • Microsoft Windows Server 2003 Standard Edition (x86 32 bits)
  • 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 R2Centre de données
  • Windows Server 2012 R2 Standard