Partager via


User32.dll ou Kernel32.dll n’initialise pas

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

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

Symptômes

Une application 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 les éléments suivants :

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 est sorti du 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.

    Membre lpDesktop de la structure STARTUPINFO transmise ou CreateProcess 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 est sorti du 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 des menus, des hooks, des chaînes et des fenêtres. Dans Windows Server 2003 et Windows XP 32 bits, le système alloue le tas de bureau à partir d’une mémoire tampon de 48 mégaoctets (Mo) à l’échelle du système. Outre les tas de bureau, les pilotes d’imprimante et les pilotes de police utilisent également cette mémoire tampon.

    Les bureaux sont associés aux 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é pour un bureau associé à une station de fenêtre en modifiant la valeur de Registre suivante.

    Note

    Nous vous déconseillons d’utiliser le commutateur /3 Go. Le commutateur /3 Go est spécifié dans le fichier Boot.ini. Le commutateur /3 Go 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 (toutes sur une 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.

Note

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

Important

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, vérifiez que vous suivez ces étapes attentivement. Pour une protection supplémentaire, sauvegardez le Registre avant de le modifier. Ensuite, vous pouvez restaurer le Registre si un problème se produit. Pour plus d’informations sur la sauvegarde et la restauration du registre, voir : Procédure de sauvegarde, de modification et de restauration du Registre dans Windows.

La première SharedSection valeur (1024) est la taille de tas partagée commune à tous les bureaux. Cela inclut la table de handles globaux. Ce tableau contient des handles sur les fenêtres, les menus, les icônes, les curseurs, et ainsi de suite, et les paramètres système partagés. Il est peu probable que vous deviez 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 deviez 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 d’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 la 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 d’interagir avec l’option de démarrage desktop sélectionnée seront utilisés Winsta0\Default. Tous ces processus partageront le tas de bureau associé au bureau d’application par défaut.

  • Économiseur d’écran

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

La troisième valeur SharedSection est la taille du tas de bureau pour chaque bureau associé à une station de fenêtre noninteractive. Si cette valeur n’est pas présente, la taille du tas de bureau pour les stations de fenêtre noninteractives est 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 les 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 noninteractive 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 du tas de bureau spécifié dans la troisième valeur SharedSection. Tous les services exécutés sous le compte LocalSystem lorsque autoriser le service à interagir avec le Bureau ne sont pas sélectionnés partagent le tas de bureau du bureau par défaut dans la station de windows de service noninteractive (Service-0x0-3e7$).

Le tas de bureau total utilisé dans les stations de fenêtre interactives et non interactives doit s’adapter à 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. Les 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 diminue 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 noninteractive 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 qui peut ê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 plutôt 128.

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

Note

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

  • Si le tas de bureau est 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 de bureau.

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

    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 de 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 Terminal Services.
  • Le commutateur /3 Go est spécifié dans le fichier Boot.ini.

S’applique à

  • Microsoft Windows XP Professionnel
  • Microsoft Windows XP Home Edition
  • Windows Vista Édition Intégrale
  • Windows Vista Entreprise
  • Windows Vista Professionnel
  • Windows Vista Édition Familiale Premium
  • Windows 7 Édition Intégrale
  • 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 (x86 32 bits)
  • 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 Édition Standard (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